负载均衡-初谈

当一个项目沉淀一段时间后,随着用户量的提升,用户群体庞大起来。这时候就会出现过多的用户访问导致服务器(单机)供应不足。那么,负载均衡就出现了。

  • 假设我有60w的用户量,那么负载如下图:
graph TD;
    A["nginx入口服务器"]-->B1["nginx负载1(20w)"];
    A-->B2["nginx负载2(20w)"];
    A-->B3["nginx负载3(20w)"];

此时分配负载是正确的。但是,某个时间段突然用户量飙升,超过了60w的访问量。这个时候增加服务器就来不及。这就又回到初始问题,服务器宕机。因此,要对负载服务器做限流,超过访问量就禁止访问。

  • 假设我有160w的用户量,那么负载如下图:
graph TD;
    A["nginx主服务器"]-->A1;
    A-->A2;
    A-->A3;
    A1["nginx入口服务器(55w)"]-->B11["nginx负载1(20w)"];
    A1-->B12["nginx负载2(20w)"];
    A1-->B13["nginx负载3(20w)"];
    A2["nginx入口服务器(55w)"]-->B21["nginx负载1(20w)"];
    A2-->B22["nginx负载2(20w)"];
    A2-->B23["nginx负载3(20w)"];
    A3["nginx入口服务器(55w)"]-->B31["nginx负载1(20w)"];
    A3-->B32["nginx负载2(20w)"];
    A3-->B33["nginx负载3(20w)"];
  • 假设我有500w用户,要做个抽奖活动。

这个就需要考虑一下,假如活动真有500w或者500w以上,超过服务器负载了。那么就会导致一部分负载服务器拦截,而被拦截的用户转而调到另外的负载服务器。很显然,这样持续下去会导致整个服务全部崩溃。这个时候就要考虑把抽奖活动单独部署出来,而活动服务器只是短期的伸缩服务器。那么,负载如图:

graph TD;
    A["nginx主服务器"]-->A1;
    A-->A2;
    A-->A3;
    A["nginx主服务器"]-->H1["活动服务器(30w)"];
    A-->H2["活动服务器(30w)"];
    A-->H3["活动服务器(30w)"];
    A-->H4["活动服务器(30w)"];
    A-->H5["活动服务器(30w)"];
    A-->H6["活动服务器(30w)"];
    A-->H7["活动服务器(30w)"];
    A1["nginx入口服务器(55w)"]-->B11["nginx负载1(20w)"];
    A1-->B12["nginx负载2(20w)"];
    A1-->B13["nginx负载3(20w)"];
    A2["nginx入口服务器(55w)"]-->B21["nginx负载1(20w)"];
    A2-->B22["nginx负载2(20w)"];
    A2-->B23["nginx负载3(20w)"];
    A3["nginx入口服务器(55w)"]-->B31["nginx负载1(20w)"];
    A3-->B32["nginx负载2(20w)"];
    A3-->B33["nginx负载3(20w)"];
  • 假设不因一个异常而导致其他服务不可用

    那就考虑服务分化部署,即微服务

graph TD;
    A(入口)-->B1(用户层);
    A-->B2(订单);
    A-->B3(活动);
    A-->B4(商品);
    A-->B5(物流);
    A-->B6(日志);
    A-->B7(客服);
    A-->B8(支付);
    B1-->C1(用户信息);
    B1-->C2(用户任务);
    B2-->D1(订单生成);
    B2-->D2(订单支付);
    B2-->D3(购物车);
    B3-->E1(秒杀);
    B3-->E2(团购);
    B3-->E3(竞拍);
    B4-->F1(商品搜索);
    B4-->F2(商品详情);
    B4-->F3(商品推荐);
    B5-->G1(信息更新);
    B5-->G2(服务商对接);
    B6-->H1(请求日志);
    B6-->H2(交易日志);
    B6-->H3(浏览日志);
    B7-->I1(纠纷处理);
    B7-->I2(订单处理);
    B7-->I3(投诉处理);
    B8-->J1(支付宝);
    B8-->J2(微信);
    B8-->J3(银联);
    B8-->J4(paypal);
    B8-->J5(第三方支付);