架构决定可扩展性--重排和压缩/分组交换网

最近跟朋友又聊起我对iptables规则的重排优化,同时就想到了压缩。

重排和压缩

按照matches重排而不是按照rule排列规则,这便可以将一系列线性的规则组织成一棵查找树,差别是什么?差别就是定位规则的时间变短了,同时代价重排后的规则集占用的空间变大了,毕竟我们进行了小区间的细分。

  再来看另一种重排,Nginx对Apache的HTTP逻辑执行顺序进行了重排,按照流水线阶段分配CPU时间而不是按照连接分配CPU时间,差别是什么?差别就是省掉了巨量的任务调度开销。

  以上的总结来自于一种实践,即DxRPro++的实践,三年前我第一次对Linux内核承载50万条路由时的路由表进行了预处理,我当时想到的不是去发明一个新的查找算法,因为我觉得我没有这个能力,我想到的是对随机插入的路由项进行一次预处理,比如我并不是直接把路由项直接插入路由表,而是将其搜集到一个容器里,等到不再有新的路由项插入的时候,我全局地分析这个容器里的路由项,找出规律对其进行某种排序,最终成就了DxRPro++。整个过程其实是一个信息不断获取的过程,如果是逐个将路由项插入一个结构,比如Trie树,那么前后两个项是没有关联的,唯一能依赖的就是Trie树本身的精巧,然而当我拿到所有,至少是大多数待插入的路由项时,我便可以观察它们之间的关联,这便可以获取一个额外的信息,利用这个额外的信息,便可以对规则进行某种重排,从而达到意想不到的效果。

  要么空间换时间,要么时间换空间。我们来看看时间换空间的例子,压缩。其实很简单,如果你把时间和空间看作是对等的两面,那么和上面分析空间换时间的原理是一致的,也是通过全局意义上的空间分布规则这种额外的信息,对解析逻辑进行重排,最终也是形成了压缩后的数据+额外的信息这种复合结构。


分组交换网

来看看当年分组交换网对传统网络的冲击,这在分组交换网刚刚出来的时候算是天大的事了,在大家早已熟悉了用规规整整地时隙进行时分复用时,突然冒出个愣头青,竟然用泊松分布这种概率性的不确定的东西来约束网络行为,完全是不可思议的事。

  事实证明,正是分组交换网让基于TCP/IP的现代互联网成为了可能,其背后的功臣正是泊松分布和其理论指导下的排队论。如果按照时分复用的原理,完全无法应对现代互联网的流量突发,同时将会有大量的能量被空闲时隙浪费。可以说,传统的电信网络是不可扩展的,而分组交换网是可扩展的。Why?

  这也是一种重排!

  重排是时隙。传统电信网络的时隙是均匀分布的,这种网络中时隙是主体,而信息则是载荷,类似公交车,什么时候发车并不由坐车的人决定,如果坐车的人提前到了,那就要等,如果迟到了,只能坐后一班车。然而分组交换网将对时隙的控制交给了信息本身,此时信息是主体,时隙只是一个服务生,因此此时的时隙是可积累可突发的,因为信息作为人体大脑活动的延伸,本身就是突发性质的,熟悉令牌桶原理的应该明白,这里的原则是配额原则。分组交换网就好比是自己的私家车,什么时候想走就走。我们经常看到公交车空载或者满员上不去的情况,却几乎从来没有看到过谁开着私家车绕环城一圈再回来…

题外话

我是非常喜欢泊松分布和排队论,这些东西非常美妙地诠释了很多我们习以为常的问题。于是在能力范围内,我把几乎所有定义为常量 A 的东西都改成以 A 为数学期望的泊松分布了,人脑本身对信息的期待就是个泊松分布起作用的地方,至少对我而言是这样…另外,关联因素还有幂律特征,然而相对还是复杂…

猜你喜欢

转载自blog.csdn.net/dog250/article/details/80379616
今日推荐