最近最火的詞是什麼?那大概就是微服務(Microservice
)了。最近也火的一踏糊塗的Docker、AppOps也都是圍繞着微服務領域的。在微服務領域還有不少相關名詞。這些名詞有一個共同的特色那就是晦澀難懂。他們就像中國古代的道、氣、八卦等詞同樣,一解釋就懂,一問就不知,一討論就打架。
html
本文主要來介紹幾個和微服務相關的概念。這些概念的都是博主在瀏覽了大量資料以後總結出的我的看法,若有偏頗,請指正,共勉之。前端
首先來談兩個前端和移動端比較常見的詞:組件化
和模塊化
(後面我會說到爲何要先介紹組件化
和模塊化
)。web
首先,能夠確定的是,組件化和模塊化的中心思想都是分而治之
。目的都是將一個龐大的系統拆分紅多個組件或者說是模塊。架構
首先來看維基百科中關於組件化(Component-based software engineering)的介紹:app
Component-based software engineering (CBSE), also known as component-based development (CBD), is a branch of software engineering that emphasizes the separation of concerns in respect of the wide-ranging functionality available throughout a given software system. It is a reuse-based approach to defining, implementing and composing loosely coupled independent components into systems. This practice aims to bring about an equally wide-ranging degree of benefits in both the short-term and the long-term for the software itself and for organizations that sponsor such software.運維
大概意思就是:組件化就是基於可重用的目的,將一個大的軟件系統按照分離關注點的形式,拆分紅多個獨立的組件,主要目的就是減小耦合。分佈式
維基百科中對模塊化Modular Programming的定義以下:ide
Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality.模塊化
With modular programming, concerns are separated such that modules perform logically discrete functions, interacting through well-defined interfaces.函數
模塊化的目的在於將一個程序按照其功能作拆分,分紅相互獨立的模塊,以便於每一個模塊只包含與其功能相關的內容,模塊之間經過接口調用。將一個大的系統模塊化以後,每一個模塊均可以被高度複用。
從上面的定義中能夠看出,組件化和模塊化的意思差很少,主要思想都是分而治之。只是一個把拆分以後的每一個片斷叫作組件、另外一個把拆分以後的片斷叫作模塊。那麼這兩種拆分在拆分方式上是否是有什麼不一樣的?
關於組件化和模塊化的區別,我在網上看了好多資料,也沒有人能給出準確的回答。其實沒有準確回答的緣由也比較明顯,那就是大多數時候咱們真的不須要嚴格的區分這兩個名字。咱們要學習的是其中的解耦和分治的思想和目的。
從另一個角度來說,若是真的要區分一下組件化和模塊化的話,那麼能夠認爲這兩種分而治之的目的稍有區別:
模塊化的目的是爲了
重用
,模塊化後能夠方便重複使用和插撥到不一樣的平臺,不一樣的業務邏輯過程當中。組件化的目的是爲了
解耦
,把系統拆分紅多個組件,分離組件邊界和責任,便於獨立升級和維護。
要談微服務,那麼必須創建在分佈式的基礎上,對於一個集中式系統也無需談微服務。在個人另一篇文章微觀SOA:服務設計原則及其實踐方式(上篇))
微服務架構(MicroService
)是一種服務化架構風格,經過將功能分散到各個離散的服務中以實現對解決方案的解耦。微服務架構強調的第一個重點就是業務系統須要完全的組件化和服務化(這也是咱們爲何要先介紹組件化和服務化的緣由)。微服務的誕生並不是偶然。它是互聯網高速發展,敏捷、精益、持續交付方法論的深刻人心,虛擬化技術與DevOps文化的快速發展以及傳統單塊架構沒法適應快速變化等多重因素的推進下所誕生的產物。
微服務的流行,Martin功不可沒,先看看他是如何定義微服務的:
The microservice architectural style is an approach to developing a single application asa 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.
總結起來大概如下四點:
Martin本身也說了,每一個人對微服務均可以有本身的理解,不過大概的標準仍是有一些的。
看了SOA和微服務,不少人會認爲這不就是一回事兒麼。其實SOA和微服務就是差很少的。
若是一句話來談SOA和微服務的區別,即微服務再也不強調傳統SOA架構裏面比較重的ESB企業服務總線。微服務把全部的「思考」邏輯包括路由、消息解析等放在服務內部,去掉一個大一統的ESB,服務間輕通訊,是比SOA更完全的拆分。(微服務(Microservice)那點事)
關於微服務這裏只是作一個簡單的介紹,要想真正的瞭解微服務還有不少路要走,好比康威定律(我後面會專門寫一篇文章介紹康威定律)、服務間通訊、服務的註冊與發現、服務治理與服務編排等。。。
本文主要介紹了組件化、模塊化、集中式、分佈式、服務化、面向服務的架構、微服務架構等概念。可是,正所謂實踐出真知。仍是要在平常工做中實際運用才能真正的掌握。