Introducing the NGINX Microservices Reference Architecture (this post)
MRA, Part 2: The Proxy Model
MRA, Part 3: The Router Mesh Model
MRA, Part 4: The Fabric Model
MRA, Part 5: Adapting the Twelve?Factor App for Microservices
MRA, Part 6: Implementing the Circuit Breaker Pattern with NGINX Plus
另請查看有關(guān)微服務(wù)的其他NGINX資源:
A very useful and popular series by Chris Richardson about microservices application design
The Chris Richardson articles collected into a free ebook, with additional tips on implementing microservices with NGINX and NGINX Plus
Other microservices blog posts
Microservices webinars
Microservices Solutions page
Topic: Microservices
介紹
NGINX從一開始就參與了微服務(wù)運動。 NGINX的輕巧,高性能和靈活性非常適合微服務(wù)。
NGINX Docker映像是Docker Hub上排名第一的應(yīng)用程序映像,您今天在Web上找到的大多數(shù)微服務(wù)平臺都包含一個演示,它以某種形式部署NGINX并連接到歡迎頁面。
因為我們認(rèn)為轉(zhuǎn)向微服務(wù)對于客戶的成功至關(guān)重要,我們NGINX已經(jīng)啟動了一個專門的程序來開發(fā)支持Web應(yīng)用程序開發(fā)和交付這種地震轉(zhuǎn)變的功能和實踐。我們還認(rèn)識到,實現(xiàn)微服務(wù)有許多不同的方法,其中許多方法都是新穎的,并且特定于各個開發(fā)團隊的需求。我們認(rèn)為需要使用模型來使公司更容易開發(fā)和交付自己的基于微服務(wù)的應(yīng)用程序。
考慮到這一切,NGINX專業(yè)服務(wù)部門正在開發(fā)NGINX微服務(wù)參考架構(gòu)(MRA) - 一組可用于創(chuàng)建自己的微服務(wù)應(yīng)用程序的模型。
MRA由兩部分組成:三個模型中的每一個的詳細(xì)描述,以及實現(xiàn)我們的示例照片共享程序的可下載代碼,Ingenious。三種型號的唯一區(qū)別是用于為每種型號配置NGINX Plus的配置代碼。這一系列博客文章將提供每個模型的概述說明; Ingenious示例程序的詳細(xì)描述,配置代碼和代碼將在今年晚些時候推出。
我們構(gòu)建此參考架構(gòu)的目標(biāo)有三個:
為客戶和行業(yè)提供隨時可用的藍(lán)圖,用于構(gòu)建基于微服務(wù)的系統(tǒng),加速和改進開發(fā)
創(chuàng)建用于測試NGINX和NGINX Plus中新功能的平臺,無論是內(nèi)部開發(fā)還是外部開發(fā),分布在產(chǎn)品核心中或作為動態(tài)模塊
為了幫助我們了解合作伙伴系統(tǒng)和組件,我們可以從整體上了解微服務(wù)生態(tài)系統(tǒng)
微服務(wù)參考架構(gòu)也是NGINX客戶專業(yè)服務(wù)產(chǎn)品的重要組成部分。在MRA中,我們盡可能使用NGINX開源和NGINX Plus共有的功能,并在需要時使用NGINX Plus特有的功能。 NGINX Plus依賴關(guān)系在更復(fù)雜的模型中更強,如下所述。我們預(yù)計,MRA的許多用戶將受益于NGINX專業(yè)服務(wù)的訪問以及NGINX Plus訂閱的技術(shù)支持。
微服務(wù)參考架構(gòu)概述
我們正在構(gòu)建參考架構(gòu)以符合Twelve-Factor App的原則。這些服務(wù)設(shè)計為輕量級,短暫的和無狀態(tài)的。
MRA使用行業(yè)標(biāo)準(zhǔn)組件,如Docker容器,各種語言 - Java,PHP,Python,NodeJS / JavaScript和Ruby - 以及基于NGINX的網(wǎng)絡(luò)。
遷移到微服務(wù)時,應(yīng)用程序設(shè)計和體系結(jié)構(gòu)的最大變化之一是使用網(wǎng)絡(luò)在應(yīng)用程序的功能組件之間進行通信。在單片應(yīng)用程序中,應(yīng)用程序組件在內(nèi)存中進行通信。在微服務(wù)應(yīng)用程序中,該通信通過網(wǎng)絡(luò)進行,因此網(wǎng)絡(luò)設(shè)計和實施變得至關(guān)重要。
為了反映這一點,MRA已經(jīng)使用三種不同的網(wǎng)絡(luò)模型實現(xiàn),所有這些模型都使用NGINX或NGINX Plus。它們的范圍從相對簡單到功能豐富且更復(fù)雜:
代理模型 (Proxy Model)- 一種簡單的網(wǎng)絡(luò)模型,適用于實現(xiàn)NGINX Plus作為微服務(wù)應(yīng)用程序的控制器或API網(wǎng)關(guān)。該模型建立在Docker Cloud之上。
路由器網(wǎng)格模型(Router Mesh Model ) - 一種更強大的網(wǎng)絡(luò)方法,每臺主機上都有一個負(fù)載均衡器,可以管理系統(tǒng)之間的連接。該模型類似于Deis 1.0的體系結(jié)構(gòu)。
織品模型 (Fabric Model) - MRA的皇冠上的明珠,面料模型在每個容器中都有NGINX Plus,處理所有入口和出口交通。它適用于高負(fù)載系統(tǒng),并支持所有級別的SSL / TLS,NGINX Plus提供減少的延遲,持久的SSL / TLS連接,服務(wù)發(fā)現(xiàn)以及所有微服務(wù)中的斷路器模式。
我們的目的是您使用這些模型作為您自己的微服務(wù)實現(xiàn)的起點,我們歡迎您提供有關(guān)如何改進MRA的反饋。 (您可以從添加到下面的評論開始。)
以下是每種模型的簡要說明;我們建議您閱讀所有描述,以便開始了解如何最好地使用一個或多個模型。未來的博客文章將詳細(xì)描述每個模型,每個博客文章一個。
代理模型簡介
代理模型是一種相對簡單的網(wǎng)絡(luò)模型。它是初始微服務(wù)應(yīng)用程序的出色起點,或者是轉(zhuǎn)換中等復(fù)雜的單片遺留應(yīng)用程序的目標(biāo)模型。
在代理模型中,NGINX或NGINX Plus充當(dāng)入口控制器,將請求路由到微服務(wù)。當(dāng)創(chuàng)建新服務(wù)時,NGINX Plus可以使用動態(tài)DNS進行服務(wù)發(fā)現(xiàn)。當(dāng)使用NGINX作為API網(wǎng)關(guān)時,代理模型也適合用作模板。
如果需要進行服務(wù)間通信 - 并且大多數(shù)應(yīng)用程序都處于任何復(fù)雜程度 - 服務(wù)注冊表提供集群內(nèi)的機制。 (有關(guān)服務(wù)間通信機制的詳細(xì)列表,請參閱此博客文章。)Docker Cloud默認(rèn)使用此方法;為了連接到另一個服務(wù),服務(wù)查詢DNS并獲取IP地址以發(fā)送請求。
通常,代理模型適用于簡單到中等復(fù)雜的應(yīng)用程序。它不是負(fù)載平衡最有效的方法/模型,特別是在規(guī)模上;如果您有嚴(yán)重的負(fù)載平衡要求,請使用下面描述的模型之一。 (“Scale”可以指大量的微服務(wù)以及高流量。)
編輯器 - 有關(guān)此模型的深入探索,請參閱MRA,第2部分 - 代理模型。
路由器網(wǎng)格模型
路由器網(wǎng)格模型中等復(fù)雜,非常適合強大的新應(yīng)用程序設(shè)計,也適用于轉(zhuǎn)換不需要Fabric模型功能的更復(fù)雜的單片遺留應(yīng)用程序。
通過在每個主機上運行負(fù)載均衡器并主動管理微服務(wù)之間的連接,路由器網(wǎng)狀網(wǎng)模型采用比代理模型更強大的網(wǎng)絡(luò)方法。路由器網(wǎng)格模型的主要優(yōu)點是服務(wù)之間的更高效和穩(wěn)健的負(fù)載平衡。如果使用NGINX Plus,則可以實施活動運行狀況檢查以監(jiān)視各個服務(wù)實例,并在關(guān)閉時優(yōu)雅地限制流量。
Deis Workflow使用類似于路由器網(wǎng)格模型的方法在服務(wù)之間路由流量,NGINX實例在每個主機上的容器中運行。當(dāng)新的應(yīng)用程序?qū)嵗粏訒r,進程從etcd服務(wù)注冊表中提取服務(wù)信息并將其加載到NGINX中。 NGINX Plus也可以在這種模式下工作,使用各種位置及其相關(guān)的上游。
編輯器 - 有關(guān)此模型的深入探索,請參閱MRA,第3部分 - 路由器網(wǎng)格模型(https://www.nginx.com/blog/microservices-reference-architecture-nginx-router-mesh-model/)。
最后 - Fabric模型,帶有可選的SSL / TLS
我們NGINX對Fabric模型最為興奮。它帶來了一些最令人興奮的微服務(wù)承諾,包括高性能,負(fù)載平衡的靈活性,以及??無處不在的SSL / TLS,直到單個微服務(wù)的水平。 Fabric模型適用于安全應(yīng)用程序,可擴展到非常大的應(yīng)用程序。
在Fabric模型中,NGINX Plus部署在每個容器中,并成為進出容器的所有HTTP流量的代理。應(yīng)用程序與本地(localhost)主機位置通信以獲取所有服務(wù)連接,并依賴NGINX Plus進行服務(wù)發(fā)現(xiàn),負(fù)載平衡和運行狀況檢查。
在我們的配置中,NGINX Plus向ZooKeeper查詢應(yīng)用程序需要連接的所有服務(wù)實例。例如,使用DNS頻率設(shè)置(有效)設(shè)置為1秒,NGINX Plus會每隔一秒掃描ZooKeeper,并適當(dāng)?shù)芈酚闪髁俊?/p>
由于NGINX Plus中強大的HTTP處理功能,我們可以使用keepalive來維護與微服務(wù)的狀態(tài)連接,減少延遲并提高性能。當(dāng)使用SSL / TLS來保護微服務(wù)之間的流量時,這是一個特別有價值的功能。
最后,我們使用NGINX Plus的主動健康檢查來管理健康實例的流量,并且基本上免費構(gòu)建斷路器模式。
編輯 - 有關(guān)此模型的深入探索,請參閱MRA,第4部分 - 結(jié)構(gòu)模型(https://www.nginx.com/blog/microservices-reference-architecture-nginx-fabric-model/)。
MRA的巧妙演示應(yīng)用程序
MRA包括一個示例應(yīng)用程序作為演示:Ingenious照片共享應(yīng)用程序。 Ingenious在三種模型中實現(xiàn) - 代理,路由器網(wǎng)格和結(jié)構(gòu)。 Ingenious演示應(yīng)用程序?qū)⒂诮衲晖硇r候向公眾發(fā)布。
Ingenious是照片存儲和共享應(yīng)用程序的簡化版本,la Flickr或Shutterfly。我們選擇照片共享應(yīng)用程序的原因有以下幾點:
用戶和開發(fā)人員都很容易掌握它的功能。
需要管理多個數(shù)據(jù)維度。
在應(yīng)用程序中很容易融入漂亮的設(shè)計。
它提供了非對稱計算要求 - 高強度和低強度處理的混合 - 可以實現(xiàn)跨不同功能的故障轉(zhuǎn)移,擴展和監(jiān)視功能的真實測試。
結(jié)論
NGINX微服務(wù)參考架構(gòu)對我們來說是一個令人興奮的發(fā)展,對于我們迄今為止共享的客戶和合作伙伴而言。 在接下來的幾個月里,我們將發(fā)布一系列博客文章,詳細(xì)描述它,我們將在今年晚些時候推出。 我們還將在9月7日至9日在德克薩斯州奧斯汀舉行的nginx.conf 2016上詳細(xì)討論。 請給我們您的反饋意見,我們期待著與您相見。
原文:https://www.nginx.com/blog/introducing-the-nginx-microservices-reference-architecture/
本文:http://pub.intelligentx.net/introducing-microservices-reference-architecture-nginx