主頁 > 知識庫 > 剖析美團(tuán)的以Python為主導(dǎo)的云平臺發(fā)展戰(zhàn)略

剖析美團(tuán)的以Python為主導(dǎo)的云平臺發(fā)展戰(zhàn)略

熱門標(biāo)簽:地圖標(biāo)注不顯示 金蘭灣地圖標(biāo)注app 河南語音外呼系統(tǒng)平臺 福州公司外呼系統(tǒng)加盟 周口權(quán)威的不封卡電話外呼系統(tǒng) 河北crm外呼系統(tǒng)平臺 百應(yīng)電話機(jī)器人價(jià)值 外呼系統(tǒng)2273649Z空間 南京400電話辦理到易號網(wǎng)

獨(dú)立出來的美團(tuán)云業(yè)務(wù)部目前有十幾位工程師。雖然部門獨(dú)立,但工作中仍然跟系統(tǒng)運(yùn)維組有緊密的配合。美團(tuán)系統(tǒng)運(yùn)維組原本就有三分之二的開發(fā)工程師,而運(yùn)維工程師也全部具備編寫代碼的能力,因此開發(fā)與運(yùn)維工程師能夠進(jìn)行緊密的配合。

相關(guān)廠商內(nèi)容

美團(tuán)云的最初版本起步于2012年7月,一開始是作為私有云計(jì)算平臺來構(gòu)建。第一版開發(fā)了大約2個月的時間,之后用了大概10個月的時間將美團(tuán)的所有業(yè)務(wù)遷移到云平臺上?,F(xiàn)在除了Hadoop、數(shù)據(jù)庫仍跑在物理機(jī)上之外,美團(tuán)網(wǎng)的所有業(yè)務(wù)都已經(jīng)運(yùn)行在美團(tuán)云上,內(nèi)部的研發(fā)、測試平臺也運(yùn)行在美團(tuán)內(nèi)部的辦公云平臺上。

2013年5月,美團(tuán)云開始對外提供公有云服務(wù),截止到目前僅對外提供云主機(jī)產(chǎn)品。對象存儲、Redis、MySQL、負(fù)載均衡、監(jiān)控、VPC等服務(wù)也在研發(fā),部分產(chǎn)品已經(jīng)在內(nèi)部以及部分測試客戶使用,未來會根據(jù)產(chǎn)品的成熟度和客戶的需求程度逐步對外開放。

穩(wěn)定是公有云服務(wù)的核心價(jià)值。自從公有云服務(wù)開放以來,美團(tuán)云主要的工作都放在提升云主機(jī)的穩(wěn)定性,完善云主機(jī)模板、備份、監(jiān)控、安全等工作上。預(yù)計(jì)在2014年9月,美團(tuán)云將發(fā)布其第三個版本的更新,繼續(xù)打磨其產(chǎn)品細(xì)節(jié)。

技術(shù)架構(gòu)

美團(tuán)云最初選型的時候?qū)penStack、CloudStack、Eucalyptus都做過調(diào)研,調(diào)研的結(jié)果是架構(gòu)設(shè)計(jì)使用OpenStack的框架,網(wǎng)絡(luò)架構(gòu)參考CloudStack,主要組件由自己開發(fā),部分組件在OpenStack原生組件上進(jìn)行了二次開發(fā)。

核心的云主機(jī)管理系統(tǒng)是自己研發(fā),沒有使用Nova。采用Region-Zone-Cluster三層架構(gòu),支持跨地域、多數(shù)據(jù)中心的大規(guī)模集群部署。采用了基于KVM的主機(jī)虛擬化和基于OpenVSwitch+OpenFlow的網(wǎng)絡(luò)虛擬化技術(shù)。
鏡像管理用了Glance。有一定修改,例如,多數(shù)據(jù)中心分布式支持,以及鏡像替換。
身份管理用了Keystone。有一定修改,例如,高并發(fā)性能改進(jìn),與美團(tuán)帳戶系統(tǒng)的集成。
對象存儲用了Swift,但Swift在寫延遲方面存在性能問題,同時在OAM方面的功能比較薄弱,所以也做了一些修改和研發(fā)。Swift現(xiàn)在已經(jīng)在為美團(tuán)網(wǎng)內(nèi)部存儲量幾十TB量級的業(yè)務(wù)提供服務(wù)。
之所以沒有整個引入OpenStack,是因?yàn)楫?dāng)時調(diào)研時,感覺OpenStack的設(shè)計(jì)比較脫離美團(tuán)的實(shí)際情況。例如,網(wǎng)絡(luò)架構(gòu)需要有較大的調(diào)整,同時需要有共享存儲的支持。當(dāng)時對美團(tuán)來說,現(xiàn)有業(yè)務(wù)的基礎(chǔ)設(shè)施已經(jīng)基本固化,為適應(yīng)OpenStack而做這樣的調(diào)整基本不可接受。另外,OpenStack在很多細(xì)節(jié)方面達(dá)不到需要的級別。比如,OpenStack對跨機(jī)房多Zones的設(shè)計(jì),它假設(shè)你機(jī)房之間的網(wǎng)絡(luò)是完備的,這也不太符合我們的網(wǎng)絡(luò)現(xiàn)狀。因此,我們基于美團(tuán)現(xiàn)有的主機(jī)使用模式和網(wǎng)絡(luò)架構(gòu),重新設(shè)計(jì)了網(wǎng)絡(luò)、存儲和主機(jī)管理模型,自主研發(fā)了虛擬化管理平臺。同時,我們在從單機(jī)房做到多機(jī)房的時候,在Zones之間做了解耦,比如在每個機(jī)房里都放置Glance服務(wù)節(jié)點(diǎn),減少對跨機(jī)房網(wǎng)絡(luò)的依賴。正是由于這些研發(fā)工作,使得我們經(jīng)過不到一年時間的磨練,就實(shí)現(xiàn)了美團(tuán)整個基礎(chǔ)設(shè)施完全運(yùn)行在私有云上的目標(biāo)。

當(dāng)然,由于我們不使用Nova,就意味著OpenStack社區(qū)的很多依賴Nova的組件和功能我們基本無法直接使用。不過,相對于OpenStack大而全/兼容并包的架構(gòu),我們堅(jiān)持在每一方面都集中精力用好一種技術(shù),如主機(jī)虛擬化使用KVM,網(wǎng)絡(luò)虛擬化使用OpenVSwitch+OpenFlow,使得整個系統(tǒng)的開發(fā)和維護(hù)成本相對較低,同時能深挖這些技術(shù)方案的功能特性,最大限度地壓榨硬件性能。同時,由于我們掌握了基礎(chǔ)系統(tǒng)的代碼,使得我們可以較高的效率添加一些新的業(yè)務(wù)功能(例如,對虛擬IP,USB KEY的支持等),以及實(shí)現(xiàn)系統(tǒng)架構(gòu)的升級改造(例如,對多機(jī)房架構(gòu)支持等)。另外,我們對使用的OpenStack組件做的一些修改,比如對Swift的優(yōu)化,目前技術(shù)委員會也在提議如何回饋給上游社區(qū)。當(dāng)然了,這個還需要看社區(qū)對我們的patch接受與否,而我們也還是以滿足業(yè)務(wù)需求優(yōu)先。

其他方面,塊存儲落在本地的SAS盤上并在本地做RAID。目前我們對美團(tuán)網(wǎng)自己的業(yè)務(wù)做RAID5,對公有云用戶做RAID10。這是考慮到美團(tuán)網(wǎng)自己的業(yè)務(wù)在應(yīng)用層已經(jīng)做了較完備的高可用設(shè)計(jì)的,即使掉了單個節(jié)點(diǎn)也不會影響到業(yè)務(wù);但對于公有云用戶而言,他們用的那一臺云主機(jī)就是一個單點(diǎn),所以要對他們的云主機(jī)做更好的保護(hù)。使用RAID10當(dāng)然成本會比較高。我們也在考慮共享存儲,當(dāng)然前提是先解決了上面的穩(wěn)定性和性能問題。以后會使用SSD,使塊存儲的性能有更大的提升。

網(wǎng)絡(luò)方面做了分布式設(shè)計(jì),主機(jī)上用了OpenFlow,通過OpenFlow修改二層協(xié)議,讓每個用戶擁有一個獨(dú)立的扁平網(wǎng)絡(luò),跟其他用戶的網(wǎng)絡(luò)隔離。通過DNS虛擬化技術(shù),使得不同的用戶可以在各自的私有網(wǎng)絡(luò)上使用相同的主機(jī)名字,并在每個宿主機(jī)上部署分布式DNS和DHCP以實(shí)現(xiàn)基礎(chǔ)網(wǎng)絡(luò)服務(wù)的去中心化。

運(yùn)維

美團(tuán)云的運(yùn)維思路跟整個美團(tuán)的運(yùn)維思路是一致的。下面介紹的運(yùn)維思路既適用于美團(tuán)云,也適用于整個美團(tuán)網(wǎng)。

運(yùn)維框架可以概括為五橫三縱。從橫向來看,自底向上分為五個層次:

物理層,包括機(jī)房網(wǎng)絡(luò)、硬件設(shè)施。我們已在開展多機(jī)房和城域網(wǎng)建設(shè),從最底層保證基礎(chǔ)設(shè)施的穩(wěn)定性。為了應(yīng)對大規(guī)模機(jī)房建設(shè)帶來的運(yùn)維成本,我們實(shí)現(xiàn)了Baremetal自動安裝部署的Web化管理,從服務(wù)器上架之后,其他工作均由自動化完成,并可以和虛擬機(jī)一樣管理物理機(jī)。
系統(tǒng)層,包括操作系統(tǒng)、虛擬化。我們在虛擬化基礎(chǔ)之上采用了模板化(鏡像)的方式進(jìn)行管理,也對Linux內(nèi)核做了一部分定制開發(fā),例如針對OVS的兼容性做了優(yōu)化。
服務(wù)層,包括Webserver、緩存、數(shù)據(jù)庫等基礎(chǔ)服務(wù)。我們基于Puppet工具做了統(tǒng)一配置管理,有自己的軟件倉庫,并對一部分軟件包做了定制。統(tǒng)一配置管理的好處,一方面是避免不一致的修改,保證集群的穩(wěn)定性,另一方面是提高運(yùn)維效率。
邏輯層,包括業(yè)務(wù)邏輯、數(shù)據(jù)流。這一層的主要工作是發(fā)布和變更。在很多其他公司,業(yè)務(wù)的發(fā)布上線、數(shù)據(jù)庫的變更管理都是由運(yùn)維來做,我們認(rèn)為這樣對開發(fā)、運(yùn)維的協(xié)作成本較高,所以一直往開發(fā)人員自助的方向做,通過代碼發(fā)布平臺、數(shù)據(jù)庫變更平臺實(shí)現(xiàn)開發(fā)和運(yùn)維工作的輕耦合。在發(fā)布平臺中,每個應(yīng)用對應(yīng)獨(dú)立的集群,有一位開發(fā)作為應(yīng)用owner有最高權(quán)限,有多位開發(fā)作為應(yīng)用的成員可以自助發(fā)布代碼。數(shù)據(jù)庫變更平臺也有類似的權(quán)限控制機(jī)制,并在任務(wù)執(zhí)行層面有特殊的穩(wěn)定性考慮,例如將大的變更任務(wù)自動調(diào)度到夜間執(zhí)行,對刪除數(shù)據(jù)表的任務(wù)在后臺先做備份。
應(yīng)用層,包括用戶可見部分。除了跟邏輯層有類似的發(fā)布和變更之外,我們有統(tǒng)一前端平臺,實(shí)現(xiàn)訪問流量的進(jìn)出分離、行為監(jiān)測和訪問控制,這對于整體的安全性有很大的好處。
從縱向來看,有三部分工作,對上述五個層次是通用的:

監(jiān)控。從物理層到服務(wù)層的監(jiān)控和報(bào)警都是運(yùn)維來跟進(jìn)、響應(yīng)的。對于邏輯層和應(yīng)用層,也是開發(fā)人員自助的思路,運(yùn)維提供監(jiān)控API的規(guī)范,開發(fā)可以自己創(chuàng)建監(jiān)控項(xiàng)、設(shè)定報(bào)警規(guī)則、進(jìn)行增刪改查。監(jiān)控報(bào)警之后的處理,現(xiàn)在有些做到了自動化,有些還沒有。尤其是有些基礎(chǔ)架構(gòu)和業(yè)務(wù)之間的縱向鏈條還沒有打通,包括建立業(yè)務(wù)容量模型,某種特定的業(yè)務(wù)形態(tài)在多少用戶的情況下最高負(fù)載多少,不同負(fù)載等級下的SLA應(yīng)該是多少,等等,這些模型都建立起來之后就能夠進(jìn)行自動化的處理。
安全。我們很早就部署了統(tǒng)一的安全接入平臺,所有線上的人工操作都需要登陸relay跳板機(jī),每個人有獨(dú)立的登陸帳號,所有線上操作都有審計(jì)日志。更多的安全工作由專門的信息安全組負(fù)責(zé)。
流程。早期基于Jira做了一些簡單的流程,但仍需要改進(jìn)?,F(xiàn)在正在針對比較集中的需求,開發(fā)相應(yīng)的流程控制系統(tǒng),方向也是自動化、自助化。從業(yè)務(wù)部門申請VM資源,到業(yè)務(wù)擴(kuò)容的整個流程,我們正在進(jìn)行上下游的打通,未來可以在Web界面上通過很簡單的操作實(shí)現(xiàn),也提供服務(wù)化的API,方便其他業(yè)務(wù)平臺進(jìn)行集成。虛擬化覆蓋全業(yè)務(wù)線之后,這些事情做起來都變得很方便。
總之,美團(tuán)網(wǎng)整體的運(yùn)維思路就是:保證業(yè)務(wù)穩(wěn)定運(yùn)行,同時推動全面自動化、自助化。涉及開發(fā)、運(yùn)維溝通協(xié)作的部分,盡可能通過自動化平臺的方式,由開發(fā)人員自助完成。運(yùn)維人員除了基礎(chǔ)環(huán)境、平臺建設(shè)之外,幫助業(yè)務(wù)進(jìn)行高可用架構(gòu)的梳理,提高代碼的可運(yùn)維性,以及定位和解決業(yè)務(wù)中的各類問題。

改進(jìn)與演變

美團(tuán)云從對內(nèi)服務(wù)開始到現(xiàn)在兩年以來,最大的一次改進(jìn)就是從單機(jī)房到多機(jī)房的建設(shè),這是跟美團(tuán)網(wǎng)的城域網(wǎng)建設(shè)同步開展的。

單機(jī)房的時候,美團(tuán)網(wǎng)業(yè)務(wù)早期曾遇到過運(yùn)營商網(wǎng)絡(luò)中斷幾小時的情況,期間業(yè)務(wù)不可用,非常痛苦。多機(jī)房冗余做到最理想的情況下是,即使一個機(jī)房整個斷電了,業(yè)務(wù)也不受影響,當(dāng)然這就意味著需要100%的冗余量,成本是比較高的。不過對于美團(tuán)網(wǎng)來說,冗余的成本是很愿意承擔(dān)的,因?yàn)闃I(yè)務(wù)不可用造成的損失要大于做這些冗余的成本,所以我們現(xiàn)在物理資源都留有50%的冗余,帶寬一般會預(yù)留30%的冗余。

因?yàn)槊缊F(tuán)網(wǎng)的發(fā)展速度很快,去年我們一度遇到資源不夠用的情況,在這上面踩了很多坑之后,開始做一些長遠(yuǎn)規(guī)劃?,F(xiàn)在美團(tuán)網(wǎng)業(yè)務(wù)的雙機(jī)房冗余已經(jīng)實(shí)施了一部分,美團(tuán)云也有兩個機(jī)房,如果公有云客戶的業(yè)務(wù)支持橫向擴(kuò)展,那么也可以做跨機(jī)房部署。這種機(jī)房級高可用做好了,對穩(wěn)定性又是一個很大的提升,大大減少網(wǎng)絡(luò)抖動對業(yè)務(wù)的影響,可用性SLA可以從現(xiàn)在的4個9做到更高。有些規(guī)模比較大的客戶對服務(wù)質(zhì)量會有比較高的需求,所以美團(tuán)的城域網(wǎng)、以及未來的廣域網(wǎng),也會共享給我們的公有云客戶。

另外上面說到我們數(shù)據(jù)庫跑在物理機(jī)上,這一塊現(xiàn)在用的是SSD,讀寫性能頂?shù)蒙显缙诘娜_15000轉(zhuǎn)SAS,瓶頸在千兆網(wǎng)卡上,所以我們現(xiàn)在也在做萬兆網(wǎng)絡(luò)的升級改造。數(shù)據(jù)庫服務(wù)以后也會開放給公有云用戶使用,基礎(chǔ)設(shè)施跟美團(tuán)自身業(yè)務(wù)一致。

未來的計(jì)劃

由于使用本地存儲,所以現(xiàn)在虛擬機(jī)遷移需要在夜間進(jìn)行,以減少對用戶服務(wù)的影響。為了提高服務(wù)的可用性,在確保穩(wěn)定性和性能的前提下,共享存儲是一個不錯的選擇,所以我們正在測試萬兆網(wǎng)絡(luò)下的共享存儲方案。另外,我們底層虛擬化機(jī)制用的KVM,本身是沒有熱插拔的功能,這也是我們計(jì)劃要做的一件事。

現(xiàn)在很多客戶問我們,什么時候出Redis,什么時候出云數(shù)據(jù)庫,一些客戶對Redis和MongoDB會有需求,Web服務(wù)想要MySQL。我們的計(jì)劃是由DBA團(tuán)隊(duì)提供一些模板,相當(dāng)于是一些專門針對Redis/MySQL做好優(yōu)化的系統(tǒng)鏡像,讓客戶可以直接拿來用。這可能會在下一個版本release的時候推出。

我們還會提供一些基礎(chǔ)架構(gòu)的咨詢服務(wù),這個咨詢服務(wù)一方面是工程師提供的人工服務(wù),另一方面是以工具+文檔的形式,以互聯(lián)網(wǎng)的方式將我們的最佳實(shí)踐共享出去。美團(tuán)網(wǎng)做到現(xiàn)在的幾百億規(guī)模,內(nèi)部有很多經(jīng)驗(yàn)積累,如果能把這些積累傳遞給我們的客戶,能夠幫助客戶少走很多彎路。

美團(tuán)云的架構(gòu)

    美團(tuán)云的前端后臺使用的框架是Django,主要處理Web業(yè)務(wù)相關(guān)的邏輯,Django的社區(qū)支持比較豐富,文檔健全,本身功能也比較強(qiáng)大。然而有些特性似乎比較多余,比如說Django的很多“黑魔法”是用數(shù)據(jù)庫外鍵實(shí)現(xiàn)的,但是美團(tuán)內(nèi)部有自己的一個DBA團(tuán)隊(duì),負(fù)責(zé)審核所有項(xiàng)目的數(shù)據(jù)庫設(shè)計(jì),他們則要求不允許用外鍵,據(jù)說是因?yàn)樽罴褜?shí)踐得出的經(jīng)驗(yàn)。

    后端整個云平臺的框架也是用Python實(shí)現(xiàn)的,在底層包括虛擬化計(jì)算、網(wǎng)絡(luò)、存儲三大功能體系,上層則分為資源管理、任務(wù)調(diào)度、日志、監(jiān)控、用戶管理、通知報(bào)警、API、用量計(jì)費(fèi)等模塊,同時在垂直方向上,又包括關(guān)系型數(shù)據(jù)庫服務(wù)、緩存服務(wù)、對象存儲服務(wù)、負(fù)載均衡服務(wù)、模板和快照服務(wù)、虛擬專用網(wǎng)絡(luò)服務(wù)等。盡管后端的業(yè)務(wù)不盡相同,但架構(gòu)師們抽象出了一套處理工作流的邏輯,并且用Python實(shí)現(xiàn)了一個框架。比如,在消息通信機(jī)制的選擇上,美團(tuán)云沒有采用類似OpenStack的采用消息隊(duì)列Rabbitmq的方案,而是采用了Webserver,主要原因是考慮到Web server在更加久經(jīng)考驗(yàn),業(yè)界對HTTP協(xié)議有著更加成熟的方案。

    美團(tuán)云團(tuán)隊(duì)深度定制了Tornado,將它由單線程、異步回調(diào)的機(jī)制修改為同時支持多線程和同步查詢的機(jī)制。這主要是考慮到在關(guān)系型數(shù)據(jù)庫的查詢上(比如MySQL),沒有較成熟的異步查詢方案,而單線程的阻塞查詢則會影響Tornado的主線程。通過精巧的代碼整合,將Tornado與SQLAlchemy這樣的數(shù)據(jù)庫ORM集成在一起,成功地解決了數(shù)據(jù)庫的問題。同時針對SQLAlchemy的特性進(jìn)行了一些設(shè)置,比如關(guān)閉Auto-Commit,這樣能夠使得ORM不會在每次查詢的時候都會發(fā)出網(wǎng)絡(luò)連接,而是在一個線程的業(yè)務(wù)邏輯里將所有的修改操作hold住,只允許查,在線程結(jié)束的時候手動commit,關(guān)閉session,提交所有的修改。通過這種方式,實(shí)現(xiàn)了一個線程級別的數(shù)據(jù)庫事務(wù)鎖和對象鎖,使得程序員們能在一個線程的邏輯里面同時查詢和修改多個數(shù)據(jù)庫表,同時保證業(yè)務(wù)的原子性。陳博說“通過這些框架,程序員們在開發(fā)上層業(yè)務(wù)的時候也感覺到更加便捷了。”

    聽眾對演講反應(yīng)熱烈,表示受益匪淺,也對美團(tuán)產(chǎn)生的敬佩之情。美團(tuán)能發(fā)展到今天這般規(guī)模,其技術(shù)能力不容小覷。”當(dāng)然,這些只是美團(tuán)云整個技術(shù)的冰山一角。美團(tuán)是中國第一大的O2O電商,網(wǎng)絡(luò)流量500T/天 ,月活躍用戶數(shù)超過1.3億。支持這一龐大業(yè)務(wù)規(guī)模的正是美團(tuán)云。今年3月,美團(tuán)云獲得IDC牌照,8月對外開放首個高品質(zhì)的自建機(jī)房。同時,美團(tuán)云通過第四批可信云認(rèn)證,并將“電商云”獎項(xiàng)收入囊中。2015年第四季度,美團(tuán)云也將推出數(shù)據(jù)產(chǎn)品及行業(yè)解決方案。所有的這些都意味著,美團(tuán)云致力于為千萬用戶提供穩(wěn)定的公有云服務(wù)這一愿景,正在成為現(xiàn)實(shí)。

標(biāo)簽:呼和浩特 撫州 長治 瀘州 贛州 自貢 南京 臺州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《剖析美團(tuán)的以Python為主導(dǎo)的云平臺發(fā)展戰(zhàn)略》,本文關(guān)鍵詞  剖析,美團(tuán),的,以,Python,為,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《剖析美團(tuán)的以Python為主導(dǎo)的云平臺發(fā)展戰(zhàn)略》相關(guān)的同類信息!
  • 本頁收集關(guān)于剖析美團(tuán)的以Python為主導(dǎo)的云平臺發(fā)展戰(zhàn)略的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章