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)提高了服务器的可用性,减小公司因为服务故障造成的损失。

     

     

  • 相关阅读:
    .NET面试题目
    ASP.NET应用管理系统框架概述(三)
    ASP.NET应用管理系统框架概述(二)
    ASP.NET应用管理系统框架概述(一)
    InstallShield使用文档
    dotnet的安装包例子
    Access数据库连接池
    InstallShield使用——InstallScript MIS Project例子
    InstallShield使用——例子
    ASP.NET针对Sybase数据库使用分页技术
  • 原文地址:https://www.cnblogs.com/yourstars/p/15323372.html
Copyright © 2011-2022 走看看