如何將開(kāi)源項(xiàng)目 OpenStack 的代碼變成產(chǎn)品?
先自我介紹下,sina微博北京-小武,《云計(jì)算網(wǎng)絡(luò)珠璣》作者,現(xiàn)就職于華為IT產(chǎn)品線云計(jì)算網(wǎng)絡(luò)架構(gòu)與設(shè)計(jì)部。
OpenStack現(xiàn)在非?;馃?,社區(qū)也集聚了大量的開(kāi)發(fā)人員,各家廠商包括通信設(shè)備商、運(yùn)營(yíng)商、互聯(lián)網(wǎng)公司、電商/店商(包括寶馬、沃爾瑪、蘇寧等)都有參與,用其搭建公有云或私有云平臺(tái)。那么我們?nèi)绾螌penStack的代碼變成一份產(chǎn)品呢?
玩過(guò)OpenStack的人相信都對(duì)剛接觸OpenStack有很深的印象,最開(kāi)始真是迷茫一片,感覺(jué)是螞蟻?zhàn)炜刑?,既不知道如何下嘴,也更有一種遙不可及的高度;熟悉之后會(huì)感覺(jué)相對(duì)簡(jiǎn)單些;如果僅僅將OpenStack運(yùn)行起來(lái)做個(gè)demo,已經(jīng)非常不容易,做成產(chǎn)品更是要費(fèi)很多功夫。
所以把OpenStack代碼變成產(chǎn)品首先需要幾個(gè)稱職的程序員,如果按照分工至少需要多少人呢?這個(gè)話題最早個(gè)人討論要追溯到上年和陳沙克老師的一次QQ聊天;現(xiàn)在應(yīng)該需要14個(gè)人,具體是怎么安排計(jì)算出來(lái)的?
將整個(gè)OpenStack玩熟,需要部署、管理端、計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)、運(yùn)維等方面的職位需求,僅從開(kāi)發(fā)的角度來(lái)列舉下需求人及負(fù)責(zé)工作內(nèi)容(不是熟悉特性,而是大部分問(wèn)題能通過(guò)代碼層面搞定):
- 計(jì)算2人:負(fù)責(zé)虛擬化、linux內(nèi)核系統(tǒng)相關(guān)、集群、NTP、消息隊(duì)列(rabbitmq、zeromq、activemq、qpid)、Nova代碼,Glance、Keystone代碼;
- 存儲(chǔ)2人:所用存儲(chǔ)商家存儲(chǔ)設(shè)備及driver(包括開(kāi)源的ceph等),mariadb, Cinder/Swift代碼,Hadoop及Sahara(原來(lái)叫Savanna)、部署等等;
- 網(wǎng)絡(luò)3人:所用網(wǎng)絡(luò)商家設(shè)備(switch、router、、NGFW/F5)及Plugin或driver,linux協(xié)議棧(tcp /ip,tap/tun,linux bridge,ovs,iptables),物理組網(wǎng)結(jié)構(gòu),Neutron代碼及所用相關(guān)開(kāi)源代碼(keepalived/haproxy/lvs),網(wǎng)絡(luò)安全設(shè)計(jì)等等;
- 管理端2人,熟悉OpenStack API和其他云平臺(tái)API,熟悉公司IT流程,熟悉管理平臺(tái)架構(gòu)和業(yè)務(wù)設(shè)計(jì)能力。
重復(fù)下,這些人不是說(shuō)只熟悉特性,而是從代碼到產(chǎn)品過(guò)程中的大部分問(wèn)題都能通過(guò)代碼層面搞定。
每個(gè)領(lǐng)域應(yīng)加一名人員,一方面防止人員流動(dòng)帶來(lái)的損失,再一方面就是因?yàn)槊總€(gè)層面需要的人才都是通才的專家,多增加一個(gè)人力給組建團(tuán)隊(duì)減少困難,會(huì)很大程度上通過(guò)人員組合達(dá)到集齊所需技能的要求。
最后加上一名足夠優(yōu)秀的領(lǐng)導(dǎo),當(dāng)然也可以是CTO來(lái)兼任;需要其對(duì)云計(jì)算市場(chǎng)有足夠深刻的認(rèn)識(shí)、對(duì)客戶需求有足夠的積累、對(duì)技術(shù)人員有足夠的了解、對(duì)技術(shù)方向和深度足夠的把控等;但是這個(gè)人一定要有產(chǎn)品的思維,而不是僅僅懂技術(shù)和代碼,不懂得如何為客戶做產(chǎn)品的CTO不是好CTO。
如果需要程序員鼓勵(lì)師就是福利了,節(jié)省成本角度,是不是可以考慮從HR或行政這塊兼職下?
人有了,下面就是一步步代碼來(lái)實(shí)現(xiàn)了:
首先要做個(gè)云平臺(tái)的管理端來(lái)管理云平臺(tái),說(shuō)白了,OpenStack的定位是云平臺(tái)管理端,還需要Horizon來(lái)做OpenStack的管理端,通常是一個(gè)web portal;這個(gè)平臺(tái)管理端的功能一方面體現(xiàn)了云計(jì)算商家做產(chǎn)品的思路,也體現(xiàn)了云計(jì)算商家產(chǎn)品的定位是哪一層(IAAS/PASS/SAAS)。
注:這里需要說(shuō)明五點(diǎn):
- OpenStack通常商家來(lái)做IAAS,但是OpenStack自己并沒(méi)有這么定位,Sahara即是PAAS的一個(gè)體現(xiàn),而且經(jīng)過(guò)OpenStack定制化,完全可以做到SAAS的需求;
- 管理端對(duì)接OpenStack,也可以對(duì)接AWS或阿里云,所以云平臺(tái)管理端本身就可以做成一個(gè)產(chǎn)品;這個(gè)也可以是某些公司的主打;
- 云平臺(tái)本身只是個(gè)管理端,技術(shù)含量也并沒(méi)有底層這么高,就像互聯(lián)網(wǎng)的APP理念反而顯得重要得多也高大上的多,自然如果底層不支持,管理端做的再好也不頂事;所以O(shè)penStack自身、一些閉源或在OpenStack基礎(chǔ)之上修改稱之為自研的廠商,如果底層技術(shù)沒(méi)有什么創(chuàng)新,云平臺(tái)管理端也只能在業(yè)務(wù)編排上進(jìn)行點(diǎn)更改,并不是什么技術(shù)革命,好比汽車的發(fā)動(dòng)機(jī)原理甚至原料沒(méi)有改變,只是可以調(diào)整下位置或形狀讓汽車的外觀變得漂亮些;這點(diǎn)上講,將來(lái)OpenStack會(huì)不會(huì)只剩下北向API也未可知;
- 結(jié)合第三點(diǎn),云平臺(tái)管理端是云平臺(tái)的入口,固然重要而且也很專業(yè),但這還并不是各家云計(jì)算廠商技術(shù)的差距體現(xiàn);美觀的頁(yè)面往往對(duì)設(shè)計(jì)進(jìn)行外包即可擁有;但是體現(xiàn)的云計(jì)算平臺(tái)設(shè)計(jì)理念卻需要人員的精髓外漏;
- 云平臺(tái)管理端需要集合企業(yè)流程IT來(lái)做,尤其是私有云的需求,畢竟很多客戶企業(yè)的內(nèi)部流程已經(jīng)用了很多年,對(duì)云平臺(tái)的定制化需求是Horizon在很多情況下被客戶或云計(jì)算廠商所拋棄的一個(gè)很大原因。
現(xiàn)在結(jié)合OpenStack的社區(qū)代碼開(kāi)發(fā)現(xiàn)狀來(lái)說(shuō)下一些注意點(diǎn):
第一,OpenStack的整體代碼較多,因?yàn)闉榱双@取較多廠家的支持,采用了分布式架構(gòu)上的 plugin/driver模式來(lái)支持,所以有很多層封裝,導(dǎo)致了整體效率的低下;Nova和cinder基本是Driver的形式,但是Neutron 社區(qū)卻是五花八門的plugin和driver,還有很多私有的廠家自己維護(hù)的plugin和driver,尤其是最近出現(xiàn)了很多SDN支持的 plugin,比如ODL等。如Neutron:Neutron有L2的core plugin(如現(xiàn)在常用的ML2),L3有router的,通常是用linux的namespace實(shí)現(xiàn)(已有ML3的BP);L4-L7的 plugin幾乎是一個(gè)功能對(duì)應(yīng)一個(gè);OpenStack原生態(tài)代碼只保證功能可用,附帶的test文件夾代碼居然有人作為自建云平臺(tái)的測(cè)試標(biāo)準(zhǔn)工具也是醉了;
面對(duì)如此多的plugin和driver如何選擇?有錢怎么玩都成,沒(méi)人可以招聘,有人自己做一款都沒(méi)有問(wèn)題;沒(méi)錢有能力的可以選擇 OpenStack的公有ML2等plugin自己優(yōu)化,沒(méi)有能力也沒(méi)錢的的自己整兩臺(tái)PC搭建個(gè)demo看看就好了;其實(shí)一條路,自己能搞定的選擇自己搞定的那款plugin或合作方提供的plugin,自己搞不定的跟著大眾走,因?yàn)檫@個(gè)plugin用的人多,相當(dāng)于被測(cè)試的比其他充分,這樣自己用著有了問(wèn)題能提出來(lái),總有人來(lái)回答或解決,說(shuō)不定別人都已經(jīng)解決了;core plugin ML2使用ovs做租戶vxlan之間的隔離是現(xiàn)在大家用的最多的。
這里單獨(dú)提下Open vSwitch的子項(xiàng)目OVN,這個(gè)項(xiàng)目體現(xiàn)了老外一貫的開(kāi)源思路,自己具備核心模塊的掌控能力,其他商家的邊緣參與建立生態(tài)圈;(支持自己的 ovsdb,無(wú)礙其他廠家設(shè)備的邊緣支持),新出現(xiàn)的OVN開(kāi)源有目標(biāo)來(lái)將L2-L7的plugin統(tǒng)一,但是道路還很漫長(zhǎng)可能會(huì)錯(cuò)過(guò)商機(jī);社區(qū)的政治也是很深。
公司參與開(kāi)源可以拉投資,但對(duì)于求職者不能認(rèn)為公司采用了開(kāi)源,老板或公司就會(huì)很Open;個(gè)人參與開(kāi)源能提高知名度,但是也并沒(méi)有因?yàn)樽隽碎_(kāi)源而提升程序員的人格或逼格,所以對(duì)做閉源的同學(xué)相比也沒(méi)有什么高級(jí)的;這些都充分體現(xiàn)了忍狠滾里面的忍字訣,無(wú)他耳,參與社區(qū)開(kāi)發(fā)的技術(shù)能力和水平也不見(jiàn)得都很高,但總有幾個(gè)大牛在;很多人認(rèn)為自己能看代碼什么都能做,不就是幾行代碼么?如果僅是代碼的話的確誰(shuí)都可以做,但看得懂if else不一定能理解else之外還有沒(méi)有else?業(yè)務(wù)技能和場(chǎng)景遠(yuǎn)比代碼重要。
OpenStack的整體架構(gòu)是網(wǎng)絡(luò)的架構(gòu)的設(shè)計(jì),建議讓做網(wǎng)絡(luò)的人來(lái)做主(不是只懂tcpdump和ping命令的,而是參與過(guò)網(wǎng)絡(luò)設(shè)備研發(fā)、設(shè)計(jì)過(guò)數(shù)據(jù)中心架構(gòu)方面有經(jīng)驗(yàn)的人),做存儲(chǔ)和系統(tǒng)的同事參與就行了,因?yàn)镺penStack的設(shè)計(jì)每一步考慮都涉及到網(wǎng)絡(luò)的內(nèi)容;
第二,OpenStack的開(kāi)源代碼質(zhì)量真是不堪,僅僅是一個(gè)功能可用的狀態(tài),對(duì)于性能、架構(gòu)等方面的優(yōu)化還差很多,直接拿開(kāi)源給客戶搭建產(chǎn)品基本都是找死的節(jié)奏,所以需要有這么幾個(gè)小觀點(diǎn):
a)云計(jì)算廠商的角色基本都是集成商,無(wú)論是有能力開(kāi)發(fā)網(wǎng)絡(luò)、存儲(chǔ)或虛擬化底層的,還是沒(méi)有能力的創(chuàng)業(yè)公司,都離不開(kāi)這幾個(gè)角色;所以想做full stack的公司需要看下自己真有這個(gè)必要和力量嗎?希望大家多多繼續(xù)發(fā)揮硬件的力量,僅僅是系統(tǒng)工程師從軟件來(lái)實(shí)現(xiàn)的角度會(huì)讓性能大打折扣,使用硬件也會(huì)加快項(xiàng)目進(jìn)度,建立更好的生態(tài)圈;這一點(diǎn)有幾家公司已經(jīng)意識(shí)到做的很不錯(cuò);
b)云計(jì)算廠商做OpenStack產(chǎn)品有兩個(gè)方式,有關(guān)系來(lái)解除根據(jù)客戶需求定制化產(chǎn)品,或者有經(jīng)驗(yàn)理解客戶痛點(diǎn)能夠直接用于開(kāi)發(fā)產(chǎn)品;但是僅僅靠云計(jì)算的情懷基本是走向末路;有些云計(jì)算創(chuàng)業(yè)公司剛起步對(duì)客戶還挑揀,沒(méi)有搭建過(guò)10臺(tái)計(jì)算節(jié)點(diǎn)服務(wù)器的經(jīng)驗(yàn),卻非要1000臺(tái)以下計(jì)算節(jié)點(diǎn)的單子不接,除非你有很硬的關(guān)系信任你,不然只能靠雙色球一等獎(jiǎng)的概率了;
c)云計(jì)算做的好不好,和是否開(kāi)源關(guān)系不大;一個(gè)事實(shí)是,UCloud的閉源卻是創(chuàng)業(yè)公司中云計(jì)算做的最好的(個(gè)人觀點(diǎn),不喜勿噴),AWS和 Azure是公有云的大哥大,卻也是閉源(最近有AWS和OpenStack合作的消息);基于OpenStack的大量創(chuàng)業(yè)公司反而多是在整玄乎的概念,真正拿得出手的產(chǎn)品或商業(yè)案例卻不多;很多公司宣揚(yáng)的對(duì)社區(qū)貢獻(xiàn)可能為爭(zhēng)取公司融資方面做的貢獻(xiàn)更多些;大公司開(kāi)源貢獻(xiàn)比如Redhat對(duì)于 Linux的產(chǎn)品化方面,有三方面做法:優(yōu)化參數(shù)提升產(chǎn)品性能、掌控開(kāi)源趨勢(shì)降低客戶成本、快速的Bug fix和版本回合能力;這點(diǎn)也是開(kāi)源公司招聘開(kāi)源達(dá)人的原因,但是對(duì)于小公司來(lái)說(shuō)還無(wú)法一步到位的采用這種模式;
d)很多做開(kāi)源的同學(xué)往往對(duì)政府意見(jiàn)都比較大(無(wú)論國(guó)內(nèi)外),一方面開(kāi)源需要open這點(diǎn)政府確實(shí)很多時(shí)候做不到,另一方面其實(shí)是開(kāi)源社區(qū)也有政治,只是這里的政治問(wèn)題往往掩蓋了經(jīng)濟(jì)利益問(wèn)題;開(kāi)源也是各大相關(guān)參與廠商利益競(jìng)爭(zhēng)的過(guò)程;還有一點(diǎn)很多人都認(rèn)為很使用了開(kāi)源軟件的公司都會(huì)很開(kāi)放的原因;
e)畢竟OpenStack是開(kāi)源代碼,客戶用的時(shí)候也會(huì)調(diào)研,包括架構(gòu)和代碼;但是不是因?yàn)樗麊?wèn)的問(wèn)題深入就能說(shuō)明他很強(qiáng),可能某些方面他們經(jīng)驗(yàn)積累確實(shí)很豐富,但是如果他能搞得定還找你干嗎?所以很可能他不如你但是接觸商家多所以問(wèn)的問(wèn)題看起來(lái)很專業(yè),如果你能問(wèn)他問(wèn)題,可能分分鐘就能問(wèn)倒他們(這就好比面試學(xué)習(xí),很多情況下面試者和被面試者,都會(huì)有把對(duì)方問(wèn)倒的交集知識(shí)點(diǎn),知識(shí)場(chǎng)景限制雙方的說(shuō)話內(nèi)容和方式),你得忍,給他們講懂,那才能說(shuō)明你真懂,否則很難拿到單子,縱然你公司技術(shù)也很牛。這樣客戶見(jiàn)了很多商家,每個(gè)商家學(xué)一點(diǎn),幾乎說(shuō)起來(lái)都很懂,但是動(dòng)手能力就是上不去。
f)OpenStack也是軟件開(kāi)發(fā)方面的,和其他軟件架構(gòu)和代碼方面沒(méi)有什么差別,也需要從架構(gòu)和性能方面不斷優(yōu)化,可以從以前的軟件開(kāi)發(fā)上吸取很多經(jīng)驗(yàn);從代碼到產(chǎn)品,先是功能開(kāi)發(fā),然后是規(guī)模上去,接著就會(huì)性能下降,然后再優(yōu)化,周始輪詢,最終又比較良好的產(chǎn)品級(jí)實(shí)現(xiàn);說(shuō)白了,都是為了底層數(shù)據(jù)轉(zhuǎn)發(fā)面功能,通過(guò)管理層來(lái)實(shí)現(xiàn);為了實(shí)現(xiàn)大規(guī)模,通過(guò)管理層集群來(lái)實(shí)現(xiàn)管理層高性能,往往是犧牲了管理面的一致性;CAP這里依然存在;華為在社區(qū)提出了OpenStack級(jí)聯(lián)方案,就是通過(guò)管理面的努力擴(kuò)大數(shù)據(jù)層面的規(guī)模;
第三,OpenStack的部署、升級(jí)和運(yùn)維都是大問(wèn)題;首先說(shuō)部署和升級(jí),主要是OpenStack的版本快速發(fā)展,支持特性不斷完善;所以客戶的需求也是要跟隨的上,僅僅是普通bug修復(fù)部署工具基本都能搞定,大的升級(jí)影響就會(huì)比較大,甚至?xí)?dǎo)致云平臺(tái)底層管理網(wǎng)絡(luò)和業(yè)務(wù)網(wǎng)絡(luò)的重大變更;拿OpenStack的I到J舉例,如果開(kāi)啟了DVR,想業(yè)務(wù)不中斷只能是跨集群業(yè)務(wù)遷移;運(yùn)維來(lái)說(shuō)是云計(jì)算商家招牌之一,可以明確的說(shuō),OpenStack不會(huì)消滅運(yùn)維,只會(huì)導(dǎo)致運(yùn)維人員的技術(shù)要求提高和不努力運(yùn)維的淘汰;對(duì)于OpenStack來(lái)說(shuō)會(huì)導(dǎo)致其運(yùn)維承包團(tuán)隊(duì)的出現(xiàn),也會(huì)對(duì)OpenStack的培訓(xùn)及運(yùn)維培訓(xùn)有很大需求,畢竟客戶的運(yùn)維人員對(duì)于OpenStack的理解都還不是很深入;某些公司說(shuō)云平臺(tái)基本沒(méi)有運(yùn)維,那么可以說(shuō)有可能兩點(diǎn)原因,是只有兩個(gè)機(jī)架的設(shè)備不需要運(yùn)維,另一個(gè)就是運(yùn)維外包并且將升級(jí)擴(kuò)容和災(zāi)備的事劃到運(yùn)維工作之外;完全沒(méi)有一個(gè)運(yùn)維這話,真正懂行的沒(méi)一個(gè)敢這么給客戶說(shuō)的。
第四,簡(jiǎn)單說(shuō)下SDN和OpenStack的結(jié)合;現(xiàn)在出現(xiàn)了很多SDN的plugin,大部分Neutron 是作為SDN控制器的APP或SDN 控制器的的一部分來(lái)使用,暫時(shí)還未看到第三種形態(tài)——作為SDN控制器的Underlay網(wǎng)絡(luò)層面;對(duì)SDN的理解我也只有一種,不認(rèn)為有狹義和廣義之分,所謂云計(jì)算廠商說(shuō)自己天然的云平臺(tái)是廣義SDN的,個(gè)人認(rèn)為這都是對(duì)SDN沒(méi)有理解透徹;SDN應(yīng)用不僅僅是云計(jì)算或數(shù)據(jù)中心,企業(yè)網(wǎng)也可以有很多點(diǎn),這里不多提了;但是隨著各家SDN控制器的出現(xiàn),SDN的網(wǎng)絡(luò)開(kāi)放之路似乎又到了收窄的方向上;希望SDN能盡快走過(guò)優(yōu)勝劣汰的過(guò)程,減少中間的無(wú)謂成本,多多服務(wù)于需求;順便說(shuō)下,很多理解我是做SDN的,其實(shí)我是做云計(jì)算的,只是做網(wǎng)絡(luò)出身,一直在跟SDN而已;
和自己原來(lái)很多技術(shù)出現(xiàn)一樣,同樣的功能各個(gè)商家都會(huì)取一個(gè)自己的名字,換湯不換藥;但是說(shuō)自己家名字的功能是業(yè)界第一或第一家實(shí)現(xiàn)的就不要這么理直氣壯了,畢竟你家名字的功能只有你自己家這么叫,當(dāng)然是業(yè)界第一或第一家嘍!其實(shí)底層技術(shù)都是集成了第三方或開(kāi)源的,別人家也都實(shí)現(xiàn)啦;只是名字不同而已。
其實(shí)挺佩服Intel的,無(wú)論是其有意為之還是偶然天成,總之現(xiàn)在你做云計(jì)算都不得不買Intel的CPU,存儲(chǔ)設(shè)備,計(jì)算設(shè)備,甚至交換機(jī)現(xiàn)在的 CPU都很多是Intel的(順便說(shuō)下Intel也收購(gòu)了交換芯片商開(kāi)始做交換機(jī));云計(jì)算如此,SDN的控制器也離不開(kāi),還有NFV甚至直接被人誤解為就是基于X86的虛機(jī),可見(jiàn)Intel在這些新興領(lǐng)域的影響力。
最后就是希望再云計(jì)算領(lǐng)域里,希望大家都踏實(shí)些,少些“語(yǔ)不驚人死不休”,喬布斯也只有一個(gè),商業(yè)推廣的那一套來(lái)用到技術(shù)上,就真的沒(méi)品了;狂妄的預(yù)測(cè)誰(shuí)都可以說(shuō)來(lái)博取眼球,不過(guò)仔細(xì)想想真的可能嗎?OpenStack都被拋棄了才有可能將來(lái)實(shí)現(xiàn)的技術(shù)現(xiàn)在不提也罷。
原文鏈接:http://www.sdnlab.com/14573.html
關(guān)于OpenStack
OpenStack是一個(gè)由NASA(美國(guó)國(guó)家航空航天局)和Rackspace合作研發(fā)并發(fā)起的,是一個(gè)開(kāi)源的云計(jì)算管理平臺(tái)項(xiàng)目,由幾個(gè)主要的組件組合起來(lái)完成具體工作。OpenStack支持幾乎所有類型的云環(huán)境,項(xiàng)目目標(biāo)是提供實(shí)施簡(jiǎn)單、可大規(guī)模擴(kuò)展、豐富、標(biāo)準(zhǔn)統(tǒng)一的云計(jì)算管理平臺(tái)。
OpenStack除了有Rackspace和NASA的大力支持外,還有包括戴爾、Citrix、Cisco、Canonical等重量級(jí)公司的貢獻(xiàn)和支持,致力于簡(jiǎn)化云的部署過(guò)程并為其帶來(lái)良好的可擴(kuò)展性。