架构决定可扩展性--重排和压缩/分组交换网
最近跟朋友又聊起我对iptables规则的重排优化,同时就想到了压缩。
重排和压缩
按照matches重排而不是按照rule排列规则,这便可以将一系列线性的规则组织成一棵查找树,差别是什么?差别就是定位规则的时间变短了,同时代价重排后的规则集占用的空间变大了,毕竟我们进行了小区间的细分。
再来看另一种重排,Nginx对Apache的HTTP逻辑执行顺序进行了重排,按照流水线阶段分配CPU时间而不是按照连接分配CPU时间,差别是什么?差别就是省掉了巨量的任务调度开销。
以上的总结来自于一种实践,即DxRPro++的实践,三年前我第一次对Linux内核承载50万条路由时的路由表进行了预处理,我当时想到的不是去发明一个新的查找算法,因为我觉得我没有这个能力,我想到的是对随机插入的路由项进行一次预处理,比如我并不是直接把路由项直接插入路由表,而是将其搜集到一个容器里,等到不再有新的路由项插入的时候,我全局地分析这个容器里的路由项,找出规律对其进行某种排序,最终成就了DxRPro++。整个过程其实是一个信息不断获取的过程,如果是逐个将路由项插入一个结构,比如Trie树,那么前后两个项是没有关联的,唯一能依赖的就是Trie树本身的精巧,然而当我拿到所有,至少是大多数待插入的路由项时,我便可以观察它们之间的关联,这便可以获取一个额外的信息,利用这个额外的信息,便可以对规则进行某种重排,从而达到意想不到的效果。
要么空间换时间,要么时间换空间。我们来看看时间换空间的例子,压缩。其实很简单,如果你把时间和空间看作是对等的两面,那么和上面分析空间换时间的原理是一致的,也是通过全局意义上的空间分布规则这种额外的信息,对解析逻辑进行重排,最终也是形成了压缩后的数据+额外的信息这种复合结构。
分组交换网
来看看当年分组交换网对传统网络的冲击,这在分组交换网刚刚出来的时候算是天大的事了,在大家早已熟悉了用规规整整地时隙进行时分复用时,突然冒出个愣头青,竟然用泊松分布这种概率性的不确定的东西来约束网络行为,完全是不可思议的事。
事实证明,正是分组交换网让基于TCP/IP的现代互联网成为了可能,其背后的功臣正是泊松分布和其理论指导下的排队论。如果按照时分复用的原理,完全无法应对现代互联网的流量突发,同时将会有大量的能量被空闲时隙浪费。可以说,传统的电信网络是不可扩展的,而分组交换网是可扩展的。Why?
这也是一种重排!
重排是时隙。传统电信网络的时隙是均匀分布的,这种网络中时隙是主体,而信息则是载荷,类似公交车,什么时候发车并不由坐车的人决定,如果坐车的人提前到了,那就要等,如果迟到了,只能坐后一班车。然而分组交换网将对时隙的控制交给了信息本身,此时信息是主体,时隙只是一个服务生,因此此时的时隙是可积累可突发的,因为信息作为人体大脑活动的延伸,本身就是突发性质的,熟悉令牌桶原理的应该明白,这里的原则是配额原则。分组交换网就好比是自己的私家车,什么时候想走就走。我们经常看到公交车空载或者满员上不去的情况,却几乎从来没有看到过谁开着私家车绕环城一圈再回来…
题外话
我是非常喜欢泊松分布和排队论,这些东西非常美妙地诠释了很多我们习以为常的问题。于是在能力范围内,我把几乎所有定义为常量 A A A的东西都改成以A" role="presentation">AAA为数学期望的泊松分布了,人脑本身对信息的期待就是个泊松分布起作用的地方,至少对我而言是这样…另外,关联因素还有幂律特征,然而相对还是复杂…
架构决定可扩展性--重排和压缩/分组交换网相关推荐
- 推荐算法架构4:重排
系列文章,请多关注 推荐算法架构1:召回 推荐算法架构2:粗排 推荐算法架构3:精排 推荐算法架构4:重排 1 总体架构 精排打分完成后,就到了重排阶段,之后可能还会有混排.召回.精排.重排三个模块中 ...
- 架构决定可扩展性--聊聊用户态协议栈的意义
在进入这个话题之前先说说通用和专业之间的区别. 举个很好的例子,好比我们个人,绝大部分的人都是"通用"的,而只有极少部分的人是"专业"的.通用的人主要目标是 ...
- [书摘]架构真经--可扩展性规则的利益与优先级排行榜
非常高-1 规则19: 放宽时间约束 规则25: 利用对象缓存 规则29: 不能回滚注定失败 规则32: 正确使用数据库锁 规则35: 避免选择所有列 规则46: 警惕第三方方案 规则50: 保持竞争 ...
- RISC-V指令集架构------RV32C压缩指令集
0 概述 RV32C是RISC-V架构中的一种指令集,其设计目标是提供高效的指令压缩技术,同时保持RISC-V架构的简洁和灵活性.它是RISC-V架构中的一个重要的扩展,为嵌入式系统和低功耗设备提供了 ...
- 性能超越GPU、FPGA,华人学者提出软件算法架构加速AI实时化
作者 | 王言治,美国东北大学电子与计算机工程系助理教授 出品 | AI科技大本营(ID:rgznai100) 近年来,机器学习(Machine Learning)领域的研究和发展可谓是与日俱新,各式 ...
- 研究项目: JBoss架构分析
原文转自:http://www.huihoo.org/jboss/jboss.cn.html 研究项目: JBoss架构分析 Jenny Liu School of Information Techn ...
- 电商网站前端架构 学习笔记(全是干货)
1:前端架构的基本知识 1: 前端工程师必须会的一些技能 前端工程师基本技能图.PNG 2: 前端架构基本知识 什么是前端架构? 每个人对每个架构有不同的认识和一些想法.没有一个架构是完美的,只有一个 ...
- 模型压缩+编译器优化,使AI算法在移动端性能超越专用硬件
作者 | 王言治,美国东北大学电子与计算机工程系助理教授 出品 | AI科技大本营(ID:rgznai100) 近年来,机器学习(Machine Learning)领域的研究和发展可谓是与日俱新,各式 ...
- 想染指系统架构?看这篇就够了
https://juejin.im/post/58f45b058d6d8100648a69f0 原文地址:github.com/donnemartin/system-design-primer 译文出 ...
最新文章
- hadoop hbase维护问题总结
- HADOOP学习笔记(一):HDFS
- springboot+mybatis+thymeleaf项目搭建及前后端交互
- 从入门到精通:卷积神经网络初学者指南
- 我所理解的性能测试是什么?
- (转载)lib 和 dll 的区别、生成以及使用详解
- 最火的C语言编程软件,适合编写C语言代码的编程软件有哪些
- 超级记忆/图像数字记忆 110位数字图像转换表 61-70
- 关于U盘免疫的一些自我认识
- 2021-1-13 印象深刻的Bug记录
- 关于个人对培训的看法
- idea安装SVN插件并使用
- 【keras】keras教程(参考官方文档)
- JAVA图形界面设计
- JZOJ5498. 【清华集训2017模拟12.10】大佬的难题
- Unity3D 安装
- 几款mac小应用,让你的苹果设备真正实现无缝衔接
- 2022腾讯云年终双十一活动攻略汇总!
- 打造绿色数据中心,Colt DCS 是认真的!
- Python语言程序设计(北京理工大学MOOC)1-5周