有關雲架構建設和選型的思考
最近在負責公司內部私有云的建設,一直在思考怎麼搞雲端計算,怎麼才能夠把雲架構設計得好一些。本文儘量全面的列出了雲架構建設和選型的考量因素。
我們主要從五個層面逐步評估雲架構的建設和選型,分別是:
- 行業生態
- 企業需求
- 雲端計算的能力
- 潛在的挑戰
- 如何建設
一、行業生態
計算機雲經過多年的發展,由一開始的概念,慢慢發展成熟並能夠推向市場,提供多種多樣的服務,市場空間非常之大。
在雲的發展過程中,亞馬遜經過多年的深耕積累,發展成為了雲行業的標杆企業,甚至可以說是建立了雲解決方案的標準。之後,Google、IBM、思 科、Oracle、HP、Intel、華為等IT巨頭先後參與進來,在軟體和硬體方面提供專門的面向企業的解決方案,紛紛打著雲端計算、大資料、智慧等概念 來吸引客戶,擴充市場。
另外一方面,基於大資料、儲存、雲服務等,市場上也先後出現一些創新企業,如Dropbox、Rackspace,國內的七牛、青雲、UnitedStack等。
當前的IT世界有一個常見的現象,就是隻要某一個領域有一套成熟的商業軟體,就同時也會有一套開源的解決方案,如Windows之於 Linux,Google的MapReduce、GFS、大表之於Hadoop等。在雲領域也存在相應的開源解決方案,目前最為著名的有 Openstack和Cloudstack。開源行業的領導者RedHat此前
在企業作業系統的市場已經做的很好,RHEL的各個版本在企業級系統市場有相當高的市場份額。現在的RedHat特別重視雲的發展,並將雲作業系統作為未來10年的發展戰略重點,在最近兩年先後收購了Gluster以及Ceph等儲存企業,以壯大自己在雲領域的影響力。
隨著雲領域的發展,市場上也逐漸形成了面向企業提供硬體和軟體產品的提供商、面向企業提供服務的提供商、面向市場初創企業提供基礎服務的提供商、面向個人提供業務服務的提供商等一系列行業生態。
二、企業需求
需求是什麼,也就是what people need這個問題。我們所說的people,即人或者公司實體,該物件的劃分並不單純,可粗淺的從三個角度來進行分類:
從企業角度看:
1)小型企業
小型企業的技術儲備不多,人員缺乏,沒有獨立的IT部門,但是在構建自己的IT系統過程中需要購置各種產品和服務,包括伺服器、網路、CDN等等,而要完成這樣的工作,需要投入大量的人力和財力。透過購買雲服務可以更加方便快捷,簡單的完成系統的搭建。
2)中型企業
中型企業有一定的規模,需要在資訊化、管理方面有所注重,一般內部都設立IT部門,但是和小型企業一樣,IT部門大多數都是為了解決自身需求,很難能夠有一個完整的解決方案。這樣在伺服器、網路、CDN、企業管理軟體等等的需求還是比較大的。
3)大型企業
大型企業人數規模在萬人以上,特別是高新企業,都有一個實力不錯的IT支撐部門,透過部門就可以完善對企業內部資訊化建設。
從企業性質範圍來看:
1)傳統行業企業
傳統行業大多數是以服務業、製造業、生產性企業為主,在IT資訊化方面相對比較落後,屬於重資產行業。
2)網際網路企業
網際網路行業是基於IT作為解決方案的
3)IT服務企業
以銷售軟體、硬體、以及技術諮詢服務為主的企業。
針對市場中存在的企業、個體等的需求特點,市場上一般對軟體服務進行如下分類:
- 提供軟體的服務,解決企業內部資訊化問題,如ERP系統、進銷存管理系統、人力資源管理系統、行政系統、財務系統等等。(SaaS)
- 提供平臺服務,解決行業共性問題,將SaaS遷移到雲端,提供平臺類的服務。如淘寶的開放平臺、Facebook的開放平臺、基於Salesforce的銷售系統、雲筆記、雲盤等。(PaaS)
- 提供基礎設施服務。基礎設施包括軟體和硬體方面的,包括儲存、虛擬機器、網路、防火牆、快取、負載均衡、資料庫等等。(IaaS)
從企業內部人員角色來看:
企業內部,尤其是網際網路企業內部,一般將角色分為如下幾類:
- 開發
- 測試
- 運維
- DBA
- 產品
- 專案管理人員
- 客服
- 業務人員(銷售、市場、BD、人力資源、行政等等)
不同的角色對於軟體服務的需求也是不同的,下圖大致描繪了網際網路行業各個角色對雲平臺的需求:
三、雲端計算的能力
雲端計算能夠解決什麼,也就是what cloud offer這個問題。目前的雲端計算在應用中主要提供了以下八個能力:
- 封裝:將計算能力和軟體放在雲端,可以減少重複建設,將通用的服務封裝起來,達到重用,減少資源的浪費,提高生產效率,並提供成熟的解決方案。 在雲端,雲提供商可以建立軟體的標準,提供釋出包的方式,使用者可以透過軟體包的方式進行購買使用,譬如目前開源領域的Docker。
- 安全:雲端計算將資料和儲存,軟體邏輯都集中於雲端,更能方便的統一構建安全體系,透過Iptables實現網路過濾,並在服務端做安全元件實現安全策略,並能夠透過海量叢集應對DDOS攻擊等。
- 靈活:雲端計算提供靈活的軟體和服務端架構,使用者不再需要自己構建應用執行環境,對資源的使用能夠按需購買,並能夠升級,並自由組合。舉例來說:使用者可以選用不同的儲存方式(mysql、oracle,檔案系統,kv等等)
- 效能:透過叢集的能力和雲端的整合能夠提高叢集的效能處理,透過專業的雲解決提供商,在雲端的效能擴充套件更加方便,技術上更加專業。譬如服務端可以在使用者毫不察覺的情況下完成新增機器、儲存擴容等操作。
- 伸縮能力:在儲存和計算能力方面提供彈性的資源管理,能夠按需使用,在使用過程中,可以透過動態的新增和減少物理資源,來提高響應能力或節約成本。
- 運維:雲端計算在IaaS角度來看,重要的是運維,能夠將運維更加集中化管理,並完全智慧化,大大降低人力成本
- 充分利用物理資源:透過雲建設,能夠將物理資源進行虛擬化處理,遮蔽物理硬體底層,並能夠完成物理資源軟化進行邏輯管理和分配排程
- 大資料:大資料儲存於雲端,能夠提供資料分析和智慧處理
當然,雲端計算還有很多很多好處,給我們帶來很多想像空間和IT技術的革命。
公有云與私有云
行業內將雲分為“公有云”和“私有云”。在我們之前的需求分析過程中,大致瞭解了雲的需求,“公有云”和“私有云”的差別最大的是需求的差異,因為需求的差異,導致了技術方案和產品決策的差異。
公有云需求上由於使用者多種多樣,導致需求存在不一樣,特別需要更多的定製化,譬如:
- 儲存個性化
雲端儲存方面大概分為塊儲存和物件儲存,塊儲存適合於vm執行環境,物件儲存提供了KV的訪問方式提供了海量擴充套件儲存檔案的能力,使用者可以根據自己 的需求選擇不同的儲存方式,選用不同的容量。在儲存物理介質方面來說,因為存在不同的物理介質,對效能和安全的要求,可以採用傳統的SATA硬碟,或者 SSD儲存等。
- 記憶體使用
記憶體方面,需要提供動態擴充套件記憶體的方式,使用者能夠自由擴充套件
- 網路的定製化
公有云使用者需要能夠構建自己的內部網路,並能夠自動組網
- 資料庫使用
公有云的使用者分屬不同的公司團體,各自的技術差異存在,因而有不同的資料庫型別,譬如mysql,sqlserver,oracle等等。並能夠定義儲存大小,記憶體執行大小等等。並提供資料備份、恢復、高可用服務等
- 快取使用
公有云的使用者可以選擇不同的快取方式,譬如增加CDN,採用不同的KV快取方式並選擇容量。
- 安全問題
公有云對於雲的安全和私有云差別較大,私有云大多數在安全問題上不需要公有云那麼嚴格,大多數是內部系統之間的互動
以上僅限於IaaS層面的考慮,當然對於公有云來說還有很多細化的個性化需求,例如:資料分析,業務對接服務等等。
四、潛在的挑戰
計算機自從誕生以來,一直按照馮.諾伊曼的體系發展在硬體的基礎上的作業系統,也分為網路協議體系的實現、記憶體管理、檔案管理體系等等。大致的抽象圖如下:
要建設雲,有幾個重要的問題需要解決:
- 管理問題
雲端計算的實施首先要解決運維的問題,在雲環境下後端是大規模數量的物理節點的叢集,對於同時維護數以千計算的計算節點,以及部署結構的複雜,需求 的變化,光靠增加人力也難以解決複雜的問題。從而需要構建高效的計算資源管理系統,能夠靈活簡單的管理運系統,並能夠及時的發現問題。
- 計費問題(公有云)
對於公有云而言,因為是面向公眾的,必然產生費用的問題,常用的收費方式多種多樣,也因為產品的不同而計費方式不同,譬如:網路、儲存、cpu、資料庫容量等等
- 資源隔離問題
雲端計算執行在雲端,是透過虛擬化體系建立的,虛擬化是建立在硬體之上,多個虛擬化資源同時執行於同一節點(host)中,存在著資源的共享爭用問題,
這樣就存在著資源使用的公平性問題,導致同一Host上的資源使用相互影響。為了使得彼此資源使用相互獨立,我們要建立相應的隔離機制。資源的隔離包括:儲存、記憶體、cpu、資料庫、網路等,其中網路是最難控制的。
- 安全問題
在雲端的應用和基於客戶端的安全,面臨的環境不一樣,客戶端方面大多數是病毒問題引起的,而在雲端,也存在一些伺服器攻擊的問題,以及資料相互獨立相互影響的問題,以及一些服務端程式設計的安全問題等。
- 效能問題
對於雲來說,需要保證雲端的效能問題,包括CPU處理效能,IO處理能力,資源的就近訪問,資源資料同步的速度,還需要解決系統底層的效能問題,包括檔案處理Cache,儲存介質的最佳化,採用SSD等,或者採用SATA+SSD的混合方式節約資源和降低成本。
- 儲存問題
對於雲來說,由於雲端是將客戶端的資料和運算轉移到雲端,必須要有足夠的儲存能力以及足夠穩定的儲存系統,保證使用者資料的安全,對於儲存來說,有 提供VM虛擬機器執行環境的block device(塊儲存),以及提供KV方式的物件訪問儲存,這些都需要保證資料複製、資料讀寫訪問的效能和資料永久可用的能力
- 網路問題
對於公有云以及私有云的一些應用場景,需要能夠提供網路的邏輯隔離(SDN)或物理隔離,以及對網路的訪問靈活問題。構建虛擬化網路,由於物理條 件的限制,我們不得不從L2-L4層進行處理,我們常用的方式 是:bridge,vlan,gre,sdn(openflow,opendaylight),以及一些廠家的產品等等。
- 高可用問題
高可用問題是在分散式系統中必須要處理的問題,正因為叢集的問題,我們必須要從多方面考慮解決的問題,包括保證雲管理系統的高可用性,儲存介質的高可用性,網路的高可用性,虛擬機器高可用問題等等。
- 提高資源利用率問題
對於物理資源的虛擬化,我們有很多種解決方法,KVM、Vmware、xen、Hyperv、LXC等等,在HVM的方式下,對於VM本身的啟動 需要佔用大量的記憶體、cpu和儲存資源,導致系統記憶體和cpu使用有一定的浪費,基於LXC的解決方案因為是機基於Host OS程式,透過namespace的方式進行隔離的,是一種輕量級的實現,能夠在資源初始化,資源利用率方面能夠最大化,對於各個應用場景來說,我們可以 選用合適的解決方案。
五、如何建設
58同城經過多年的發展,探索了一條適合自身發展的技術架構體系。隨著業務和技術的發展,團隊規模不斷壯大,在技術和管理上面臨越來越多的挑戰。在 專案需求管理,開發效率、程式碼管理和質量建設,測試,線上釋出,運維管理等方面需要有一套完整的解決方案,來提升公司的協作能力和整體能效。
58同城目前所有的應用線上上都是跑在物理機器上,採用物理機的方式,一方面會導致伺服器資源得不到充分和合理的使用,譬如:有些物理機器cpu使 用長期在10%以下,有些記憶體使用剩餘很多;另外一方面,由於網際網路的特點,存在著時段內的訪問高峰問題,需要解決資源使用的伸縮問題;基於以上問題,架 構部對現有的技術體系進行梳理和分析,採用資源虛擬化的方式進行私有云的建設,並在這基礎上,完善公司整體技術體系,包括:開發、測試、上線、運維等一系 列自動化和智慧化方面的建設。
私有云的目標
- 提高物理資源的利用率
- 一套雲管理系統,降低運維的複雜度,提高運維工作效率
- 構建靈活的開發、測試整合環境
- 提供海量的儲存體系
- 建立完善的監控體系
- 建立基礎應用環境、方便測試
- 統一架構
- 智慧資源排程
實施方案:OpenStack
對於雲端計算來說,也存在著多種解決方案,如CloudStack和OpenStack等。在兩種方案的比較之後,我們最終選擇了OpenStack的解決方案。主要是出於以下幾點原因:
- OpenStack的社群成熟度:OpenStack經過幾年的發展,社群已經越來越成熟,很多大公司都參與進來幫助完善,紅帽公司未來十年也將OpenStack作為發展的戰略重點。
- 架構設計的選擇:OpenStack採用了Python語言編寫,並且設計上採用元件化的方式,各個元件獨立發展,並相互解耦
- OpenStack提供了更加完整成熟的方案,能夠滿足多樣的需求,同時已經有不少公司採用,已經經過生產上的驗證
- 文件問題:OpenStack文件化做的不錯,網上能夠找到多種多樣的問題處理辦法
- 人員招聘問題,經過多年的發展和市場的培育,瞭解OpenStack的人越來越多,對於開發維護的人才建設和招聘相對成熟一些。
- 發展比較迅速
下圖是我們大致的架構規劃
文章觀點僅一家之言,歡迎大家一起交流探討。我計劃在下一篇文章《58同城私有云建設實踐》中詳細介紹我們私有云建設的思路和過程,中間遇到的問題,希望跟大家一起探討。
相關文章
- 關於軟體架構和業務架構的思考架構
- 雲原生架構下的微服務選型和演進架構微服務
- HongHu雲架構 - maven的構建架構Maven
- 關於構建自己的知識體系架構的一點個人思考架構
- 給年輕人的有關AIGC的資訊、思考和建議AIGC
- 關於爬蟲平臺的架構實現和框架的選型(一)爬蟲架構框架
- 大前端架構思考與選擇前端架構
- 一圖讀懂阿里雲RDS架構與選型阿里架構
- Spring Cloud雲服務架構 - 雲架構程式碼結構構建SpringCloud架構
- 百度Java架構師分享分散式鎖的技術選型及思考Java架構分散式
- 如何構建零信任的雲資料架構架構
- 建築師解構遊戲關卡——引數化關卡設計的思考遊戲
- 關於微服務雲架構構建電子商務平臺微服務架構
- 京東智聯雲物件儲存高可用架構設計思考物件架構
- 十問 TiDB :關於架構設計的一些思考TiDB架構
- Android 架構設計 --- 關於 View 邊界劃分的思考Android架構View
- Spring Cloud雲服務架構 - HongHu雲架構程式碼結構構建SpringCloud架構
- 銀行基於雲原生架構下的 DevOps 建設架構dev
- 以業務需求為中心的雲原生架構體系建設架構
- 微服務之架構技術選型與設計微服務架構
- App架構設計經驗談:技術選型APP架構
- 如何進行架構方案選型和推進【Docker】架構Docker
- 我對雲原生軟體架構的觀察與思考架構
- 深度思考:企業IT信建立設和選型實用策略
- (五) 整合spring cloud雲服務架構 - 雲架構程式碼結構構建SpringCloud架構
- 關於如何設計一個基於事件驅動架構的思考事件架構
- 成為架構師的7個關鍵思考、習慣和經驗架構
- 關於單測技術選型,聊聊我的思考
- 一張圖讀懂阿里雲資料庫架構與選型阿里資料庫架構
- 衝頂大會APP技術選型及架構設計APP架構
- Spring Cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- 關於多層架構一些思考架構
- SEO和品牌建設有什麼關係?
- 對Serverless架構的一點體驗和思考Server架構
- 整合spring cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- 有關GO和Erlang的一些思考Go
- IT轉型與基於雲的架構實現架構
- 袋鼠雲:基於Flink構建實時計算平臺的總體架構和關鍵技術點架構