zoukankan      html  css  js  c++  java
  • RabbitMQ+Haproxy 服务解耦与流量削峰填谷

     

    (1)分布式、微服务等项目,需要对服务进行解耦的项目。

    (2)邮件服务等无需立刻执行的服务,根据服务能力进行消费,避免高并发压垮服务器,进行流量的削峰填谷。

    技术方案概要介绍

    随着项目运营,越来越多的用户访问、高并发请求,部分高耗时接口(报告生成、发送邮件)已经开始影响服务的稳定性和可用性,服务解耦、削峰填谷已成为必须。

     

    方案解决的问题

    (1)高并发带来的服务延迟、消费不及时,最终导致业务服务之间的通信异常问题

    (2)解决多节点部署RabbitMQ时负载不均衡的问题

     

    3、成效说明

    (1)业务服务器在高并发时,极大减少高耗时接口的服务延迟感,提升了用户体验。

    (2)集群部署RabbitMQ时,负载均衡策略生效,避免了流量集中访问单节点的问题。

     

    技术方案的详细说明


    1、技术说明

    使用docker进行HAProxy和RabbitMQ集群服务的部署。

    集群架构图:

     

     

    难点

    集群部署时,多个RabbitMQ节点的互联配置容易出现错误,如Erlang Cookie值必须相同,因为RabbitMQ是用Erlang实现的,Erlang Cookie相当于不同节点之间相互通讯的秘钥,Erlang节点通过交换Erlang Cookie获得认证。

     

    下面是集群部署的示例:

    启动三台RabbitMq

    docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management
    
    docker run -d --hostname rabbit2 --name myrabbit2 -p 5673:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management
    
    docker run -d --hostname rabbit3 --name myrabbit3 -p 5674:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management

     

    设置节点1

    docker exec -it myrabbit1 bash
    
    rabbitmqctl
    
    stop_app
    
    rabbitmqctl reset
    
    rabbitmqctl start_app
    
    exit

     

     

    设置节点2

    docker exec -it myrabbit2 bash
    
    rabbitmqctl stop_app
    
    rabbitmqctl reset
    
    rabbitmqctl join_cluster --ram rabbit@rabbit1
    
    rabbitmqctl start_app
    
    exit

     

     

    设置节点3

    docker exec -it myrabbit3 bash
    
    rabbitmqctl stop_app
    
    rabbitmqctl reset
    
    rabbitmqctl join_cluster --ram rabbit@rabbit1
    
    rabbitmqctl start_app
    
    exit

     

     

     

    注意点

    (1)多个容器之间使用“--link”连接,此属性不能少;

    (2)Erlang Cookie值必须相同,也就是RABBITMQ_ERLANG_COOKIE参数的值必须相同;

    (3)参数“--ram”表示设置为内存节点,忽略次参数默认为磁盘节点。

     

    说明

    (1)通过RabbitMQ消息队列中间件,将项目的分布式服务由原本高耦合的RPC调用方式调整为队列消费模式,解耦了服务与服务之间的联系。

    (2)将项目中的邮件服务、报告服务等不需要及时处理且高耗时的请求,调整到队列中,由对应的服务按需进行消费,避免过长的程序耗时影响用户体验。

    (2)将Haproxy作为队列集群的网关,进行负载均衡,避免单节点性能消耗过高而影响服务稳定。


    创新收益

    (1)提高玩家体验游戏的流畅感

    (2)节日活动等大流量时间段,通过水平拓展节点来灵活提高服务器性能,保证玩家氪金体验。

    (3)提高了服务器的可用性,减小公司因为服务故障造成的损失。

     

     

  • 相关阅读:
    面试(串讲三)
    未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“Microsoft.VisualStudio.Data.Providers.SqlServer.SqlViewSupport.xml”正确嵌入或链接到程序集“Microsoft.VisualStudio.Data.Providers.SqlServer”,或者确保所有需要的附属程序集都可加载并已进行了完全签名。
    爬虫-js逆向记录1
    Spring Boot前后端分离直接访问静态页+ajax实现动态网页
    MODBUS-TCP通讯协议V1.03
    vs2019调试时,取消线程abort终止导致异常中断方法
    TCP/IP报文分析
    专业免费的图片、照片去灰底、修复软件,专业人员都在用它
    c指针的传递
    golang实现三重DES加密解密
  • 原文地址:https://www.cnblogs.com/yourstars/p/15323372.html
Copyright © 2011-2022 走看看