1. 程式人生 > >雜談:面向微服務的體系結構評審中需要問的三個問題

雜談:面向微服務的體系結構評審中需要問的三個問題

面向微服務的體系結構如今風靡全球。這是因為更快的部署節奏和更低的成本是面向微服務的體系結構的基本承諾。

然而,對於大多數試水的公司來說,開發活動更多的是將現有的單塊應用程式轉換為面向微服務的體系結構,這可能是許多層面上阻礙和衝突的根源。

雖然Greenfield (未開發的)面向微服務的體系結構實現可以堅持對當前微服務的嚴格解釋-設計原則。但在面向微服務的體系結構中,分解的遺留應用程式存在灰色陰影,如果沒有其他原因,只能滿足預算和時間限制。

在企業管理鏈的某個地方,有一位業務主管在一個面向微服務的體系結構中檢視與這些遺留應用程式相關的分解成本,並將其與遺留程式碼已經提供的價值進行比較。一旦開發成本超過了預期的收益,業務主管很可能會退出並取消該專案。

這種事經常會發生。

因此,開發經理面臨著巨大的壓力,要求他們儘快將程式碼輸出。“足夠好”地成為轉型的理想目標。

現在,這不一定是一件壞事。與等待夢想到來相比,輸出工作程式碼的能力總是更好。但是,“灰色的陰影”是很難管理的,問題就在於如何界定“足夠好”的界限。

因此,衝突開始了。一方想要輸出他們想要的東西,而另一方則希望做更多的改進。

對你來說,挑戰是不要讓這些不同學派在本質上是信仰支援的觀點上製造一場沒完沒了的爭吵。如果您這樣做了,它將造成一種情況,即根本不提供任何程式碼。現在,衝突可以從許多相互競爭的想法中綜合出最好的想法。但是,當話語退化為永無止境的衝突時,它可能是致命的。

我通過集中討論以下三個問題來處理這類情況,以避免這種衝突:

  • 設計的理由是什麼?
  • 風險有多大?
  • 減少風險的計劃是什麼?

請允許我詳細說明。

1. 設計的理由是什麼?

當您評估面向微服務的體系結構的設計時,所面臨的挑戰是將過去的觀點轉移到理論基礎分析上。它的建立主要來自於單個應用程式的分解。任何設計都可能“足夠好”,只要你能證明它的好處和價值。

例如,面向微服務的體系結構設計的首選樣式之一是採用事件驅動的方法進行服務間通訊。具體來說,這意味著您使用訊息節點以非同步方式在微服務之間傳遞訊息。然而,從長遠來看,雖然非同步通訊更加靈活和可擴充套件,但訊息系統實現比在“面向”微服務的API之間使用同步HTTP呼叫的設計要複雜得多。因此,當市場時間被關注時,完全有理由將單塊應用程式中的特性重構為以HTTP API方式表示的獨立的微服務。

Synchronous microservices are usually less complex to implement than asynchronous ones.

與非同步服務相比,同步微服務的實現通常不那麼複雜。

從長遠來看,同步通訊不一定是最佳選擇,但考慮到從單塊應用程式中提取獨立的微服務所需的所有其他工作,同步對於第一個版本來說是“足夠好”的。因此,這是一個合理的理由。

然而,這並不是說同步方法沒有風險。事實上,風險有很多。當涉及到審查面向微服務的體系結構設計時,僅僅說明理由並不是唯一的因素。風險也必須加以闡述。

2. 風險有多大?

所有的設計都有內在的風險。在上面描述的同步設計示例中,這種服務間通訊方法可能會導致服務之間型別耦合的風險,由於同步HTTP通訊和其他通訊的性質而增加延遲增加延遲。

重要的是要讓人們知道這些風險,這樣就可以根據預期設計的合理性來權衡它們。如果風險是巨大的,再多的理由也是不夠的。另一方面,考慮到目前的需求,某些風險可能是可以接受的。訣竅是確保風險在審查過程中得到明確的傳達。討論中已知的風險總是比隱藏的風險更可取,而這種風險可能會在路上造成衝擊。此外,如果您以前知道風險,那麼隨著面向微服務的體系結構的成熟,您可以計劃如何在未來的版本中更好地向前邁進。這就是減少風險的原因。

3. 減少風險的計劃是什麼?

一個明智的應用程式設計人員的一個標誌是能夠識別他們的設計風險,一旦確定下來他會有遠見地闡明一種方法,以減輕這些風險。沒有適當的緩解技術的風險識別是思維不完整的標誌。

如果面向微服務的體系結構設計有很大的風險和解決這些問題的邊際計劃,那麼設計團隊需要認真考慮其可行性。此外,如果緩解計劃不切實際-超出專案的專門知識和預算-設計的可行性也需要質疑。這都是平衡的問題。

一個平衡良好的面向微服務的體系結構設計是合理的,因為它想要滿足的條件與其固有的設計風險和旨在解決這些風險的緩解計劃相權衡。

4. 把它們放在一起

衝突是創造性程序的重要組成部分。有創造力的人往往對自己的想法堅韌不拔。所以,當你把它們放在一個房間裡,讓他們為面向微服務的建築設計一個單一的設計時,緊張關係肯定會加劇。事情就是這樣的。但要振作起來!衝突是好事。

幸運的是,有了一種理性的方法,用我前面描述的三個問題來審查面向微服務的體系結構設計,您就可以促進客觀的討論,從而產生軟體以及時滿足您的需求。沒有任何設計是完美的,特別是那些分解單個應用程式的設計。但是,交付面向微服務的體系結構有一個很大的好處,這個體系結構足夠好有效運作在短期和靈活性足夠持續不斷改善長期。

> 原文:https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/3-questions-to-ask-in-a-microservices-oriented-architecture-review > > 作者:Bob Reselman > > 譯者:遺失的拂曉

9月福利,關注公眾號 ​ 後臺回覆:004,領取8月翻譯集錦! ​ 往期福利回覆:001,002, 003即可領取!

相關推薦

面向服務體系結構評審需要問題-咖啡雜談Java、新聞、故事和觀點

面向微服務的體系結構如今風靡全球。這是因為更快的部署節奏和更低的成本是面向微服務的體系結構的基本承諾。 然而,對於大多數試水的公司來說,開發活動更多的是將現有的單塊應用程式轉換為面向微服務的體系結構,這可能是許多層面上阻礙和衝突的根源。 雖然Greenfield (未開發的)面向微服務的體系結構實現可以堅持對

雜談面向服務體系結構評審需要問題

面向微服務的體系結構如今風靡全球。這是因為更快的部署節奏和更低的成本是面向微服務的體系結構的基本承諾。 然而,對於大多數試水的公司

.NET服務體系結構為什麼使用Ocelot實現API閘道器

為什麼要使用API閘道器而不是直接通訊?在微服務架構中,客戶端應用程式通常需要使用

數人云架構師服務體系的K8S&Mesos排程與服務發現_Kubernetes中文社群

9月10日在K8S GeekGathering Meetup上,數人云架構師保珠做了關於《K8S&mesos之我見》的主題分享,分別介紹了Kubernetes和Mesos對微服務的支撐,以下是本次分享的實錄—— 本次主要分享主要有以下五個方面: – 容器的價值 – 微服務體系建設 –

《Spring Boot揭祕快速構建服務體系》讀書筆記

第一章 瞭解微服務 火車模型:交付的服務就像一輛火車,這個服務相關的所有功能對應的專案成果,就是要裝上火車車廂的一件件貨物,交付的列車只有等到所有專案都開發測試完成之後才可以裝車觸發,完成這個服務的交付。 微服務的益處:獨立,進而可擴充套件性;多語言生態;

Chris Richardson服務翻譯構建服務服務架構的進程通訊

標記 pac blog ural action 客戶端 靈活 dso 不兼容 Chris Richardson 微服務系列翻譯全7篇鏈接: 微服務介紹 構建微服務之使用API網關 構建微服務之微服務架構的進程通訊(本文) 微服務架構中的服務發現 微服務之事件驅動的數據管理

微服務實戰(六)選擇服務部署策略

因此 區別 嚴重 http 虛擬化 one rose 精確 命名空間 微服務實戰(一):微服務架構的優勢與不足 微服務實戰(二):使用API Gateway 微服務實戰(三):深入微服務架構的進程間通信 微服務實戰(四):服務發現的可行方案以及實踐案例 微服務實踐(五)

羅輯思維首席架構師Go服務改造實踐

測試的 節點和 謝大 客戶 nta watch 在哪裏 一起 缺點 轉自:http://www.infoq.com/cn/news/2018/05/luojisiwei 方圓 曾先後在 Cisco,新浪微博從事基礎架構研發工作。十多年一直專註於後端技術的研發,在消息通信

美團點評打造服務自動化測試與持續集成工具鏈實踐

選擇 rift moc 完成 軟件 用戶 seo bee png 本文內容節選自第六屆全球軟件案例研究峰會,時任美團點評酒旅質量團隊工具鏈負責人王鵬老師分享的《微服務架構下的自動化測試和持續集成工具鏈實踐》實錄,重點分享:微服務架構下解決自動化測試、開發聯調、測試環境、

Spring Cloud(2)構建服務 - Spring Boot

color 並發 時間 基於 執行 sof mil master 超時 微服務的特點及構建遵循的原則 約束:微服務遵循UNIX理念,即應用程序是服務的集合,每個服務只做一件事,並做好一件事。 松耦合:基於微服務的應用程序是小型服務的集合,服務之間使用HTTP和REST通

多研究些架構,少談些框架(1)服務架構的核心概念

定位 dubbo spring 提供服務 電信 cor res gate 虛擬 微服務架構和SOA區別 微服務現在辣麽火,業界流行的對比的卻都是所謂的Monolithic單體應用,而大量的系統在十幾年前都是已經是分布式系統了,那麽微服務作為新的理念和原來的分布式系統,或者說

微服務實戰(九)落地服務架構到直銷系統(回顧總結)

這個系列我們大概寫了八篇文章,將微服務的最重要的內容過了一遍。當然其中有些內容還沒有涉及到,比如Docker(不是微服務架構風格中必須的)等,關於Docker我們自己可以在網上找找其他文章。 這篇文章就來回顧下微服務架構風格是如何落地的,如果你對以下回顧的內容都很清楚並已經有一些實踐的經驗,那麼恭喜你,你已

SpringCloud搭建基於Eureka服務中心的服務體系

一、單體系統與微服務體系 在以往傳統的企業系統架構中,所有的業務介面都被集中在同個單體應用中。在業務需求不龐大的情況下,這樣的系統架構在開發、測試、部署時都還比較方便,但是隨著企業的發展,更多的業務需求也隨之而來,單體應用為了滿足這些需求就必須增加相應的業務模組,單體應用就會顯得越來越臃腫;

InfoQ專訪網易雲陳諤:用服務體系滿足企業數字化轉型需求

現在的公有云市場,國外有AWS,Google Cloud和微軟的Azure三足鼎立,國內則是阿里雲一家獨大,即便如此,在數字化浪潮下,雲端計算市場依然有很多玩家進場,各家競爭也相當激烈。在這樣的環境下,網易雲作為入場較晚的選手(2016年“網易雲”作為整體品牌正式推出),通過獨特的玩法在這場角逐中佔

Java高階架構師總結服務體系

近幾年,微服務架構迅速在整個技術社群竄紅,它被認為是 IT軟體架構的未來方向。熱度雖高,但對於很多中小公司來說微服務卻是遙不可及,因為團隊規模和能力又反過來制約了他們採用新技術的步伐。很多人對於微服務技術也都有著一些疑慮,比如: 微服務這技術雖然面試的時候總有人提,但作為一個開發,是不是和

螞蟻金服異地多活的服務體系

螞蟻金服(當時還是支付寶)從 2013 年起就執行在單元化架構上,除了具備異地容災能力外,還能做到異地多活,可隨時在多城市、多資料中心調配流量。基於單元流量調配機制,可實現大規模叢集的藍綠髮布、灰度模擬環境,為充分驗證業務正確性、降低故障提供了基礎條件。相應地,微服務體系也必須具備單元內收斂、單元間可控路由等

Seneca NodeJS 服務框架入門指南

Seneca 是一個能讓您快速構建基於訊息的微服務系統的工具集,你不需要知道各種服務本身被部署在何處,不需要知道具體有多少服務存在,也不需要知道他們具體做什麼,任何你業務邏輯之外的服務(如資料庫、快取或者第三方整合等)都被隱藏在微服務之後。 這種解耦使您的系統易於連續構

微服務實戰(七)落地服務架構到直銷系統(實現命令與命令處理器)

我們先來看看CQRS架構,你對下圖的架構還有印象嗎?每個元件的功能都還清楚嗎?如果有疑問,請查考文章《微服務實戰(五):落地微服務架構到直銷系統(構建高效能大併發系統)》。   前一篇文章已經實現了Event Store的基礎功能部分,本篇文章我們通過C端的標準方式,實現一個下單的高併發命令端,來看看需要實現

軟體體系結構——面向物件的體系結構示例

  面向物件體系結構的元件是類和物件。   連線件是物件之間通過功能與函式呼叫實現互動。物件是通過函式和過程的呼叫-返回機制來互動的,而類是通過定義物件,再採用呼叫-返回機制進行互動。   示例程式如下: class Count{ private int x;

微服務實戰(八)落地服務架構到直銷系統(服務高可用性)

在微服務架構風格的系統中,如果單個微服務垮掉或地址不可訪問,雖然對系統的影響是有限的,但我們也必須採取一定的手段來保證每個微服務儘量可用;並且在大併發的情況下,雖然可以通過EDA訊息佇列處理的方式提高吞吐量,但仍然需要WebApi能夠更加高效的偵聽使用者請求,處理訊息,即使在某個服務短暫不可用的情況下。本篇文