Skip to content

如何做高并发和高可用? #63

Description

@nonocast

定义

  • 高可用 (HA: High Availability) - 假设每运行100个时间单位,100个时间单位服务都可用,则可用性为100%,如果有5个时间单位服务时效,则可用性降至95%,提升高可用的基本理念:通过集群建立冗余。
  • 高并发 (High Concurrency) - 并发数量和响应时间评价当前负载能力,提升高并发的基本理念:垂直扩展(Scale Up)与水平扩展(Scale Out)。提升单台机器的性能称之为垂直扩展,所以我们更多的关注于水平扩展。
  • 集群:同样的事情分多个人同时做(多台不同的服务器中部署相同应用或服务模块,构成一个集群,通过负载均衡设备对外提供服务)
  • 分布式:一件事情分几个人做不同的部分 (即多台不同服务器部署不同服务模块, 通过远程调用协同工作对外提供服务)

私有化实现

以最简单的hello world为例,GET /返回hello world

  • 多机单主负载均衡: 假设2台服务器(A和B), 即A上的Nginx中upstream中同时配置A和B的service地址, 向外发布A的IP地址
  • 多机多活无负载均衡: 假设2台服务器(A和B), 同时在A和B上通过keepalived建立VIP(virtual ip address),向外发布VIP地址,此时当A down的时候,VIP会立即指向B,形成热备份
  • 多机多主负载均衡: 结合上述两条,首先建立VIP, 然后每台服务器upstream都指向2台服务即可

当然服务器不差钱的时候,可以安排5台服务器:

  • 2台服务器做VIP,形成Nginx负载均衡集群
  • 3台服务器做worker,形成服务集群
  • 在Nginx中的upstream中配置3个worker服务地址即可

WebSocket, Socket & MQTT 长连接

对于集群长连接需要借助带集群的消息队列来解决信息互通,比如Kafka, RabbitMQ,此外WebSocket则需要在Nginx中增加负载均衡的相应配置即可。

redis & mongodb

可以在2台或多台服务器上配置集群

  • redis: Sentinel (哨兵)
  • mongodb: Replica Set

云端实现

TODO: 待补充

度量

TODO: 待补充

监控

集群后存在大量日志在所难免,这是就需要用到ELK,统一采集日志到后台,或者直接用SaaS日志服务。

TODO: 待补充

参考阅读

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions