1. 現代應用的需求
早期人們對于互聯網的依賴還不是很強烈,數字體驗這個詞還沒有誕生,大家對于數字體驗還不是那么敏感,應用程序是否總是可用也沒有那么重要。對于互聯網產品來說,用戶量少,并發量低,數據量也很小,只需要單個服務器即可滿足需求,數據庫和文件服務器什么的可用部署在另外的服務器上,這就是早期的單體架構。
后來隨著各大互聯網公司業務的增長,訪問量和數據量也暴增,由于單個服務器的資源有限,性能顯著下降,所以不得不對 IT 架構進行改造。開始只是在應用本身動刀子,比如對數據庫進行讀寫分離、分庫分表等優化,以緩解數據庫的訪問壓力;對應用進行動靜分離,將靜態資源放到 CDN 以加速訪問。
這是一個惡性循環,如此一來,各大公司的用戶規模和業務量還會繼續飛速增長,業務場景會越來越復雜,規模越來越龐大,不得不分而治之,采用分布式架構,往更細粒度的方向通過 SOA 進行垂直拆分。
隨著 4G 的普及,高速的網絡讓視頻緩存變得不易察覺,使用數據流量觀看視頻不再是一種極度炫富的行為,移動支付也借著網速提升的大潮迅速普及。如今數字體驗已經不再是我們生活中的一個配角,它們在我們日常生活中的許多活動中都扮演著重要的角色,我們希望應用程序總是可用的,不能容忍短暫的不可用,并且還得經常更新,防止審美疲勞。
面對用戶的這種變態需求,必須對架構繼續進行優化,主要從兩個方面來入手:
保證服務一直可用
要想保證服務一直可用,首先需要優化對狀態信息的處理,比如會話狀態、應用配置數據等。傳統應用的狀態一般都保存在本機實例上,如何使用負載均衡器的會話綁定來確保同一個用戶的請求始終被轉發到同一個后端服務實例上。一但訪問實例發生故障,負載均衡器會建立新的會話,將請求轉發到另一臺實例,但另一臺實例沒有之前的狀態信息,從而導致狀態不一致。
要想解決這個問題,需要讓應用無狀態化。這里的無狀態并不是指應用不處理數據,而是在設計時就面向失敗和面向恢復設計,例如將狀態外部化,存儲到外部存儲中,同時應用需要能夠快速重啟,快速彈性伸縮。最好能保證在外部系統故障情況下依然可用。
加速迭代流程
如果產品的進化速度太慢,不能根據用戶的反饋快速迭代,就會引起用戶不滿。但交付速度的提高不能以降低可用性為代價,傳統企業提升可用性的一種方法就是盡量少交付,盡量多審核,這和快速迭代是背道而馳的。現代互聯網公司需要做的是快速迭代的同時又要保證可用性,而“云原生”就是用來解決這個問題的良藥。
2. 何為云原生
計算機領域每過幾年就會涌現出一批新的概念出來,細分到云計算領域也是如此,這兩年時常蹦跶在大家眼前的就是“云原生”這個詞。
云原生的英文原文叫“Cloud Native”,我們不妨從英文的角度來理解,Native 表示與生俱來,就是親生的。把 Cloud 和 Native 放到一起又該如何理解?說白了就是云親生的!詳細的解釋是:應用原生被設計為在云上以最佳方式運行,充分發揮云的優勢,享受云的特點。如果嫌太長不看可以直接理解為“云親生的”!
云原生這個詞看起來比較新鮮,其實從開發人員的角度來理解是很簡單的,就是應用在開發的時候就考慮到云上提供的各種服務,充分利用云的動態調度、自恢復、通過 API 訪問服務等基本特性,以及敏捷高效的特性。傳統的應用開發方式都是悶頭開發,不管應用跑在哪個基礎設施環境中,也不用考慮基礎設施提供的各種能力,我只管讓我的應用能正常運行就好。
上面都是從廣義上來理解云原生,有點空洞,對應到具體的方法論就是大家耳熟能詳的三板斧:容器化、微服務和 DevOps。
容器化
以 Docker 為代表的容器化直接對云的世界進行降維打擊,它提供了一種非常便利的打包機制。這種機制直接打包了應用運行所需要的整個操作系統,從而保證了本地環境和云端環境的高度一致,避免了用戶通過“試錯”來匹配兩種不同運行環境之間差異的痛苦過程。同時它的顆粒度比虛擬機更小,部署更靈活,簡直是紅的發紫啊。
將應用托管到容器中,就注定了應用本質上是無狀態的,為了保證應用無狀態的同時又不影響用戶體驗,容器平臺的做法是將狀態信息保存到外部存儲中,將日志采集從業務中剝離,使用 Sidecar 拉抓取業務容器日志。同時需要應用提供探針,以便讓平臺實現應用的生命周期管理。
對于數據庫應用來說,它們對 IO 和吞吐的性能要求很高,如果要跑在容器中,對于外部存儲的挑戰會非常大,各大公司也在極力優化其外部存儲性能。例如金山云就推出了一種全新極速云盤(ESSD)。ESSD 是 Enhanced SSD,即在 SSD 云盤的基礎上,提供更高的突破與創新,主要體現在:
極簡架構:NVMe SSD 作為存儲介質,配合 RDMA 組網,超簡潔軟件架構,發揮云盤高效性能。
高效性能:100W IOPS 4GBps 吞吐,時延低至 200 微秒。
穩定可靠:三副本保存,可靠性 9 個 9,可用性 99.99%,支持加密,支持本地快照、普通快照等多種數據備份方式。
彈性部署:支持在線擴容隨時調整云盤大小,可利用快照實現云盤的批量復制,大大增強業務的敏捷性。
從圖上可以看出 ESSD 相對普通 SSD 的性能提升:ESSD IOPS 單盤高達 100w,相比上一代提升 40 倍;吞吐性能達到 4GBps,提升 16 倍;時延低至 0.2ms(即 200us),為前代 SSD 時延的 1/15。
如果將 ESSD 和容器服務結合使用,用戶就無需再擔心核心數據庫部分能否真正遷移到云的數據庫上,能否有金融級的數據庫的能力。利用 ESSD 的高效[Z[1] 性能,完全滿足云上數據庫對 IO 和吞吐的性能要求。
微服務
隨著數據量的不斷增大,吞吐量不斷增加,業務越來越復雜,服務的數量會越來越多,分層會越來越細。久而久之,單體應用漸漸被拆分成功能相互獨立的微應用,實現業務架構解耦,大家各司其職,報團取暖,這就是微服務。
微服務區別于單體架構的地方就在于“分而治之”,即通過切分服務以明確模塊或者功能邊界。然而,僅有“分”是不行的,軟件系統是一個整體,很多功能來自若干服務模塊的配合,因此必然要有“合”的手段,這對矛盾會體現在多個方面。
如果使用 Docker,由于每個服務打包可以封裝為一個 Docker 鏡像,每個運行時的服務都表現為一個獨立容器,我們之前建立的容器依賴就可以很容易的對應到服務依賴上,基于這種統一性,系統升級就很容易配合一些自動化工具實現“整體升級”(甚至還可以“整體降級”)。將微服務應用放置在容器中,可以在開發、測試和上線流程中實現“一次編寫,到處運行”。
DevOps
得益于容器和 Docker 技術的紅利,開發人員可以輕松地與 IT 操作和生產環境共享他們的軟件和依賴項,同時消除典型的“適用于計算機”的借口,間接地將開發人員和運維人員更緊密地結合在一起,使他們更能高效地協作。運維和開發小哥表示現在他們的關系很融洽,沒事還能一起出去喝兩杯,即使線上環境出了問題,也能夠一起愉快地背鍋。
雖然云原生有三板斧,但主角其實還是 Kubernetes,它是云原生領域的當紅小生,甚至成為了云原生的代名詞。Kubernetes 從誕生之初便一路飆升,將對手甩開了十幾條街,未來也將會以火箭的速度保持上升。
為了推動 Kubernetes 產品的一致性和可移植性,踐行 Kubernetes 被創立時的初心,CNCF 還啟動了 Kubernetes 一致性認證計劃,目前幾乎所有的互聯網巨頭都通過了這個一致性認證:
除了這些,Kubernetes 的行業成功案例也數不勝數:
超過 20 個知名的集群管理平臺從自研架構遷移到 Kubernetes,包括阿里巴巴的 Sigma、亞馬遜的 Apollo、Apache Mesos、百度的 Matrix、Cloud Foundry 的 Diego/Garden 等
歐洲核子研究中心(CERN)正在使用 Kubernetes 管理著超過 200 個云計算中心,運行著 40 多萬個工作負載,每秒處理著高達 30GB 的數據。
中國移動使用容器取代虛擬機,以輕量級的方式在其平臺上運行各種應用程序,利用 Kubernetes 提高資源利用率。
金山云已經開始為金蝶軟件提供的物理機自建分布式存儲服務,為小米支撐 FDS 容器、全套基礎運維平臺,為金山 WPS 在線文本處理提供支持。
3. 云原生的未來
大型企業將會在 Kubernetes 上加倍投入
2018 年 1 月,Red Hat 收購 CoreOS 公司,在隨后的一年中,Red Hat 將 CoreOS 優秀的功能和組件迅速融合到 OpenShift 中。2019 年 7 月 9 日,IBM 又收購了 Red Hat,將其并入混合云部門。未來,IBM 會將 Red Hat 開放式混合云技術的強大功能和靈活性與 IBM 創新和行業專業知識的規模和深度相結合,共同推出下一代混合多云平臺,該平臺基于 Linux 和 Kubernetes 等開源技術,允許企業在本地以及私有和多個公共云上安全地部署、運行和管理數據與應用。
無獨有偶,2020 年 7 月 8 日,開源公司 SUSE 宣布收購 Kubernetes 管理平臺創建者 Rancher Labs。這讓 SUSE 在云原生領域拿到一張重要的門票,同時,Rancher 團隊的加入也彌補了 SUSE 在云原生方面的研發能力。SUSE 并購 Rancher 之后未來發展的方向更多的會是云原生技術和 2B 客戶的需求場景的結合,加速對非云原生軟件類產品的替代,加速對傳統 IT 市場的云化過程。
而國內的金山云則從基礎設施層面著手,推出了三款全新的產品:金山云星曜裸金屬服務器、新一代高性能云服務器和全新極速云盤 ESSD。ESSD 前面已經介紹過了,這里主要介紹下裸金屬服務器。星曜裸金屬服務器是一種專屬、獨享的云上物理服務器,提供超高性能計算服務。它跟云服務器、容器一樣,享受到云的統一管理。并且,在多層安全防護等級下,它的采購、運維、管理跟分布式云計算現有的服務互通,可以同時享受到物理服務器的極致性能和云服務器的彈性能力。性能方面主要體現在:
原生裸金屬服務器,不產生性能損耗,無資源搶占現象,服務安全、穩定、可靠。
最大可支持 50Gbps 帶寬,原生網絡性能可達到 3000W PPS。
支持與客戶托管 IDC 區域的裸金屬服務器通過 10Tbps 專線互通,形成一個延遲和收斂比可控的內網,網絡效果等同于在同一 IDC 內互通。
除了性能優勢外,彈性能力也不容小覷:
可作為傳統 IDC 的邏輯擴展部分。
支持云容器一體化管理,托管資源與云資源統一管理。
單個可用區支持超過 10 萬臺裸金屬云資源擴展,突破了機柜不足的限制。
如果你很關心虛擬機的性能損耗問題,希望將物理服務器的性能全部發揮出來,可以選擇金山云的裸金屬服務器,它默認已經集成了監控、容器、大數據等 PaaS 層服務,均支持插件式安裝。其他 PaaS 層服務也在持續集成中。
作為用戶,你也無需擔心遷移成本,只需要接入裸金屬服務器的控制臺 API,就可以像管理本地服務器一樣管理裸金屬服務器了。
利用這三大法寶,金山云提供了一站式的商用方案,數據庫、大數據什么的上云從未如此簡單,不再需要自己瞎折騰,老牛拉破車,越拉腎越虛。。。
混合云、多云趨勢凸顯
在公有云的 IaaS 層,先發者 AWS 是事實上的標準制定者。所有的公有云廠商推出的云服務器,都相當于“兼容機”。出于不想被單一廠商鎖定、以及數據敏感性等的考慮,用戶在使用云的過程中,越來越呈現混合云、多云的趨勢。
由于 IaaS 層相當于形成了標準化,各用戶也可以利用第三方廠家實現混合云多云管理。微軟、谷歌 和 AWS 都提供了跨云和混合云的方案。例如谷歌的 Anthos:
Anthos 允許你在私有云中部署,并安裝一個代理,保持與 Google Cloud Platform(GCP)的加密連接。該代理允許你從 GCP 控制臺管理 Anthos 集群及其工作負載,部署和擴展應用程序。
微軟的 Azure Stack 也有類似的服務:
它允許你在自己的數據中心部署 Azure 服務,有了 Azure 和 Azure Stack 組成的混合云,開發者就可以基于統一的 Azure 服務和 DevOps 敏捷開發流程和工具,開發最適合業務、技術和合規要求的應用。
金山云也不甘落后,一方面,金山云提供的銀河專有云,可以滿足用戶將兼容機方便地部署在自己機房的訴求;另一方面,金山云利用開源社區技術,提供了較為簡便的、基于容器的混合云、多云管理方案,便于用戶將 IaaS 層實現跨云的統一管理。
如果你覺得這種專有云起步太大了,那也完全不用擔心,金山云已經把專有云做的越來越小型化,從原來的 50 臺服務器壓縮到了現在的 10 臺,同時服務可以選配。這種解決方案在很多場景下對小型私有云平臺有碾壓式的優勢,實現了無縫擴展,而且混合云的管理也會非常簡單,因為本地和遠程資源基本上是一致的。
隨著云原生的理念越來越深入人心,利用金山云的專有云,客戶可以輕松部署各種高性能的云原生應用到私有數據中心中,數據庫和大數據應用也不在話下,把云原生的價值最大化,真香!