反向代理层的高可用高并发方案

| 分类 大型系统架构  | 标签 负载均衡  高可用  高并发  nginx  反向代理  虚拟IP  IP  DNS  DNS轮询  LVS  F5  keepalived  HTTP  web  架构  分布式  自动故障转移  冗余  ARP  MAC  VRRP  虚拟路由冗余协议  路由 

目前分布式系统架构的实践中,除了最基础的数据一致性要保证,大家都在讨论高可用和高并发

当前互联网企业中典型的分层架构是这样的

可能还会有架设F5、LVS 等设备的架构,这里不讨论!下面对于反向代理层(Nginx)的高可用和高并发策略进行讲解。其它层也都可以借鉴其背后的思想

高可用

实现高可用的核心准则是冗余!比如在反向代理层,架设两个nginx,当master-nginx 挂了,立马用shadow-nginx 顶上来

OK,上面这么一说看似很清晰,能够在master-nginx 出现故障时,切换到让请求流量走到另一台shadow-nginx 上,这样流量就可以继续往下走了

但是,细想一下,这两台服务器的IP 不一样,难道要让浏览器、app 自己动手去改IP?

所以有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可服务时间。所以,又往往是通过自动故障转移来实现系统的高可用

那么上面的场景怎么实现自动故障转移呢?

有两台nginx,一台对线上提供服务,另一台冗余以保证高可用,常见的实践是keepalived 存活探测,相同virtual IP 提供服务

当master-nginx 挂了的时候,keepalived 能够探测到,会自动的进行故障转移,将流量自动迁移到shadow-nginx,由于使用的是相同的virtual IP,这个切换过程对调用方是透明的

高可用

实现自动故障转移的核心是virtual IP!下一篇会讲到其技术细节

高并发

上面介绍了高可用的方案了,但对外还是只有一个IP,同时只会有一个nginx 对外服务!假如这个nginx 服务器支持10 万并发,但随着用户量的增加,慢慢并发数很快就会超过10万,达到20万、30万、100万、500万,这时候怎么办?

你可以通过架设LVS、F5 来实现,但这里我们不讨论这种方案,如果只用nginx 怎么实现?

其实很简单,反向代理层的横向扩展,就是利用DNS 轮询来实现!

以最开始的图为例,为www.example.com 配置多个IP,比如10 个,每次客户端像DNS 查询IP 时,随机返回10 个IP 中的一个,这样系统反向代理层的并发量可以提升十倍,如果系统并发量继续提升,那么添加更多的IP

每个IP 地址上的nginx 还是使用上面master-nginx + shadow-nginx + keeplived + virtual IP 的方式来保证每个IP 节点的高可用!

综上,最终的反向代理层高可用、高并发的方案是这样的

高并发




如果本篇文章对您有所帮助,您可以通过微信(左)或支付宝(右)对作者进行打赏!


上一篇     下一篇