下面我們創(chuàng)建一個Sample項目。
先來看看基本架構(gòu)的想法估蹄。
技術(shù)棧:
Kong+GrayLog+OAuth2+Springboot+Express+Swagger
Devops : Jenkins+Git+Docker+Rancher
1. 首先項目是基于IaaS塑煎,從供應(yīng)商那獲虛擬機, 小公司嘛臭蚁,不期望花太多的時間在Infra上, Docker 隔離環(huán)境差異性最铁,application 以docker image的方式發(fā)布。
2. 客戶端(Browser垮兑,APP或者其他第三方系統(tǒng))請求首先到第一層Loadbalancer冷尉,這個Loadbalancer是可選的,可能是云供應(yīng)商提供的系枪,也可以是自己的apache雀哨,Nginx(或者直接就是kong)或者F5。不是必須的嗤无,如果云廠商沒有提供震束,那可以忽略怜庸。
3.客戶端請求通過第一層的LB之后,到達(dá)API gateway垢村。個人理解割疾,API gateway 就是一個門,入戶大門也好房間之間的們也罷嘉栓,反正們的基本功能是必須的宏榕。它可以完成對API的簡單轉(zhuǎn)換,AuthC侵佃,Rate-limitting麻昼,logging,caching以及Transformations馋辈。這里我們用的是Kong(沒錯就是那個大猩猩)抚芦。Kong 基于Nginx開發(fā)出來的完整概念上的API gateway,在性能方面你可以放心使用迈螟。Kong有很多插件叉抡,如果需要自己開發(fā)插件的話,可能要稍微學(xué)一下Lua答毫。當(dāng)然對于控制狂來說可能會選擇Spring Cloud來自己寫一些變態(tài)需求褥民。
4.客戶端訪問的資源可能是一個需要AuthC。API gateway可以從認(rèn)證服務(wù)器LDAP/Oauth2來進(jìn)行認(rèn)證洗搂。然后將請求轉(zhuǎn)給Rancher的loadbalancer消返。
5.Rancher是一個容器編排軟件。隨著docker的流行耘拇,Rancher也已經(jīng)for production了撵颊。相比其他容器編排軟件(Kubernetes,Mesos, Swarm)來說,最大的好處就是難度適中驼鞭。給了我們中小型企業(yè)一個構(gòu)建自己的CaaS和PaaS的機會秦驯。請求發(fā)送到Rancher的LB后會轉(zhuǎn)給App容器完成相關(guān)任務(wù)。對于微服務(wù)來說挣棕,rancher+docker 很容易的就能實現(xiàn)服務(wù)注冊,服務(wù)發(fā)現(xiàn)亲桥,健康檢測洛心,路由,負(fù)載均衡题篷。
6.App容器開發(fā)語言不相關(guān)词身,只需要完成自己的微服務(wù)就好了,他所需要的其他服務(wù)地址番枚,只需要調(diào)用其服務(wù)名法严,Docker/Rancher的DNS會自動完成相關(guān)的轉(zhuǎn)換损敷。
7.App2 是一個springboot的實現(xiàn),可以通過spring config來完成一些業(yè)務(wù)相關(guān)的配置管理深啤。當(dāng)然Rancher也可以在容器啟動的時候以環(huán)境變量的方式將配置信息傳進(jìn)去拗馒。
8.spring config 從GIT 或者 本地磁盤獲取相關(guān)的配置文件。
9.任何第三放的服務(wù)溯街,都可以通過Rancher以Service的方式配置到rancher的Stack里面诱桂。
10.Graylog只是一個日志工具(可以被logstash,splunk等替代),應(yīng)用容器將日志直接輸出到syslog(理論基礎(chǔ)就是,開發(fā)人員不關(guān)心日志放哪里顶吮,看console就行了标锄,application不需要關(guān)心日志放哪里,負(fù)責(zé)輸出就行了突雪,日志服務(wù)器關(guān)心日志放哪里,取syslog就行啦)。
11. 所有容器/軟件都部署到IaaS上涡相,在IaaS的主機上只需要安裝Docker就可以了。
12.DevOps流程之后討論剩蟀。
好了催蝗,這就是一個基本的簡單的架構(gòu)。下面來詳細(xì)講解這個Demo育特。