searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

在Openstack下对RPC请求流量整形

2023-07-19 08:27:00
7
0

   Openstack是一款开源的云计算管理系统,在云计算领域得到广泛的应用,包括自建私有云、公共云、租赁私有云及公私混合云等。Openstack采用分布式架构,各个业务组件可独立部署到集群内的各个服务器上,组件与组件之间通过RPC(远程过程调用)进行通信,每个RPC请求都会经过MQ(消息队列)进行分发,当集群规模变大时(300台以上服务器),会出现瞬间RPC请求过高的场景,所有RPC请求都会汇聚到MQ服务器,会把MQ服务器内存、CPU占满,导致MQ异常奔溃,使整个集群瘫痪。

 

   增加RPC流量整形装置,可以时刻监控MQ中各个队列的状态,当发现部分队列较满时,可通知对应的消息生产者暂缓或停止发送消息,防止消息过快发送或消费不及时导致MQ消息积压引起MQ组件异常。同时能够实现消息的优先级,让紧急的RPC消息得到优先调度,到达对RPC请求进行整形目的。

 

原生方案:

上图为重点突出MQ中心汇聚的问题,屏蔽了其它细节点

1、Plugin为各个业务组件,Agent为各个业务组件的代理组件,

2、Plugin与Plugin之间、Agent与Agent之间、Plugin与Agent之间消息交互都会经过MQ,

3、集群规模到一定程度(300台业务服务器)后,MQ中的队列数达到40000多,

4、当业务服务器维修或故障而批量重启时,MQ中的消息会瞬间突增,使得MQ服务器内存和CPU被占满,导致MQ出现异常。Openstack原生解决突发流量的方法是增加MQ集群服务器,但是当突发流量结束后,MQ集群服务器又会很空闲,导致资源的浪费。

改进方案:

整形装置工作流程如下:

1、不增加额外的服务器资源直接与MQ组件部署在一起。

2、不缓存消息,不消耗服务器的内存资源。

3、各个业务组件及其代理组件均不感知整形装置的存在,业务组件不需要做任何修改。

4、整形装置监听25672端口

5、在MQ服务器上增加iptables规则将5672端口的包重定向到25672端口

        iptables -t nat  -A PREROUTING  -i eth0  -p tcp  --dport 5672 -j REDIRECT --to-ports  25672

6、整形装置内部接收25672过来的消息,解析出队列名称并结合MQ中各个队列的状态,和优先级来决定是否放行和丢弃。

7、放行的消息则送到MQ 5672端口

8、丢弃的消息,业务组件则等待重传

0条评论
0 / 1000
牛哥
8文章数
0粉丝数
牛哥
8 文章 | 0 粉丝
原创

在Openstack下对RPC请求流量整形

2023-07-19 08:27:00
7
0

   Openstack是一款开源的云计算管理系统,在云计算领域得到广泛的应用,包括自建私有云、公共云、租赁私有云及公私混合云等。Openstack采用分布式架构,各个业务组件可独立部署到集群内的各个服务器上,组件与组件之间通过RPC(远程过程调用)进行通信,每个RPC请求都会经过MQ(消息队列)进行分发,当集群规模变大时(300台以上服务器),会出现瞬间RPC请求过高的场景,所有RPC请求都会汇聚到MQ服务器,会把MQ服务器内存、CPU占满,导致MQ异常奔溃,使整个集群瘫痪。

 

   增加RPC流量整形装置,可以时刻监控MQ中各个队列的状态,当发现部分队列较满时,可通知对应的消息生产者暂缓或停止发送消息,防止消息过快发送或消费不及时导致MQ消息积压引起MQ组件异常。同时能够实现消息的优先级,让紧急的RPC消息得到优先调度,到达对RPC请求进行整形目的。

 

原生方案:

上图为重点突出MQ中心汇聚的问题,屏蔽了其它细节点

1、Plugin为各个业务组件,Agent为各个业务组件的代理组件,

2、Plugin与Plugin之间、Agent与Agent之间、Plugin与Agent之间消息交互都会经过MQ,

3、集群规模到一定程度(300台业务服务器)后,MQ中的队列数达到40000多,

4、当业务服务器维修或故障而批量重启时,MQ中的消息会瞬间突增,使得MQ服务器内存和CPU被占满,导致MQ出现异常。Openstack原生解决突发流量的方法是增加MQ集群服务器,但是当突发流量结束后,MQ集群服务器又会很空闲,导致资源的浪费。

改进方案:

整形装置工作流程如下:

1、不增加额外的服务器资源直接与MQ组件部署在一起。

2、不缓存消息,不消耗服务器的内存资源。

3、各个业务组件及其代理组件均不感知整形装置的存在,业务组件不需要做任何修改。

4、整形装置监听25672端口

5、在MQ服务器上增加iptables规则将5672端口的包重定向到25672端口

        iptables -t nat  -A PREROUTING  -i eth0  -p tcp  --dport 5672 -j REDIRECT --to-ports  25672

6、整形装置内部接收25672过来的消息,解析出队列名称并结合MQ中各个队列的状态,和优先级来决定是否放行和丢弃。

7、放行的消息则送到MQ 5672端口

8、丢弃的消息,业务组件则等待重传

文章来自个人专栏
Openstack
8 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
1