关闭
1. 高并发架构
在前面一篇提到了在一个高并发的系统中会影响规划的要素有很多,此篇先不讨论程式码的撰写方式,使用的语言、语法等繁琐的因素,单纯以一个Infrastructure角度来做分析。
 

三层式架构(3-tier application)
如果有接触系统架构开发设计,一定也有听过经典的三层式架构。在1996年,SUN Microsystems 当时推出了广受业界好评而且影响深远的Java,其中一个重要的原因是当时Java提供了多层分散式的模组,不再将系统部署在每个终端电脑上,这对于当时企业的数据统一性及资料安全性有正面的影响和应用需求。
三层式架构将整体应用拆分为表现层(UI)、业务逻辑层(BLL)和资料访问层(DAL),使用者透过表现层与业务逻辑层沟通,而资料层则独立出来。此举大大提高了企业资料的安全性与一致性,同时因为分层式的设计,也提高了各层之间的效能,更利于专案的开发、更新与维护。

利用高并发架构带来超过10亿的商机 II
传统使用一个台PC操作所有的系统



利用高并发架构带来超过10亿的商机 II

三层架构将服务分层,使用者可透过客户端同时进行系统操作并保持安全性

系统扩展
系统为了种种考量、维护一致性和安全性,应用架构也同时跟随着改变,那如果系统面临资源瓶颈时又该如何应对呢?
这里将搭配运用两种系统扩展的方式,去达成高可用性的系统架构。

垂直扩展
当系统使用的资源面临瓶颈时,可以针对一台主机的需要,去升级硬体的规格来解决负载问题,包含CPU、Memory、GPU、hard disk、network card..等。

利用高并发架构带来超过10亿的商机 II



水平扩展
在垂直扩展中,最终将会碰到一些是垂直扩展无法解决的问题,就是每一次的扩展更新时必须先进行停机作业,而系统硬体不断的升级也同时面临OS的CPU、hard disk和network card throughput等硬体限制。这样花费大量成本在垂直扩展上的性价比可能会比透过多台主机扩展的水平扩展还要低。

水平扩展与垂直扩展主要的差异是,水平扩展不会透过提升单一台主机的硬体规格来应付服务负载问题。水平扩展会透过增加主机个数,并搭配负载均衡分流的方式去解决服务整体的负载问题。

利用高并发架构带来超过10亿的商机 II


负载均衡(Server Load Balance)
负载均衡设备,会透过各种演算法准确地将请求分配,在整个水平扩展中扮演着极为重要的角色。
简单介绍几种常见SLB的演算法:

  • 轮循均衡(Round Robin) 每一次的请求将轮流分配给伺服器,从第一台至第N台重复分配,也是目前最常使用的均衡方式。
  • 权重轮循均衡(Weighted Round Robin) 依据伺服器不同的效能来设定负载比重。增加对高效能伺服器的负载,降低对低效能伺服器的负载。
  • 随机均衡(Random) 随机分配请求至伺服器,不依序分配。
  • 回应速度均衡(Weighted Random) 负载均衡设备会对伺服器持续发出ICMP请求,并根据回传数据分配最快回应的伺服器,将请求分配到该伺服器。
  • 最少连接数均衡(Response Time) 对每一台伺服器建立连线数量纪录,并在每一次有新请求时分配连接数量最少的伺服器。
 
2. 云端如何解决系统瓶颈

2010年云端应用开始陆续每年的翻倍成长,渐渐取代企业自行建立机房、租用数据中心的传统模式。云端不仅对于成本控制以及新兴企业都非常友善,也能够在不需付出大量前期开支的情况下,弹性的租用服务,包含了各式各样的工具,让企业在开发及架构布署时更为便利。

AWS(Amazon Web Services)
关于亚马逊的如何发迹本篇不详加介绍,亚马逊带头开创了崭新的资讯服务选择,包含便利性、多样化资源、随用随付(pay as you go)的商业模式、并且不限制使用者,这些新颖的优势让更多的新兴产业能够在这巨人的肩膀上开创无限的可能性。
 

云上解决方案:以目前云端领导服务商AWS为例
利用高并发架构带来超过10亿的商机 II
▲ 根据Gartner于2020全球市占率(数据来源:Gartner(June 2021))


云端就像拼图一样,需要在脑中构想,再透过云端工具箱将蓝图中所需要的资源模块开启并整合使用。以下将介绍在云端上,如何运用云端组件解决高并发所衍生的问题。

Elastic Compute Cloud(EC2)
由亚马逊提供的虚拟伺服器,拥有各式规格可供选用,可以轻松快速提供一个完整的主机资源。

Elastic Load Balancing(ELB)
做为高并发架构最重要的一环,负载均衡器提供负载的分流处理,一方面处理了并发负载问题,一方面也让整体服务拥有障碍容错机制,大幅增加了可用性。

  • Application Load Balaner(ALB) 针对OSI第七层-应用层来优化调整负载均衡,适合处理HTTP/HTTPS
  • Network Load Balancer(NLB) 针对OSI第四层-传输层来优化调整负载均衡,适合处理TCP、UDP请求

Autoscaling
提供自动扩展与缩小使用资源功能,可以依据不同的指标百分比率来进行虚拟主机资源的调整,并可以限制主机资源的数量。

Autoscaling可依据以下百分比进行弹性伸缩:

  • 平均CDP使用率
  • 平均流入网路
  • 平均流出网路
  • 平均ALB目标请求数
Relational Database Service(RDS)
云端上的RDS服务就像在自己的伺服器上安装好的资料库软体,差别在于云服务商将RDS系统层面的控制,管理和安全性等都托管了,使用者只需专心负责资料库的应用设计。 RDS也提供了不同的可用性选择方案。
 
  • 多可用区部署(Multi-AZ) - 可在不同可用区建立同步备用资料库,并在主要资料库异常或维护时自动转移
  • 储存空间自动扩增 - 可以设定储存空间阀值,当储存容量超过时将自动延伸储存空间
  • 无伺服器的资料库应用 - 对于不可预估的资料库负载而开发的新一代应用设计,可以在未使用资料库时将其关闭来节省费用(Aurora)
  • 弹性并发的资料库 - 可以透过使用场景选择使用单一写入多读取副本或是多写入副本模式(Aurora)

CloudFront
CDN在全球网路服务已逐渐成为必要考量,云端在全球分布的优势就是能快速布署,并利用快取缓存的机制,让访问者能连接到最就近的节点使用服务,提供良好的服务体验。

ElastiCache for Redis
云上的快取式资料库,当资料库进行大量读写时,即使再多的分流副本还是会受到资料库本身的储存媒介(如:硬碟IO读写)的限制,因此设计出Redis,利用其使用记忆体作为储存媒介、水平扩展及Key-Value的特性,使资料读写速度大幅提升好几倍。

Simple Storage Service(S3)
S3提供一个网页服务介面可以很轻松的进行资料存取的储存服务,拥有高可用性、耐用性、弹性极佳的扩展性,也可以使用其强大的能力寄存静态网页。

有上述AWS产品的基础认识后,以下将会整合这些拼图再导出最终在云上的高并发架构:

利用高并发架构带来超过10亿的商机 II

 

1. 区分A、B两个可用区避免单一可用区发生障碍。
2. 透过负载均衡(ELB)搭配弹性伸缩(Auto Scaling),依据WEB负载自动伸缩伺服器。
3. 资料库(RDS)透过主/备模式,并透过同步备援资料库建立备份在S3储存。
4. 使用快取资料库(Redis)对RDS进行缓存,并在B可用区建立同步备援。
     a. 当EC2应用对Redis进行读取动作时,如命中缓存(hit)则快速由Redis回传资料给EC2。
     b. 当EC2应用对Redis进行读取动做时,如未缓存(miss)则查询RDS并将结果写入Redis即便下次快速读取。
5. 将静态档案放置在S3使网站负载分散,例如网站上的图片、影片等内容。
6. 透过CDN(Cloud Front)将负载均衡及S3的内容进行缓存分发,让访问者能连接到最就近的节点访问网站内容。
 



 

撰写人
利用高并发架构带来超过10亿的商机 II

技术长
蓝国豪 Levi Lan