微服務(wù)架構(gòu)那點(diǎn)事
相信很多朋友了解微服務(wù)架構(gòu)都是從Martin Fowler的那篇文章開始。而實(shí)際上,Martin卻并不是最早談及微服務(wù)架構(gòu)的,本篇文章就和你聊聊微服務(wù)架構(gòu)定義的那點(diǎn)事。
最易懂的版本
Martin Fowler的這篇文章《Microservices》通俗易懂的講解了什么是微服務(wù)架構(gòu).

微服務(wù)架構(gòu)是一種架構(gòu)模式,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶提供最終價(jià)值。每個(gè)服務(wù)運(yùn)行在其獨(dú)立的進(jìn)程中,服務(wù)與服務(wù)間采用輕量級(jí)的通信機(jī)制互相協(xié)作(通常是基于HTTP協(xié)議的RESTful API)。每個(gè)服務(wù)都圍繞著具體業(yè)務(wù)進(jìn)行構(gòu)建,并且能夠被獨(dú)立的部署到生產(chǎn)環(huán)境、類生產(chǎn)環(huán)境等。
我在2015年4月QCon的《基于微服務(wù)架構(gòu),改造企業(yè)遺留系統(tǒng)的實(shí)踐》演講上,將這四個(gè)特性定義抽象為“小、獨(dú)、輕、松”。最后一個(gè)字之所以定義成松,是為了讀起來能朗朗上口。確切的講,松所代表的含義其實(shí)是服務(wù)具備獨(dú)立的流水線,能夠被獨(dú)立的構(gòu)建,并且被獨(dú)立的部署。實(shí)際上,Martin Fowler并不是最早提出微服務(wù)架構(gòu)概念的人。
最早期的版本
最早提出微服務(wù)架構(gòu)概念的,是Fred George。他一位非常傳奇的人物,從業(yè)40多年,接觸過70+編程語言,就職過IBM、TW等多家公司,并在社區(qū)和大會(huì)上做過很多分享。后來成立獨(dú)立的咨詢公司,為金融、電信、保險(xiǎn)、航空等多個(gè)行業(yè)提供敏捷、持續(xù)交付、DevOps等轉(zhuǎn)型服務(wù),他也是最早實(shí)踐XP、Scrum、和看板的人之一.

在2012年3月的Agile India上,F(xiàn)red George分享了題為
“Micro (u)Services Architecture -small, short lived services rather than SOA.”
的演講。在演講中,他描述了從2005~2009年期間,他和所在的團(tuán)隊(duì)是如何將100萬行的傳統(tǒng)J2EE程序,通過解耦、自動(dòng)化驗(yàn)證等實(shí)踐,逐漸分解成20多個(gè)5K行代碼的小服務(wù),又分解成200多個(gè)500行代碼的服務(wù)的過程,而其中,也大談了基于Kafka的消息解耦服務(wù)間依賴。我認(rèn)為,這是對(duì)微服務(wù)定義的最早版本了。
最簡潔的版本
Adrain Cockcroft,Netflix的云架構(gòu)師,主導(dǎo)了Netflix從2009到2016年服務(wù)化拆分、從數(shù)據(jù)中心遷移到云平臺(tái)、以及組織、流程、工具等的演進(jìn)等.

他對(duì)微服務(wù)的定義是:
Loosely coupled service oriented architecture with bounded contexts.
其中兩個(gè)核心點(diǎn)Loosely coupled 和 Bounded context。Loosely coupled表明,服務(wù)之間是松耦合的。什么叫松耦合?就是指服務(wù)能夠被獨(dú)立更新。如果不能被獨(dú)立更新,那證明服務(wù)就不是松耦合的。Bounded context,源于DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)),表明對(duì)于服務(wù)而言,它的業(yè)務(wù)是獨(dú)立的,我們不需要知道它的依賴者,根據(jù)接口就可以更新服務(wù)的代碼。我認(rèn)為,這是對(duì)微服務(wù)定義的最簡潔版本了。
最與時(shí)俱進(jìn)的版本
第三個(gè)版本,來自Neal Ford,他是TW的資深技術(shù)專家,《卓有成效的程序員》作者,也是TW技術(shù)雷達(dá)的發(fā)起者和維護(hù)者之一。

他對(duì)微服務(wù)架構(gòu)的定義是
“Microservices are the first post DevOps revolution architecture.”
這是第一次將微服務(wù)和DevOps緊密關(guān)聯(lián)起來的版本。
實(shí)際上,DevOps作為一場開發(fā)與運(yùn)維手拉手,心連心的運(yùn)動(dòng),正在席卷著整個(gè)社區(qū)。DevOps所涵蓋的一系列文化、實(shí)踐以及自動(dòng)化的理念(CALMS),是微服務(wù)演進(jìn)過程中必不可少的先決條件。可以說,在傳統(tǒng)的運(yùn)維模式下,有效實(shí)現(xiàn)微服務(wù)架構(gòu)幾乎是不可能的,因?yàn)槲⒎?wù)的實(shí)施需要自動(dòng)化基礎(chǔ)設(shè)施、自動(dòng)化部署、自動(dòng)化驗(yàn)證、以及利用有效的工具完成運(yùn)維、監(jiān)控、告警等。而只有將DevOps與微服務(wù)緊密的結(jié)合起來,才能達(dá)到事半功倍的效果。
總結(jié)
如上就是我認(rèn)為微服務(wù)演進(jìn)過程中,最具有代表性的幾個(gè)定義,當(dāng)然,除了這3位大師,還有很多其他大師,譬如Sam Newman,James Lewis等發(fā)表的見解。
感興趣的朋友可以繼續(xù)挖掘一下,了解微服務(wù)架構(gòu)演進(jìn)過程中,大師們是如何看待微服務(wù)架構(gòu)的。