乐趣区

关于架构:互联网高可用架构探讨-京东云技术团队

高可用指标与问题

高可用,英文单词 High Availability,缩写 HA,它是分布式系统架构设计中一个重要的度量。业界通常用多个 9 来掂量零碎的可用性,如下表:

既然有可用率,有肯定会存在不可用的状况。零碎宕机个别分为有打算的和无打算的,有打算的如日常保护、系统升级等,无打算的如设施故障、突发断电等。咱们对此作如下分类:

1. 设施故障:机房断电、硬盘损坏、交换机故障。

2. 网络故障:网络带宽拥挤、网络连接中断。

3. 平安问题:利用系统漏洞进行网络攻击。

4. 性能问题:CPU 利用率太高、内存不足、磁盘 IO 过载、数据库慢 SQL。

5. 降级保护:因为业务变更或技术改良而引起的系统升级。

6. 零碎问题:分布式系统中存在服务的依赖而导致数据的不一致性,或是外围服务出现异常。

高可用次要伎俩

负载平衡

负载平衡(Load Balance),它将工作工作散发到多个工作单元上进行运行,它能够进步网络设备的带宽,晋升网络数据处理能力,加强网络的稳定性。可避免机房断电、网络设备故障等问题。

负载平衡的实现可分为硬件负载与软件负载。硬件负载由专门的设施实现专门的工作,这种形式性能较高同时老本也高;软件负载通过软件代码实现,此种形式消耗操作系统资源,性能较低,容易呈现 BUG,也容易引起平安问题。

负载策略个别有轮询策略、随机策略、最小连贯策略以及最短响应工夫策略。

轮询策略:讲用户申请轮流调配给服务器,这种算法比较简单。

随机策略:随机抉择一台服务器来执行工作。

最小连贯策略:把申请调配给流动连接数最小的后端服务器。

最短响应工夫策略:将申请调配给均匀响应工夫最短的服务器。

限流

限流就是防止服务过载,随着流量的进步,无论负载策略如何高效,零碎的某个环节总会过载。就如木桶能装多少水取决于最短的那块木板,咱们是无奈保证系统的每个局部都放弃同样的高吞吐量,因而要思考如何优雅地提供有损服务。

罕用的三种限流算法:计数器算法、滑动窗口算法、漏桶算法、令牌桶算法。

计数器算法:应用计数器在肯定周期内累加某个接口的拜访次数,当达到限流阈值时,触发限流策略,进入下一个周期后,从新开始计数。此算法较为简单,但会升高服务器的负载能力。

滑动窗口算法:将工夫周期划分成更小的周期,按小周期来进行计数,依据工夫滑动删除过期的小周期。这种算法使得周期划分得越小服务器的负载能力越高。

漏桶算法:将申请间接放入漏桶中,如果以后访问量超出漏桶的限流值,则把起初的申请予以抛弃,这样能够最大限度地进步服务器的负载能力。

令牌桶算法:以(工夫周期 / 限流值)的速度向令牌桶里减少令牌,直到装满桶的容量,当申请达到时,调配一个令牌让其通过,如果没有获取到令牌则触发限流机制。

 ### 异步调用

异步调用个别有两种形式:一种是异步回调,一种是音讯队列。音讯队列形式也算是限流的一种伎俩,能够让申请一个一个地被解决,防止并发太高而引起的利用无奈及时处理。这种形式绝对与限流来讲,是一种无损的解决方案。但这种计划仅实用于非实时响应的业务。

 ### 超时重试与幂等设计

很多文章把超时重试与幂等设计离开来探讨,但我却认为它们是相辅相成,密切相关的。在设计超时重试时,肯定要思考幂等设计

超时重试机制:因为服务器宕机、网络延时、服务器线程死锁等起因,导致应用程序无奈先限定工夫内对服务调用方进行响应。因而当产生调用超时后,应用程序可依据调度策略进行重试。被调用的服务没有及时响应,可能会存在两种状况,一是服务外部产生异样,导致执行失败,没有返回任何音讯;一是执行的服务耗时太长,没有及时响应,但理论曾经执行胜利。所以针对第二种状况要做幂等设计。

幂等设计:屡次雷同参数的申请对系统造成的作业都是雷同的。常见的幂等计划有:MCVV 多版本并发、惟一索引、token 机制、乐观锁、状态机幂等、只读操作等。

降级与熔断

服务降级与服务熔断都是为了解决服务雪崩的问题,但不要把他们一概而论,它们是有本质区别的。

降级是对系统的某个性能进行降级,能够只提供局部性能也能够齐全进行该性能。降级个别由开关来进行管制,在不重启服务的状况下,对性能进行降级。它经常产生在高并发时段、机器卡顿、上游不太重要的服务异样等状况下。

熔断没有开关,它是一个框架级的设计,经常被称作断路器。它的次要作用是,当上游的服务因为某种原因变得不可用或服务不及时,为了保障整体服务的可用性,不再调用指标服务,间接返回默认解决或容错解决,从而使得整体服务能够疾速响应。例如 SpringCloud 中的 Hystrix。

降级与熔断的次要区别是手动与主动。降级次要是通过配置核心的热刷新性能,人为地对开关进行关上与敞开操作。而熔断则是依据当时设计好的策略,零碎主动地依据策略来进行开关操作。但它们都是对性能进行敞开。

架构模式

主备模式

理论是一主多备,master 负责提供读写服务,slave 作为数据备份,一旦主机宕机,将其中一个备节点作为主节点。

主从复制

理论是一主多从,master 对外提供读写服务,slave 作为数据备份提供只读服务。主机定期复制数据给从机。多正本的关键问题是保证数据一致性,通常须要思考数据同步延时的问题。

集群分片

集群分片是为了解决每台机器上存储全量数据的问题,面对大数据单机的存储量总是有下限的,当面对 PB 级数据时,单机是无奈撑持的,因而就须要对数据进行分片。

异地多活

异地就是指在地理位置上不同的中央,可分为同城异地、跨城异地、跨国异地,多活就是指不同地理位置上的零碎都可能提供服务。这种架构的复杂度较高,且部署老本也会进步。

设计准则:

1、只把外围业务设计为异地多活,比方流量大、盈利高的业务

2、保障外围数据的一致性与实时性,且可失落、可复原

3、可采纳多种数据同步的计划,比方存储系统同步、音讯队列同步

4、异地多活仅实用于大部分用户,以地区来论,笼罩次要城区
 

总结

在互联网架构设计中,高可用是必不可少的环节,要从网络架构、服务架构、数据架构以及软硬件架构等多方面来剖析设计,是架构师必备的技能之一。

作者:京东批发 谷伟

起源:京东云开发者社区

退出移动版