一、MPP 架構(gòu)
1、MPP架構(gòu)的基礎(chǔ)概念
MPP (Massively Parallel Processing),即大規(guī)模并行處理,在數(shù)據(jù)庫非共享集群中,每個節(jié)點都有獨立的磁盤存儲系統(tǒng)和內(nèi)存系統(tǒng),業(yè)務(wù)數(shù)據(jù)根據(jù)數(shù)據(jù)庫模型和應用特點劃分到各個節(jié)點上,每臺數(shù)據(jù)節(jié)點通過專用網(wǎng)絡(luò)或者商業(yè)通用網(wǎng)絡(luò)互相連接,彼此協(xié)同計算,作為整體提供數(shù)據(jù)庫服務(wù)。非共享數(shù)據(jù)庫集群有完全的可伸縮性、高可用、高性能、優(yōu)秀的性價比、資源共享等優(yōu)勢。
簡單來說,MPP是將任務(wù)并行的分散到多個服務(wù)器和節(jié)點上,在每個節(jié)點上計算完成后,將各自部分的結(jié)果匯總在一起得到最終的結(jié)果(與Hadoop相似)。

MPP 屬于Shared Nothing,根據(jù)Shared 的不同,可以分為如下幾種:
Shared Everthting:一般是針對單個主機,完全透明共享CPU/MEMORY/IO,并行處理能力是最差的,典型的代表SQLServer
Shared Disk:各個處理單元使用自己的私有 CPU和Memory,共享磁盤系統(tǒng)。典型的代表Oracle Rac, 它是數(shù)據(jù)共享,可通過增加節(jié)點來提高并行處理的能力,擴展能力較好。其類似于SMP(對稱多處理)模式,但是當存儲器接口達到飽和的時候,增加節(jié)點并不能獲得更高的性能 。
Shared Nothing:各個處理單元都有自己私有的CPU/內(nèi)存/硬盤等,不存在共享資源,類似于MPP(大規(guī)模并行處理)模式,各處理單元之間通過協(xié)議通信,并行處理和擴展能力更好。典型代表DB2 DPF和hadoop ,各節(jié)點相互獨立,各自處理自己的數(shù)據(jù),處理后的結(jié)果可能向上層匯總或在節(jié)點間流轉(zhuǎn)。
我們常說的 Sharding 其實就是Share Nothing架構(gòu),它是把某個表從物理存儲上被水平分割,并分配給多臺服務(wù)器(或多個實例),每臺服務(wù)器可以獨立工作,具備共同的schema,比如MySQL Proxy和google的各種架構(gòu),只需增加服務(wù)器數(shù)就可以增加處理能力和容量。
很多 Nosql數(shù)據(jù)庫都是基于 MPP Shared Nothing架構(gòu)的,比如
Greenplum是一種基于PostgreSQL的分布式數(shù)據(jù)庫。其采用shared nothing架構(gòu)(MPP),主機,操作系統(tǒng),內(nèi)存,存儲都是自我控制的,不存在共享。也就是每個節(jié)點都是一個單獨的數(shù)據(jù)庫。節(jié)點之間的信息交互是通過節(jié)點互聯(lián)網(wǎng)絡(luò)實現(xiàn)。通過將數(shù)據(jù)分布到多個節(jié)點上來實現(xiàn)規(guī)模數(shù)據(jù)的存儲,通過并行查詢處理來提高查詢性能。
這個就像是把小數(shù)據(jù)庫組織起來,聯(lián)合成一個大型數(shù)據(jù)庫。將數(shù)據(jù)分片,存儲在每個節(jié)點上。每個節(jié)點僅查詢自己的數(shù)據(jù)。所得到的結(jié)果再經(jīng)過主節(jié)點處理得到最終結(jié)果。通過增加節(jié)點數(shù)目達到系統(tǒng)線性擴展。
elasticsearch也是一種MPP架構(gòu)的數(shù)據(jù)庫,Presto、Impala等都是MPP engine,各節(jié)點不共享資源,每個executor可以獨自完成數(shù)據(jù)的讀取和計算,缺點在于怕stragglers,遇到后整個engine的性能下降到該straggler的能力,所謂木桶的短板,這也是為什么MPP架構(gòu)不適合異構(gòu)的機器,要求各節(jié)點配置一樣。
Spark SQL應該還是算做Batching Processing, 中間計算結(jié)果需要落地到磁盤,所以查詢效率沒有MPP架構(gòu)的引擎(如Impala)高。
2、MPP架構(gòu)特征
● 任務(wù)并行執(zhí)行;
● 數(shù)據(jù)分布式存儲(本地化);
● 分布式計算;
● 私有資源;
● 橫向擴展;
● Shared Nothing架構(gòu)。
3、基于MPP架構(gòu)的數(shù)據(jù)庫架構(gòu)
這種架構(gòu)中的每一個節(jié)點(node)都是獨立的、自給的、節(jié)點之間對等,而且整個系統(tǒng)中不存在單點瓶頸,具有非常強的擴展性。

二、SMP(Symmetric Multi-Processor)架構(gòu)
SMP又稱對稱多處理器結(jié)構(gòu),SMP系統(tǒng)內(nèi)有許多緊耦合多處理器,在這樣的系統(tǒng)中,所有的CPU共享全部資源,如總線,內(nèi)存和I/O系統(tǒng)等;
所謂對稱多處理器結(jié)構(gòu),是指服務(wù)器中多個 CPU 對稱工作,無主次或從屬關(guān)系。各 CPU 共享相同的物理內(nèi)存,每個 CPU 訪問內(nèi)存中的任何地址所需時間是相同的,因此 SMP 也被稱為一致存儲器訪問結(jié)構(gòu) (UMA : Uniform Memory Access) 。對 SMP 服務(wù)器進行擴展的方式包括增加內(nèi)存、使用更快的 CPU 、增加 CPU 、擴充 I/O( 槽口數(shù)與總線數(shù) ) 以及添加更多的外部設(shè)備 ( 通常是磁盤存儲 ) 。
主要特征是共享,系統(tǒng)中所有資源 (CPU 、內(nèi)存、 I/O 等 ) 都是共享的。也正是由于這種特征,導致了SMP 服務(wù)器的主要問題,那就是它的擴展能力非常有限。對于 SMP 服務(wù)器而言,每一個共享的環(huán)節(jié)都可能造成 SMP 服務(wù)器擴展時的瓶頸,而最受限制的則是內(nèi)存。由于每個 CPU 必須通過相同的內(nèi)存總線訪問相同的內(nèi)存資源,因此隨著 CPU 數(shù)量的增加,內(nèi)存訪問沖突將迅速增加,最終會造成 CPU 資源的浪費,使 CPU 性能的有效性大大降低。實驗證明, SMP 服務(wù)器 CPU 利用率最好的情況是 2 至 4 個 CPU 。
三、SOA 架構(gòu)
SOA 即面向服務(wù)的架構(gòu),將應用程序的不同功能單元(稱為服務(wù))進行拆分,并通過這些服務(wù)之間定義良好的接口和協(xié)議聯(lián)系起來,接口是采用中立的方式進行定義的,它應該獨立于實現(xiàn)服務(wù)的硬件平臺、操作系統(tǒng)和編程語言。這使得構(gòu)件在各種各樣的系統(tǒng)中的服務(wù)可以以一種統(tǒng)一和通用的方式進行交互。
面向服務(wù)架構(gòu),它可以根據(jù)需求通過網(wǎng)絡(luò)對松散耦合的粗粒度應用組件進行分布式部署、組合和使用。服務(wù)層是SOA的基礎(chǔ),可以直接被應用調(diào)用,從而有效控制系統(tǒng)中與軟件代理交互的人為依賴性,SOA是一種粗粒度、松耦合服務(wù)架構(gòu),服務(wù)之間通過簡單、精確定義接口進行通訊,不涉及底層編程接口和通訊模型。
松耦合系統(tǒng)腳骨的好處有兩點:
1、它的靈活性,它非常的靈活。
2、當組成整個應用程序的每個服務(wù)的內(nèi)部結(jié)構(gòu)和實現(xiàn)逐漸地發(fā)生改變時,它能夠繼續(xù)存在。與之相反,緊耦合意味著應用程序的不同組件之間的接口與其功能和結(jié)構(gòu)是緊密相連的,因而當需要對部分或整個應用程序進行某種形式的更改時,它們就顯得非常脆弱。

一個服務(wù)通常以獨立的形式存在與操作系統(tǒng)進程中。各個服務(wù)之間通過網(wǎng)絡(luò)調(diào)用跟SOA 相提并論的還有一個ESB(企業(yè)服務(wù)總線),單來說ESB 就是一根管道,用來連接各個服務(wù)節(jié)點。為了集成不同系統(tǒng),不同協(xié)議的服務(wù),ESB 做了消息的轉(zhuǎn)化解釋和路由工作,讓不同的服務(wù)互聯(lián)互通。
SOA 所解決的核心問題:
1. 系統(tǒng)集成:站在系統(tǒng)的角度,解決企業(yè)系統(tǒng)間的通信問題,把原先散亂、無規(guī)劃的系統(tǒng)間的網(wǎng)狀結(jié)構(gòu),梳理成規(guī)整、可治理的系統(tǒng)間星形結(jié)構(gòu),這一步往往需要引入一些產(chǎn)品,比如ESB、以及技術(shù)規(guī)范、服務(wù)管理規(guī)范;
這一步解決的核心問題是【有序】
2. 系統(tǒng)的服務(wù)化:站在功能的角度,把業(yè)務(wù)邏輯抽象成可復用、可組裝的服務(wù),通過服務(wù)的編排實現(xiàn)業(yè)務(wù)的快速再生,目的:把原先固有的業(yè)務(wù)功能轉(zhuǎn)變?yōu)橥ㄓ玫臉I(yè)務(wù)服務(wù),實現(xiàn)業(yè)務(wù)邏輯的快速復用;這一步解決的核心問題是【復用】
3. 業(yè)務(wù)的服務(wù)化:站在企業(yè)的角度,把企業(yè)職能抽象成可復用、可組裝的服務(wù);把原先職能化的企業(yè)架構(gòu)轉(zhuǎn)變?yōu)榉?wù)化的企業(yè)架構(gòu),進一步提升企業(yè)的對外服務(wù)能力;“前面兩步都是從技術(shù)層面來解決系統(tǒng)調(diào)用、系統(tǒng)功能復用的問題”。第三步,則是以業(yè)務(wù)驅(qū)動把一個業(yè)務(wù)單元封裝成一項服務(wù)。
本文作者:張永清 來源出處:
https://www.cnblogs.com/laoqing/p/13042432.html
四、微服務(wù)架構(gòu)
微服務(wù)架構(gòu)其實和SOA 架構(gòu)類似,微服務(wù)是在SOA 上做的升華,微服務(wù)架構(gòu)強調(diào)的一個重點是“業(yè)務(wù)需要徹底的組件化和服務(wù)化”,原有的單個業(yè)務(wù)系統(tǒng)會拆分為多個可以獨立開發(fā)、設(shè)計、運行的小應用。這些小應用之間通過服務(wù)完成交互和集成。
組件表示一個可以獨立更換和升級的單元,就像PC 中的CPU、內(nèi)存、顯卡、硬盤一樣,獨立且可以更換升級而不影響其他單元。如果我們把PC 作為組件以服務(wù)的方式構(gòu)建,那么這臺PC 只需要維護主板和一些必要的外部設(shè)備。CPU、內(nèi)存、硬盤都是以組件方式提供服務(wù),PC 需要調(diào)用CPU 做計算處理,只需要知道CPU 這個組件的地址即可。


SOA與微服務(wù)區(qū)別:
1、SOA注重重用,微服務(wù)注重重寫
SOA 的主要目的是為了企業(yè)各個系統(tǒng)更加容易地融合在一起。
微服務(wù)通常由重寫一個模塊開始。要把整個巨石型的應用重寫是有很大的風險的,也不一定必要。我們向微服務(wù)遷移的時候通常從耦合度最低的模塊或?qū)U展性要求最高的模塊開始。
把它們一個一個剝離出來用敏捷地重寫,可以嘗試最新的技術(shù)和語言和框架,然后 單獨布署。它通常不依賴其他服務(wù)。微服務(wù)中常用的 API Gateway 的模式主要目的也不是重用代碼。
而是減少客戶端和服務(wù)間的往來。API gateway 模式不等同與 Facade 模式,我們可以使用如 Future 之類的調(diào)用,甚至返回不完整數(shù)據(jù)。
2、SOA注重水平服務(wù),微服務(wù)注重垂直服務(wù)
本文作者:張永清 來源出處:
https://www.cnblogs.com/laoqing/p/13042432.html
SOA 設(shè)計喜歡給服務(wù)分層(如 Service Layers 模式)。我們常常見到一個 Entity 服務(wù)層的設(shè)計,美其名曰 Data Access Layer。這種設(shè)計要求所有的服務(wù)都通過這個 Entity 服務(wù)層。來獲取數(shù)據(jù)。這種設(shè)計非常不靈活,比如每次數(shù)據(jù)層的改動都可能影響到所有業(yè)務(wù)層的服務(wù)。而每個微服務(wù)通常有它自己獨立的 Data Store。我們在拆分數(shù)據(jù)庫時可以適當?shù)淖鲂┤シ妒交屗恍枰蕾嚻渌?wù)的數(shù)據(jù)。
微服務(wù)通常是直接面對用戶的,每個微服務(wù)通常直接為用戶提供某個功能。類似的功能可能針對手機有一個服務(wù),針對機頂盒是另外一個服務(wù)。在 SOA 設(shè)計模式中這種情況通常會用到 Multi-ChannelEndpoint 的模式返回一個大而全的結(jié)果兼顧到所有的客戶端的需求。
3、SOA注重自上而下,微服務(wù)注重自下而上
SOA 架構(gòu)在設(shè)計開始時會先定義好服務(wù)合同。它喜歡集中管理所有的服務(wù),包括集中管理業(yè)務(wù)邏輯,數(shù)據(jù),流程,Schema 等。它使用 Enterprise Inventory 和 Service Composition 等方法來集中管理服務(wù)。SOA 架構(gòu)通常會預先把每個模塊服務(wù)接口都定義好。模塊系統(tǒng)間的通訊必須遵守這些接口,各服務(wù)是針對他們的調(diào)用者。
SOA 架構(gòu)適用于 TO GAF 之類的架構(gòu)方法論。
微服務(wù)則敏捷得多。只要用戶用得到,就先把這個服務(wù)挖出來。然后針對性的,快速確認業(yè)務(wù)需求,快速開發(fā)迭代。
微服務(wù)與 SOA 有很多相同之處。兩者都屬于典型的、包含松耦合分布式組件的系統(tǒng)結(jié)構(gòu)。在圍繞著服務(wù)的概念創(chuàng)建架構(gòu)這一方面,微服務(wù)提供了一種更清晰、定義更良好的方式。微服務(wù)的原則與敏捷軟件開發(fā)思想是高度一致的,而它與 SOA 原則的演化的目標也是相同的,則減少傳統(tǒng)的企業(yè)服務(wù)總線開發(fā)的高復雜性。兩者之間最關(guān)鍵的區(qū)別在于,微服務(wù)專注于以自治的方式產(chǎn)生價值。但是兩種架構(gòu)背后的意圖是不同的:SOA 嘗試將應用集成,一般采用中央管理模式來確保各應用能夠交互運作。微服務(wù)嘗試部署新功能,快速有效地擴展開發(fā)團隊。它著重于分散管理、代碼再利用與自動化執(zhí)行。
五、架構(gòu)設(shè)計圖
1、技術(shù)架構(gòu)
從技術(shù)層面描述,主要是分層模型,例如持久層、數(shù)據(jù)層、邏輯層、應用層、表現(xiàn)層等,然后每層使用什么技術(shù)框架,例如Spring、hibernate、ioc、MVC、成熟的類庫、中間件、WebService等,分別說明,要求這些技術(shù)能夠?qū)⒄麄€系統(tǒng)的主要實現(xiàn)概括
2、系統(tǒng)架構(gòu)
指的完整系統(tǒng)的組成架構(gòu),例如系統(tǒng)分成幾個部分?服務(wù)平臺、管理門戶、終端門戶、ATM門戶、外部系統(tǒng)以及接口、支撐系統(tǒng)等,將這些系統(tǒng)進行合理的劃分。然后再進行功能分類細分,總之,將整個系統(tǒng)業(yè)務(wù)分解為邏輯功能模塊,并且科學合理,就是系統(tǒng)架構(gòu)
3、部署架構(gòu)
指的是系統(tǒng)如何部署,包括應用的節(jié)點機器,網(wǎng)絡(luò)、交換機,防火墻等。比如采用什么網(wǎng)絡(luò),Nginx 部署幾臺,vip如何轉(zhuǎn)發(fā)、App應用部署多少個節(jié)點等。
4、數(shù)據(jù)架構(gòu)
數(shù)據(jù)架構(gòu)指導數(shù)據(jù)庫的設(shè)計. 不僅僅要考慮開發(fā)中涉及到的數(shù)據(jù)庫,實體模型,也要考慮物理架構(gòu)中數(shù)據(jù)存儲的設(shè)計。
5、代碼架構(gòu)
子系統(tǒng)代碼架構(gòu)主要為開發(fā)人員提供切實可行的指導,如果代碼架構(gòu)設(shè)計不足,就會造成影響全局的架構(gòu)設(shè)計。比如公司內(nèi)不同的開發(fā)團隊使用不同的技術(shù)棧或者組件,結(jié)果公司整體架構(gòu)設(shè)計就會失控。
代碼架構(gòu)主要定義:
①. 代碼單元:
配置設(shè)計 框架、類庫。
②. 代碼單元組織:
編碼規(guī)范,編碼的慣例。 項目模塊劃分 頂層文件結(jié)構(gòu)設(shè)計,比如mvc設(shè)計。 依賴關(guān)系