CAP 和 BASE 是分布式系统中,很重要的2个基础理论。
全局连接数
是基于这2个理论构建的。在需要保证性能和容错性
的前提下,P 确定 。C(一致性)和A(可用性)是一种互斥的关系,二者只能取其一。
在当前的环境中,很多是跨机房,跨国家进行部署,跨国延迟都是150ms以上,如需要保证C(一致性), 那么会极大的降低proxy端的性能,保证一致性(C)是不可取的。
所以,设计中全局连接数
是基于 AP 来 设计。 这会带来什么问题呢? 对,一致性
(多台机器获取的值不一致) 问题。
既然对一致性
做出了妥协,那么数据会不会混乱等等的。 我们需要妥协到什么程度,这需要 BASE
理论来解释。
BASE
理论核心思路:在无法做到强一致性的情况下,根据业务特点,使用适当的方式使系统达到最终一致性。
最后总结:全局连接数 = AP+BASE理论(允许中间态,但最终到达一致性)
- 基于直接内存-资料
- 数据不需要从内核(kernel)复制到进程的用户空间,减少I/O
- 数据共享,其他进程、程序或者网络出口,可以直接基于内核缓冲区操作,0复制。
- NIO
- 百万接入都不怕,内存占用少
- 异步
- 几乎所有的操作都是异步,不会阻塞工作线程。
- 锁
- 不存在对象/类级别的锁,几乎都是分段锁/乐观锁
- soft/weakReference
- 缓存和锁都基于它们实现,可快速回收垃圾
v2ray支持很多的协议,比如:HTTP2、TCP、MKCP...,不适配这些协议的原因:
- 对传输协议的解析需要成本。
- 这些协议都很特别,除了HTTP2和WS。
- 很少公司会用(相对于HTTP来说)、特征太明显。懂一点机器学习的朋友都知道,特征越明显准确率越高。
- 就算你的数据包加了1千种加密算法,也没用。
- HTTP2和WS都是构建在HTTP之上,两者都是对HTTP长连接、多路复用的补充。HTTP2更加适合一些网页场景。