Mesos在传统金融企业的实践——平安科技陈秋浩实录分享
http://www.360doc.com/content/16/0429/19/21340737_554866984.shtml
Padis平臺的成長史
??
?
剛才有一個關(guān)鍵詞叫Padis,Padis是PingAn Distribution平安分布式平臺的縮寫。Padis是平安科技自己研發(fā)的、基于Docker技術(shù)的分布式的PaaS平臺。我們的平臺底層也是基于Mesos Marathon,這點和數(shù)人云是一樣的。我們用Mesos Marathon實現(xiàn)應(yīng)用容器的創(chuàng)建、運行、快速縮容擴容、故障自愈。我們平臺自創(chuàng)了容器動態(tài)獨立IP功能,每個容器都有一個與傳統(tǒng)三層網(wǎng)絡(luò)打通的IP,滿足傳統(tǒng)的環(huán)境應(yīng)用和容器應(yīng)用做無縫調(diào)用。平臺的軟負載容器可根據(jù)應(yīng)用容器的增刪做動態(tài)調(diào)整。我們平臺的自動化運維還包括域名解析,CMDB自動錄入,以及監(jiān)控運維平臺的自動配置。
? ??
Padis的LOGO是一棵樹,我今天要講的是Padis平臺的成長史,怎么從種子到落地生根,到茁壯成長,到開花結(jié)果。
?
落地生根:從docker到Mesos Marathon
?
? ??
Padis落地的機緣,大家看這個圖有沒有覺得很熟悉?2014年的曾經(jīng),我們和研發(fā)部門有著很深的情誼。直到有一天他找我說,新項目啟動了,你必須幫我快速交付一套環(huán)境,期限是一個小時之內(nèi)。所以我們間友誼的小船說翻就翻了,因為他不知道我們要搭一套環(huán)境要做什么事情,我們要裝OS、中間件,要配負載平衡,還要做域名解析等等。
? ??
?
還有另外一個場景,2014年的曾經(jīng),我們跟業(yè)務(wù)的運營也是唇齒相依的好伙伴。直到有一天他找我說,還有一個月我們就雙12了,我們系統(tǒng)會從8個實例擴容到50個實例,你得開始幫我做搭建擴容,我們的友誼小船又說翻就翻了。因為,我們加班做擴容的時候,一是上個例子講到的環(huán)境搭建步驟要do it again and again,二是要協(xié)調(diào)保證擴容的應(yīng)用和原有的應(yīng)用要保持高度一致,以免產(chǎn)生新的生產(chǎn)問題。所以說,我們的IT運維是高危行業(yè),每時每刻都會有翻船掉入大海的危險。最重要的是可能我們還不會游泳,我們需要一件救生衣來拯救我們,而那件救生衣就是Docker。
?
2014年,容器技術(shù)發(fā)展火爆,Docker它的模板化可以把OS和中間件打包成鏡像發(fā)布出來,甚至也可以把我們的應(yīng)用打包到容器里,保證在每個主機上跑起來的容器的運行環(huán)境一樣。Docker也有它的便攜性,不管是在物理機,還是虛擬機,只要我裝了Linux,都可以在上面無差別地運行Docker應(yīng)用。
? ??
2015年初,我們開始在開發(fā)環(huán)境小范圍地引入了Docker,由于考慮到用戶(研發(fā)人員)可能比較小白,對Docker的命令行操作不太熟悉。而當時在Github上面有一個項目叫DockerUI,可以通過頁面的方式來管理HOST上面的Docker的大部分操作,相對方便一點。我們把它平安化,做出單機版的Docker管理網(wǎng)頁。我們新上的OS都會做這樣的標準化:裝上Docker的服務(wù),還有DockerUI的鏡像。同時我們自己也修復(fù)了原DockerUI里的一些bug,添加了鏡像提交的功能。因為DockerUI的定位是是在一臺主機上管理容器相關(guān)的操作,所以并沒有涉及到倉庫的查詢、下載鏡像等功能,所以我們自己在平安的DockerUI里把這部分倉庫管理的功能也加上去了。
? ??
當然,單機版的Docker有一定的局限性,首先,我們的容器是沒有集群的概念,雖然我創(chuàng)建了兩個容器,兩個容器雖然跑的是相同的應(yīng)用包,但是并沒有被關(guān)聯(lián)起來。如果跨主機,容器之間不能通信。二是沒有一個好的、健康的檢查機制,當容器故障了無法自動恢復(fù)。另外,我們直接把Docker底層管理操作暴露給小白用戶,他們的學習成本是比較高的,而且他們對Docker的底層管理和實現(xiàn)并不關(guān)心,他們關(guān)心的是你能不能交付給我一個較為完整的環(huán)境。也就是說我們現(xiàn)在有了一件救生衣,但這件救生衣隨時可能漏氣,所以友誼的小船還是可能說翻就翻的。這個時候我們希望有一個集群化的東西,有很多的救生衣,把所有的救生衣放在一起做成一個救生艇,最后我們就引進Mesos Marathon。
??
修枝除雜:改造MM框架,使之適應(yīng)平安傳統(tǒng)應(yīng)用
??
?
第二個階段先說一下Mesos Marathon優(yōu)勢。首先是DCOS,數(shù)人云一直推這個理念,你可以把數(shù)據(jù)中心里的所有的服務(wù)器全部集合起來變成一個集群,IT運維人員可以像操作一個OS一樣來管理這個集群,自由地分配CPU、內(nèi)存的資源來跑應(yīng)用的容器。第二個優(yōu)勢是容器應(yīng)用集群化,可以針對同樣類型的應(yīng)用集群做到快速縮容擴容。第三個是健康檢查方式,可以定義容器應(yīng)用的健康檢查條件,可以是TCP,也可以是HTTP,只要是檢查到應(yīng)用有問題的時候,它會再重新啟一個新的容器。第四它支持條件約束,我們常常有監(jiān)管上的要求,比如壽險和產(chǎn)險的應(yīng)用不能放在同一個物理機上,Mesos有條件約束,幫我們實現(xiàn)業(yè)務(wù)隔離,還可以設(shè)定條件,比如同個應(yīng)用的實例需要分配在不同的物理機上來實現(xiàn)物理上的高可用。第五是支持事件訂閱,所有的實例啟停,應(yīng)用縮容擴容消息都可以通過HTTP推送到我自己訂閱的服務(wù)上。第六是它有很多的擴展功能,像Mesos-DNS和Mesos-LB。
?
選定底層框架,在和應(yīng)用結(jié)合的時候我們發(fā)現(xiàn)一個很致命的問題,平安的傳統(tǒng)應(yīng)用對IP是很依賴的,平安的標準應(yīng)用經(jīng)過差不多10年的沉淀,每一個應(yīng)用實例基本上都會綁一個自己的IP。但是我們在容器里用的是Docker0,一個私網(wǎng)的IP,是不能跟外界通信。
?
??
舉一個平安很常見的WebLogic的例子,WebLogic有EJB調(diào)用,會有A應(yīng)用和B應(yīng)用的集群,如果A應(yīng)用調(diào)B應(yīng)用,首先是會調(diào)B應(yīng)用B1的實例地址,B1會把整個集群的信息反饋給應(yīng)用A。大家可以看這個圖,返回的信息,我的集群B1的地址是10.1.2.1和10.1.2.2,我的應(yīng)用A收到這個信息以后,會通過輪詢方式和B1、B2建立TCP的長連接,這個時候傳統(tǒng)應(yīng)用,10.1.1.1和10.1.2.1是可以三層打通,直接通訊的,這個調(diào)用沒問題。
?
?
?
但如果我們把平安的應(yīng)用放在Docker里會怎么樣?B1運行在容器里,容器有自己的私網(wǎng)IP,假設(shè)是172.17.0.4,通過NAT的方式,宿主主機上面10.1.3.1出去了,我的應(yīng)用A要去跟B1的時候,就是通過調(diào)10.1.3.1:30001端口。這個時候B1返回到的信息里,是返回到172.17.0.4和B2 172.17.0.5的地址。在這個例子里,我們的應(yīng)用A沒法繼續(xù)調(diào)下去了,因為我們的三層網(wǎng)絡(luò)里,10.1.1.1和docker0私網(wǎng)的172.17.0.4是不通的。如果容器里我們能做到獨立IP,給每個容器都添加一個跟內(nèi)部的網(wǎng)絡(luò)相通的IP,我們的整個框架就可以用起來。
? ??
我們還有一些獨立IP的需求,比如說我有兩個容器應(yīng)用,應(yīng)用之間是需要做組播的。因為容器出docker0的時候去會做NAT,做完NAT以后這個組播就不成立,兩個容器應(yīng)用間沒辦法通過組播通信。除了平臺之間的容器要互通外,我們的容器還得和傳統(tǒng)環(huán)境應(yīng)用的IP做直接通訊。此外,傳統(tǒng)的用戶是希望像管理虛擬機一樣管理容器,希望容器有自己的IP,通過這個IP SSH登錄到這個容器里,他可以查日志,或做一些自己的操作。
? ??
Docker早期,還有MM框架早期,是沒法滿足容器獨立IP的需求的。一直到2015年的11月,Docker 1.9發(fā)布,正式支持overlay網(wǎng)絡(luò),支持跨主機網(wǎng)絡(luò)模塊的通訊,當然,這個方案是對底層的網(wǎng)絡(luò)是有一個要求的。基于此,2016年1月,Marathon也發(fā)布了0.14的版本,開始支持一容器一IP(IP-per-task),就是獨立IP的概念。我們在2015年初期就啟動了這個項目,在2015年3月份我們Padis平臺自己研發(fā)了network模塊,支持平臺級的應(yīng)用容器獨立IP功能。
? ??
?
我來簡單介紹下network模塊的實現(xiàn)原理,我們的平臺有一個消息驅(qū)動中心,可以獲知Mesos Marathon框架下每個容器的添加、刪減或重啟,它都能夠?qū)Λ@取到任務(wù)信息做出響應(yīng)。通過Ansible模塊,一個自動調(diào)用模塊,可以把所有添加、刪除IP全部做到自動化。
? ??
?
具體怎么把IP加上去也很簡單,我們基于Docker的bridge模式,有兩種方案可以選,可以用Linux bridge或者OpenVSwitch,把指定網(wǎng)段的IP加入到容器里面,實現(xiàn)了容器與傳統(tǒng)環(huán)境應(yīng)用兼容與互通。區(qū)別在于,Linux bridge只能添加跟slave host同個VlAN的IP。而用戶OpenVSwitch可以指定添加任意的VLAN的IP。
? ??
下面是一個例子,現(xiàn)在有一個Mesos主機,首先會在這個主機上添加bridge,把主機網(wǎng)卡,可以是物理機的,也可以是虛擬機的,把這個網(wǎng)卡加入bridge里面,bridge配上原本的管理IP。在啟容器的時候,在容器里面再啟一個新的網(wǎng)卡,會在OS上面建一個成對的虛擬子接口,把它加入到bridge里面,這個時候10.1.3.1和10.3.1.10就實現(xiàn)了互通,同理可以做到不停地往主機上面加容器,整個集群都可以用這個框架來做。這張圖有六個IP,這六個IP都是互通的。這樣就實現(xiàn)滿足了最開始說的,平安的傳統(tǒng)應(yīng)用所依賴的IP功能的需求。
? ??
同時,我們平臺對各個IP的分配也有一些規(guī)則上的限定,首先,由我們的平臺管理這個IP池,IP有三種狀態(tài),一是已分配給應(yīng)用,二是未分配給應(yīng)用,三是永不分配的保留IP。我的IP一旦分配給某個應(yīng)用以后,除非用戶說我這個IP不用了,我要把對應(yīng)的IP實例縮容刪除,這個IP才會回收到IP池里,再提供給別的應(yīng)用做分配。這樣做是為了防止IP如果一重啟的話,有可能被別的實例使用到的風險。在傳統(tǒng)金融企業(yè)里會有很多防火墻的需求,防火墻一般是針對應(yīng)用的單個IP開的,如果你的IP變了,可能防火墻要重新開,需要再做一次自動化。第三是某一個應(yīng)用實例發(fā)生重啟或故障以后,平臺會自動在新實例所在Slave Host完成添加IP的動作。當然,事前我們就在舊的主機上把虛擬接口刪了,防止IP會發(fā)生沖突。
?
?
通過這種方式,搞定了容器獨立IP的需求,我們接下來還會面臨更多的挑戰(zhàn)。Mesos-DNS和Mesos-LB就不再適用,因為Mesos的方案是基于NAT的模式做的,而我們自己實現(xiàn)了獨立IP的功能,所以它提供的便利服務(wù)我們現(xiàn)在是用不到的。我們的DNS是通過平臺消息驅(qū)動中心和平安內(nèi)部的DNS做自動化對接,每擴容或縮容一個實例的時候,都會自動對獨立的IP做DNS解析。
?
負載均衡,傳統(tǒng)金融企業(yè)用的很都是F5,現(xiàn)在也有很多LVS、Haproxy,我們平臺有多種方案給用戶做選擇,可以做硬件的F5,還有軟件LVS、Haproxy。但對后臺的容器應(yīng)用來說,每一次擴容或縮容,對應(yīng)的負載均衡后端配置也會自動更新,用戶不需要再人工修改配置文件。
? ??
?
下面我著重講一下Padis平臺的軟負載均衡。軟負載均衡和應(yīng)用其實是一樣的,都是運行的容器。Haproxy、LVS服務(wù)都是跑在MM框架上的一個Docker應(yīng)用。Mesos Marathon本身就有高可用的功能,發(fā)生故障的時候可以幫你再啟一個,還可以幫你快速做擴容。
?
針對LVS我們會有兩個概念,一是前端,二是后端。對LVS(DR模式)來說,它的后端就是我們的應(yīng)用容器,當我們使用LVS做負載均衡,平臺會自動地對每個容器做一個把VIP加到loopback網(wǎng)卡上,以及禁用arp announce等一系列常規(guī)操作。LVS的前端是負載均衡容器,容器里面還集成了quagga,它是一個軟件路由器,通過它發(fā)送OSPF的協(xié)議,解決LVS單點的問題,傳統(tǒng)的LVS的架構(gòu)是一主一倍,單點提供服務(wù)。我們用quagga以后,用OSPF做動態(tài)路由,最多同時有8個LVS同時提供服務(wù),高效解決高并發(fā)場景。具體的原理大家可以看一下PPT里面的鏈接。
?
本固枝榮:擴展平臺自動化功能?
?
?
我們解決了我們的剛需,即容器擁有獨立IP,平安的傳統(tǒng)應(yīng)用也能跑在Mesos Marathon的框架下,平臺的基本需求已經(jīng)差不多滿足了。下面就進入到第三階段,更多自動化的集成。首先是CMDB的集成,Mesos Marathon動態(tài)化的設(shè)計,使得其框架本身CMDB的支持很弱,甚至說是沒有。Padis平臺自帶CMDB的功能,提供一個網(wǎng)頁入口給到用戶做信息查詢,應(yīng)用管理等常規(guī)操作。另外我們平安內(nèi)部也有另外一個很龐大完善的公共CMDB,我們平臺也通過自動化對接的方式,每擴容或縮容一個實例,都會把它的IP信息更新到公共CMDB信息里。第二,我們也同時做了運維監(jiān)控平臺自動化,這個監(jiān)控是多維度的,一是應(yīng)用的性能監(jiān)控,這個是基于Zabbix做的。二是對于Marathon和Mesos自己的組件的性能監(jiān)控,是通過調(diào)用各自組件API,取得metrics后入庫做的監(jiān)控。三是針對整個Mesos集群里所有的每一臺主機的CPU和內(nèi)存做實時的監(jiān)控。第三個自動化是做了日志集中管理對接,傳統(tǒng)應(yīng)用的日志是寫在本地的,因為我們沒有對應(yīng)用上層做出改造,我們是通過修改底層平臺的方法來做到對應(yīng)用透明的。在啟動容器的時候,分配共享存儲并將其掛載到容器里。應(yīng)用的日志還是以文件的形式寫在這個共享存儲中。而在另外一個地方,該共享存儲也可以接入平安內(nèi)部的ELK日志管理平臺,幫業(yè)務(wù)運營同事做日志的Access、活躍度等分析統(tǒng)計,同時可以自定義一些報警的關(guān)鍵字,進行日志報警知會。四是其他一些功能的加入,比如說WebSSH、一鍵環(huán)境克隆,還有NAS存儲掛載等功能,在Padis平臺上都只是需要簡單配置就可以自動實現(xiàn)。
? ??
?
這個圖是整個平臺的架構(gòu),大家可以看一下。中間有一個Resource Manage和Schedule Framework,資源管理就是Mesos,上面的資源調(diào)度框架是Marathon。我們的平臺只是集成、使用了很小的一部分,其他的都是我們自己根據(jù)平安內(nèi)部的需求所自定義開發(fā)的,里面會有其他的一些,像CMDB、監(jiān)控、自動化操作等模塊。
?
開花結(jié)果:平臺實踐成果簡單介紹? ??
?
最后簡單介紹一下我們平臺實踐的成果,第一,集成建設(shè)。截止到現(xiàn)在,我們生產(chǎn)環(huán)境有兩個網(wǎng)絡(luò)區(qū)域,一是內(nèi)網(wǎng)ServerFarm,還有一個是公網(wǎng)DMZ web,這兩個Mesos集群里他們都是接近1000 CPU CORE,6TB 內(nèi)存的集群,每個集群都可以跑3000-4000個容器。平安的很多重要的渠道應(yīng)用已經(jīng)在很多生產(chǎn)環(huán)境上使用了,像平安WiFi、平安金管家、平安任意門等等。
? ??
下面簡單介紹一下平安金管家的保本基金搶售活動,是在股市較為波動的行情下推出的一個3年收益率18%的保本基金,還是有一定的吸引力的。通過我們的Padis平臺,底層的應(yīng)用實例很快從8×8變成50×50。而負載均衡使用的就是前面說的LVS cluster框架,因為他們自己業(yè)務(wù)評估可能有幾萬,實際壓測的時候確實沒什么壓力。當然我們自己覺得這個框架壓測幾十萬、上百萬都沒問題。搶售活動購買最低限額是100元,最開始搶購的一分鐘銷售達到1億。另外再簡單介紹一下DevOps實踐,通過我們搭建的一套CI集群,開發(fā)和測試人員自助在集群上面搭了1000多套應(yīng)用環(huán)境,數(shù)量還是比較多的。
?
?
最后給大家隆重推薦一本書,叫《PaaS實現(xiàn)與運維管理 基于Mesos Docker ELK的實戰(zhàn)指南》。作者是平安科技基礎(chǔ)架構(gòu)部系統(tǒng)軟件技術(shù)領(lǐng)域的負責人余何。這本書的撰寫和Padis平臺的建設(shè)是同步執(zhí)行的,是Padis平臺從無到有、最終能落地開花的指導(dǎo)思想,推薦給想學習PaaS技術(shù),自建并運維PaaS平臺的小伙伴們閱讀。
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/9575365.html
總結(jié)
以上是生活随笔為你收集整理的Mesos在传统金融企业的实践——平安科技陈秋浩实录分享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 平安容器云平台 Padis--传统金融企
- 下一篇: 几张图帮你理解 docker 基本原理及