云應(yīng)用、服務(wù)的“5層”架構(gòu)
一套完整的云應(yīng)用、服務(wù)架構(gòu)通??梢苑譃?層。
·負載均衡層(Load Balancing)
·應(yīng)用服務(wù)層(Application Server)
·緩存服務(wù)層(Caching Server)
·數(shù)據(jù)庫服務(wù)層(Database Server)
·云存儲層(Cloud Storage)
云應(yīng)用的五層架構(gòu)
(1)負載均衡
負載均衡層(Load-Balancing Layer,LB Layer)的實現(xiàn)是5層架構(gòu)中最早面對用戶的,也是相對最容易實現(xiàn)的。通常為了避免SPOF,至少設(shè)置兩臺LB服務(wù)器(通常在兩臺物理主機之上,以避免單機硬件故障導(dǎo)致SPOF)。整個擴展設(shè)置過程通常可以完全自動化,例如通過DNS API來配置新增或刪除LB節(jié)點。最常見的LB解決方案有HAProxy或Nginx,它們通常可以支持跨云平臺的負載均衡(即服務(wù)器及其他層跨云,當(dāng)然這種架構(gòu)的設(shè)計與實現(xiàn)復(fù)雜度會急劇增高。前面我們提到過的Cloud Bursting就是典型的跨云基礎(chǔ)架構(gòu)模式)。智能的LB層實現(xiàn)能做到根據(jù)應(yīng)用服務(wù)器層的健康狀態(tài)、負載狀態(tài)來動態(tài)引流,以確保系統(tǒng)真正實現(xiàn)均衡的負載。
云服務(wù)提供商通常會提供現(xiàn)成的LB服務(wù),例如AWS的ELB(Elastic Load-Balancer)、RackSpace的CLB(Cloud Load-Balancer),還有VMware vCloud Air Gateway Services都提供強大的LB服務(wù)。
(2)應(yīng)用服務(wù)
負載均衡層之下就是應(yīng)用服務(wù)器層,它負責(zé)處理LB轉(zhuǎn)發(fā)的用戶請求并返回相應(yīng)的數(shù)據(jù)集。通常數(shù)據(jù)集分為靜態(tài)數(shù)據(jù)與動態(tài)數(shù)據(jù)。前者大抵可以在緩存層保留以降低應(yīng)用服務(wù)器及數(shù)據(jù)庫服務(wù)器的負載(見上圖)并加速客戶端獲得返回數(shù)據(jù),后者通常需要底層的數(shù)據(jù)庫層配合來動態(tài)生成所需數(shù)據(jù)集。本層的擴展實現(xiàn)通常通過對現(xiàn)有服務(wù)器的負載進行監(jiān)控(主要是CPU,其次為內(nèi)存、網(wǎng)絡(luò)、存儲空間),并根據(jù)需要進行橫向或縱向擴展。橫向擴展(Scale-out)通常是上線同構(gòu)的服務(wù)器(物理機或虛擬機),以降低現(xiàn)有服務(wù)器或服務(wù)器集群負載;縱向擴展(Scale-up)則是對CPU、內(nèi)存、網(wǎng)絡(luò)、存儲空間進行升級。橫向擴展通常不需要系統(tǒng)下線,但是縱向擴展則要求被升級的主機(可能是虛擬機或容器)重啟。
應(yīng)用服務(wù)層因為涉及應(yīng)用服務(wù)邏輯,當(dāng)多臺服務(wù)器協(xié)同工作時,還需要確保它們之上運行的服務(wù)的一致性。這個DevOps問題通常是作為PaaS層一部分任務(wù)或是數(shù)據(jù)中心中的M&O組件來實現(xiàn)一致化的應(yīng)用升級、部署等。
(3)緩存
緩存層既可能存在于應(yīng)用服務(wù)器層與數(shù)據(jù)庫服務(wù)器層之間,也可能在應(yīng)用服務(wù)器層之上。前者可以被用來降低數(shù)據(jù)庫服務(wù)器的重復(fù)計算與網(wǎng)絡(luò)負載。后者則被用來降低應(yīng)用服務(wù)器負載與網(wǎng)絡(luò)帶寬消耗。緩存技術(shù)應(yīng)用的范圍極廣,從Web服務(wù)器、中間件、數(shù)據(jù)庫都大量使用緩存以降低不必要的重復(fù)計算,進而提高系統(tǒng)綜合性能。
緩存層的擴展性實現(xiàn)在避免出現(xiàn)SPOF基礎(chǔ)之上(單個節(jié)點的緩存服務(wù)器或與應(yīng)用服務(wù)器共享節(jié)點的方式在生產(chǎn)環(huán)境中都是不可取的),主要是如何實現(xiàn)多緩存節(jié)點間的負載均衡。最常見的分布式簡單緩存實現(xiàn)是memcached(全球最繁忙的20個網(wǎng)站中,有18個使用了memcached3),在多臺memcached服務(wù)器間形成了一張哈希表,當(dāng)有新的緩存節(jié)點加入或老的節(jié)點被刪除(或下線)時,現(xiàn)有節(jié)點并不需要全大規(guī)模改動來生成新的哈希表(這一算法也稱作Consistent Hashing Algorithm,一致性哈希算法)。對于哈希表中數(shù)據(jù)的替換與更新,Memcached采用的是TTL(Time-To-Live)與LRU(Least-Recently-Used)模式。對于更復(fù)雜的高擴展性緩存系統(tǒng)設(shè)計,屬于NoSQL類的CouchBase數(shù)據(jù)庫提供了更為健全的企業(yè)級緩存功能實現(xiàn),例如Data Persistence(數(shù)據(jù)常存)、Auto-Reblanacing(自動負載均衡)、多租戶支持等。