咱们来自字节跳动飞书商业使用研发部(Lark Business Applications),现在咱们在北京、深圳、上海、武汉、杭州、成都、广州、三亚都设立了办公区域。咱们重视的产品范畴首要在企业经历管理软件上,包含飞书 OKR、飞书绩效、飞书招聘、飞书人事等 HCM 范畴体系,也包含飞书审批、OA、法务、财务、采购、差旅与报销等体系。欢迎各位加入咱们。

本文作者:LBA 许家强

概述

高可用(High Availability),简称HA,是衡量IT体系服务质量的一个极其重要的参阅,高可用一直是IT体系规划中需求要点重视的点。本文总结高可用架构中的一些要害规划思维。

衡量目标SLA
SLA是衡量网站服务可用性的一个要害目标,现在互联网公司一般以X个9来表明在体系1年时刻的运用过程中,体系可正常运用时刻与总时刻(1年)之比,9越多代表全年服务可用时刻越长、服务更可靠、停机时刻越短,反之亦然。

一般而言,假如体系到达4个9就非常优异了,需求在规划上做足功夫。

冗余

冗余是构建高可用的重要手法。其中心思维是对分布式体系中的节点进行备份。备份会分为冷备和热备。

  • 冷备,一般会有主数据中心和备数据中心,正常状况下是主数据中心供给事务服务,备份中心不会有供给事务服务,而是会定时从主数据中心进行备份(非实时备份),也便是说假如主数据中心出现毛病,事务也就中断了,需求人工进行干涉,将流量从主数据中心切换到备数据中心。

  • 热备,首要是对主数据中心进行实时性的备份,以确保在主数据中心出现毛病后能够及时的切换,让用户不受影响的继续运用。 关于主数据中心到备数据中心的复制方法,分为同步和异步两种分式。

    • 同步方法,当主节点处理完恳求后,会同步向多个备节点实时备份数据,只有一切节点数据同步完结,主节点才会向客户端回来成功。这种方法对可用性有较大损耗,一般不引荐运用,
    • 异步方法,当主节点处理恳求后,会向客户端回来成功,同时会异步触发向多个备节点实时备份数据。该状况下,主备节点的数据会存在数据不一致或许延时,事务上需求能容忍一定程度的数据推迟。互联网体系一般会选用这种方法。

从备节点的作业方法区分,又能够分为双机互备和双机热备。

  • 双机热备,从狭义上讲是运用互为备份的两台服务器共同执行同一服务,在正常状况下,作业机为使用体系供给服务,备份机监督作业机的运转状况,出毛病时备机可敏捷接管服务。
  • 双机互备,是指主机和备机互为备份,备机上运转与主机不同的使用,例如两台server安装相同的体系、使用软件,主机备机同时作业,主机跑ORACLE,备机跑IIS,任意一台服务器毛病时,一切服务会主动切换到正常的服务器上。

集群

集群是相对单机而言的,集群布置是分布式体系的典型特征。集群的效果其实便是分流,这里面不得不提中心的分流技能。

负载均衡

分为硬件负载和软件负载。

  • 硬件负载:经过硬件来进行分流,常见的硬件有比较贵重的F5和Array等商用的负载均衡器,它的长处便是有专业的保护团队来对这些服务进行保护、缺陷便是花销太大,一般在互联网体系较少运用,首要用于金融职业的中心服务;
  • 软件负载:经过软件完成分流,如Nginx/LVS/HAProxy的根据Linux的开源免费的负载均衡软件,这些都是经过软件级别来完成,费用非常低价。

按所在OSI模型的作业层级,可分为7层负载和4层负载。

  • 7层负载,是指作业在网络7层,根据URL等使用层信息的负载均衡,首要代表有Nginx。
  • 4层负载,便是根据IP+端口的负载均衡,首要代表有LVS。

DNS

Domain Name System,“域名体系”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名体系,它所供给的服务是用来将主机名和域名转换为IP地址的作业。一般大型网站的域名,背后会绑定多个vipServer的地址,DNS能够经过智能域名解析体系,回来离用户最近的vipServer 的ip。

容错

容错才能也是影响IT体系可用性的一个要害要素。

  1. 狭义的容错,一般会在规划上体现在以下方面:
  • 对用户的输入进行尽早的校验,不信任外部的输入。
  • 程序中尽可能的考虑鸿沟及反常的状况。
  1. 广义的容错应该是两个具有清晰鸿沟的事物(如服务间,体系间)交互时分针对可能发生的一切主客观反常状况的防御性手法。常见的容错机制有failsafe、failback、failover、failfast。

failfast

快速失败,尽可能的发现体系中的过错,使体系能够依照事前设定好的过错的流程执行,防止资源耗尽或积压导致体系滚雪球式崩溃。咱们通常讲的熔断便是这个思维。

failover

失效搬运,它和前面提到的冗余备份相关很紧密。当首要组件反常时,其功用敏捷搬运到备份组件。MYSQL的双主模式、Zookeeper的主动推举、Redis的岗兵模式,都是根据这种思维,目的是尽量削减部分节点毛病对用户服务的影响

failback

主动康复,是相对failover而言的,簇网络体系(有两台或多台服务器互联的网络)中,因为要某台服务器毛病进行修理,需求网络资源和服务暂时重定向到备用体系。在此之后将网络资源和服务器康复为由原始主机供给的过程,称为主动康复。一般依赖心跳勘探技能来完成主动康复,例如dubbo服务中的使用实例出现down机后,在服务康复后会主动注册到config server,从头对外供给服务。

failsafe

失效安全,即在毛病的状况下也不会造成伤害或许尽量削减伤害。并非一切的毛病对用户都是致命的,当这类非要害的毛病出现时能够忽略,因为这种毛病不会造成丢掉或丢掉在可接受范围内。

多活

双活/多活架构,要害点是指不同地理位置上的体系都能够供给服务。“活”是指实时供给服务,与“活”对应的是字是“备”——备是备份,正常状况下对外是不供给服务或只供给部分服务(例如DB读写分离),假如需求供给服务,则需求很多的人工干涉和操作,花费很多的时刻才能让“备”变成“活。

完成多活有较高的本钱,要考虑数据一致性、网络延时问题。

常见的多活计划有同城双活、两地三中心、三地五中心、异地多活等多种技能计划,不同多活计划技能要求、建设本钱、运维本钱都不相同。

同城双活

是在同城或相近区域内树立两个机房。同城双机房间隔比较近,通信线路质量较好,比较简单完成数据的同步复制 ,确保高度的数据完整性和数据零丢掉。同城两个机房各承当一部分流量,一般进口流量彻底随机,内部RPC调用尽量经过就近路由闭环在同机房,相当于两个机房镜像布置了两个独立集群,数据仍然是单点写到主机房数据库,然后实时同步到别的一个机房。

该架构长处是计划简单、本钱较低、网络延时小,缺陷是因为双机房都在同城,所在城市出现网络毛病或自然灾害时,服务可用性无法保障。

两地三中心

指 同城双中心 + 异地灾备中心。异地灾备中心是指在异地的城市树立一个备份的灾备中心,用于双中心的数据备份,数据和服务平常都是冷的,当双中心所在城市或许地区出现反常而都无法对外供给服务的时分,异地灾备中心能够用备份数据进职事务的康复。

该架构的长处是相比同城双活,增加了异地灾备才能;缺陷是异地的备份数据中心是冷的,出毛病时异地机房是否能顺利接管流量是个大问题。

异地多活

异地的一个中心问题是物理间隔带来的延时,因而要防止一次恳求在异地的多个机房之间流通,因而异地多活的中心是单元化,要确保单次恳求在一个固定机房内关闭。

单元化,在技能上的中心应战在于流量路由和数据同步。这里还需注意,有些使用和数据是无法单元化的,因而还会衍生出中心机房和单元机房的概念,对于无法单元化的数据必须在中心机房。 阿里的淘宝是国内最早完整成功实施单元化的体系,其在全球化布置上也有较多成功的实践,在此就不展开了。

去中心化

在一个分布有很多节点的体系中,每个节点都具有高度自治的特征。节点之间彼此能够自在衔接,构成新的衔接单元。任何一个节点都可能成为阶段性的中心,但不具备强制性的中心控制功用。节点与节点之间的影响,会经过网络而构成非线性因果关系。去中心化架构的特征:

  • 去中心化,不是不要中心,而是由节点来自在选择中心、自在决定中心。
  • 任何中心都不是永久的,而是阶段性的
  • 任何中心对节点都不具有强制性

常见的中心化规划:

  • ESB
  • 单体体系
  • 网关

常见的去中心化规划:

  • DUBBO、MESH等
  • 用SDK替代服务

加入咱们

扫码发现职位&投递简历

高可用架构的设计方法

官网投递:job.toutiao.com/s/FyL7DRg

欢迎大家重视飞书技能,每周定时更新飞书技能团队技能干货内容,想看什么内容,欢迎大家谈论区留言~