Skip to content

Latest commit

 

History

History
47 lines (29 loc) · 2.28 KB

theory.md

File metadata and controls

47 lines (29 loc) · 2.28 KB

一些理论,一些舍与取

全局连接数-设计理论

CAPBASE 是分布式系统中,很重要的2个基础理论。

全局连接数是基于这2个理论构建的。在需要保证性能和容错性的前提下,P 确定 。C(一致性)和A(可用性)是一种互斥的关系,二者只能取其一。

在当前的环境中,很多是跨机房,跨国家进行部署,跨国延迟都是150ms以上,如需要保证C(一致性), 那么会极大的降低proxy端的性能,保证一致性(C)是不可取的。

所以,设计中全局连接数 是基于 AP 来 设计。 这会带来什么问题呢? 对,一致性(多台机器获取的值不一致) 问题。

既然对一致性 做出了妥协,那么数据会不会混乱等等的。 我们需要妥协到什么程度,这需要 BASE 理论来解释。

BASE理论核心思路:在无法做到强一致性的情况下,根据业务特点,使用适当的方式使系统达到最终一致性。

最后总结:全局连接数 = AP+BASE理论(允许中间态,但最终到达一致性)

proxy端实现的核心理论

  • 基于直接内存-资料
    • 数据不需要从内核(kernel)复制到进程的用户空间,减少I/O
    • 数据共享,其他进程、程序或者网络出口,可以直接基于内核缓冲区操作,0复制。
  • NIO
    • 百万接入都不怕,内存占用少
  • 异步
    • 几乎所有的操作都是异步,不会阻塞工作线程。
    • 不存在对象/类级别的锁,几乎都是分段锁/乐观锁
  • soft/weakReference
    • 缓存和锁都基于它们实现,可快速回收垃圾

对v2ray协议的适配

v2ray支持很多的协议,比如:HTTP2、TCP、MKCP...,不适配这些协议的原因:

  • 对传输协议的解析需要成本。
  • 这些协议都很特别,除了HTTP2和WS。
    • 很少公司会用(相对于HTTP来说)、特征太明显。懂一点机器学习的朋友都知道,特征越明显准确率越高。
    • 就算你的数据包加了1千种加密算法,也没用。
  • HTTP2和WS都是构建在HTTP之上,两者都是对HTTP长连接、多路复用的补充。HTTP2更加适合一些网页场景。