代碼生成工具
借助Stencil代碼生成工具,我們能在很短時間內(nèi)就構(gòu)建出一個可以立即運行的微服務(wù)應(yīng)用程序。隨著系統(tǒng)越來越復(fù)雜,微服務(wù)程序的不斷增多,Stencil模板和代碼生成工具幫助我們大大簡化了創(chuàng)建微服務(wù)的流程,讓開發(fā)人員更關(guān)注如何實現(xiàn)業(yè)務(wù)邏輯并快速驗證。
Create a project from the stencil template (version 0.1.27)
--name, -n <s>: New project name. eg. things-and-stuff
--git-owner, -g <s>: Git owner (default: which team or owner)
--database, -d: Include database connection code
--triggered-task, -t: Include triggered task code
--provider, -p: Is it a service provider? (other services use this service)
--consumer, -c: Is it a service consumer? (it uses other services)
--branch, -b <s>: Specify a particular branch of Stencil
--face-palm, -f: Overide name validation
--help, -h: Show this message
如上代碼所示,通過指定不同參數(shù),我們能創(chuàng)建具有數(shù)據(jù)庫訪問能力的微服務(wù)程序,或者是包含異步隊列處理的微服務(wù)程序。同時,我們也可以標(biāo)記該服務(wù)是數(shù)據(jù)消費者還是數(shù)據(jù)生產(chǎn)者,能幫助我們理解多個微服務(wù)之間的聯(lián)系。
持續(xù)集成模板
基于持續(xù)集成服務(wù)器Bamboo,團隊創(chuàng)建了針對Stencil的持續(xù)集成模板工程,并定義了三個主要階段:
打包:運行單元測試,集成測試,等待測試通過后生成RPM包。
發(fā)布:將RPM包發(fā)布到Koji服務(wù)器上,并打上相應(yīng)的Tag。然后使用Packer在亞馬遜 AWS云環(huán)境中創(chuàng)建AMI,建好的AMI上已經(jīng)安裝了當(dāng)前微服務(wù)程序的最新RPM包。
部署:基于指定版本的AMI,將應(yīng)用快速部署到驗收環(huán)境或者產(chǎn)品環(huán)境上。
利用持續(xù)集成模板工程,團隊僅需花費很少的時間,就可以針對新建的微應(yīng)用程序,在Bamboo上快速定義其對應(yīng)的持續(xù)集成環(huán)境。
一鍵部署工具
所有的微服務(wù)程序都部署并運行在亞馬遜AWS云環(huán)境上。同時,我們使用Asgard對AWS云環(huán)境中的資源進行創(chuàng)建、部署和管理。 Asgard是一套功能強大的基于Web的AWS云部署和管理工具,由Netflix采用Groovy>基于B/S的AWS部署及管理工具,使用戶能通過瀏覽器直接訪問AWS云資源,無需設(shè)置Secret Key和Access Key;
定義了`Application`以及`Cluster`等邏輯概念,更清晰、有效地描述了應(yīng)用程序在AWS云環(huán)境中對應(yīng)的部署拓撲結(jié)構(gòu)。
在對應(yīng)用的部署操作中,集成了AWS Elastic Load Balancer、AWS EC2以及AWS Autoscaling Group,并將這些資源自動關(guān)聯(lián)起來。
提供RESTful接口,能夠方便地與其他系統(tǒng)集成。
簡潔易用的用戶接口,提供可視化的方式完成一鍵部署以及流量切換。
由于Asgard對RESTful的良好支持,團隊實現(xiàn)了一套基于Asgard的命令行部署工具,只需如下一條命令,提供應(yīng)用程序的名稱以及版本號,就可自動完成資源的創(chuàng)建、部署、流量切換、刪除舊的應(yīng)用等操作。
asgard-deploy [AppName] [AppVersion]
同時,基于命令行的部署工具,也可以很容易的將自動化部署集成到Bamboo持續(xù)集成環(huán)境。
通過使用微服務(wù)框架Stencil,大大縮短了團隊開發(fā)微服務(wù)的周期。同時,基于Stencil,我們定義了一套團隊內(nèi)部的開發(fā)流程,幫助團隊的每一位成員理解并快速構(gòu)建微服務(wù)。
微服務(wù)架構(gòu)下的新系統(tǒng)
經(jīng)過5個月的努力,我們重新構(gòu)建了合同管理系統(tǒng),將之前的產(chǎn)品、價格、銷售人員、合同簽署、合同審查以及PDF生成都定義成了獨立的服務(wù)接口。相比之前大而全、難以維護的合同管理系統(tǒng)而言,新的系統(tǒng)由不同功能的微服務(wù)組成,每個微服務(wù)程序只關(guān)注單一的功能。每個微服務(wù)應(yīng)用都有相關(guān)的負責(zé)人,通過使用Page Duty建立消息通知機制。每當(dāng)有監(jiān)控出現(xiàn)告警的時候,責(zé)任人能立即收到消息并快速做出響應(yīng)。
由于微服務(wù)具有高內(nèi)聚,低耦合的特點,每個應(yīng)用都是一個獨立的個體。當(dāng)出現(xiàn)問題時,很容易定位問題并解決問題,大大縮短了修復(fù)缺陷的周期。另外,通過使用不同功能的微服務(wù)接口提供數(shù)據(jù),用戶接口(UI)部分變成了一個非常簡潔、輕量級的應(yīng)用,更關(guān)注如何渲染頁面以及表單提交等交互功能。