无名商城论坛

搜索
查看: 305|回复: 0

[其他技术] 18年伟氏顶级云流控核心关键分享(原作者:陈伟)

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 15:07:40 | 显示全部楼层 |阅读模式
P1:因为个人的一些原因和团队的一些原因,伟氏团队被迫解散,陈伟有他的路要走,老二老三也都有了自己的小宝宝,而陈伟去追寻了他的(保密)但依旧对于科技是热爱的,也一定是会再次复出的

P2关键云流控核心主要取决于码子过滤,但也不完全是各有一些,之前在很长的一段艰苦研究过程中发现其中数值反码串码倒码可以有很好的一个效果,其中从2.8.0版本开始,RabbitMQ还引入了流控(Flow?Control)机制来确保稳定性。流控机制是用来避免消息的发送频率过快而导致服务器难以支撑的情形。内存和磁盘告警相当于全局的流控,一旦触发会阻塞集群中所有的Connection,而流控是针对单个Connection的,可以称之为Per-Connection?Flow?Control或者?Internal?Flow?Control。

P3Erlang进程之间并不共享内存(binary类型的除外),而是通过消息传递来通信,每个进程都有自己的进程邮箱(mailbox)。默认情况下,Erlang并没有对进程邮箱的大小进行限制,所以当有大量消息持续发往某个进程时,会导致该进程邮箱过大,最终内存溢出并崩溃。在RabbitMQ中,如果生产者持续高速发送,而消费者消费速度较低时,如果没有流控,很快就会使内部进程邮箱的大小达到内存阈值。

RabbitMQ使用了一种基于信用正算法(credit-based?algorithm)的流控机制来限制发送消息的速率以解决这个问题。它通过监控各个进程的进程邮箱,当某个进程负载过高而来不及处理消息时,这个进程的邮箱就会开始慢慢堆积消息,当堆积到一定量时,就会阻塞而不接收上游的新消息。从而慢慢的,上游的进程邮箱也会开始慢慢的堆积消息。当堆积到一定量的时候也会阻塞而停止接收上游的消息,最后就会使负责网络数据包接收的进程阻塞而暂停接收新数据。以下图为例:

进程A接收消息并转发至进程B,进程B接收消息并转发至进程C。每个进程中都有一对关于收发消息的credit值。以进程B为例,{undefined{credit_from,C},value}表示能发多少条消息给C,每发一条消息就将该值减1,当为0时,进程B不再往进程C发送消息,也不再接收进程A的消息。{undefined{credit_to,A},value}表示再接收多少条消息就向进程A发送增加credit值的通知,进程A接收到通知后就增加{undefined{credit_from,B},value}所对应的值,这样进程A就能持续发送消息。当上游发送速率高于下游接收速率时,credit值就会逐渐被消耗光,这时进程就会被阻塞,阻塞的情况会一直传递到最上游。当上游进程收到来自下游的增加credit值的通知时,若此时上游处于阻塞状态则解除最上游的阻塞状态,开始接收更上游的进程消息,一个一个传导最终能够解除最上游的阻塞状态。由此可见,基于信用证的流控机制最终将消息发送进程的发送速率限制在消息处理进程的处理能力范围之内。

一个连接触发流控时会处于“flow”状态,也就意味着这个Connection的状态每秒在blocked和unblocked之间来回切换数次,这样可以将消息发送的速率控制在服务器能够支撑的范围之内,可以通过rabbit

P4(流量控制是端到端的控制,例如A通过网络给B发数据,A发送的太快导致B没法接收(B缓冲窗口过小或者处理过慢),这时候的控制就是流量控制,原理是通过滑动窗口的大小改变来实现。

拥塞控制是A与B之间的网络发生堵塞导致传输过慢或者丢包,来不及传输。防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络性能有关的所有因素。

P5还没看懂那就直接问我,就是乱码有1有2有男有女
一正一负然后男不认识女女不认识男,正常情况下是认识的,这是举的例子这就是乱码正用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表