圖4 技術(shù)選型的考量
如圖4所示,技術(shù)選型的考量,Kubernetes、Mesos都能滿足我們的許多需求,業(yè)界也有許多實(shí)踐。但是我們還需要注意到兩點(diǎn):
具有管理物理(裸機(jī))需求,適用于某些工作負(fù)載 (如已經(jīng)部署于物理機(jī),且因服務(wù)原因不可遷移等);
對(duì)外提供服務(wù),由于容器與宿主機(jī)共享內(nèi)核,而存在安全隱患。
于是,OpenStack成為首要選擇。另外OpenStack由于已經(jīng)得到廣泛應(yīng)用,互聯(lián)網(wǎng)上資料眾多,其部署和維護(hù)也不存在太大技術(shù)難題。
OpenStack包括如下組件和項(xiàng)目,足以滿足我們的需要:
以Nova、Neutron、Glance、Cinder等為主體的組件足以提供IaaS所需的功能;
Trove提供各種數(shù)據(jù)庫(kù)即服務(wù);
Sahara提供分析即服務(wù);
Swift提供分布式對(duì)象存儲(chǔ);
Heat、Murano、Magnum提供應(yīng)用編排。
企業(yè)IT應(yīng)用架構(gòu)之核心應(yīng)用模式
圖5 企業(yè)應(yīng)用的基本模式
絕大多數(shù)企業(yè)應(yīng)用,基本呈現(xiàn)出一些固定的模式來(lái),如圖5所示,包括:
負(fù)載均衡器(可選,包括軟件或硬件的方案);
Web服務(wù)器(可選,通常包括Tomcat、Apache或傳統(tǒng)企業(yè)級(jí)產(chǎn)品);
應(yīng)用服務(wù)器(通常包括Tomcat、Jboss或其他企業(yè)及應(yīng)用服務(wù)器,或者輕量級(jí)的開源容器等);
數(shù)據(jù)緩存(可選,通常包括Redis、MemCache等);
數(shù)據(jù)庫(kù)(可選,通常包括MySQL、DB2、Oracle等, 也可以包括存儲(chǔ)于HBase的數(shù)據(jù)服務(wù)等)。
應(yīng)用的功能可以容易更換、新增,然而應(yīng)用的架構(gòu)通 常保持長(zhǎng)期的穩(wěn)定性,企業(yè)應(yīng)用需要選擇成熟的、而且適合公司/開發(fā)團(tuán)隊(duì)的技術(shù)和工具;再考慮到線上大 量的應(yīng)用和快速迭代,應(yīng)用構(gòu)件的演進(jìn)是一個(gè)長(zhǎng)期的過(guò)程。
圖6 企業(yè)應(yīng)用的縱橫向關(guān)聯(lián)
這里我們的目的,是將這類模式“復(fù)制”到云平臺(tái),然而,在基本模式之外,應(yīng)用模型其實(shí)很復(fù)雜,下面從四個(gè)維度來(lái)分析,如圖6所示。
■ 第一個(gè)維度,從縱向角度,不同層之間需要關(guān)聯(lián),包括:
動(dòng)態(tài)發(fā)現(xiàn)
實(shí)時(shí)注冊(cè)
事務(wù)分發(fā)
■ 第二個(gè)維度,從橫向角度,同一層內(nèi)部實(shí)例之間也包含如下關(guān)聯(lián):
服務(wù)集群之間的管理關(guān)系;
同一宿主機(jī)上服務(wù)的管理關(guān)系;
服務(wù)自身的配置管理關(guān)系等。
■ 第三個(gè)維度,則與云平臺(tái)本身特性密切相關(guān):
服務(wù)的自擴(kuò)展(或縮容);
調(diào)度規(guī)則;
自動(dòng)化部署、配置與升級(jí)。
■ 第四個(gè)維度,企業(yè)IT管理需求:
企業(yè)ITIL流程系統(tǒng);
監(jiān)控、審計(jì)、安全;
研發(fā)團(tuán)隊(duì)、版本、環(huán)境的管理對(duì)應(yīng)關(guān)系等。
企業(yè)IT應(yīng)用架構(gòu)之?dāng)?shù)據(jù)存儲(chǔ)及管理
除了Web層之外,應(yīng)用層和數(shù)據(jù)存儲(chǔ)層都呈現(xiàn)復(fù)雜的特點(diǎn),這里以數(shù)據(jù)存儲(chǔ)層為例。
眾所周知,數(shù)據(jù)庫(kù)在企業(yè)應(yīng)用中一般以單實(shí)例或集群為主。以MySQL集群為例,主要為一主多從形態(tài)。少數(shù)企業(yè)已經(jīng)在嘗試多活的方案,例如,OpenStack三節(jié)點(diǎn)的控制集群本身,最主要的數(shù)據(jù)庫(kù)模式就是基于MySQL、Galera和HAProxy的多活方案。
考慮一個(gè)復(fù)雜的MySQL互聯(lián)網(wǎng)應(yīng)用,由于預(yù)計(jì)會(huì)有千萬(wàn)級(jí)到億級(jí)數(shù)量的用戶,在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)候,使 用了分庫(kù)分表,那么不同用戶進(jìn)來(lái),根據(jù)手機(jī)號(hào)或其他ID,用戶信息根據(jù)Hash算法會(huì)訪問到后端不同數(shù)據(jù)庫(kù)。
圖7 基于MySQL的數(shù)據(jù)持久化層
如圖7所示,這里用到另外兩個(gè)開源組件:
MyCAT:封裝了Partition,對(duì)應(yīng)用透明,根據(jù)用戶ID 信息,將數(shù)據(jù)訪問請(qǐng)求Route到不同后端數(shù)據(jù)庫(kù)去,也 提供一定的對(duì)查詢結(jié)果的聚合功能;
ZK,也就是Zookeeper,提供分布式協(xié)調(diào)服務(wù),需要訪問到MySQL和MyCAT。
在這里,本身又包括幾個(gè)集群,一起協(xié)同工作:
MySQL主從集群;
多個(gè)MySQL主從集群組成的集群,提供數(shù)據(jù)存儲(chǔ) 后端;