什麼是微服務架構,如何做服務拆分?

2020-09-05 HelloWorldGo

講微服務之前,我們依照慣例,先講講單體架構


經典的單體應用架構


單體架構概述:

把所有的業務模塊都堆砌在一個系統中,然後把系統打成一個war包或者jar包運行在應用伺服器中


單體架構的優點:

  • 架構單一,容易維護
  • 開發、測試、部署都比較便捷

單體架構的缺點:

  • 複雜度高
  • 部署慢,而且體積很大,不利於發布
  • 佔用伺服器資源過大
  • 阻礙新的技術創新

微服務概述

馬丁.福勒微服務架構博文譯文https://martinfowler.com/

2014 年一位名為 馬丁.福勒 的工程師提出微服務架構設計理念,我們看看大致翻譯學習一下它的博文https://martinfowler.com/articles/microservices.htmla definition of this new architectural term

「Microservices」 - yet another new term on the crowded streets of software architecture. Although our natural inclination is to pass such things by with a contemptuous glance, this bit of terminology describes a style of software systems that we are finding more and more appealing. We』ve seen many projects use this style in the last few years, and results so far have been positive, so much so that for many of our colleagues this is becoming the default style for building enterprise applications. Sadly, however, there’s not much information that outlines what the microservice style is and how to do it.

In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.


譯文:

微服務架構風格是一種將一個單一應用程式開發為一組小型服務的方法每個服務運行在自己的進程中,服務間通信採用輕量級通信機制 通常用http資源的api來實現。這些服務圍繞業務能力構建並且可通過全自動部署機制獨立部署,這些服務公用一個最小型的集中式的管理,服務可用不同的語言開發使用不同的數據存儲技術


典型的打車軟體微服務架構圖


微服務架構的特徵:

  • 每個微服務可獨立運行在自己的進程裡
  • 一系列獨立運行的微服務共同構建起整個系統
  • 每個微服務可用獨立的開發,在開發過程中只關注一個業務模塊的特定功能,比如支付服務,訂單管理,用戶管理等等
  • 可使用不同的語言與數據存儲技術(契合項目情況和團隊實力)
  • 微伺服器直接通過輕量的通信機制進行通信,比如:Rest API進行調用
  • 全自動的部署機制

微服務架構的優點:

  • 單個服務更易於開發、維護
  • 單個服務啟動比較快,部署也快,消耗的伺服器資源更少
  • 技術棧不受限制

微服務架構的缺點:

  • 運維要求高
  • 分布式服務固有的複雜度

什麼樣子的場景適合用微服務

  • 大型項目
  • 有快速迭代的要求
  • 訪問壓力過大的網站

什麼樣子的網站不適合微服務

  • 業務穩定
  • 迭代周期長

微服務拆分的方法論

  • DDD領域驅動設計
  • 面向對象驅動設計
  • 按照職責劃分(就是我們說的:訂單模塊、搜索模塊等)通用性劃分 (把一些通用功能做成微服務:比如用戶中心,支付中心、消息中心等。比如阿里流行的:大中臺和小中臺的概念,一個中臺其實是由:若干個微服務組成的)

微服務的設計的合理性

  • 滿足業務的後續的擴展和延展
  • 滿足團隊的成員的職業和技術的發展
  • 可以穩步的迭代和更新你的業務
  • 可以持續的更新或者調整你的技術架構,以及完全的可靠和抽離

建議:在實際的開發和生產中,如果你的項目屬於早期或者剛開始,通過分析以後模塊和業務並不複雜,其實不建議用微服務去架構,使用微服務一定要按照公司現有的資源,人員的實際情況出發,利用小步慢跑快速迭代 的思維去架構和演進項目才是王道。

相關焦點

  • 關於微服務拆分,聽聽一位微服務架構師的肺腑之言
    但在架構轉型時,原有系統應該如何進行微服務拆分呢?要避免哪些陷阱呢?在本文中,騰訊雲微服務架構師崔凱將為大家詳細解答。01 引言天下大勢,分久必合,合久必分,架構設計風格隨著系統的不斷演進逐步進行著分分合合的變化。
  • 微服務的戰爭:按什麼維度拆分服務
    張三:那即將要做的 「微服務」 是按照什麼維度去拆分的服務?鯉魚:常見的一般根據 !@&!(@&!@)#@ 的方式來拆分。張三:照你這麼說好像也不大對,我看每個業務組拆分的維度似乎都不大一樣?所以微服務的拆分維度到底是什麼?
  • SpringCloud微服務開發實戰:如何進行微服務的拆分?
    如何進行微服務的拆分在前面介紹了基於Spring Boot來快速實現一個「天氣預報」應用。雖然沒有使用太多的代碼,但已經實現了數據採集、數據緩存、提供天氣查詢等諸多的功能,這也是Spring Boot是快速實現企業級應用開發的利器的原因。Spring Boot讓企業級應用開發變得不再困難!
  • ...模塊化、集中式、分布式、服務化、面向服務的架構、微服務架構
    只是一個把拆分之後的每個片段叫做組件、另一個把拆分之後的片段叫做模塊。那麼這兩種拆分在拆分方式上是不是有什麼不同的?   關於組件化和模塊化的區別,我在網上看了好多資料,也沒有人能給出準確的回答。其實沒有準確回答的原因也比較明顯,那就是大多數時候我們真的不需要嚴格的區分這兩個名字。我們要學習的是其中的解耦和分治的思想和目的。
  • 看完這份微服務架構與實踐文檔,微服務不在難
    我們對於微服務架構的概念,相信大家應該都不陌生,無論使用 Apache Dubbo、還是 Spring Cloud,都可以去嘗試微服務,把複雜而龐大的業務系統拆分成一些更小粒度且獨立部署的 Rest 服務。但是這個過程,具體應該怎麼做?現有的條件下到底要不要做微服務?服務拆分成什麼粒度才是合適的?遺留的老系統需要如何考慮重構改造?有哪些坑需要我們注意?
  • 微服務架構概念特點與單體系統的對比如何實施微服務以及九大特性
    微服務架構概念微服務是系統架構設計風格, 它的主旨是將一個原本獨立的系統拆分成多個小型服務,這些小型服務都在各自獨立的進程中運行,服務之間通過基於HTTP的RSTful API進行通信協作。微服務架構特點被拆分的每一個小型服務都圍繞著系統中的某一項或某一些耦合度較高的業務功能進行構建, 並且每個服務都維護著自身的數據存儲、 業務開發、自動化測試案例以及獨立部署機制。由於有了輕量級的通信協作基礎, 微服務就可以使用不同的語言來編寫。
  • Alibaba架構師終於發布「微服務架構與實踐」文檔
    前言:對於微服務架構的概念,相信大家應該都不陌生,無論使用 Apache Dubbo、還是 Spring Cloud,都可以去嘗試微服務,把複雜而龐大的業務系統拆分成一些更小粒度且獨立部署的 Rest 服務。但是這個過程,具體應該怎麼做?現有的條件下到底要不要做微服務?服務拆分成什麼粒度才是合適的?
  • 微服務架構:初識Spring Cloud
    現在無論大小公司,都會講究微服務設計,無論應用大小,都會進行微服務架構,面試的時候,也會把微服務當成必談的知識點。那麼什麼是微服務呢?,簡單的來說,微服務是系統架構上的一種設計風格,它的目的就是將一個原本獨立垂直的系統拆分成多個小型服務,這些小型服務都在各自獨立的進程中運行,服務之間是通過基於HTTP的Restful API進行通信協議。
  • 企業從單體架構向微服務架構轉型的 9 個難點
    後端服務內,比如資料庫問題二:微服務中所謂的服務到底如何拆分,服務拆分到什麼粒度算好的服務?在談服務拆分之前首先給服務做個定義:服務是分布式架構下的基礎單元,包含了一組特定的功能。微服務拆分的方式沒有明確標準,可謂說是千人千面,每個人對於服務拆分理解程度和拆分尺度都不一樣,有的團隊按每個接口一個服務。
  • 從單體架構遷移到微服務?
    因為初期階段,由於人力,成本,業務熟悉程度,微服務技術積累等因素,如何過度設計可能工期和複雜度會急劇上升,造成交付困難,問題百出,從而錯過了時間窗口。最合適,簡單的方式還是單體優先,這是創業公司的特點決定的。當然設計面向微服務的單體架構也是一種聰明的方法,這遵守了系統演化的法則。
  • 傳統企業微服務架構轉型-從問題分析到規劃實施
    ,即解釋清楚什麼是單體應用,什麼是微服務架構,微服務架構的核心是什麼?其次解釋清楚微服務架構和SOA的關係。對於微服務架構進一步解釋清楚判斷的標準是什麼?同時要說明清楚,要實現一個完整的微服務架構,需要滿足哪些判斷準則,同時在微服務架構裡面有哪些關鍵的核心組件,這些組件是起什麼作用?具體選用的標準是什麼?在這裡可以講解下SpringCloud框架以及框架中的各個開源組件,並把每個組件本身的作用講清楚。
  • 美國克裡斯·理查森的微服務架構設計模式藍光版PDF免費開源
    架構的關鍵是什麼?架構就是取捨,進而架構師就是做出取捨的人。大家都認同,做架構的人的特徵之一應該是「Independent」(獨立),這也是我選擇做獨立解決方案進而設計產品的重要原因。在我們看來,只有獨立才有可能讓我們在做架構設計時做出中立和獨特的方案。
  • 不想得過且過的寫業務代碼,這本「微服務架構與實踐」你必須搞懂
    前言:21世紀網際網路時代發展迅速,作為程式設計師的你,如果現在你還只是在做著crud的工作,那麼你離告別這個行業也就不遠了,如果你不想得過且過的寫業務代碼,更想突破設計思想,那麼對於網際網路公司的一些架構實踐你必須的了解,而微服務,作為網際網路公司的重中之重,你更需要徹底搞明白,這已成為所有網際網路公司對程式設計師的基本要求。
  • 企業IT架構轉型中微服務架構實踐中常見問題總結
    要確保每個微服務都獨立自治和鬆耦合,那麼微服務從資料庫到邏輯層到前臺全部都要進行縱向拆分。即資料庫的拆分是整個微服務架構設計中的一個關鍵內容。而這裡有一個關鍵思考就是,在微服務實踐中你會看到,實際上你上層的微服務組件的拆分相當來說會更加細,一個不算複雜的業務系統拆分到20到30個微服務組件都是正常情況。
  • 漫談何時從單體架構遷移到微服務?
    ,到底如何評估微服務,什麼時候使用微服務,什麼時間點最合適,需要哪些技術儲備和資源投入等等,這些都是你需要面對和解決的。複雜性增加:相對單體架構將所有功能打包部署在一起,集中地進行開發、測試和運維,微服務會將這些單體的服務進行拆分部署,業務拆分粒度是一個難點,拆分後服務聚合也是一個麻煩。因為服務粒度增加後,相互調用,相互依存,所以問題排查難度會增加,就需要一套完整的服務監控,服務跟蹤和治理的系統。
  • 網易雲詳解:微服務架構如何促進企業數位化轉型
    陳諤表示,業務架構服務化是企業擁抱變化、實現數據資產化的必由之路,而實現業務架構服務化的技術基礎是微服務架構,需要解決服務拆分、資源調度、工程化、系統魯棒性、故障診斷、運維複雜性等挑戰。目前,網易雲已經基於開源技術棧很好地解決了這些問題。
  • 如何從傳統springmvc架構逐步遷移到微服務架構
    springmvc架構逐步遷移到微服務架構。如果有以下幾點場景,建議可以開始規劃微服務架構設計:1.對微服務技術感興趣的人員;2.希望找到一份較好的技術崗位的人;3.對當前項目想做大做強的項目,就提前考慮架構設計的架構師;4.當前單體架構已經不滿足實際業務場景,不得不做技術的升級改造;下面我就講解下如何從傳統springmvc架構可以逐步無縫遷移到微服務架構
  • Github標星67.9k的微服務架構以及架構設計模式筆記我粉了
    微服務架構是什麼?我們都知道微服務架構是一種架構概念,旨在通過將功能分解到各個離散的服務中以實現對解決方案的解耦。你可以將其看作是在架構層次而非獲取服務的類上應用很多SOLID原則。微服務架構是個很有趣的概念,它的主要作用是將功能分解到離散的各個服務當中,從而降低系統的耦合性,並提供更加靈活的服務支持。
  • 微服務架構:介紹、分布式集群、架構四要素、設計模式、架構說明
    後集群:根據請求訪問量多的服務弄成集群模式,例如12306中的查票服務。微服務是什麼微服務是一個支持特定業務場景的獨立部署單元。它藉助語義化版本管理、定義良好的 API 與其他後端服務交互。架構四要素:問題:確定問題,怎麼做    問題邊界 (約束 ):誰的問題,給出約束生命周期:從生到死拆分:根據問題的生命周期拆分設計模式
  • 對微服務架構設計實踐中若干問題的探討
    要確保每個微服務都獨立自治和鬆耦合,那麼微服務從資料庫到邏輯層到前臺全部都要進行縱向拆分。即資料庫的拆分是整個微服務架構設計中的一個關鍵內容。而這裡有一個關鍵思考就是,在微服務實踐中你會看到,實際上你上層的微服務組件的拆分相當來說會更加細,一個不算複雜的業務系統拆分到20到30個微服務組件都是正常情況。