1. 程式人生 > >知名IT博主“左耳朵耗子”談雲端計算——拼的就是運維

知名IT博主“左耳朵耗子”談雲端計算——拼的就是運維

本文轉至InfoQ中文站在2014年3月對陳皓(@左耳朵耗子)的一次聊天內容整理而成。在溝通中,陳皓分享了自己對雲端計算的理解,包括雲端計算為什麼會分三層,實現一個雲平臺的難點在什麼地方,運維之於雲端計算的重要性,電商云為什麼有價值等。

陳皓(@左耳朵耗子),CoolShell.cn博主。15年軟體開發相關工作經驗,8年以上專案和團隊管理經驗。擅長底層技術架構,團隊建設,軟體工程,軟體研發諮詢,以及全球軟體團隊協作管理。對高效能,高可用性,分散式,高併發,以及大規模資料處理系統有一些經驗和心得。喜歡關注底層技術平臺和網際網路行業應用。技術擅長C/C++/Java和Unix/Linux/Windows。曾於Amazon中國任研發經理,負責電子商務全球化業務(全球開店)和全球庫存預測系統的研發。曾在阿里巴巴北京研發中心、商家業務部曾任資深專家一職,負責電商雲平臺、開放平臺,雲監控和電商多媒體平臺。現在阿里巴巴核心系統專家組從事阿里核心系統和阿里雲ECS相關的虛擬化平臺的開發工作。

對雲端計算的定義

雲端計算其實跟PC機有一樣的概念,有CPU、硬碟、作業系統、應用軟體。雲端計算的計算節點(虛擬機器)就是PC中的CPU,資料快取服務就是PC的記憶體,儲存節點就是PC的硬碟,提供資料服務,讓資料不丟、高可用,PC中的控制器就是雲端計算的控制系統。PC機的硬體上面要有作業系統。作業系統很大一塊是給開發人員提供系統的API介面,提供系統監控以看執行情況,並且還要有系統管理——如使用者賬號的許可權管理、備份恢復等等。作業系統上面要有應用軟體,這樣才能服務於終端使用者,應用軟體就是真正落地的業務,這樣才會有使用者;有了使用者,整個體系就運轉起來了。

這就是工程師說的stack,也就是我們聽到的IaaS、PaaS、SaaS三個層。IaaS層就像PC機的基礎硬體加驅動程式,PaaS層就像PC機上的作業系統——把基礎硬體抽象、包起來並遮蔽硬體和硬體驅動細節、排程基礎硬體,而SaaS層就是PC機裡的應用軟體。另外,我們還得給開發人員提供各種開發框架、類庫和開發環境,這就是為什麼AWS還做通知、訊息、工作流,這是用於粘合作業系統和業務層的,比如可以讓你方便地做水平擴充套件和分散式。雲端計算自然也會像PC機一樣,三個層上都會有用於控制和管理的系統。這就是為什麼雲端計算會做成這個樣子,其實計算機的發展就在這個圈子裡繞。

其實,終端使用者基本並不關心你CPU用的啥,儲存用的是啥,你用什麼框架開發,他們關心更多的是可以解決什麼問題,有什麼樣的使用者體驗。像以前Windows使用者體驗之所以比Linux好,就是因為應用層用的舒服;而Linux對開發者的使用者體驗比Windows好,就是因為其開放和可以讓開發人員更靈活、更自由。我們可以看到SaaS層上有的像SalesForce、Dropbox、Evernote、Netflix這樣的給終端使用者的服務,他們更傾向於終端使用者和業務。

說到底,雲端計算的IaaS、PaaS、SaaS最後那個S都是Service。就是說,無論你雲端計算長成什麼樣,都得要向用戶提供“服務”而不僅僅是軟硬體和各種資源。

雲端計算的技術難點

到今天,雲端計算的工業實現已經不太難了。現在有開源軟體KVM和Xen,這兩個東西基本把虛擬化搞定;而OpenStack則把管理、控制系統搞定,也很成熟。PaaS也有相應的開源,比如OpenShift,而Java裡也有N多的中介軟體框架和技術。另外分散式檔案系統GFS/TFS,分散式計算系統Hadoop/Hbase等等,分散式的東西都不神祕了。技術的實現在以前可能是問題,現在不是了。

對於雲端計算工程方面,現在最難的是運維。管100臺、1萬臺還是100萬臺機器,那是完全不同的。機器少你可以用人管理,機器多是不可能靠人的。運維繫統不屬於功能性的東西,使用者看不見,所以這是被大家嚴重低估的東西。只要你做大了,就必然要在運維繫統上做文章。資料中心/雲端計算拼的就是運維能力。

為什麼我說運維比較複雜,原因有這麼幾個。

一方面,雲端計算要用廉價裝置取代那些昂貴的解決方案。所謂網際網路的文化就是屌絲文化,屌絲就是便宜,網際網路就是要用便宜的東西搭建出高質量的東西,硬體和資源一定不會走高階路線——比如EMC、IBM小型機、SGI超級計算機等等,你如果用它去搭建雲端計算,成本太貴。用廉價的解決方案代替昂貴的解決方案是整個計算機發展史中到今天唯一不變的事情。所以如果你要讓夏利車跑出賓士車的感覺,你需要自己動手做很多事,搭建一個智慧的系統。用廉價的東西做出高質量的東西,運維好廉價的裝置其實是雲端計算工程裡最大的挑戰。

另一方面,因為你機器多了,然後你用的又不是昂貴的硬體,所以故障就變成了常態,硬碟、主機板、網路天天壞。所以,沒什麼好想的,運維就必須要跟上。雲端計算的目標是在故障成為常態的情況下保證高可用——也就是我們所說的,你服務的可用性是3個9、4個9還是5個9。

最後,這一大堆機器和裝置都放在一起,你的安全就是一個挑戰,一方面是Security,另一方面是Safety,保證數十臺數百臺的裝置的安全還好說,但是對於數萬數十萬臺的設計,就沒有那麼簡單了。

所以,面對這樣的難題,人是無法搞得定的,你只能依靠技術來管理和運維整個平臺。比如必須有監控系統。這跟作業系統一樣,對資源的管理,對網路流量、CPU利用率、程序、記憶體等等的狀態肯定要全部收集的。收集整個叢集各種節點的狀態,是必然每個雲端計算都有的,都是大同小異的。

然後,你還要找到可用性更好的節點,這需要有一些故障自檢的功能。比如阿里雲就遇到過磁碟用到一定時候就會莫名其妙的不穩定,有些磁碟的I/O會變慢。變慢的原因有可是硬碟不行了,於是硬碟控制器可能因為CRC校驗出錯需要要多讀幾次,這就好比TCP的包傳過來,資料出錯了,需要重新傳。在這種硬碟處理半死不活的狀態時,你肯定是需要一個自動檢測或自動發現的程式去監控這種事情,當這個磁碟可能不行了,標記成壞磁碟,別用它,到別的磁碟上讀複本去。我們要有故障自動檢測、預測的措施,才能驅動故障,而不是被動響應故障,使用者體驗才會好。換句話說,我們需要自動化的、主動的運維。

為了資料的高可用性,你只能使用資料冗餘,寫多份到不同的節點——工業界標準寫三份是安全。然而,你做了冗餘,又有資料一致性問題。為了解決冗餘帶來的一致性問題,才有了paxos的投票玩法,大家投票這個能不能改,於是你就需要一個強大的控制系統來控制這些東西。

另外,公有云人來人往,裡面的資源和服務今天用明天不用,有分配有釋放,有凍結,你還要搞一個資源管理系統來管理這些資源的生命狀態。還有許可權管理,就像AWS的IAM一樣,如果沒有像AWS的IAM許可權管理系統,AWS可能會不會像今天這樣有很多大的公司來用。企業級的雲平臺,你需要有企業級的運維和管理能力。

雲端計算的門檻

為啥雲端計算有這麼多開源的東西,卻不是人人都能做?我覺得有以下原因:

一方面,這就跟蓋樓一樣。蓋樓的技術沒什麼難的(當然,蓋高樓是很難的),但是你沒地你怎麼蓋?我覺得雲端計算也一樣,頻寬的價格貴得就像土地的價格。其實雲端計算跟房地產一樣,要佔地、佔機房、佔頻寬。如果能把中國所有的機房、機櫃、頻寬資源都買了,你就不用做雲計算了,賣土地就夠了——因為這些是有限的。最簡單的例子,IP地址是有限的。你有頻寬、有機房,但是如果你沒有IP,這就不好玩了。尤其是你要提供CDN服務,這個就更明顯,因為有多少物理節點直接決定你的CDN服務質量。

另一方面,正如前面所說的,運維是件很難的事,運維這個事並不是一般人能搞的事。沒有足夠的場景、經驗和時間,這種能力很難出現。

從使用者的角度來說呢,雲端計算是一種服務,你需要對使用者企業內的解決方案要有很好的瞭解,這樣才能提高很好的服務。能提供“好服務”的通常都是把自己真正當成使用者公司。

這跟做汽車一樣,底層做引擎、輪子、油箱、控制系統,給你弄一堆零件,上層可以拼裝。PaaS相當於給你一個很快可以打造成的汽車的工作臺。而SaaS就是成品——兩廂、三廂、卡車、轎車,終端使用者要的是這個。後面什麼Xen、儲存、分散式,跟我一毛錢關係沒有,我就要知道汽車是安全的,效能好的,省油的,不會拋錨、耐用的,千萬別速度快了或者坡度大了或是別的怎麼樣就失靈了。

賣汽車也是賣服務。造出汽車來,並不代表你搞定這個事了。如果沒有公路、沒有加油站、沒有4s店、沒有交通管理、規則等等,你要麼用不了,要麼就是亂七八糟。不能只讓使用者在那看著你的汽車好牛啊,但是使用者不知道怎麼用。所以說,雲端計算最終旁邊必須要有一套服務設施,而這套服務設施也是今天被人低估的。

雲端計算有兩個東西我覺得是被人低估的,一個是運維,一個是那堆服務。做服務的需要有生態環境,有人幫你做。所以做雲端計算要落地並不簡單。

這跟IBM一樣。IBM有段時間也是快不行了,他們的CEO寫了一本《誰說大象不能跳舞》,講IBM的轉型,從賣硬體的轉成賣服務、解決方案,有流程、諮詢,順便賣硬體,帶著一堆系統整合商一起玩。我給你解決方案,誰來實現呢,就是整合商幫你,然後順便把硬體賣給你。一樣。未來是什麼樣,歷史上已經有了。你看,要幹那麼多事,而且還不是用人堆就可以堆出來的。這就是雲端計算的門檻。

總之,雲端計算是需要吃自己的狗食才能吃出來的,絕不是像手機上的Apps一樣,你想一想、試一試就能搞出來的,你首先需要讓自己有這樣的場景,有這樣的經歷,你才可能會有這樣的經驗和能力。

雲端計算的市場細分

市場細分必然是市場來驅動的。市場變化太快,說不清楚,不過大的方向應該會是這樣的:有類是需要玩計算密集型的(比如大資料計算、網路遊戲),有類是需要玩IO密集型的(比如視訊網站),有類就是為了建網站的(比如電子商務、入口網站、無線),有類是為了資料安全和保密的(比如金融資料)。

從更高的層面來看,社會也需要分工。有的人賣土地,有的人賣房子,有的人裝修,有的人是中介。我相信沒人願意把所有的賭注都押在一個地方。雲端計算也是一樣。上面也說過,無論IaaS、PaaS、SaaS,後面的S都是service,本質上都是提供服務。所以,我認為,市場的細分本質上就是服務的細分。

看看歷史我們知道,細分永遠是跟著行業走的,也是跟著業務走的,所以,在業務層會出現更多的細分。

對阿里雲產業細分的看法

政府雲、金融雲不太清楚,不過我很清楚電商雲——就是我之前負責的聚石塔。聚石塔時間不長,2012年9月正式上線,去年是大發展的一年,作為垂直雲解決的很好。天貓和淘寶做的都是下單前的東西,下單後,商家每天處理好幾百單,需要做訂單合併、篩選,有的商家規模不大但訂單很多。海爾有ERP,這些商家沒有,但是每天也1000多單,如果沒有資訊化的系統,人肉是處理不了的,必然要有ERP系統處理訂單。另外還要管理使用者,給使用者做營銷、發展忠實使用者。總之,都是賣東西以後的事情。咋辦?

淘寶天貓給了一堆開放API,你可以調我的API接入,在你那邊有ISV幫你做一套東西遠端訪問淘寶API,把訂單拉過去,倉庫進貨了之後,通過API把庫存改一下,就可以連起來了。天貓使用者下單,到他的系統、他的倉庫,他就發貨了,倉庫補完貨,在他的系統裡一改,自動就到天貓店了。這是電子資訊化。

但是一到雙十一就受不了:訂單量太大。正好雲平臺出現了,再怎麼樣,阿里的運維能力也要比你商家的要強吧。你看,聚石塔賣的是服務,不是主機。另外是資料安全:商家的系統天天被黑客盯著,如果我們把使用者資訊都給商家,不是所有的商家的系統安全都做得很好,內部的人插個什麼U盤,上面一堆木馬,資料就被偷走了。偷走了之後,別人還說是阿里搞丟的,這當然不行。所以,我們又要開放,還要保證安全,聚石塔這個雲平臺就這樣出來的:你來我這兒,我才開放給你,因為安全很重要。

保證效能和安全也是商家的利益訴求也在裡面,商家也不希望使用者資料被偷,他也希望雙十一能抗住。

另外,很多商家自己不會做,所以要ISV(第三方軟體開發商)來做,所以這個是賣解決方案,跟IBM很相似。銀行要一套系統,IBM提供硬體和解決方案,系統整合商來幫銀行寫程式碼和整合系統。聚石塔也很像,聚石塔提供API、ECS、資料庫,第三方的ISV進來幫商家整合一個系統。這是很經典的也是很傳統的IBM的玩法,只不過是玩在了雲端。

你看,這也是做自己的長項做出來的細分市場。所以說,吃自己的狗食很重要。

對PaaS的看法

無論是Google的GAE還是新浪的SAE都是給個容器,給個容器的好處是不用管資料連線、CPU什麼,程式一傳就能用,什麼水平擴充套件都不用管。不爽的是,一個是在程式設計上限制太多:AppEngine總會閹割很多系統相關的功能,比如Java、PHP、Python的很多系統呼叫都閹割了,因為如果給你這些系統呼叫,你就可以突破沙箱;另一個是有故障的時候:技術人遇到問題都恨不得自己上去解決,想看看後面在忙啥,但是看不到,很無助,只能等你解決,就看你的人解決的好不好、快不快。所以如果IaaS沒做好,運維、故障自動處理、遷移沒做好,出了問題使用者只能乾瞪眼,PaaS必然不好用。當然IaaS層也有這個問題,但是至少你還可以登到機器上看一看,大不了重啟一下。像AWS,你重啟一下就跑到別的物理機,問題也許就解決了。

其實,對於PaaS中間這層的確很尷尬。怎麼解決?我覺得還是要依賴某種業務場景。單純一個平臺要閹割很多功能,搞得使用者不舒服,還不如干脆一步到位,根據業務場景給一個程式設計框架。比如SAE可以就做微博app,上來就調API,資料庫都ready;或者微信如果做個PaaS,上面只玩微信公眾平臺上的東西,也可以。我覺得PaaS層更貼合業務會更成功。給新浪微博做個外掛,你去買個VM、買資料庫?這種時候很需要PaaS。我覺得PaaS層要成功就要貼近業務場景。比如:騰訊的風鈴系統(雖然不知道企業帳號看見是什麼樣的),就做無線建站,這樣多好。乾巴巴的PaaS有點高不成低不就。

對SDN的看法

SDN其意圖是想改變目前超級複雜的網路結構。意圖是挺好的。想一想,如果以後我家的網路不用因為買個新的路由器都要重新設計一把,只要一次設定,然後對所有的路由器都通過,的確是挺方便的,這點對企業非常好。不過,不知道在操作上怎麼做,也許會從企業內部開始這場革命,這個不得而知。

就像開車一樣,機械式的方向盤和剎車油門系統這麼多年都沒什麼變化,也提過很多更好更高科技的解決方案,但是傳統還是這樣延續下來了。所以,SDN真不知道未來會怎麼樣。總之,一個老的事物到一個新的事物需要有一個過程,這個過程中會出現很多過渡產品或是過渡方案,如果沒有這些過渡產品和方案,也就沒法達到新的事物。未來是什麼樣,無法預知。

對私有云的看法

私有云跟公有云,都會存在。這跟人一樣,私人生活和公眾生活都會需要的。大公司有1萬、2萬人,這麼多資料,要存,需要一個很穩定的解決方案。要穩定可以買IBM,但是貴。雲計算出來說,我可以寫三份,但他不想上公有云,我的資料放在別人那裡,總感覺不好的,所以有了私有云做物理隔離,他覺得安全。

安全這個詞對應兩個英文,security和safety,其實security和safety不一樣:雲端計算解決safety,保證資料不丟;寧可資料丟也不讓人看到,那是security。比如私人照片我更願意存家裡,有一個小的雲端儲存,所有裝置同步,跟老家父母同步,這樣比較好。放公網很恐怖。

一定會有公司不願意上雲的,比如金融方面的企業,他們覺得網際網路不安全,他們要的更多的是安全。在公網上你的系統的安全攻防能力都要跟上,但如果物理不通的話就不用考慮的太複雜。企業內部私有云肯定有市場。你看,好些企業內部目前還被EMC、IBM所壟斷著呢。計算機發展史就是廉價的東西取代昂貴的東西,所以私有云一定沒問題,而降低私有云的運維複雜度、提供一個或多個方便的運維繫統和工具就是重中之重中。其中,SDN之類的東西肯定會是其中一個很重要的一塊。

另外,還是那句話,雲就是服務,只要提供了好的服務,無論公有還是私有都是會有價值的。

(本文出處:http://www.infoq.com/cn/articles/chenhao-on-cloud)