定义
- 高可用 (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: 待补充
参考阅读
定义
私有化实现
以最简单的hello world为例,GET /返回hello world
当然服务器不差钱的时候,可以安排5台服务器:
WebSocket, Socket & MQTT 长连接
对于集群长连接需要借助带集群的消息队列来解决信息互通,比如Kafka, RabbitMQ,此外WebSocket则需要在Nginx中增加负载均衡的相应配置即可。
redis & mongodb
可以在2台或多台服务器上配置集群
云端实现
TODO: 待补充
度量
TODO: 待补充
监控
集群后存在大量日志在所难免,这是就需要用到ELK,统一采集日志到后台,或者直接用SaaS日志服务。
TODO: 待补充
参考阅读