1. 背景與挑戰(zhàn)
隨著公司國際化戰(zhàn)略的推行以及本土業(yè)務(wù)的高速發(fā)展,后臺支撐系統(tǒng)已經(jīng)不堪重負(fù)。在吞吐量、穩(wěn)定性以及可擴(kuò)展性上都無法滿足日益增長的業(yè)務(wù)需求。對于每10萬元額度的合同,從銷售團(tuán)隊(duì)準(zhǔn)備材料、與客戶簽單、遞交給合同部門,再到合同生效大概需要3.5人天。隨著業(yè)務(wù)量的快速增長,簽訂合同的成本急劇增加。
合同管理系統(tǒng)是后臺支撐系統(tǒng)中重要的一部分。當(dāng)前的合同系統(tǒng)是5年前使用.NET基于SAGE CRM二次開發(fā)的產(chǎn)品。 一方面,系統(tǒng)架構(gòu)過于陳舊,性能、可靠性無法滿足現(xiàn)有的需求。另一方面,功能繁雜,結(jié)構(gòu)混亂,定制的代碼與SAGE CRM系統(tǒng)耦合度極高。由于是遺留系統(tǒng),熟悉該代碼的人早已離職多時(shí),新團(tuán)隊(duì)對其望而卻步,只能做些周邊的修補(bǔ)工作。同時(shí),還要承擔(dān)著邊補(bǔ)測試,邊整理邏輯的工作。
在無法中斷業(yè)務(wù)處理的情況下,為了解決當(dāng)前面臨的問題,團(tuán)隊(duì)制定了如下的策略:
1). 在現(xiàn)有合同管理系統(tǒng)的外圍,構(gòu)建功能服務(wù)接口,將系統(tǒng)核心的功能分離出來。
2). 利用這些功能服務(wù)接口作為代理,解耦原合同系統(tǒng)與其調(diào)用者之間的依賴;
3). 通過不斷構(gòu)建功能服務(wù)接口,逐漸將原有系統(tǒng)分解成多個(gè)獨(dú)立的服務(wù)。
4). 摒棄原有的合同管理系統(tǒng),使用全新構(gòu)建的(微)服務(wù)接口替代。
2. 什么是微服務(wù)
多年來,我們一直在技術(shù)的浪潮中不斷乘風(fēng)破浪,揚(yáng)帆奮進(jìn),尋找更好的方式構(gòu)建IT系統(tǒng)。微服務(wù)架構(gòu)(Micro Service Architect)是近一段時(shí)間在軟件體系架構(gòu)領(lǐng)域里出現(xiàn)的一個(gè)新名詞。它通過將功能分解到多個(gè)獨(dú)立的服務(wù),以實(shí)現(xiàn)對解決方案或者復(fù)雜系統(tǒng)的解耦。
微服務(wù)的誕生并非偶然: 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)指導(dǎo)我們?nèi)绾畏治霾⒛P突瘡?fù)雜的業(yè)務(wù);敏捷方法論幫助我們消除浪費(fèi),快速反饋;持續(xù)交付促使我們構(gòu)建更快、更可靠、更頻繁的軟件部署和交付能力;虛擬化和基礎(chǔ)設(shè)施自動(dòng)化( Infrastructure As Code)則幫助我們簡化環(huán)境的創(chuàng)建、安裝;DevOps文化的流行以及特性團(tuán)隊(duì)的出現(xiàn),使得小團(tuán)隊(duì)更加全功能化。這些都是推動(dòng)微服務(wù)誕生的重要因素。
實(shí)際上,微服務(wù)本身并沒有一個(gè)嚴(yán)格的定義。不過從業(yè)界的討論來看,微服務(wù)通常有如下幾個(gè)特征:
小,且專注于做一件事情
每個(gè)服務(wù)都是很小的應(yīng)用,至于有多小,是一個(gè)非常有趣的話題。有人喜歡100行以內(nèi),有人贊成1000行以內(nèi)。數(shù)字并不是最重要的。仁者見仁,智者見智,只要團(tuán)隊(duì)覺得合適就好。只關(guān)注一個(gè)業(yè)務(wù)功能,這一點(diǎn)和我們平常談?wù)摰拿嫦驅(qū)ο笤瓌t中的”單一職責(zé)原則”類似,每個(gè)服務(wù)只做一件事情,并且把它做好。
運(yùn)行在獨(dú)立的進(jìn)程中
每個(gè)服務(wù)都運(yùn)行在一個(gè)獨(dú)立的操作系統(tǒng)進(jìn)程中,這意味著不同的服務(wù)能被部署到不同的主機(jī)上。
輕量級的通信機(jī)制
服務(wù)和服務(wù)之間通過輕量級的機(jī)制實(shí)現(xiàn)彼此間的通信。所謂輕量級通信機(jī)制,通常指基于語言無關(guān)、平臺無關(guān)的這類協(xié)議,例如XML、JSON,而不是傳統(tǒng)我們熟知的Java RMI或者.Net Remoting等。
松耦合
不需要改變依賴,只更改當(dāng)前服務(wù)本身,就可以獨(dú)立部署。這意味著該服務(wù)和其他服務(wù)之間在部署和運(yùn)行上呈現(xiàn)相互獨(dú)立的狀態(tài)。
綜上所述,微服務(wù)架構(gòu)采用多個(gè)服務(wù)間互相協(xié)作的方式構(gòu)建傳統(tǒng)應(yīng)用。每個(gè)服務(wù)獨(dú)立運(yùn)行在不同的進(jìn)程中,服務(wù)與服務(wù)之間通過輕量的通訊機(jī)制交互,并且每個(gè)服務(wù)可以通過自動(dòng)化部署方式獨(dú)立部署。
3.微服務(wù)的優(yōu)勢
相比傳統(tǒng)的單塊架構(gòu)系統(tǒng)(monolithic),微服務(wù)在如下諸多方面有著顯著的優(yōu)勢:
異構(gòu)性
問題有其具體性,解決方案也應(yīng)有其針對性。用最適合的技術(shù)方案去解決具體的問題,往往會事半功倍。傳統(tǒng)的單塊架構(gòu)系統(tǒng)傾向采用統(tǒng)一的技術(shù)平臺或方案來解決所有問題。而微服務(wù)的異構(gòu)性,可以針對不同的業(yè)務(wù)特征選擇不同的技術(shù)方案,有針對性的解決具體的業(yè)務(wù)問題。