共计 4345 个字符,预计需要花费 11 分钟才能阅读完成。
对于双十一,优惠券、补贴金、满减是“买买买人”的噩梦,高并发、高性能、高可用也是技术人的魔咒。双十一秒杀时几万人抢同一个商品,直播间几十万人同时抢红包,每秒订单高达 58 万笔,在双十一大促流动当天,如何保障流量激发的时候不宕机?本篇文章将揭秘如何基于云平台来构建高可用的互联网利用。
什么是高并发、高性能、高可用
高并发(High Concurrency)
高并发是现在互联网分布式系统架构设计必须要思考的因素之一,可能保证系统同时并行处理很多申请。高并发意味着大流量,须要使用技术手段抵制流量的冲击,这些伎俩好比操作流量,能让流量更安稳地被零碎所解决,带给用户更好的体验。高并发相干罕用的一些指标有响应工夫(Response Time)、吞吐量(Throughput)、每秒查问率 QPS(Query Per Second)、每秒事务处理量 TPS(Transaction Per Second)、并发用户数等。
- 响应工夫(Response Time):系统对进来的申请反馈的工夫,比方你关上一个页面须要 1 秒,那么这 1 秒就是响应工夫。
- 吞吐量(Throughput):吞吐量是指每秒能解决多少申请数量,好比你吃饭,每秒能吃下多少颗米饭。
- 每秒查问率 QPS(Query Per Second:秒查问率是指每秒响应申请数,和吞吐量差不多。
- 每秒事务处理量 TPS(Transaction Per Second):每秒响应事务申请数。
- 并发用户数:同时承载失常应用零碎性能的用户数量。例如一个即时通讯零碎,同时在线量肯定水平上代表了零碎的并发用户数。
高性能(High Performance)
什么是高性能呢?高性能是指程序处理速度十分快,所占内存少、CPU 占用率低。高性能的指标常常和高并发的指标严密相干,想要进步性能,那么就要进步零碎高并发能力,两者相互捆绑在一起。利用性能优化的时候,对于计算密集型和 IO 密集型还是有很大差异,须要离开来思考。还有能够减少服务器的数量、内存、IO 等参数晋升零碎的并发能力和性能,但不要浪费资源,要思考硬件的使用率最高能力施展到极致。怎么样进步性能呢?
- 防止因为 IO 阻塞让 CPU 闲置,导致 CPU 的节约。
- 防止多线程间减少锁来保障同步,导致并行零碎串行化。
- 免创立、销毁、保护太多过程、线程,导致操作系统浪费资源在调度上。
高可用(High Availability)
高可用通常用来形容一个零碎通过专门的设计,从而缩小复工工夫,而放弃其服务的高度可用性。假如零碎始终可能提供服务,咱们说零碎的可用性是 100%。如果零碎每运行 100 个工夫单位,有 1 个工夫单位无奈提供服务,咱们说零碎的可用性是 99%。很多公司的高可用指标是 4 个 9,也就是 99.99%,这就意味着,零碎的年停机工夫为 52.6 分钟。
实现一个高可用的互联网利用和服务是个十分具备挑战的工作。每个架构师对高可用或者都有不同了解。对很多架构师而言,高可用意味着服务不存在单点故障、数据有冗余备份、架构设计上防止应用单点。
基于云平台构建高可用的互联网利用
高可用自下而上可分为三个层面。
首先是资源高可用 。就云平台而言,这通常指的是 IaaS 资源的高可用。IaaS 即 Infrastructure as a Service(基础设施即服务), 个别指的是云平台为用户提供的 IT 基础架构服务,如计算、存储、网络等,相似于大家生存中应用的水和电一样。
其次是利用高可用 。就云平台而言,这通常指的是 PaaS 服务高可用。PaaS 即 Platform as a Service(平台即服务), 个别指的是云平台为用户提供的中间件服务、数据库服务、日志服务、大数据处理服务等一系列利用反对服务。
最初是服务高可用 。就云平台和对用户而言,这通常指的是 SaaS 服务高可用。SaaS 即 Software as a Service(软件即服务),个别咱们指的是由软件提供商和服务商在互联网上间接提供给客户,通常是面向最终用户的多租户服务。
IaaS 服务高可用
咱们将顺次阐明云平台是如何通过计算资源高可用、存储资源高可用、和网络资源高可用做到 IaaS 层高可用的。
首先,计算资源的高可用绝对比较简单,它个别通过在不同可用区(Zone)部署雷同的计算类型资源来实现。下图中举例了一个地区(Region)的不同可用区(Zone)部署了雷同实例类型 ID 的计算资源。这里地区(Region)通常是指不同城市,比方北京或上海,而可用区(Zone)通常指一个城市散布在不同地点地位的机房。
在存储资源高可用上,青云实现了跨区的本地多正本。同时青云自研的 NeonSan 云存储架构在超高性能下实现了云存储的高可用。它基于 RDMA 技术,在实现高可用的同时,最大施展出了 SSD 云存储的性能。
在网络资源高可用方面,青云在 QingCloud 私有云平台构建了跨区高可用的多种网络资源,这包含弹性公网地址(Elastic IP)、公有网络 VPC、根底网络 Vxnet、负载均衡器、NAT 网关等网络资源。
PaaS 高可用
PaaS 高可用个别通过利用集群来实现。集群个别可分为主从集群(包含一主多从,甚至多主多从)和对等集群。
主从利用集群通常是用在数据只能一个实例进行批改的状况。而对等集群通常用在数据可进行并发批改的状况。
其中一种实现一主多从集群的形式是借助利用协调服务(如 Zookeeper) 来帮忙集群进行主从选举。为达到利用集群的高可用,咱们通常会在选举出 Master 节点后将一个写 VIP 绑定到 Master 节点中。而将一个读 VIP 通过负载平衡绑定到多个 Slave 节点上。这个绑定关系须要随着集群拓扑构造的变动而动态变化。
实现一主多从集群的另一种形式是在利用集群外部实现分布式一致性协定(如 Raft 算法)帮忙集群进行主从选举,选举出集群以后的 Master 主节点。
在实现对等型集群上,咱们通常应用负载均衡器来帮助进行流量散发,实现对等型高可用集群。
实现利用集群需注意几个要害因素:集群的降级、集群的扩缩容、集群的备份与复原。它是一个集群生命周期管理所波及的领域。
青云在 PaaS 平台上为用户提供了一个实现了高可用利用集群的服务框架:AppCenter 利用基础架构。
在 AppCenter 框架下,用户不仅能够不便进行高可用利用集群的开发与创立,也能够进行集群的扩缩容等保护。借助青云的主动弹性伸缩服务,还能依据利用的负载来调整集群工作节点数量大小。例外,咱们可通过配置弹性伸缩服务,在 8 点晚顶峰时将集群是节点数主动减少,以进步集群的负载解决能力。在晚 12 点时主动将集群数量缩小以升高资源应用老本。
青云提供的另一个 PaaS 高可用服务平台是 QingCloud Kubernetes Engine (QKE)。QKE 是一个容器服务平台,它集成了 Kubernetes、可视化集群管理工具 KubeSphere,整合了青云云平台的 IaaS 资源,为用户提供了一个集弹性、简略、凋谢、高可用于一身的容器服务运行环境。
SaaS 高可用
在 SaaS 高可用上,咱们首先想到的是实现服务的多区高可用。
- 在引流层,咱们能够在 QingCloud 云平台上通过 GSLB、双 EIP、双负载均衡器达到引流层高可用的成果。
- 在应用层,咱们能够将后面所讲的 PaaS 利用集群部署为多区高可用来达到多区高可用的成果。
- 在数据层,咱们也可将数据库服务部署为多区高可用来达到此成果。
在 SaaS 服务异地高可用上,咱们通常会思考两地三核心、异地灾备、异地双活这样的架构。
首先是两地三核心 。下图显示了一种两地三核心的架构,在这种架构中,除了有一个 Master 主服务,在同城的 2 个机房会部署多个 Slave,同时异地的机房还会部署至多一个 Slave 从服务。这些 Slave 通常可分担一些只读业务。
其次是异地灾备 。与两地三核心不同,异地灾备中同城和异地通常都有残缺和独立数据库集群。数据通过异步复制同步到异地的灾备核心中。异地灾备核心通常是不承受服务申请,而是进行 Hot Standby。
最初是异地双活 。下面说的异地灾备因为异地灾备核心不解决业务,会比拟浪费资源。咱们就会想要把它这部分资源利用起来,让异地可能分担肯定的业务,这就是咱们说的异地双活。服务的异地高双活绝对比较复杂,它通常须要基于地区进行业务分区和数据拆分。例如,咱们首先将业务数据依据地区拆分成了独立 A、B 两个库。A 地的业务由 A 地服务来解决,在 B 地进行 Hot Standby;B 地的业务由 B 地服务来解决,在 A 地进行 Hot Standby。A、B 两地的数据通过异步复制来同步。针对公共数据和不能同时批改数据,咱们还会思考设置全局库和全局服务,全局数据通过同步或异步复制达到数据的最终统一。
SaaS 服务高可用特地是异地高可用须要留神几个要点:
- 缓存 100% 可重建
- 业务分片
- 主从服务切换的工夫
- 数据同步带宽
思考缓存 100% 异地可重建次要是因为绝对于数据库的异步复制,缓存的异步复制通常须要更多的复制带宽和更小的网络延时。
为了保障 SaaS 服务的高可用,咱们还要思考对 SaaS 服务采取保护性措施。
API 网关为咱们提供了一种很好的对 SaaS 服务进行爱护的形式。
API 网关能够让咱们对 API 申请进行限流、熔断、服务降级,以进步咱们在要害服务的高可用性。
总结来说,在云平台构建高可用的互联网服务就是在 IaaS、PaaS 和 SaaS 层防止单点,并做好防护。
Q&A
如何在不同云平台间去做服务的迁徙?
服务迁徙首先保障的是数据的迁徙,在迁徙过程咱们首先要思考和实现的是数据的在线同步。在数据同步的根底上咱们才可能将应用服务在另一端建起来,最初再通过切换引流或流量入口形式来实现服务的迁徙。
如果本地服务不可用,咱们如何将服务切换到异地?
通常的切换咱们是会采纳一系列脚本来实现,这不仅包含实现引流的切换,可能还会包含数据的加载,如缓存的预热等,否则业务流量忽然过去,缓存可能就会被击穿,数据库扛不住。当然咱们也能够通过一些形式,比方业务流量复制,来提前达到数据预热。
如何在高可用、高性能根底上实现数据的一致性?
任何事件都有个“不可能三角”。分布式高可用、高性能、和一致性正是这一不可能三角。三者咱们不可同时兼得,咱们只能尽量去取舍衡量。比方在保障高可用、高性能上状况下、数据一致性或只能保障最终统一。
QingCloud 的 PaaS 服务没有服务器规格型号,如何将 QingCloud 的 PaaS 服务去跟友商比照?
目前 QingCloud PaaS 服务正向 PaaS 服务化倒退,用户能够通过服务打算用量,例如 QPS 这样性能指标需要去抉择和掂量青云的 PaaS 服务,比方 20 万 QPS。
关注“青云技术社区”公众号,后盾回复关键字“云原生实战”,即可退出课程交换群。
作者
梁朝东 青云科技容器及利用根底服务高级经理
本文由博客一文多发平台 OpenWrite 公布!