前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你们系统是怎么保证高可用的

你们系统是怎么保证高可用的

作者头像
架构师修炼
发布2020-07-20 10:24:35
1.2K0
发布2020-07-20 10:24:35
举报
文章被收录于专栏:架构师修炼架构师修炼

高可用(HA)是系统架构设计中必须要考虑的,是指系统所能提供无故障服务的一种能力。

简单的说就是避免因服务器宕机而造成的服务不可用的情况,像Elasticsearch并不会因为一节点的宕机而造成整个搜索服务不可用(可以看)。

01

如何衡量高可用

假设你的系统全年都是正常提供服务,那么就是说你系统的可用性是100%,当然这个值是理想状态下,一般都是以几个9来表示系统的可用性,99.99的可用性较多,9越多就代表可用性越强,下面来看看这个几个9是如何计算出来的

可用性=平均故障间隔/(平均故障间隔 + 故障恢复平均时间)

02

如何设计系统的高可用

想要高可用就要避免使用单点,你想想看你的单台服务器再强应用优化的再极致,只要它宕机,就啥都凉凉了,所以需要多台机器也就是需要集群,方法论中叫冗余。只是有了集群是不能完全满足复杂业务的高可用的,我们要让系统在当前节点宕机的情况下,自己进行切换到好的节点去,这即所谓的故障转移。所以我们现在设计高可用系统的目标明确了,那就是:冗余 + 故障转移

我们来先看看当前大部分互联网公司的系统架构:

看上图你会想到什么地方会出现不可用的情况,

1,从客户端到反向代理Nginx这块,这个1台nginx是会可能发生故障的,所以这里可以再冗余一台Nginx,可以利用linux的 keeplived进行探测可用性,当一台Nginx挂了之后,则会自动转移到另一台Nginx机器上来,从而保证高可用。

2,从反向代理到后端服务service这块,反向代理这块,目前最受欢迎的是nginx,性能方面表现也很好,nginx能够自动探测后端服务的可用性,只需在nginx,config配置多台后端服务就行了。

3,从后端服务到缓存这块,缓存这块推荐使用redis主从同步方案来达到高可用,redis主从同步加上sentine哨兵机制来自动探活redis实例。

4,从后端服务到写数据库这块,这里可以采用双主机制,一台给线上使用,另一台冗余,当线上那台挂了才会阶梯过来使用写功能,同样是通过linux的keepalived进行自动探活。

5,从后端服务到读数据库这块,这里同样是将读库部署多台,例如部署2台,通过代码段增加连接池组件进行路由读库和探活

03

设计系统高可用延伸思路

上面介绍了我们在宏观方面怎么设计系统高可用,其实我们在编码的时候除了故障转移方案,同样需要考虑很多东西来保证系统的可用性,主要想体现在,超时机制、降级、限流等

超时机制

在我们系统中其实大部分会调用三方接口,而这个三方接口一般是合作公司的或者是公司其他部门提供的,我们并不清楚对方接口的性能情况,有些接口在并发稍大一点的情况下会出现返回很慢,一直占用当前资源,使得我们大量的请求阻塞等。所以这块我们需要对此进行设置合理的超时时间,来快速结束这些慢请求,来保证我们系统的可用性。

我们线上就有一个业务发生过类似的事情,对方接口在我们一定并发的时候经常很慢很慢才会出现结果,最后造成我们OOM,最终发现是这个业务程序员没有合理设置超时时间造成的。

那么这个超时时间应该设置多少呢,这个并不是绝对的,需要我们根据自己的业务以及接口情况加上多次分析线上时间,来合理设置,可以不停的对其设置直到业务愉快的进行。

降级

降级也是互联网中老生常谈的话题,那么我们使用降级方案如何来保证系统的可用性呢,分析自己的业务,在面对流量剧增的时候,例如,秒杀,大促等这些剧增的大流量,可以将不影响本次业务的流程也砍掉,不去调用了,直接走核心业务。其实各大电商都是采取这种方案来保证系统的可用性的。

限流

限流是,本来我系统只能抗住10万并发,然后现在我们运营搞了什么牛逼的大促,搞的来了10倍的流量,那么系统就把瞬间不能处理的流量给截断,直接返回给用户,用户可以待会儿再试。所以限流就是为了保证系统的高可用而限制住大流量的情况发生。

总结

今天分享了什么是高可用架构,以及高可用架构的设计思路关键点即故障转移、超时机制、降级、限流等

关于架构师修炼

本号旨在分享一线互联网各种技术架构解决方案,分布式以及高并发等相关专题,同时会将作者的学习总结进行整理并分享。

更多技术专题,敬请期待

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师修炼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档