下面我們創(chuàng)建一個(gè)Sample項(xiàng)目。
先來(lái)看看基本架構(gòu)的想法。
技術(shù)棧:
Kong+GrayLog+OAuth2+Springboot+Express+Swagger
Devops : Jenkins+Git+Docker+Rancher

1. 首先項(xiàng)目是基于IaaS,從供應(yīng)商那獲虛擬機(jī), 小公司嘛,不期望花太多的時(shí)間在Infra上, Docker 隔離環(huán)境差異性,application 以docker image的方式發(fā)布。
2. 客戶端(Browser,APP或者其他第三方系統(tǒng))請(qǐng)求首先到第一層Loadbalancer,這個(gè)Loadbalancer是可選的,可能是云供應(yīng)商提供的,也可以是自己的apache,Nginx(或者直接就是kong)或者F5。不是必須的,如果云廠商沒有提供,那可以忽略。
3.客戶端請(qǐng)求通過第一層的LB之后,到達(dá)API gateway。個(gè)人理解,API gateway 就是一個(gè)門,入戶大門也好房間之間的們也罷,反正們的基本功能是必須的。它可以完成對(duì)API的簡(jiǎn)單轉(zhuǎn)換,AuthC,Rate-limitting,logging,caching以及Transformations。這里我們用的是Kong(沒錯(cuò)就是那個(gè)大猩猩)。Kong 基于Nginx開發(fā)出來(lái)的完整概念上的API gateway,在性能方面你可以放心使用。Kong有很多插件,如果需要自己開發(fā)插件的話,可能要稍微學(xué)一下Lua。當(dāng)然對(duì)于控制狂來(lái)說(shuō)可能會(huì)選擇Spring Cloud來(lái)自己寫一些變態(tài)需求。
4.客戶端訪問的資源可能是一個(gè)需要AuthC。API gateway可以從認(rèn)證服務(wù)器LDAP/Oauth2來(lái)進(jìn)行認(rèn)證。然后將請(qǐng)求轉(zhuǎn)給Rancher的loadbalancer。
5.Rancher是一個(gè)容器編排軟件。隨著docker的流行,Rancher也已經(jīng)for production了。相比其他容器編排軟件(Kubernetes,Mesos, Swarm)來(lái)說(shuō),最大的好處就是難度適中。給了我們中小型企業(yè)一個(gè)構(gòu)建自己的CaaS和PaaS的機(jī)會(huì)。請(qǐng)求發(fā)送到Rancher的LB后會(huì)轉(zhuǎn)給App容器完成相關(guān)任務(wù)。對(duì)于微服務(wù)來(lái)說(shuō),rancher+docker 很容易的就能實(shí)現(xiàn)服務(wù)注冊(cè),服務(wù)發(fā)現(xiàn),健康檢測(cè),路由,負(fù)載均衡。
6.App容器開發(fā)語(yǔ)言不相關(guān),只需要完成自己的微服務(wù)就好了,他所需要的其他服務(wù)地址,只需要調(diào)用其服務(wù)名,Docker/Rancher的DNS會(huì)自動(dòng)完成相關(guān)的轉(zhuǎn)換。
7.App2 是一個(gè)springboot的實(shí)現(xiàn),可以通過spring config來(lái)完成一些業(yè)務(wù)相關(guān)的配置管理。當(dāng)然Rancher也可以在容器啟動(dòng)的時(shí)候以環(huán)境變量的方式將配置信息傳進(jìn)去。
8.spring config 從GIT 或者 本地磁盤獲取相關(guān)的配置文件。
9.任何第三放的服務(wù),都可以通過Rancher以Service的方式配置到rancher的Stack里面。
10.Graylog只是一個(gè)日志工具(可以被logstash,splunk等替代),應(yīng)用容器將日志直接輸出到syslog(理論基礎(chǔ)就是,開發(fā)人員不關(guān)心日志放哪里,看console就行了,application不需要關(guān)心日志放哪里,負(fù)責(zé)輸出就行了,日志服務(wù)器關(guān)心日志放哪里,取syslog就行啦)。
11. 所有容器/軟件都部署到IaaS上,在IaaS的主機(jī)上只需要安裝Docker就可以了。
12.DevOps流程之后討論。

好了,這就是一個(gè)基本的簡(jiǎn)單的架構(gòu)。下面來(lái)詳細(xì)講解這個(gè)Demo。