好久没有更新这个系列了,由于我之前也说过,前段时间实在太忙了,并且早在一个月前就预示着本月将更加忙!事实也确实如此!最终在国庆前夕完毕了既定的计划,心里也最终能够长出一口气了。近期在忙什么呢?事实上就是OpenVPN!既然OpenVPN-ng已经不在计划内,那么让OpenVPN支持多处理就是必定要做的了。

还记得以下这张图吗?我暂且叫它版本号1:

起初,我一直以为画完这幅图就已经证明自己对OpenVPN非常精通了,后来我慢慢知道我错了,于是,我画出以下这幅图的时候,事实证明我当初的理解是多么肤浅!以下这幅图我称为版本号2:

版本号1的出现是在2012年,那说明我对原生的OpenVPN已经有了比較深刻的理解,可是在经历了2012的后半年,2013年的整年,2014年的上半年,我一直在等待OpenVPN的更新升级,这期间我也一直在关注硬件和网络技术的进展,OpenVPN落后了,谁也没有提到过这一点,等到了2014年的农历年前后,我认为我该做点什么了。就这样,出现了版本号2。假设说之前的文章展示的都是设想,那么有了这副版本号2之后,它就是一个实际的实现了,尽管是最简的实现。眼下还有非常多TODO:
1.眼下每个multi_instance仅仅能由一个线程的multi_context处理。
当初我希望的是全部的线程都能处理全部的multi_instance,可是由于如此一来锁开销太大,仅仅有作罢。事实上OpenVPN的原生架构非常难实现多线程扩展,由于每个multi_instance都有一个buff,每个context也有一个buff,每个multi_context的全部instance共享一个buff,这些buff被复制来复制去,非常难实现细粒度的锁,由于你非常难定义什么是一个不可打断的事务。
2.眼下的多队列TUN驱动在返回包队列分发的实现有些粗糙。
3.TUN驱动模块和OpenVPN之间的耦合度太高,不利于分别扩展升级。
4.线程间的信号分发机制太粗糙。
5.假设OpenVPN的某个线程从tun收到一个广播包,分发效率太低。
6.client无法实现多进程打开同一个虚拟网卡,而仅仅能捆绑多个虚拟网卡。
...
以上这些都是须要慢慢完好的。我希望自己不会就此作罢,也希望和高手们进一步交流。
       在实现的过程中,遇到过无数的问题,和起初设计的时候想象的根本不一样,非常多细节都没有考虑到。比方tap的ARP广播分发问题,当时我认为随便分发到一个线程就可以,后来发生了无数次的段错误,assert失败...最终发现,即使是ARP也没有什么特殊的,仅仅要解析出ARP的内容中的sip和dip就可以,将它和IP报文相同对待...
       还是那句话,假设你能画一张图把一个技术展示明确,那么你绝对掌握了这项技术,假设你绘图的过程中,突然不知道怎么画了,那么这点就是你的技术盲点。不要抱怨不会用绘图软件,纸笔侍奉,手绘就可以。手绘图更能让你的精力集中在图本身而不是绘图软件怎么用,由于你用你的脑子驱使你的手,借助笔的硬度和铅,墨水等在纸上留下痕迹,你的大脑全然起100%的作用,反之你用绘图软件的话,你必须通过电脑的CPU芯片,即你必须想办法告诉CPU怎样展示你脑子里想象的图像,而CPU却并不如纸和笔那样做你的奴隶,反之,你要迎合它的规则...说了这么多,事实上我想说的是,版本号1的最初版就是我手绘的,例如以下图所看到的:

最后,不要索要代码,代码通过邮件,QQ分发是一种不正规且不优雅的传播方式,这是Linus的观点,我非常认同。假设你感兴趣,你一定能找到或者写出想要的代码,或者说,你或许能帮到我。

OpenVPN多处理之-最新架构的更多相关文章

  1. Android 最新架构

    1.Android系统架构 最新的Android系统分为五层六区(域): Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这一层为Android设备各种硬件提 ...

  2. ENode 2.8 最新架构图简介

    ENode架构图 什么是ENode ENode是一个.NET平台下,纯C#开发的,基于DDD,CQRS,ES,EDA,In-Memory架构风格的,可以帮助开发者开发高并发.高吞吐.可伸缩.可扩展的应 ...

  3. 支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而如今已拥有1.5亿的活跃 ...

  4. Stack Overflow 2016最新架构探秘

    这篇文章主要揭秘 Stack Overflow 截止到 2016 年的技术架构. 首先给出一个直观的数据,让大家有个初步的印象. 相比于 2013 年 11 月,Stack Overflow 在 20 ...

  5. Stack Overflow 2016 最新架构探秘

    原文:http://nickcraver.com/blog/2016/02/17/stack-overflow-the-architecture-2016-edition/ 转载:http://www ...

  6. (转)Stack Overflow 2016最新架构探秘

    这篇文章主要揭秘 Stack Overflow 截止到 2016 年的技术架构. 首先给出一个直观的数据,让大家有个初步的印象. 相比于 2013 年 11 月,Stack Overflow 在 20 ...

  7. 轉:StackOverflow2016最新架构探秘

    轉載:http://www.infoq.com/cn/news/2016/03/Stack-Overflow-architecture-insi?utm_source=tuicool&utm_ ...

  8. 最新咕咆+鲁班+图灵+享学+蚂蚁+硅谷+源码 Java架构师资料《Java架构师VIP课程》

    最新的Java架构师完整资料,完整视频+源码+文档. 每一套都是一百多个G的资料,无密. JAVA架构师全套课程 咕泡学院互联网架构师第一期 咕泡学院互联网架构师第二期 咕泡学院互联网架构师第三期 博 ...

  9. suse11 sp2 搭建openvpn

    什么是VPN IP机制仿真出一个私有的广域网"是通过私有的隧道技术在公共数据网络上仿真一条点到点的专线技术.所谓虚拟,是指用户不再需要拥有实际的长途数据线路,而是使用Internet公众数据 ...

随机推荐

  1. MY WAY程序(十三) 理念和技术

    背部,该项目团队去了一半多,我们出差.我将离开之前,闪亮强哥给了我学习技术的列表,以了解它:AngularJs,bootsrap,smartadmin,html5,css3.很多前景的技术.哎,学吧, ...

  2. XML数据读取方式性能比较(一)

    原文:XML数据读取方式性能比较(一) 几个月来,疑被SOA,一直在和XML操作打交道,SQL差不多又忘光了.现在已经知道,至少有四种常用人XML数据操作方式(好像Java差不多),不过还没有实际比较 ...

  3. smark和openfire即时通信代码

    从:http://blog.csdn.net/casuallc/article/details/34794501 server:openfire client计划:smark写 首先安装openfir ...

  4. 读书时间《JavaScript高级程序设计》一:基础篇

    第一次看了<JavaScript高级程序设计>第二版,那时见到手上的书,第一感觉真是好厚的一本书啊.现在再次回顾一下,看的是<JavaScript高级程序设计>第三版,并记录一 ...

  5. Objective-C路成魔【2-Objective-C 规划】

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 编译执行O ...

  6. [Oracle] 分析功能(1)- 语法

    语法概览 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGJhbm90ZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQ ...

  7. JBPM4实例教程

    JBPM语言概述:全名  Java Business Process Management  ,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩展的可运行流程语言框架. 是开源 ...

  8. NGUI 3.5课程(五岁以下儿童)button-图片切换

    然后,我们去了一个样本,做一个button画面切换. 特征,像球员"开始"和"暂停". 写TestButton.cs脚本: using UnityEngine; ...

  9. Youtube最佳Red5 官方视频下载指南,字幕【亲测成功】

    前言 最近在研究Red5 流媒体服务框架,官网上的信息足以让一个新手入门 有官方參考手冊 -- 高速了解red5的相关信息 有Red5 on Stackoverflow  -- 在上面能够提问或者回答 ...

  10. java 生产者消费者问题 并发问题的解决(转)

    引言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 生产者消费者图 ...