良好的(Of)微服務架構能夠取代企業服務總線嗎?

讓我(I)們從面向服務架構(SOA)和(And)企業服務總線(ESB)的(Of)一(One)點曆史開始,來(Come)看看爲(For)什麽微服務變得如此流行。

    很多年以(By)前,軟件供應商提供了(Got it)一(One)種用(Use)于(At)企業應用(Use)集成(EAI)的(Of)中間件,通常叫做EAI Broker或者EAI Backbone,這(This)個(Indivual)中間件是(Yes)一(One)個(Indivual)集中式樞紐。當時(Hour),SOA剛剛興起,所選擇的(Of)工具是(Yes)ESB。很多軟件供應商就将他(He)們的(Of)EAI工具直接更名爲(For)ESB。一(One)段時(Hour)間之後,一(One)些新的(Of)ESB出(Out)現了(Got it),不(No)再使用(Use)集中式樞紐,而采用(Use)分布式代理。所以(By),ESB成爲(For)一(One)種不(No)同的(Of)中間件。很多人(People)不(No)喜歡“ESB”這(This)個(Indivual)術語,因爲(For)他(He)們隻知道集中式的(Of)概念,而不(No)知道分布式的(Of)概念。

    因此,軟件商經常避免談論ESB。他(He)們無法再銷售一(One)個(Indivual)集中式的(Of)集成中間件,因爲(For)一(One)切都變的(Of)分布和(And)靈活了(Got it)。現在(Exist),你可以(By)購買一(One)個(Indivual)服務發布平台。未來(Come),它可能是(Yes)一(One)個(Indivual)微服務平台或者類似的(Of)東西。在(Exist)某些情況下,代碼庫可能仍然與20年前的(Of)EAI Broker相同。所有這(This)些産品相同的(Of)地方是(Yes),你能夠通過實現“企業集成模式”來(Come)解決集成問題。

    總結一(One)下集成産品的(Of)品牌與營銷曆史:不(No)要(Want)關注那些性感、動人(People)、好聽的(Of)名字!優先關注它的(Of)架構和(And)特性。問問你自己,你需要(Want)解決什麽樣的(Of)業務問題,評估那種架構和(And)産品最适合你。當我(I)們再提“ESB”的(Of)時(Hour)候,不(No)要(Want)隻想到“集中式的(Of)ESB”了(Got it)。

企業服務總線(ESB)之死?

    本文的(Of)關鍵:ESB是(Yes)否已死?答案明顯是(Yes)“否”。然而,ESB不(No)再是(Yes)整個(Indivual)企業中一(One)個(Indivual)集中式,缺乏靈活行的(Of)集成主幹。現在(Exist)我(I)們聽到“ESB”,應該想到一(One)個(Indivual)靈活的(Of)、分布式的(Of)、可擴展的(Of)基礎架構,你可以(By)使用(Use)一(One)種敏捷、搞笑的(Of)方式創建、部署、監控各種各樣的(Of)(微)服務。開發和(And)部署既可以(By)在(Exist)企業内部,也可以(By)在(Exist)雲端,或者采用(Use)混合方式(比如,使用(Use)雲做短期測試環境或者處理服務消費的(Of)峰值。)

    你使用(Use)ESB做它所擅長的(Of)一(One)些事情:集成、編排、路由、(或者類似)事件處理/協作(Do)/業務活動監控。你也可以(By)通過(微)服務創建應用(Use),實現你的(Of)需求或者解決你的(Of)業務問題。你還可以(By)自動化的(Of)通過一(One)個(Indivual)标準化的(Of)接口将這(This)些服務彼此獨立的(Of)部署到一(One)個(Indivual)可擴展的(Of)運行平台。這(This)些服務是(Yes)松耦合的(Of)并且能夠跨越不(No)同的(Of)硬件線性擴展。

    這(This)是(Yes)我(I)所理解的(Of)當今的(Of)ESB。ESB是(Yes)處理這(This)些需求的(Of)最好的(Of)工具。你隻需要(Want)聰明的(Of)使用(Use)ESB,比如通過面向服務的(Of)方式,而不(No)是(Yes)面向ESB(集中)的(Of)方式。可以(By)稱它爲(For)ESB,集成平台,服務發布套件,微服務平台,或其他(He)你想叫的(Of)。

    此外,對于(At)這(This)個(Indivual)工具(仍稱之爲(For)ESB),你可以(By)使用(Use)服務網關提供服務安全,服務策略執行和(And)暴露(微)服務作(Do)爲(For)開放API給外部消費者。服務網關管理你的(Of)集成服務(通過你的(Of)ESB創建),你的(Of)應用(Use)服務(通過ESB或者其他(He)技術創建)和(And)外部雲服務(你不(No)需要(Want)關心他(He)們如何創建,你隻需要(Want)關心服務契約)。

    還有一(One)點:你真的(Of)需要(Want)“總線”之類嗎?如果你需要(Want)關聯不(No)同的(Of)(微)服務中發生的(Of)事件,總線是(Yes)有意義的(Of)。将這(This)些事件放入内存當中,讓他(He)們對實時(Hour)監控、分析和(And)預測行爲(For)可見。後面給将有關于(At)這(This)個(Indivual)話題更詳細的(Of)信息。對于(At)我(I)所理解的(Of)現代ESB,我(I)已經讨論論的(Of)微服務。所以(By),你可以(By)看到,ESB和(And)微服務不(No)是(Yes)敵人(People),是(Yes)朋友和(And)合作(Do)夥伴。

 “微服務”的(Of)定義

    讓我(I)們定義一(One)下術語“微服務”。就想你在(Exist)上(Superior)一(One)節中看到的(Of),應用(Use)的(Of)設計、架構、開發和(And)運營都必須改變。企業需要(Want)建立一(One)種服務策略來(Come)使它在(Exist)不(No)同的(Of)應用(Use)當中重用(Use)。看起來(Come)仍然像是(Yes)SOA?的(Of)确,但是(Yes)還有很多重要(Want)的(Of)不(No)同:

    ◉    沒有承諾一(One)個(Indivual)特有的(Of)技術

    ◉    更加靈活的(Of)架構

    ◉    具有自己生命周期的(Of)服務管理産品

    ◉    工業化部署

這(This)是(Yes)微服務時(Hour)代的(Of)開始:服務實現一(One)組有限的(Of)功能;服務的(Of)開發、部署和(And)擴展相互獨立。這(This)讓您能夠獲得更短的(Of)實施時(Hour)間和(And)提升靈活性。

微服務的(Of)挑戰

    微服務具有很多優勢,但是(Yes)它仍然面臨了(Got it)一(One)些挑戰:

    ◉    所有這(This)些服務都需要(Want)繼承

    ◉    所有這(This)些服務和(And)技術需要(Want)自動化的(Of)部署和(And)配置

    ◉    所有這(This)些服務需要(Want)日志記錄和(And)監控

    ◉    所有這(This)些服務需要(Want)混合部署

    所以(By),現在(Exist)忘記那些關于(At)産品的(Of)讨論吧。考慮你需要(Want)創建的(Of)微服務的(Of)架構。之前的(Of)章節提到的(Of)六個(Indivual)關鍵需求能夠克服這(This)些挑戰并且充分發揮微服務的(Of)價值:

服務契約

    ◉    服務契約

    ◉    從現有應用(Use)暴露微服務

    ◉    服務發現

    ◉    跨服務的(Of)協同

    ◉    管理複雜部署和(And)擴展

    ◉    跨服務的(Of)可見性

    不(No)論你使用(Use)的(Of)是(Yes)ESB、服務發布平台或者“僅僅”自定義的(Of)源代碼,在(Exist)你未來(Come)的(Of)項目中,爲(For)了(Got it)創建一(One)個(Indivual)敏捷、靈活和(And)高效的(Of)微服務架構,必須遵循了(Got it)下面列出(Out)的(Of)六個(Indivual)需求。

需求1:服務契約

    服務契約是(Yes)分布式、獨立服務世界的(Of)頭号需求。服務提供者使用(Use)契約發布服務的(Of)使用(Use)目的(Of)和(And)需求。其他(He)開發人(People)員可以(By)很容易的(Of)訪問這(This)些信息。

    在(Exist)SOA世界中,契約随着SOAP接口定義。SOAP仍然是(Yes)一(One)種很好的(Of)進行内部通訊的(Of)标準,它提供了(Got it)很多的(Of)安全标準。此外,工具也爲(For)最重要(Want)的(Of)WS-*标準比如WS-Security或者WS-Policy提供了(Got it)很好的(Of)支持。

    在(Exist)微服務世界,REST成爲(For)實際的(Of)标準,原因不(No)是(Yes)因爲(For)更好的(Of)性能,而是(Yes)簡單、關注分離、無狀态和(And)統一(One)接口的(Of)良好架構。尤其是(Yes)針對移動設備和(And)物聯網,是(Yes)兩種主要(Want)的(Of)微服務驅動者。

    你也可以(By)用(Use)REST使用(Use)不(No)同的(Of)數據格式,比如,你可以(By)選擇JSON和(And)XML。輕量級的(Of)JSON格式更适合于(At)移動設備,XML是(Yes)更好的(Of)企業應用(Use)選擇。你可以(By)定義模式,使用(Use)低效但是(Yes)成熟的(Of)工具進行轉換和(And)驗證。性能在(Exist)過去一(One)直都是(Yes)對XML的(Of)争議。使用(Use)現在(Exist)更強大(Big)的(Of)商業服務器和(And)内存計算,這(This)個(Indivual)在(Exist)很多場合都不(No)再是(Yes)大(Big)的(Of)問題。

    通訊通常都會使用(Use)HTTP。盡管HTTP在(Exist)很多情況下不(No)符合“現代應用(Use)場景”的(Of)規模。消息發送标準,比如JMS,是(Yes)事件驅動企業的(Of)一(One)個(Indivual)很好的(Of)選擇。WebSocket、MQTT和(And)其他(He)的(Of)标準也在(Exist)與數百萬的(Of)設備通訊中脫穎而出(Out),成爲(For)物聯網的(Of)重要(Want)需求。因此,你的(Of)微服務架構能否在(Exist)不(No)進行服務重建的(Of)情況下,支持不(No)同的(Of)數據格式和(And)傳輸協議,成爲(For)非常重要(Want)的(Of)标準。

需求2:從現有應用(Use)暴露微服務

    大(Big)多數企業業務仍然存在(Exist)于(At)已有應用(Use)當中。他(He)們需要(Want)将這(This)些應用(Use)的(Of)功能與外部服務或者他(He)們自己的(Of)微服務進行融合。因此,集成成爲(For)微服務的(Of)基礎。你既可以(By)創建全新的(Of)服務,也可以(By)将已有應用(Use)的(Of)功能暴露成微服務。這(This)些功能可以(By)是(Yes)API,一(One)個(Indivual)内部服務或者一(One)些遺留源代碼。

    随着時(Hour)間的(Of)推移,微服務可以(By)在(Exist)不(No)同的(Of)上(Superior)下文中被重用(Use),并且滿足不(No)同的(Of)通訊需求。将傳輸邏輯從服務邏輯中分離是(Yes)一(One)項在(Exist)微服務中至關重要(Want)的(Of)最佳實踐。當創建微服務的(Of)邏輯時(Hour),你不(No)需要(Want)考慮服務如何實現與端點的(Of)通訊——是(Yes)一(One)個(Indivual)企業級服務(XML/SOAP)、雲服務(XML/HTTP)、移動設備(JSON/HTTP)、或者一(One)個(Indivual)物聯網設備(底層TCP、MQTT,或者專有協議)

需求3:服務發現

    服務契約很重要(Want)。然而,你也必須能夠發現和(And)使用(Use)别人(People)的(Of)服務。服務必須通過一(One)個(Indivual)服務網關發布。服務網關執行消費契約,确保微服務的(Of)垂直擴展和(And)可靠性,并且允許微服務在(Exist)不(No)經過變更的(Of)情況下,在(Exist)多個(Indivual)上(Superior)下文中重用(Use)。

    服務網關使微服務有效。它使用(Use)開放的(Of)标準,比如SAML,Kerberos,OAuth,WS-*或者XACML——取決與你的(Of)需求。此外,開發人(People)員需要(Want)一(One)種簡單的(Of)方式去發現微服務和(And)他(He)們的(Of)契約。通常,會使用(Use)一(One)個(Indivual)自服務的(Of)門戶,來(Come)提供服務目錄和(And)契約信息。

API開放和(And)API管理

    談論微服務至今,你應該已經知道大(Big)多數供應商沒有讨論過他(He)們在(Exist)上(Superior)下文中的(Of)服務發現,但是(Yes)會包括API,API開放和(And)API管理。像ESB僅僅是(Yes)一(One)個(Indivual)術語一(One)樣,不(No)管你叫它“微服務注冊”,“API管理”或者其他(He)什麽東西。真正相關的(Of)是(Yes)業務問題如何解決,它的(Of)需求和(And)良好的(Of)架構。

    下圖是(Yes)關于(At)API管理的(Of)解決方案:網關、門戶和(And)分析。



需求4:跨服務的(Of)協同

    微服務和(And)他(He)們的(Of)粒度對于(At)服務的(Of)開發和(And)維護非常理想。但是(Yes)它也确實增加了(Got it)應用(Use)本身的(Of)複雜度。那些應用(Use)無法管理他(He)們在(Exist)平台中經常使用(Use)的(Of)受限制資源(電池、網絡、CPU)的(Of)複雜性。結合服務爲(For)滿足應用(Use)目的(Of)和(And)業務流程的(Of)高層邏輯,能夠證明開發的(Of)快捷和(And)維護的(Of)簡易。

    圖形化工具能夠用(Use)于(At)創建微服務,但是(Yes)也能夠便捷高效的(Of)創建組合服務:



    微服務的(Of)協作(Do)能夠采用(Use)不(No)同的(Of)方式實現:有狀态或者無狀态;服務或事件驅動。在(Exist)大(Big)多數情況下,無狀态是(Yes)單個(Indivual)服務的(Of)最佳實踐,一(One)些特殊的(Of)協作(Do)/組合服務有可能更适合有狀态流程。

有狀态流程的(Of)優勢:

    ◉    狀态需要(Want)進行跨調用(Use)的(Of)共享時(Hour),更易于(At)開發

    ◉    不(No)需要(Want)外部持久化存儲

    ◉    通常會對低延遲優化

有狀态流程的(Of)劣勢:

    ◉    如果流程沒有很好的(Of)設計,會消耗更多的(Of)内存

    ◉    沒有強制開發人(People)員設計流程狀态

    ◉    沒有涉及的(Of)流程,狀态就無法被查詢

内存數據網格

    在(Exist)很多應用(Use)場景中,上(Superior)下文/狀态的(Of)改變需要(Want)作(Do)爲(For)事件在(Exist)内存數據網格進行共享,以(By)大(Big)幅提升性能和(And)降低發布的(Of)延遲。非常重要(Want)的(Of)一(One)點是(Yes)要(Want)理解内存網格不(No)僅僅能夠在(Exist)内存中緩存和(And)存儲數據。未來(Come)内存計算的(Of)特性是(Yes)事件處理、發布/訂閱、ACID(原子性(Atomicity)、一(One)緻性(Consistency)、隔離性(Isolation)、持久性(Durability))交易,條件查詢和(And)容錯。

需求5:管理複雜部署和(And)擴展

    服務對于(At)上(Superior)下文的(Of)使用(Use)将會大(Big)不(No)相同。服務需要(Want)快速的(Of)擴展。自動化是(Yes)微服務開發敏捷、靈活、高效的(Of)關鍵。沒有持續集成/持續發布(DevOps),你無法認識到微服務所帶來(Come)高效性。

    在(Exist)這(This)種方式下,你對企業内部或雲端的(Of)應用(Use)、中間件進行持續部署、配置和(And)管理。工具會提供端到端的(Of)腳本、自動化和(And)可視化圖表,并且監控所部署的(Of)應用(Use)的(Of)質量、端口管理和(And)彈性負載均衡。

    持續發布/DevOps能夠通過Chef,Puppet和(And)Docker之類的(Of)自動化工具進行實施。你能夠在(Exist)包括私有數據中心、虛機和(And)雲環境中部署你的(Of)微服務。每一(One)個(Indivual)微服務的(Of)創建和(And)部署都是(Yes)獨立的(Of)。相比自編碼/腳本的(Of)DevOps腳本,你可以(By)使用(Use)産品化的(Of)工具來(Come)進行持續發布。成熟的(Of)産品提供很多開箱即用(Use)的(Of)功能,大(Big)大(Big)提升工作(Do)效率。在(Exist)大(Big)多數情況下,這(This)些産品可以(By)來(Come)自于(At)與你使用(Use)的(Of)微服務架構相同的(Of)供應商,可利用(Use)大(Big)量的(Of)開箱即用(Use)特性。然而,在(Exist)你選擇産品是(Yes)需要(Want)确認:他(He)是(Yes)一(One)個(Indivual)能夠從其他(He)供應商擴展的(Of)技術;支持與其他(He)的(Of)自動化工具和(And)雲架構服務的(Of)集成。

統一(One)的(Of)管理

    統一(One)管理是(Yes)一(One)個(Indivual)良好的(Of)微服務架構的(Of)另一(One)個(Indivual)關鍵因素。即使你使用(Use)不(No)同的(Of)技術進行微服務的(Of)開發,确保你能夠在(Exist)一(One)個(Indivual)統一(One)的(Of)界面中管理和(And)監控所有的(Of)微服務。全面的(Of)可視化非常重要(Want),否則将會發生“微服務混亂”。

    要(Want)實現這(This)一(One)點,你不(No)能夠将每一(One)個(Indivual)微服務部署到不(No)同的(Of)運行環境中。即便是(Yes)使用(Use)微服務,你的(Of)項目也應該選擇一(One)個(Indivual)可擴展的(Of)、容錯的(Of)、高性能的(Of)運行環境。即便是(Yes)微服務的(Of)基本思想,我(I)也不(No)喜歡每一(One)個(Indivual)開發人(People)員可以(By)使用(Use)不(No)同的(Of)開發語言、框架和(And)運行環境的(Of)想法。從長期看,這(This)樣的(Of)項目或者産品很難維護和(And)保證SLA。如果你選擇一(One)個(Indivual)雲服務,必須有供應商能夠确保SLA。你不(No)必考慮服務契約之後的(Of)技術和(And)運行環境。然而,在(Exist)你的(Of)項目中,你必須考慮SLA和(And)可維護性。

需求6:跨服務的(Of)可見性

    最後,在(Exist)生産環境中進行微服務的(Of)部署和(And)運行之後,你可以(By)結合來(Come)自于(At)不(No)同服務事件、上(Superior)下文和(And)洞察力,實現實時(Hour)的(Of)感知與響應。相互關聯的(Of)事件是(Yes)真正的(Of)力量,來(Come)自Google、Amazon和(And)Facebook的(Of)證明毫無疑問。

    事件關聯是(Yes)一(One)項從大(Big)量事件和(And)信息中精确定位幾個(Indivual)真正重要(Want)的(Of)事件的(Of)技術。盡管有一(One)點離題,但這(This)是(Yes)各種來(Come)自于(At)微服務、大(Big)數據、物聯網的(Of)數據的(Of)未來(Come)。因此,這(This)個(Indivual)題目在(Exist)這(This)裏非常重要(Want)。使用(Use)事件關聯的(Of)場景随處可見,比如網絡監控、情報和(And)監視、風險管理、電商、欺詐監測、智能訂單路由、價格分析或者算法交易。

需要(Want)總線嗎?

    事件管理是(Yes)一(One)個(Indivual)你确實需要(Want)總線的(Of)需求。然而,這(This)個(Indivual)總線不(No)是(Yes)一(One)個(Indivual)ESB,是(Yes)一(One)個(Indivual)(内存)事件服務器:



    你從不(No)同的(Of)源頭獲得事件(比如微服務、标準應用(Use)、遺留代碼),并且在(Exist)總線中進行對他(He)們進行實時(Hour)的(Of)關聯,并且主動響應。

微服務是(Yes)獨立的(Of)、可擴展的(Of)服務!

    微服務是(Yes)獨立的(Of)、可擴展的(Of)服務。一(One)個(Indivual)使用(Use)可擴展平台的(Of)現代架構,允許對不(No)同的(Of)技術、服務、應用(Use)獨立的(Of)進行自動化部署。使用(Use)你選擇的(Of)工具進行服務契約的(Of)定義,實施(微)服務和(And)服務發現,獨立和(And)可擴展的(Of)自動部署。進行不(No)同(微)服務的(Of)協作(Do),通過在(Exist)内存中進行事件關聯,實時(Hour)進行事件的(Of)主動響應。這(This)就是(Yes)你怎樣去創建一(One)個(Indivual)良好的(Of)微服務架構。





© Copyright www.lntycloud.com 遼甯浩洋科技有限公司 版權所有