7月29日 數人云 在上海舉辦金融沙龍,邀請上交所和近二十家來自銀行、保險、證券的IT技術專家一同探討容器技術在金融業中的最佳實踐。數人云CTO肖德時在會上將傳統金融行業經過容器能夠解決的四大問題作了逐一解讀。編程
如下是演講實錄:安全
容器技術基本上是2013年出來的,2014年開始在中國傳播。在2016年,你們能夠感受到Docker技術的發展加速,在生產環境中也有不少的成功案例。在DockerCon 2016上咱們發現,Docker已經從原來的一個工具變成一個真正的生態圈,Docker已經具有整套的解決方案,同時上下游生態也已經很是完備。這都在告訴你們,你能想到的、和你須要的一些最佳實踐,Docker基本上都能提供。目前,基本上是大公司在不斷的追求Docker的技術,由於小公司用Docker技術解決問題產生的收益比還比較不明顯,而大公司原來冗餘的架構經過使用Docker確實能夠產生效益,因此一些傳統企業對Docker會比較關注。服務器
最新的資料顯示,如今是應用Docker技術的比較好的時機。全球僱員超過500人的公司中73%已使用Docker技術。國內的不少公司也都在關注這項技術,尤爲是金融行業,由於金融業的IT發展的比較成熟,他們對新技術比較關注,Docker已經有不少生產應用在裏面產生。網絡
用Docker能幹什麼是你們比較關心的問題。第一個比較常見的場景是DevOps,DevOps實際上就是提升生產力。原來,開發能作運維的事,運維能作開發的事。但實際上從真實的場景裏,術業有專攻,在創業公司能夠這麼幹,但傳統公司作不了。Docker能夠幫助企業進行業務的轉型,提供標準的接口,這樣開發提供標準運維能知道,運維提供標準開發也能知道。傳統企業的開發流程不像創業公司,一我的要幹不少事,傳統企業強調的是標準化,是業務的轉型,而在原有的老的制度下很難實現這種標準,用Docker技術能夠加快轉型。架構
第二個場景,雲化。2016年雲計算開始了新的增加,雲計算髮展到了新的技術點,老的虛擬化技術已經不能知足企業對動態資源和快速響應的需求,不能起到資源複用的做用。Docker能夠應用在物理機上,也能夠應用在虛擬機上,能夠快速構建應用管理平臺,或者構建IaaS、PaaS,或者service均可以。原來部門作不了,由於沒有技術棧的改變,仍然要用老設施,那些老設施都是爲大企業設計的。可是Docker出來的時候就是爲開發者服務的,它是一個工具,一我的也能夠作一個私有云。從這個點來看,在雲端的轉變這個場景裏Docker是目前比較推薦的技術棧,它可以快速構建應用管理平臺,能夠有很好的基礎。框架
另外,用了Docker必定要無狀態,這只是表象,之前的應用架構和原來的狀態是否是就必定不能知足如今的需求?不是的,原來的單體仍然能夠用,爲何要作微服務?由於業務裏有多個Function,其中有一個Function是特別熱的,這時候怎麼能抽出來?最簡單的辦法就是重構,由於想把它抽出來,抽出來之後,若是沒有一些工具怎麼作後面的工做?這都是限制問題。Docker公司提供的方案就是用Docker把它包裹一下,成爲一個標準的小組件,而後利用分佈式的概念,把它scale out,scale out之後再進行後面的工做。在現代的應用中,用了雲,資源更容易得到,因此客戶想快速地創造一些環境,這些環境裏面的資源利用率解決了,可是應用的複雜度仍然存在。如何動態的分配,就是剛纔上交所介紹的一些治理的方法。在Modern APP之上會面臨一些問題,可是如何快速響應,這個狀況是須要一些工具的,這些工具咱們認爲Docker是能夠作到。運維
大背景,以前IOE的架構存在,不是說很差,從技術層面來說,我並不認爲IOE有什麼很差,只是我加了一些策略作這件事,它比較擁堵,但不表明它很差。還有「十三五」規劃,自主可控的要求,這些背景讓企業對開源工具的需求變得會愈來愈多,數人云這種開源公司也是應勢而生,咱們給企業提供的解決方案就是自主可控,把開源、透明的技術交給客戶。分佈式
在2015年,當時去跟客戶說咱們上一個Docker,人家說你的Docker和VM比有什麼好處?VM用的多好,爲何要上Docker?當時咱們是無言以對的,由於安全性,還有各類生態圈的工具鏈也不成熟。可是慢慢的,咱們在作這件事的時候發現,其實這是須要和企業一塊兒成長,咱們也總結一些步驟。微服務
總結一下咱們想解決的問題,首先,Docker能不能解決快速發佈的問題,實際上用Docker之後,管理起來是更復雜的。因此纔會有數人云這種PaaS的存在,把複雜的東西用計算機的方式管理,由於用我的的方式是無法管理那麼多資源的和實例的;二是原來多套環境相互隔離,客戶須要的是多套環境多租戶的分發,真正的隔離,由於是內部系統,對於隔離的要求仍是能夠分級的。環境的快速搭建涉及編排,怎麼把DB分紅兩個,上面分紅多個,而後都能訪問DB,還有如何將手工操做變成自動的;三是大版本升級回滾,很難作這種升級回滾,怎麼去作;四是各類設備,有的CPU,有的是VM,有的在物理機上,這麼多設備怎麼統一的管理起來。這是咱們現實的一些場景,咱們怎麼解決這些問題是我今天想和你們一塊兒探討的問題。工具
第一個問題是快速部署,還有緩慢的升級,基本上就是用容器和微服務解。微服務是一個框架,若是把現有的服務拆成微服務,必定是一個統一的架構,那這個架構裏面必定是包含這樣的元素:首先,必定要有一個API網關的Server,微服務裏面的API網關不涉及Nginx,由於Nginx無法動態的改配置,得手動去改,這是知足不了需求的,由於底下的應用無數,因此上面必定要構建本身的API網關,這個網關能夠解決全部的問題,要否則下面每一個API的服務,它的服務請求SLA都是能夠通過網關控制的,這也是新型微服務架構裏面常常不被人提起的,被忽略的地方。可是這是很是重要的一點,由於底下的服務特別多。發到集羣裏,怎麼管控這些服務的質量,就是API的請求,出錯怎麼辦,怎麼來控制?這些都要經過API網關來控制,因此這個必定要去注意一下。
另外是幾個大塊的認證,若是你的內部認證沒有統一的認證,就無法作標準化的雙向通行,並且API網關也沒有辦法給下面的應用下發東西,由於無法認證。還有Configuration server必定要加上,Service Discovery單純靠容器解決不了,須要PaaS的容器平臺解決。作端口、應用的發現,方便其餘應用訪問它。還有監控、報警,而後就是常規的日誌分析,這就是常規的需求。這些需求裏面最特殊的就是容器,由於不少個要作逐一監控,沒有一個平臺是不行的。對日誌也是同樣,每一個容器起來之後就死掉了,怎麼知道這個容器是應用呢?通常都是要經過容器的ID來標識,而後收集回來。
還有一個API網關裏面最大的特色,快速的熔斷,什麼意思呢?就是底下的服務極可能出問題。微服務架構裏都打散,上面掛一個Nginx,若是業務量大了,如何快速關閉某個API呢?沒有可編程的接口是作不到的。可是要採起微服務解決,這個架構的的組織形式就是這樣。微服務裏面承載的這些組件特別複雜,須要一個標準的組件來封裝起來,這個封裝組件的方式用Docker是比較合適的。微服務的架構確實能夠解決這個問題,由於每一個組件的升級很快,若是把整個組件升級一下,還有一些其餘的東西,會很麻煩。咱們會想到能給一個這樣的架構,微服務架構裏面統一管理服務。
環境之間的隔離,Docker作的目錄級別的隔離已經徹底能夠知足需求了,原來爲何作不到這點?是由於手工的操做特別多,用別的方法隔離也是沒有問題的。可是咱們以爲,原來的架構裏面,CICD的架構已經很成熟了,能不能把它自動化?由於徹底能夠用Docker來交付整個環境,手工部署沒有問題。咱們再往前走一步,怎麼走?Jenkins能夠調一個集羣系統,而後分發集羣,剛纔說的微服務發到這裏面,而後快速的部署。這是一個自動化的過程。這裏面涉及到一個問題,原來我們常常會聽到的是持續構建,也就是把原碼先構建成鏡像,而後鏡像再發到集羣裏面,這個操做以爲很順,但實際上這裏面真正的挑戰在於,由於每一個業務組件的依賴,還有他們之間的配置怎麼抽離出來,這都是須要比之前更復雜的。因此,用容器確實解決了持續集成的一部分問題,但它對你的技術要求會愈來愈高。原來是手工作,而如今須要自動化。對於基礎人員的架構改造,實際上是抽象層更高一點,對你們的要求也會更高一點。
大版本升級不可回滾。大版本的升級困難點在哪兒?原來都是單體服務根本無法拆,動又不能動,剛纔說了微服務基本上可以解決它。第二個狀況是每一個版本的版本控制怎麼解決?基本上配置中心能夠把配置作出來,而後建倉庫,作版本控制。要作這個最好是滾動更新,也就是在不停機的狀況下,一點點把業務遷到新的應用上面,而後將老的流量在處理完業務以後慢慢的退掉,這是一種辦法。服務的時候,原來指向老的服務進程,自動地切到新的服務進程裏面,這樣產生流量儘快切到新的服務裏面,因此這是須要服務發現的。
咱們這邊會構建一個集羣,咱們用的ZooKeeper去保證調度器,在正常運行的狀況下,咱們給Marathon發指令,讓它把應用一個一個更新。起一個服務,保證老服務不停機,這時再把域名切換,進來的新流量就到新的應用裏面了,老的應用在沒有流量的時候自動退出,保證用戶訪問的時候沒有宕機的感受。這是集羣環境裏面作升級的常見案例。
還有各類異構設備,硬件資源利用率比較低,解法是數人云的應用集羣。它是容器的集羣,咱們的系統會運行在獨立的環境裏遠程控制集羣系統,保證系統裏面運行的只有容器,而後有相應的Agent來管理應用的服務。
這張圖比較清晰一點,數人云自己就是微服務的架構,這裏面針對的狀況,你們都知道Nginx性能是最好的,咱們可能在這上面寫一個新的API網關對接整個系統,這套系統是數人云系統架構裏面的一部分。咱們業務管理用Marathon調度器會進行升級,由於Mesos自己是集羣管理的調度。對於這些組件,好比鏡像,咱們採用的方式是跟VMware合做的一個開源項目叫Harbor鏡像管理倉庫,這是咱們和他們一塊兒合做開發的軟件。持續集成咱們和Jenkins作集成,經過自動配置可以把咱們這個小本下發給Jenkins,而後和它構建鏡像。監控報警,你們會以爲容器的監控報警很差作,容器目前爲止基本上都是接口,如今新的容器把日誌和報警,所謂的報警的實現都要按照流程的方式提供API接口,只要接上就收走日誌,在本地不落盤。日誌也是同樣,它如今提供plugin方式和日誌系統對接,不用擔憂落到盤裏面收上來是否是把硬盤撐爆,如今均可以配的。這裏對於咱們如今新加的網絡模塊,就容器發展到如今其實對於網絡都是成熟的,你們都在用host模式去管,雖然容器很輕,但並不比VM先進到哪裏去,只是說它更輕量一些。客戶但願VM有的東西它也有,這塊最後也提供了這種對於IP的管理。因此也是剛剛在上的一種新的成熟架構,也就是說一容器一IP,如今是剛剛纔開始支持,這是咱們最新配套的。
講完這些方案以後,今天會有些容器圈的新東西給你們講講。
首先是Docker1.12,昨天它正式發佈了,這是一個新版本的發佈,最重要的發佈。這個發佈先是內置了本身的工具,再就是對網絡的加強,達到了更容易商用的階段。第二個是咱們如今用的Mesos,也發佈了1.0,能夠給你們介紹一下特性。
Docker1.12它有一個重要的特色,通常在集羣系統裏面,由於容器是很碎的,用戶但願知道這個服務究竟是run仍是不run,原來的方式是Docker run的時候把端口打開,而後經過一個腳本去查。這等因而第三方去作,如今提供的功能是能夠在構建鏡像的時候就把Healthcheck打開,經過Docker Daemon的內容給這臺主機上運行的容器按期的檢查,經過Docker知道這個容器是否是健康的。固然這個功能並非爲我們準備的,是爲本身內置的Swarm編排工具作準備的,由於Docker公司作集羣管理的工具也在想這個事情。還有一個狀況是我們最經常使用的CentOS系列,原來對於安全Docker公司一直在迴避,它如今默認把這個組件打開了,打開之後跑出來更安全。Linux能夠打標籤、作監控,可是這個東西由於剛出來,因此只是一個信號,也就是Docker愈來愈安全了,原來是作不到,如今是愈來愈方便了,能夠作到這樣。Docker內置了一個IPVS,幹什麼用?就是想替代HaProxy提供IP給網絡裏面。這是比較新的技術,目前咱們認爲處於實驗階段,它利用IPVS的模塊來提供網絡的接口,只是一個信號,目前是沒有采用這種方案的,由於太新了,還要測試。最後是內置Swarm的組件,這是很輕量的編排工具,也就是說裝幾臺機器,必需要組成一個網,怎麼去作?能夠用Swarm作這個事。這個網IP怎麼作,用IPVS,這就是最新的Docker的發展,很是快。
目前爲止,一容器一IP技術理論已經落地。每臺機器要裝一個小的路由器,而後小路由器給你的容器。這個路由器能夠想象成家裏的無線路由器,由於是個屋子,一臺主機裏面都有屋子,任何終端設備均可以向路由器調IP,這個IP是假的均可以。固然Docker裏面如今有了網絡的插件,就至關於相似有了一個驅動,就能夠找路由器要一個IP,實現了路由器有IP。你們注意到這個IP和底下的IP不同,他們之間經過IPtable 作包頭的轉換,經過轉換就能夠雙向通訊了。可是這裏面192.168的網段和10網段的管控,若是隻作一次轉發,那就控制不了這些IP之間的東西,咱們用的方案把這些規則都記錄在一個鍵值庫裏面,這樣的好處在於,能夠控制這個IP和這個IP的通訊,把它記錄下來就能夠了,若是刪掉,默認不讓它通訊也是能夠的。雖然一臺主機有三臺服務器,可是他們之間是否能通訊是你能夠控制的,這樣更安全。也就是說,用戶有一個應用,這個應用是1.1和0.9,放在這兩個容器上,而後1.10是另一個APP,不但願他們之間互相通訊就能夠經過IPtable寫進去,而後把他們隔開,他們通訊的時候,一看規則沒有就把他們刪掉了,路由器就不會給它分。
還有一個狀況,都是容器裏面的IP,那外網的IP之間能不能通訊?由於內網有一個路由器,路由器給它分了一個IP,也想給容器分一個一樣網段的IP,須要一個網關來轉換爲可用的IP,轉換給它,就是改包頭改完包頭轉進去。它請求的時候再轉出去,兩個路由器之間再轉一下,是這樣的過程。它有一個缺點,就是主機的數量不能太大,畢竟是虛擬的IP網絡,主機的數量不是容器的數量,基本上在200臺左右是一個推薦的方式。
性能對比,跟主機、物理機再和calico的解決方案對比,基本上會在102四、204八、4096這塊,若是用普通的overlay方案性能就很低,目前Docker overlay本身的原生方案性能就很低,可是它在提高,由於它剛剛出來。上面這套方案,由於calico的方案只是在包的包頭上作了篡改,欺騙主機轉發數據包,因此它的性能和host主機之間,有時候從數據表裏面看到它傳輸的效率,吞吐量比host還快,可是這個數有假像,由於改了包頭,可是基本上能夠確定,和原生的host的網卡里面性能是差很少的,是這樣的狀況。
最後說Mesos如今新產品,就是1.0技術開源的組件,1.0之後,咱們基本上就會有新的HTTP API,原來的API都是Google的協議,如今有新的HTTP API更方便數人云和它作深度整合,咱們也但願不斷的前進,給客戶提供更好的產品。第二個狀況,你們如今遇到的狀況,那就是Docker有各類各樣的bug,這個問題沒有很好的解決辦法,由於Docker公司的產品是開源的,它的商業產品也到不了中國。Mesos解決了這個問題,Mesos擁有給Twitter、蘋果等都部署過幾萬臺的節點的經驗。他發現安裝Docker Daemon之後,Docker是很不穩定的,尤爲在大規模集羣方面很不穩定,因此他們推薦另一個方式,就是用原生的容器框架解包鏡像。客戶在本地用Docker,可是把鏡像發給我,我用另外的方式把這種鏡像給起起來,用戶是透明的,就認爲它是Docker room,但它不用了Docker Daemon,由於把Docker Daemon關掉之後容器就死掉了,可是把Docker Daemon去掉之後,容器還要經過原生的方式運行起來,這就知足了企業的各類需求,這是新的技術點。還有云原生APP架構裏面,對於網絡須要一個標準,如今提供了一個相似的架構,Mesos提供了這個標準。另外就是支持GPU。還有Mesos在和微軟合做,開始接管Windows的一些信息,這也是比較大的亮點。這個生態圈仍是比較活躍的,這也是數人云關注和考慮的。