什麼是微服務
假設一個ProductSpeed有兩個不同的構造器:
public class ProductSpeed { public ProductSpeed(String name) { ... } public ProductSpeed(String name, int order)) { } } <p class="indent"> |
第一個構造器是使用在不相關的產品的訂單中。
第二個構造器是我們關注的,因為我們在向使用者顯示這些產品時首先進行一下排序。
產生這兩個構造器的原因是:這個物件可能產生於兩個不同的系統,只是在一個系統中有排序要求存在,而另外一個沒有這個要求。
我們實際做的是一個物件兩個不同的版本,但是我們不能取名為:ProductSpeedForSystem1′ 和 ‘ProductSpeedForSystem2′!
在領域驅動設計DDD中,我們可以認為ProductSpeed是存在兩個不同有界上下文中(共享核心),如果是在一個大型整塊系統中,它們是分別位於不同的包下面。
下面我們就要區分這兩個不同的上下文,進一步我們會發現以第二個建構函式建立的ProductSpeed物件其實和系統其他應用並沒有互動,只是為客戶端排序而存在,直接服務於客戶端,向外服務,而不是向內部元件提供互動(向內不能稱為"服務"了),因此這個獨立的上下文可以成為一個微服務。
原來我們是透過一個整塊API提供所有功能,如下圖的Main API:
將上下文區分開以後,微服務可以從原來整塊上下文獨立出來了:
微服務定義:
每個應用程式都只做一件事
•足夠小,適合存在你的腦袋即可。
- “如果一個類大到我腦袋記不住就是實在太大“
•足夠小,你可以把它們扔掉
- 用重寫來維護
微服務類似Unix的服務:
1. 嵌入了Web容器(以往JavaEE都是服務執行在tomcat等Web容器中)
– 比如可以使用Jetty / SimpleMind
(案例:http://www.jdon.com/idea/javaee7/websocket-jetty.html),這樣可以防止抽象洩漏,否則你會去閱讀Tomcat原始碼。
– 測試(測試甚至不重要)和易部署,脫離容器,直接是一個應用,無需那麼多Mock了。
2.打包成單個可執行的jar包
– 有自己獨立的配置
– 標準的unix rc.d 指令碼
3. 可以以類似Unix後臺啟動Httpd服務方式等啟動
– Unix的後臺守護 Daemons看樣子工作這麼多年很好,除非你有特殊需求,否則不要重複發明輪子。
4. 每個應用都是獨立分離的,符合領域驅動設計和Conways法則的有界上下文,使用物理的實現真正分離他們。
5.如果有共同的程式碼,將其成為一個底層設施的庫包。
–對待它們就像對待其他開源庫包專案一樣。
–可以將其提交到Maven中央倉庫,作為一個二進位制依賴包。
6. 能夠自給自足Provisioned。
許多小應用程式的複雜性管理之道是在於讓它們自我管理。比如ServiceA和ServiceB自己實現負載平衡和自動擴充套件,資料庫自己實現叢集。
7. 用看門狗來堅持應用的狀態,類似Scala的Actor模型,如果有失敗,自動重啟它們。每個應用都要向外暴露它們的執行情況,以便監視。
微服務原始定義見:http://2012.33degree.org/talk/show/67
相關文章
- 微服務是什麼?微服務
- 什麼是微服務?微服務
- 01、什麼是微服務微服務
- 微服務架構(一):什麼是微服務微服務架構
- 微服務指南走北(一):微服務是什麼微服務
- 小白入門微服務(0) - 什麼是微服務微服務
- 面試官靈魂三問:什麼是SOA?什麼是微服務?SOA和微服務有什麼區別?面試微服務
- 什麼是微服務,它要幹啥微服務
- 微服務是什麼?帶你簡單瞭解微服務微服務
- 微服務思考(01):什麼是微服務?微服務的優勢和劣勢微服務
- 什麼是微服務架構?什麼是服務註冊與發現微服務架構
- 華為雲容器和微服務是什麼?微服務
- 什麼是 CQRS?它在微服務中有多重要?微服務
- 為什麼微服務應該是事件驅動?微服務事件
- 到底什麼是微服務?其實就是DDD領域服務微服務
- 微服務精華問答:什麼是微服務架構中的DRY?| 技術頭條微服務架構
- (1)微服務是什麼?它的優缺點有哪些?微服務
- 為什麼要使用微服務微服務
- 【微服務入門】kubernetes是什麼?K8S能幹什麼?微服務K8S
- 一篇故事告訴你什麼是微服務架構!微服務架構
- SOA架構和微服務架構的區別是什麼?架構微服務
- 圖文詳解:如何給女朋友解釋什麼是微服務?微服務
- 微服務不同環境到底該如何部署?最佳實踐是什麼?微服務
- 為什麼微服務架構需要聚合微服務架構
- 為什麼要使用微服務架構?微服務架構
- 分散式微服務為什麼很難?分散式微服務
- IT服務管理是什麼?
- 小白解釋:什麼是分散式微服務中的冪等? - LispCast分散式微服務LispPCAAST
- 微服務的戰爭:按什麼維度拆分服務微服務
- 微服務為什麼一定要用docker微服務Docker
- 微服務為什麼一定要上Docker?微服務Docker
- Golang之微服務為什麼發現不了Golang微服務
- 為什麼微服務需要API閘道器?微服務API
- 為什麼RESTful微服務和非同步程式設計是一種趨勢?REST微服務非同步程式設計
- 微服務拆分到什麼粒度合適——康威定律微服務
- 為什麼Kubernetes天然適合微服務?微服務
- 為什麼 kubernetes 天然適合微服務微服務
- 什麼時候你不應該使用微服務微服務