OpenVPN多处理之-最新架构

好久没有更新这个系列了,因为我之前也说过,前段时间实在太忙了,而且早在一个月前就预示着本月将更加忙!事实也确实如此!终于在国庆前夕完成了既定的计划,心里也终于可以长出一口气了。最近在忙什么呢?其实就是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.客户端无法实现多进程打开同一个虚拟网卡,而只能捆绑多个虚拟网卡。
...
以上这些都是需要慢慢完善的。我希望自己不会就此作罢,也希望和高手们进一步交流。
       在实现的过程中,遇到过无数的问题,和起初设计的时候想象的根本不一样,很多细节都没有考虑到。比如tap的ARP广播分发问题,当时我觉得随便分发到一个线程即可,后来发生了无数次的段错误,assert失败...最终发现,即使是ARP也没有什么特殊的,只要解析出ARP的内容中的sip和dip即可,将它和IP报文同样对待...
       还是那句话,如果你能画一张图把一个技术展示明白,那么你绝对掌握了这项技术,如果你画图的过程中,突然不知道怎么画了,那么这点就是你的技术盲点。不要抱怨不会用画图软件,纸笔伺候,手绘即可。手绘图更能让你的精力集中在图本身而不是画图软件怎么用,因为你用你的脑子驱使你的手,借助笔的硬度和铅,墨水等在纸上留下痕迹,你的大脑完全起100%的作用,反之你用画图软件的话,你必须通过电脑的CPU芯片,即你必须想办法告诉CPU如何展示你脑子里想象的图像,而CPU却并不如纸和笔那样做你的奴隶,反之,你要迎合它的规则...说了这么多,其实我想说的是,版本1的最初版就是我手绘的,如下图所示:

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

时间: 2024-10-10 18:14:44

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

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

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而如今已拥有1.5亿的活跃用户,系统日传输tweet更多达4亿条,并已完成了以服务为核心的系统架构蜕变. Twitter如今在世界范围内已拥有1.5亿的活跃用户,为了给用户生成timeline(时间轴)需支撑30万QPS,其firehose每秒同样生成22MB数据.整个系统每天传输tweet 4亿条,并且只需要5分钟就可以让一条twe

鲁班学院最新架构师资料《Java架构师VIP课程》

鲁班学院最新架构师资料<Java架构师VIP2019课程一期> 课程目录: ├─01.并发专题(一) │ 2018-09-11(1)-Java内存模型 │ 2018-09-13(2)-synchronized原理 │ 2018-09-16(3)-volatile实现机制 │ 2018-09-18(4)-DCL-单例模式 │ 2018-09-21(5)-并发基础-AQS.CAS2 │ 2018-09-25(6)-并发集合 │ 2018-09-27(7)-原子操作-基本类型 │ 2018-09-3

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

这篇文章主要揭秘 Stack Overflow 截止到 2016 年的技术架构. 首先给出一个直观的数据,让大家有个初步的印象. 相比于 2013 年 11 月,Stack Overflow 在 2016 年 02 月统计数据有较大变化,下面给出 2016 年 02 月 09 号一天的数据,如下: HTTP 请求数 209,420,973 (+61,336,090) 网页加载次数 66,294,789 (+30,199,477) HTTP 流量发送有1,240,266,346,053 (+406

Stack Overflow 2016最新架构探秘

这篇文章主要揭秘 Stack Overflow 截止到 2016 年的技术架构. 首先给出一个直观的数据,让大家有个初步的印象. 相比于 2013 年 11 月,Stack Overflow 在 2016 年 02 月统计数据有较大变化,下面给出 2016 年 02 月 09 号一天的数据,如下: HTTP 请求数 209,420,973 (+61,336,090) 网页加载次数 66,294,789 (+30,199,477) HTTP 流量发送有1,240,266,346,053 (+406

轉:StackOverflow2016最新架构探秘

轉載:http://www.infoq.com/cn/news/2016/03/Stack-Overflow-architecture-insi?utm_source=tuicool&utm_medium=referral 首先给出一个直观的数据,让大家有个初步的印象. 相比于2013年11月,Stack Overflow在2016年02月统计数据有较大变化,下面给出2016年02月09号一天的数据,如下: HTTP请求数209,420,973 (+61,336,090) 网页加载次数 66,2

ENode 2.8 最新架构图简介

ENode架构图 什么是ENode ENode是一个.NET平台下,纯C#开发的,基于DDD,CQRS,ES,EDA,In-Memory架构风格的,可以帮助开发者开发高并发.高吞吐.可伸缩.可扩展的应用程序的一个应用开发框架. 开源项目地址:https://github.com/tangxuehua/enode 作者博客地址:http://www.cnblogs.com/netfocus/category/496012.html QQ交流群号:185916873 微信公众号:ENode ENod

十几位资深架构师,整理了2019最新架构师学习体系,分享给大家......

不管是开发.测试.运维,每个技术人员心里都有一个成为技术大牛的梦,毕竟"梦想总是要有的,万一实现了呢"!正是对技术梦的追求,促使我们不断地努力和提升自己. 然而"梦想是美好的,现实却是残酷的",很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边, 例如: 程序员说"天天写业务代码还加班,如何才能成为技术大牛" 测试说"每天都有执行不完的测试用例" 运维说"扛机器接网线敲shell命令,这不是

架构师之炉边夜话一

(以下对话来自软件架构师群) --------------------前奏------------------------ [省长]合肥-研发-brook 23:10:18 我上家公司的技术经理是从工地拎灰桶 [省长]合肥-研发-brook 23:10:22 干起的 [省长]合肥-研发-brook 23:10:30 然后混到现在公司的技术经理 [村民]织&织&猪 23:10:35 如果你想往架构师的路上走,图轻松是不可能成功的. [市长]杭州-Mr.Bug 23:11:27 我已经算是架构

数据交换平台的架构设计

序言 说到架构设计,不敢妄自牛逼.只能默默地向Linux致敬,没有强大的linux系统,我们做的架构设计,做的程序一天说不定挂几次.(windows系统就不说了,呵呵) 数据交换平台的架构发展 架构不是一蹴而就的,是随着团队技术能力的积累,随着公司数据平台的逐步完善,随着相关开源产品的深入学习,逐步形成和进化的. 不同阶段,需要不同的架构.因此,不能单纯地说,哪个架构就好,哪个架构就不好.只要适合当时的环境,就是最好的.对公司业务的发展,对其他模块的项目支撑,没有起到约束和限制的作用,就OK.如