關閉
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(CloudFront)將負載均衡及S3的內容進行緩存分發,讓訪問者能連接到最就近的節點訪問網站內容。
 


撰寫人
利用高併發架構帶來超過10億的商機 II

技術長
藍國豪 Levi Lan