(1)分布式、微服务等项目,需要对服务进行解耦的项目。
(2)邮件服务等无需立刻执行的服务,根据服务能力进行消费,避免高并发压垮服务器,进行流量的削峰填谷。
技术方案概要介绍
随着项目运营,越来越多的用户访问、高并发请求,部分高耗时接口(报告生成、发送邮件)已经开始影响服务的稳定性和可用性,服务解耦、削峰填谷已成为必须。
方案解决的问题
(1)高并发带来的服务延迟、消费不及时,最终导致业务服务之间的通信异常问题
(2)解决多节点部署RabbitMQ时负载不均衡的问题
3、成效说明
(1)业务服务器在高并发时,极大减少高耗时接口的服务延迟感,提升了用户体验。
(2)集群部署RabbitMQ时,负载均衡策略生效,避免了流量集中访问单节点的问题。
技术方案的详细说明
1、技术说明
使用docker进行HAProxy和RabbitMQ集群服务的部署。
集群架构图:
难点
集群部署时,多个RabbitMQ节点的互联配置容易出现错误,如Erlang Cookie值必须相同,因为RabbitMQ是用Erlang实现的,Erlang Cookie相当于不同节点之间相互通讯的秘钥,Erlang节点通过交换Erlang Cookie获得认证。
下面是集群部署的示例:
启动三台RabbitMq
设置节点1
设置节点2
设置节点3
注意点
(1)多个容器之间使用“--link”连接,此属性不能少;
(2)Erlang Cookie值必须相同,也就是RABBITMQ_ERLANG_COOKIE参数的值必须相同;
(3)参数“--ram”表示设置为内存节点,忽略次参数默认为磁盘节点。
说明
(1)通过RabbitMQ消息队列中间件,将项目的分布式服务由原本高耦合的RPC调用方式调整为队列消费模式,解耦了服务与服务之间的联系。
(2)将项目中的邮件服务、报告服务等不需要及时处理且高耗时的请求,调整到队列中,由对应的服务按需进行消费,避免过长的程序耗时影响用户体验。
(2)将Haproxy作为队列集群的网关,进行负载均衡,避免单节点性能消耗过高而影响服务稳定。
创新收益
(1)提高玩家体验游戏的流畅感
(2)节日活动等大流量时间段,通过水平拓展节点来灵活提高服务器性能,保证玩家氪金体验。
(3)提高了服务器的可用性,减小公司因为服务故障造成的损失。