国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

架構師必收藏的干貨!!!

shiweifu / 3163人閱讀

摘要:一微服務概念微服務體系結構由輕量級松散耦合的服務集合組成。每個服務都有自己的計劃測試發(fā)布部署擴展集成和獨立維護。團隊不必因為過去的技術決定而受到懲罰。用在這里是指將相關的服務通過聚合器聚合在一起,這個聚合器就是門面。

微服務架構現(xiàn)在是談到企業(yè)應用架構時必聊的話題,微服務之所以火熱也是因為相對之前的應用開發(fā)方式有很多優(yōu)點,如更靈活、更能適應現(xiàn)在需求快速變更的大環(huán)境。

一、微服務概念

微服務體系結構由輕量級、松散耦合的服務集合組成。每個服務都實現(xiàn)了單個業(yè)務功能。理想情況下,這些服務應該是具有足夠的內(nèi)聚性,可以獨立地開發(fā)、測試、發(fā)布、部署、擴展、集成和維護。

正式定義

“微服務架構風格是一種將單個應用程序開發(fā)為一組小型服務的方法,每個小服務運行在自己的進程中,并且以輕量級機制(通常是HTTP REST API)通信。這些服務是圍繞業(yè)務能力建立的,并且可以由完全自動化的部署機構獨立部署。這些服務的集中管理只有最低限度,可以用不同的編程語言編寫并使用不同的數(shù)據(jù)存儲技術。”

—— James Lewis and Martin Fowler

定義微服務的特性

每個服務都是一個輕量級、獨立和松散耦合的業(yè)務單元。

每個服務都有自己的代碼庫,由一個小團隊管理和開發(fā)(主要是用于敏捷環(huán)境中)。

每個服務負責一部分功能或者說業(yè)務能力,并且做得很好。

每個服務都可以為其用例選擇最佳的技術棧(無需將整個應用程序綁定在一個框架中)。

每個服務都有自己的DevOps計劃(測試、發(fā)布、部署、擴展、集成和獨立維護)。

每個服務都部署在一個獨立自給的環(huán)境中。

服務通過使用定義良好的API(智能端點)和簡單協(xié)議如基于HTTP 的REST協(xié)議(啞管道)相互通信。

每個服務負責持久化自己的數(shù)據(jù)和保持外部狀態(tài)(只有當多個服務使用相同的數(shù)據(jù)時,這種情況才在公共數(shù)據(jù)層中處理)。

白小白:

智能端點和啞管道,其實我一直認為“啞”管道不如“笨”管道或者“呆”管道更易理解。防呆設計是一種預防用戶錯誤使用產(chǎn)品造成不良后果的設計理念,比如USB設計成一半有實體芯片,就是讓用戶可以不假思索的在插錯后直接掉轉(zhuǎn)方向再插。不讓用戶思考就是“呆”的含義。“啞”管道的“啞”其實就是體現(xiàn)在微服務的通信過程盡量簡單,不要讓通信機制有“思考能力”,不在其中加入過多的處理機制,反例是SOA時代的ESB產(chǎn)品,ESB產(chǎn)品通常會包含復雜的設施用于消息路由,編排和轉(zhuǎn)換,以及業(yè)務規(guī)則應用。反過來,智能端點的概念就容易理解了,也就是將與某服務相關的處理都限定在微服務的范疇之內(nèi),通信過程中的微服務端點是“智能”的,這也從一個方面體現(xiàn)了微服務“高內(nèi)聚”的含義,有了高內(nèi)聚,才能具備自治和獨立性,從而可以支持“松耦合”的機制。

微服務的好處

微服務可以用于擴展大型系統(tǒng),也為持續(xù)集成和交付提供了巨大的能力。

獨立縮放:《 The Art of Scalability》( http://t.cn/EAvlQ4o)這本優(yōu)秀的書中所描述的Scale Cube概念,是微服務架構所支持的。在開發(fā)微服務以實現(xiàn)功能分解時,應用程序通過Y軸自動縮放。當服務調(diào)用量較高時,微服務可以通過克隆更多的CPU和內(nèi)存,通過X軸進行擴展。為了在多臺機器上分發(fā)數(shù)據(jù),可以分離大型數(shù)據(jù)庫(分庫分表)轉(zhuǎn)換成更小、更快、更容易管理的部件,從而實現(xiàn)Z軸的縮放。

獨立發(fā)布和部署:使用微服務,Bug修復和特性發(fā)布更易于管理,風險更小。可以在不重新部署整個應用程序的情況下更新服務,并在出現(xiàn)問題時回滾或前滾更新。

獨立開發(fā):每個服務都有自己的代碼庫,由一個小的焦點小組開發(fā)、測試和部署。開發(fā)人員可以專注于一種服務,并且只關注相對較小的范圍。這將提高生產(chǎn)率、項目速度、持續(xù)創(chuàng)新能力和源碼質(zhì)量。

優(yōu)雅降級:如果服務崩潰,其影響不會傳播到應用程序的其他部分,并導致系統(tǒng)發(fā)生災難性故障,從而體現(xiàn)某種程度的健壯性。

分散治理:開發(fā)人員可以自由選擇技術棧,制定最適合其服務的設計標準和實現(xiàn)決策。團隊不必因為過去的技術決定而受到懲罰。

業(yè)務關切

獨立的服務本身并不能形成一個系統(tǒng)。要使微服務體系結構真正成功,需要大量投資來處理跨系統(tǒng)的問題,例如:

服務復制:一種讓服務易于擴展的基于元數(shù)據(jù)的機制

服務注冊和發(fā)現(xiàn):啟用服務查找并查找服務端點的機制

服務監(jiān)測和日志:收集來自不同微服務的日志的機制,并提供一致的報告

彈性:服務在故障期間自動采取糾正行動的機制

DevOps:處理持續(xù)集成和部署的機制(CI和CD)

API網(wǎng)關:為客戶端提供入口的機制

二、中間件與設計模式

API網(wǎng)關(所有客戶端的單一入口點)

API網(wǎng)關風格的微服務體系結構(圖片來自:Microsoft Azure Docs),是用于微服務的最常見的設計模式。API網(wǎng)關是一個中間層,具有最小化的路由功能,只是充當一個“啞管道”,里面沒有業(yè)務邏輯。一般來說,API網(wǎng)關允許客戶端基于REST/HTTP調(diào)用托管的API。其他類型的微服務集成模式有:點對點風格(直接從客戶端應用程序調(diào)用服務)和消息代理風格(實現(xiàn)異步消息傳遞)。

API網(wǎng)關充當所有客戶端的單一入口點,API網(wǎng)關也作為一種邊緣服務來將微服務作為托管API公開給外部世界。這聽起來像是一個反向代理,但也有一些額外的責任,例如簡單的負載平衡,認證和授權,故障處理,審核,協(xié)議轉(zhuǎn)換,和路由機制。開發(fā)團隊可以選擇以下方法之一來實現(xiàn)API網(wǎng)關。

自己編程實現(xiàn):具有更好的客戶化和管控能力。

部署現(xiàn)有的API網(wǎng)關產(chǎn)品:節(jié)省初始開發(fā)時間,并使用高級內(nèi)置功能(缺點在于:此類產(chǎn)品依賴于供應商,并不完全免費。配置和維護通常是冗長而耗時的)

解釋API網(wǎng)關行為的一些設計模式如下(請參閱微服務設計模式 http://t.cn/RKx8bhG).

網(wǎng)關聚合(http://t.cn/EAvT2jl):將針對多個內(nèi)部微服務的多個客戶端請求(通常是HTTP請求)聚合到單個客戶端請求中,減少了使用者和服務之間的交互和網(wǎng)絡延遲。

網(wǎng)關分流(http://t.cn/EAvTGmA):使單個微服務能夠?qū)⒁恍┕蚕淼姆展δ芊至鞯紸PI網(wǎng)關級別。這些跨服務功能包括認證、授權、服務發(fā)現(xiàn)、容錯機制、QoS、負載平衡、日志記錄、分析等。

網(wǎng)關路由(第7層路由,通常是HTTP請求 http://t.cn/EAvTMm4):使用單一入口端點將請求路由到內(nèi)部微服務的端點,這樣服務調(diào)用者就不需要自行管理多個獨立的端點

請注意,API網(wǎng)關應該始終是一個高可用性和高性能的組件,因為它是整個系統(tǒng)的入口點。

事件總線(用于異步事件驅(qū)動通信的、發(fā)布/訂閱、中介通道)

微服務之間基于事件驅(qū)動的異步通信實現(xiàn)最終一致性

(圖片來源:microsoft.com)

應用程序的不同部分在進行相互通信時,無論消息的順序(為處理異步的消息)或使用的語言(為了體現(xiàn)語言無關性),都可以使用事件總線來實現(xiàn)。大多數(shù)事件總線支持發(fā)布/訂閱、分布式、點對點和請求響應消息傳遞。一些事件總線(如Vert.x)允許客戶端使用相同的事件總線與相應的服務器節(jié)點進行通信,這是全堆棧團隊所喜愛的一個很酷的特性。

服務網(wǎng)格(用于服務間通信的外掛(Sidecar)機制)

服務網(wǎng)格風格的服務間通信

(圖片來源:微服務實踐http://t.cn/EAAJWRi)

如何在應用程序中使用服務網(wǎng)格

(圖片來源:http://t.cn/EAAizgn)

服務網(wǎng)格通過提供服務間通信的輔助架構來實現(xiàn)外掛模式,包括彈性(容錯、負載平衡)、服務發(fā)現(xiàn)、路由、可觀察性、安全性、訪問控制、通信協(xié)議支持等功能。

服務網(wǎng)格在網(wǎng)絡堆棧中的位置

(圖片來源:http://t.cn/EAAizgn)

實際上,外掛實例部署在每個服務的旁邊(理想情況下是在同一個容器中)。他們可以通過服務本身的網(wǎng)絡功能來進行通信。服務網(wǎng)格的控制平面被多帶帶部署,以提供中心功能,如服務發(fā)現(xiàn)、訪問控制和可觀察性(監(jiān)視、分布式日志記錄)。最重要的是,服務網(wǎng)格風格的設計模式允許開發(fā)人員從微服務代碼中分離網(wǎng)絡通信功能并使服務只關注于業(yè)務功能。(來自:Netflix Prana, 微服務網(wǎng)格)

盡管上面的圖片顯示了服務之間的直接連接,但是處理服務間通信的好方法是使用一個簡單的事件總線作為中介,以保持最低級別的耦合。

聚合器(BFF模式)

在API網(wǎng)關級別上實現(xiàn)BFF模式和聚合器模式

(圖:microsoft.com)

如果應用程序需要裁剪每個API以適應客戶端應用程序類型(Web端、移動端以及其他不同平臺),則可以通過聚合器(Aggregator)執(zhí)行不同的業(yè)務規(guī)則,也可以執(zhí)行不同的配置以根據(jù)客戶端功能適配不同的構建。這可以在API網(wǎng)關級別實現(xiàn),也可以在服務級別并行實現(xiàn)。這種模式對于提供特定的用戶體驗非常有用。但是,開發(fā)團隊應該足夠小心,將BFF保持在可管理的范圍內(nèi)。

白小白:

“通過聚合器”,原文是“via a facade”,直譯是“通過一個外觀/門面”。門面模式(外觀模式),是一種Java的設計模式,為子系統(tǒng)中的一組接口提供了一個統(tǒng)一的訪問接口,引申自一個前店后廠的生意模式,前面是門面,后面會有進料、生產(chǎn)、包裝多個服務。用在這里是指將相關的服務通過聚合器聚合在一起,這個聚合器就是門面。服務調(diào)用者與門面交互而不是與一組服務交互降低了耦合性,但同時違反了面向?qū)ο笤O計原則開閉原則,開閉原則要求模塊在擴展時可以不改動內(nèi)部的代碼,但顯然當聚合器后端的某個服務發(fā)生變更時,需要在聚合器層面也發(fā)生變更,這也是文中說“開發(fā)團隊應該足夠小心”的原因,因為違反了開閉原則,就會降低可復用性。

三、最佳實踐

? 領域驅(qū)動設計:圍繞業(yè)務領域進行服務建模。

為了處理大型模型和團隊,可以應用領域驅(qū)動設計(DDD)。DDD通過將大型模型劃分為不同的有界上下文來明確他們之間的相互關系和子領域。這些有界上下文可以在應用設計級別轉(zhuǎn)換為多帶帶的微服務。(參見:領域驅(qū)動設計中的有界上下文 http://t.cn/EAAK4Xk)

? 分散數(shù)據(jù)管理(避免共享數(shù)據(jù)庫):當多個服務使用一個共享數(shù)據(jù)架構時,會在數(shù)據(jù)層形成緊耦合。為了避免這種情況,每個服務都應該有自己的數(shù)據(jù)存取邏輯和獨立數(shù)據(jù)存儲。開發(fā)團隊可以根據(jù)服務和數(shù)據(jù)性質(zhì)的不同自由選擇最適合的數(shù)據(jù)持久性方法。

避免共享數(shù)據(jù)存儲和訪問機制

(圖片來源:http://t.cn/RcLB5Kv)

? 智能端點和啞管道:每個服務都擁有一個定義良好的外部通信API,并盡量避免泄露實現(xiàn)細節(jié)。通信則始終使用簡單協(xié)議,如基于HTTP的REST協(xié)議。

? 異步通信:當跨服務使用異步通信時,其他服務不會阻塞數(shù)據(jù)流。

同步消息和異步消息傳遞

(來源: http://t.cn/EAA9xRU)

? 避免服務耦合:服務應保持松耦合和高內(nèi)聚。產(chǎn)生耦合的主要原因包括共享數(shù)據(jù)庫模型和嚴格的通信協(xié)議。

? 分散開發(fā):避免在多個服務/項目之間共享代碼庫、數(shù)據(jù)架構或開發(fā)團隊成員。讓開發(fā)者從源頭上關注創(chuàng)新和質(zhì)量。

? 將領域知識排除在網(wǎng)關之外:讓網(wǎng)關處理路由和跨服務問題(如身份驗證、SSL終端等)。

? 基于令牌的認證:不要在每個微服務級別實現(xiàn)安全組件,因為這將需要組件與集中式/共享用戶存儲庫對話并檢索身份驗證信息;而是考慮實現(xiàn)API網(wǎng)關級別的身份驗證,使用廣泛使用的API安全標準,如OAuth2和OpenID Connect。一旦從認證提供者獲得令牌之后,就可以用于與其他微服務進行通信。

使用OAuth2和OpenID Connect的微服務安全性

(來源:Kasun’s Blog http://t.cn/EAACGvY)

? 事件驅(qū)動性質(zhì):既然人可以成為對事件作出反應的自主主體,系統(tǒng)也可以。(參見:為什么微服務應該是事件驅(qū)動的:自主性與權威性 http://t.cn/EAACWOx)

? 最終一致性:由于微服務的高內(nèi)聚特性,很難在整個系統(tǒng)內(nèi)實現(xiàn)很強的一致性。因此開發(fā)團隊必須處理最終一致性。

? 容錯:由于系統(tǒng)由多個服務和中間件組成,因此在某些地方可能很容易發(fā)生故障。對于這些薄弱環(huán)節(jié),有一些實現(xiàn)模式,如斷路器,防水艙,重試,超時,快速失敗,故障轉(zhuǎn)移緩存,速率限制,負載釋放,可以將重大故障的風險降到最低。(參見:設計一種面向故障的微服務體系結構http://t.cn/RChKlg9)

? 產(chǎn)品工程化:把微服務工程化為一種產(chǎn)品,而不是作為一個項目,可以讓微服務更好的發(fā)揮作用。這意味著,不能僅僅考慮能用而且及時交付,而是要長期致力于卓越的工程化。

四、微服務實踐

何時使用微服務

微服務架構最適合的應用場景:

具有高可伸縮性需求的應用

對交付速度要求較高的項目

具有豐富域或多個子域的業(yè)務用例

小型、跨功能的開發(fā)團隊協(xié)作開發(fā)大型產(chǎn)品的敏捷環(huán)境(請參閱:微服務架構的真正成功故事 http://t.cn/EAANng7)

一些實現(xiàn)微服務的入門框架

Vert.x:輕量級,易于理解/實現(xiàn)/維護,多語言支持(支持多種語言),事件驅(qū)動,非阻塞,可以說,具備了以最少的硬件處理高并發(fā)需求時的最佳性能和可伸縮性,并且具備足夠的開放性(與傳統(tǒng)的限制性框架不同,Vert.x只提供有用的組件,開發(fā)人員可以自由地創(chuàng)新并仔細構建他們的應用程序)

Akka:令人滿意的性能,實現(xiàn)了Actor模型(一種并發(fā)模型),有利于響應式微服務和事件驅(qū)型微服務

Spring Boot/Spring Cloud:容易上手(采用熟悉范式),基于良好的舊Spring框架,有點重的框架,許多集成可用,大規(guī)模的社區(qū)支持

Drop Wizard:有利于RESTful Web服務的快速開發(fā),它搭載了一些不錯的Java工具和庫,如Google Guava、Jetty Server、Logback、Hibernate Validator、Joda Time、Jersey和Jackson。

部署選項

容器:有利于執(zhí)行DevOps目標(快速開發(fā),縮短上市時間,無縫縮放)

云計算架構:有利于構建可靠和可伸縮的基礎設施,為地理位置分散的用戶服務。

無服務器架構:適合處理高度不穩(wěn)定的流量。

維護自己的IT基礎設施:對那些擁有足夠能力和資源建設整個基礎設施的組織來說是件好事。

微服務的開發(fā)理念

自給系統(tǒng):由獨立系統(tǒng)組裝軟件(按業(yè)務垂直切分系統(tǒng))

微前端:將單體應用的Web UI劃分為獨立的特性,這些特性可以作為獨立的UI組件開發(fā),并直接與微服務進行通信。

需要搜索和學習的關鍵詞

領域驅(qū)動設計(DDD)| 有界上下文(BC)| 聚合持久性(PP)| 命令和查詢責任隔離(CQRS)| 命令查詢分離(CQS)| 事件溯源(ES)| CAP定理 |最終一致性 |十二要素應用 |SOLID原則 |

五、參考架構

用于在線購物應用程序的微服務體系結構

(圖片:microsoft.com)

此體系結構是由使用Microsoft技術的Microsoft開發(fā)人員提出的。在這里,API Gateway是針對不同的Web和移動用戶而定制的。對于數(shù)據(jù)層,數(shù)據(jù)存儲技術是根據(jù)業(yè)務功能仔細選擇的(關系數(shù)據(jù)庫用于結構化數(shù)據(jù),Redis用于臨時數(shù)據(jù)緩存,MongoDB和Cosmos DB用于非結構化數(shù)據(jù))。事件總線處理服務間通信。撇開技術不說,這是基于微服務的應用最常見的集成模式。

一種非阻塞應用程序的微服務體系結構,該應用程序使用來自各種事件源(例如交通數(shù)據(jù)、天氣指數(shù)、股票市場線索、社交媒體帖子、傳感器輸出)的大量輸入數(shù)據(jù)流來向最終用戶顯示實時更新。這些輸入數(shù)據(jù)流最初由使用Kafka實現(xiàn)的事件日志收集。它將數(shù)據(jù)保存在磁盤上,因此可以用于批處理調(diào)用(分析、報告、數(shù)據(jù)科學、備份、審計)或用于實時調(diào)用(運營分析、CEP、管理儀表板、警報應用程序)。上圖中,使用Spark按指定的時間間隔,將持續(xù)的輸入數(shù)據(jù)流劃分為微批次,并輸入到WSO2 Siddhi CEP引擎中。后者標識事件并使用MongoDB存儲以非結構化形式存儲數(shù)據(jù)。微服務調(diào)取這些數(shù)據(jù)并顯示給最終用戶。仔細觀察這一設計, Vert.x事件總線能夠創(chuàng)建與前端UI組件的連接,該特性僅用于有效地更新UI中的相關部分。撇開技術不說,這是基于事件驅(qū)動的非阻塞微服務應用程序的一個很好的架構。

用于訂單管理應用程序的云原生泛渠道微服務體系結構(圖片:ibm.com)這個設計的一個主要特點是,IBM架構師沒有使用API網(wǎng)關,而是為每個客戶端通道(移動應用程序、Web應用程序、IOT設備、API使用者)提出了一個具有獨立后端的邊緣層。另一個特點是將微服務層劃分為業(yè)務邏輯層和基礎層兩個子層。基礎層(即核心服務層)使用各種云原生服務(云數(shù)據(jù)存儲、集成和索引Watson會話的Elastic搜索引擎)處理持久化和集成任務。業(yè)務邏輯層集成了基礎層的數(shù)據(jù),并提供了有意義的業(yè)務功能。這將是一個很好的架構,可以為地理上分散的大量用戶群提供服務,并通過各種平臺訪問應用程序。

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/74447.html

相關文章

  • 如果想成為一名頂尖前端,這份書單你一定要收藏

    摘要:其中負載均衡那一節(jié),基本上是參考的權威指南負載均衡的內(nèi)容。開發(fā)指南讀了一半,就是看這本書理解了的事件循環(huán)。哈哈創(chuàng)京東一本騙錢的書。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術實踐干貨哦~ 本文由騰訊IVWEB團隊 發(fā)表于云+社區(qū)專欄作者:link 2014年一月以來,自己接觸web前端開發(fā)已經(jīng)兩年多了,記錄一下自己前端學習路上看過的,以及道聽途說的一些書,基本上按照由淺入深來介紹...

    callmewhy 評論0 收藏0
  • 如果想成為一名頂尖前端,這份書單你一定要收藏

    摘要:其中負載均衡那一節(jié),基本上是參考的權威指南負載均衡的內(nèi)容。開發(fā)指南讀了一半,就是看這本書理解了的事件循環(huán)。哈哈創(chuàng)京東一本騙錢的書。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術實踐干貨哦~ 本文由騰訊IVWEB團隊 發(fā)表于云+社區(qū)專欄作者:link 2014年一月以來,自己接觸web前端開發(fā)已經(jīng)兩年多了,記錄一下自己前端學習路上看過的,以及道聽途說的一些書,基本上按照由淺入深來介紹...

    Scliang 評論0 收藏0
  • 如果想成為一名頂尖前端,這份書單你一定要收藏

    摘要:其中負載均衡那一節(jié),基本上是參考的權威指南負載均衡的內(nèi)容。開發(fā)指南讀了一半,就是看這本書理解了的事件循環(huán)。哈哈創(chuàng)京東一本騙錢的書。歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術實踐干貨哦~ 本文由騰訊IVWEB團隊發(fā)表于云+社區(qū)專欄 作者:link 2014年一月以來,自己接觸web前端開發(fā)已經(jīng)兩年多了,記錄一下自己前端學習路上看過的,以及道聽途說的一些書,基本上按照由淺入深來介紹。...

    233jl 評論0 收藏0
  • 進階Java架構師必15本書

    摘要:阿里巴巴的共享服務理念以及企業(yè)級互聯(lián)網(wǎng)架構建設的思路,給這些企業(yè)帶來了不少新的思路,這也是我最終決定寫這本書的最主要原因。盡在雙阿里巴巴技術演進與超越是迄今唯一由阿里巴巴集團官方出品全面闡述雙八年以來在技術和商業(yè)上演進和創(chuàng)新歷程的書籍。 showImg(https://segmentfault.com/img/remote/1460000015386860); 1、大型網(wǎng)站技術架構:核...

    Julylovin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<