柯基数据通过Rainbond完成云原生改造,实现离线持续交付客户
?1.關(guān)于柯基數(shù)據(jù)
南京柯基數(shù)據(jù)科技有限公司成立于2015年,提供一站式全生命周期知識(shí)圖譜構(gòu)建和運(yùn)維、智能應(yīng)用服務(wù),致力于“鏈接海量數(shù)據(jù),從大數(shù)據(jù)中挖掘智慧“。幫助企業(yè)運(yùn)用知識(shí)圖譜技術(shù)打造世界領(lǐng)先的認(rèn)知工作自動(dòng)化智能引擎。
目前在藥企、醫(yī)療機(jī)構(gòu)、軍工院所、科技情報(bào)及出版等領(lǐng)域服務(wù)了數(shù)十家大客戶,積累了豐富的行業(yè)知識(shí)圖譜運(yùn)用開發(fā)經(jīng)驗(yàn)。典型客戶有國防科技大學(xué)、中國航空、中國電科等。
2.柯基數(shù)據(jù)的云原生之路
大家好,我是南京柯基數(shù)據(jù)的解決方案架構(gòu)師劉占峰,云原生技術(shù)在交付運(yùn)維上的優(yōu)勢讓我獲益匪淺。作為項(xiàng)目合作伙伴,Rainbond持續(xù)助力柯基多套業(yè)務(wù)系統(tǒng)的快速開發(fā)和交付部署。在使用Rainbond之前,由于業(yè)務(wù)迭代周期短,涉及組件多,平臺(tái)版本更新耗時(shí)耗力,服務(wù)運(yùn)維難度大。很多項(xiàng)目中,客戶的運(yùn)維能力儲(chǔ)備不足,基于傳統(tǒng)的交付和管理方式,客戶對(duì)于業(yè)務(wù)運(yùn)維根本接管不起來,只要風(fēng)吹草動(dòng),必須要我們派工程師到現(xiàn)場解決。針對(duì)交付運(yùn)維存在的問題,各個(gè)業(yè)務(wù)平臺(tái)開始著手云原生改造。
最開始我們嘗試自己搭建公司內(nèi)部的開發(fā)測試環(huán)境,過程中遇到的兩個(gè)小坑。
第一個(gè)坑是:環(huán)境搭建完成后使用體驗(yàn)卻不佳,所有涉及到磁盤讀寫的操作都顯得異常卡頓,集群中的 Etcd 集群日志中不斷報(bào)告處于 “read_only” 狀態(tài),隨之而來的是服務(wù)器負(fù)載的不斷飆升。
我們帶著懷疑的心情求助了Rainbond開源社區(qū),經(jīng)過多方面的排查,我們把目光落在了磁盤的IO性能上。替換了高性能的磁盤之后,我們重新安裝了整個(gè)開發(fā)測試環(huán)境,磁盤性能的提升的確解決了 Etcd 集群時(shí)常不工作的問題。
第二個(gè)坑是:使用了共享存儲(chǔ)的服務(wù)卻依然處于讀寫極慢的狀態(tài),這著實(shí)令在場的所有工程師又開始頭大了。確認(rèn)了硬件性能之后,開始將目光放在操作系統(tǒng)配置參數(shù)上面,操作系統(tǒng)內(nèi)核在不斷報(bào)告與共享存儲(chǔ)有關(guān)的錯(cuò)誤:
NFS:__nfs4_reclaim_open_state: Lock reclaim failed!指征 nfs client 和 nfs server 之間存在同步差異,差得多了就會(huì)開始報(bào)警。經(jīng)過不斷摸索,工程師們終于鎖定了與 nfs 性能有關(guān)的兩個(gè)系統(tǒng)參數(shù),Linux nfs 客戶端對(duì)于同時(shí)發(fā)起的NFS請(qǐng)求數(shù)量進(jìn)行了控制,若該參數(shù)配置較小會(huì)導(dǎo)致 IO 性能較差。
echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf修改了這兩個(gè)參數(shù)后,共享存儲(chǔ)的性能得到了顯著的提升,令人摸不到頭腦的內(nèi)核報(bào)警信息也隨之消失。開發(fā)測試環(huán)境終于可以順暢使用了。
接下來面臨新的挑戰(zhàn)是如何將我們的多套業(yè)務(wù)系統(tǒng)順利遷移到 Rainbond 上去,所幸Rainbond 的使用很簡單,整體學(xué)習(xí)梯度并不陡峭,我們很輕松把業(yè)務(wù)系統(tǒng)分批的部署在 Rainbond 上去。然而 Rainbond 工程師組織的云原生應(yīng)用評(píng)估卻指出了業(yè)務(wù)系統(tǒng)有多處不符合云原生特征之處,提出了一些整改意見。在整改過程中,我們對(duì)云原生也有了更深入理解。
-
Elasticsearch等有狀態(tài)組件需要將組件部署類型調(diào)整成為有狀態(tài)單實(shí)例或有狀態(tài)多實(shí)例,不可以是無狀態(tài)
我們最開始并不了解什么是有\(zhòng)無狀態(tài)組件,所以并沒有注意區(qū)分組件的部署類型。Rainbond工程師提示我們,Elasticsearch在Rainbond平臺(tái)中應(yīng)該使用有狀態(tài)的組件部署類型進(jìn)行部署。
L1級(jí)云原生應(yīng)用特征——可伸縮性
云原生應(yīng)用注重部署組件所使用的資源類型,像數(shù)據(jù)庫類型、消息隊(duì)列類型的服務(wù)組件對(duì)在Rainbond平臺(tái)上,應(yīng)該使用StatefulSet資源類型進(jìn)行部署。通過對(duì)服務(wù)組件定義有狀態(tài)或者無狀態(tài)的部署類型,來規(guī)定使用StatefulSet或Deployment資源類型來部署實(shí)例。
-
支持橫向伸縮
我們的多套業(yè)務(wù)系統(tǒng),在接觸云原生改造之前,都是傳統(tǒng)的單體架構(gòu),部署時(shí)也基本不考慮高可用特性。這使我們的業(yè)務(wù)系統(tǒng)相對(duì)而言脆弱許多,沒有任何容錯(cuò)能力,一旦服務(wù)器宕機(jī),整個(gè)業(yè)務(wù)系統(tǒng)就失去了服務(wù)能力。云原生改造的過程中,我們借助于Rainbond天然的微服務(wù)能力,非常輕松的將我們的業(yè)務(wù)系統(tǒng)拆分成為更為合理的微服務(wù)架構(gòu)。更令我們驚喜的是,這些拆分出來的微服務(wù)組件,大多數(shù)直接具備了橫向伸縮的能力,借助Rainbond的一鍵伸縮能力,迅速擴(kuò)展成為多實(shí)例的集群,極大的提高了系統(tǒng)的可用性。而針對(duì)某幾個(gè)不可以一鍵伸縮的組件,Rainbond工程師們也提供了合理的意見,引導(dǎo)我們對(duì)這幾個(gè)特殊的組件進(jìn)行修改,使之實(shí)現(xiàn)了“無狀態(tài)化”。現(xiàn)在,經(jīng)過云原生改造的業(yè)務(wù)具備了“小強(qiáng)”一般頑強(qiáng)的生命力,再也不怕服務(wù)器宕機(jī)了。
L1級(jí)云原生應(yīng)用特征——可伸縮性
通過程序數(shù)據(jù)分離等手段,實(shí)現(xiàn)應(yīng)用程序的無狀態(tài)化,就讓云原生應(yīng)用可以隨意橫向伸縮多個(gè)實(shí)例。實(shí)例數(shù)量的伸縮一方面使云原生應(yīng)用具備了高可用性,也直接影響其抗并發(fā)的能力。Rainbond還提供自動(dòng)伸縮功能,實(shí)現(xiàn)削峰填谷。
-
所有配置支持環(huán)境變量配置,形如 ${GATEWAY_PORT:8083}
以往我們都將服務(wù)的配置項(xiàng)寫成固定的值,這樣的做法使得我們每到一個(gè)新的部署環(huán)境,都要重新更改大量的配置文件。Rainbond工程師指出,云原生應(yīng)用應(yīng)該將配置保存到環(huán)境當(dāng)中,以環(huán)境變量加默認(rèn)值的方式聲明出來。而大多數(shù)需要修改的配置項(xiàng),如不同組件之間的連接地址信息,就可以通過Rainbond依賴關(guān)系中的連接信息來相互注入,省去了大量的配置工作。
L1級(jí)云原生應(yīng)用特征——可配置性
云原生應(yīng)用推崇的一種最佳實(shí)踐,就是將配置保存在環(huán)境之中。在不同的運(yùn)行環(huán)境中,利用環(huán)境變量來進(jìn)行配置,是一種非常好的體驗(yàn)。Rainbond支持為每個(gè)服務(wù)組件設(shè)置環(huán)境變量,也可以基于配置組功能,批量配置環(huán)境變量。
-
組件主要端口通過環(huán)境變量 ?${PORT} 定義
Rainbond工程師提供了一個(gè)小技巧,將組件監(jiān)聽端口的配置,用一個(gè)固定的環(huán)境變量來配置,這個(gè)變量的值會(huì)隨著我們在Rainbond控制臺(tái)上手動(dòng)添加的端口號(hào)來自動(dòng)變更,這樣,我們就可以在不更改代碼和配置的情況下,隨意變更想要監(jiān)聽的端口號(hào),這很方便。
L1級(jí)云原生應(yīng)用特征——可配置性
作為對(duì)環(huán)境變量的補(bǔ)充,Rainbond提供了一系列可以自動(dòng)生成的環(huán)境變量,這些特定的環(huán)境變量極大方便了用戶的使用。
-
所有組件需要統(tǒng)一時(shí)區(qū)
統(tǒng)一所有組件的時(shí)區(qū)配置是非常有必要的,Rainbond工程師提供了一個(gè)技巧,讓時(shí)區(qū)的設(shè)置變成了一個(gè)很簡單的事情。只需要運(yùn)行環(huán)境的鏡像中包含 tzdata 軟件包,我們就可以基于 TZ=Asia/shanghai 這樣一個(gè)環(huán)境變量的配置,完成時(shí)區(qū)的配置了。
L1級(jí)云原生應(yīng)用特征——基礎(chǔ)可觀測性
統(tǒng)一時(shí)間在運(yùn)維領(lǐng)域十分重要,在云原生領(lǐng)域,時(shí)區(qū)的配置也可以基于環(huán)境變量進(jìn)行配置。
-
所有業(yè)務(wù)需要定義健康檢查策略
Rainbond工程師要求我們?yōu)樗械姆?wù)組件定義健康檢查策略,這樣可以在服務(wù)組件遭遇問題時(shí),快速識(shí)別到運(yùn)行異常狀態(tài),在根據(jù)事先的配置,完成下線或重啟的操作。對(duì)于 http 服務(wù),我們定義了一個(gè)檢測接口,通過探針請(qǐng)求返回的狀態(tài)碼來判斷服務(wù)的狀態(tài);對(duì)于一般中間件,則檢測其TCP端口的監(jiān)聽狀態(tài)來判斷。
L1級(jí)云原生應(yīng)用特征——高容錯(cuò)性
在提高容錯(cuò)性方面,云原生應(yīng)用需要配置合理的健康檢查策略。這有利于快速發(fā)現(xiàn)組件的異常狀況,并根據(jù)事先配置好的策略進(jìn)行自動(dòng)化的重啟、下線等操作。
-
組件應(yīng)支持優(yōu)雅失敗與重試機(jī)制
Rainbond工程師向我們闡述我們的服務(wù)組件在被關(guān)閉時(shí),應(yīng)該做出怎樣的反應(yīng),來最大化的優(yōu)化最終用戶的體驗(yàn)。進(jìn)程接收SIGTERM時(shí),拒絕新請(qǐng)求,完成已接收請(qǐng)求后關(guān)閉端口,退出進(jìn)程。而對(duì)于服務(wù)組件突然丟失了數(shù)據(jù)庫連接這樣的情況,也應(yīng)該添加合理的重試機(jī)制,在多次重試依然無法重新連接到數(shù)據(jù)庫時(shí),理應(yīng)結(jié)束進(jìn)程,用顯式的組件異常狀態(tài)來提醒運(yùn)維人員。
L1級(jí)云原生應(yīng)用特征——高容錯(cuò)性
云原生應(yīng)用強(qiáng)調(diào)容錯(cuò)性,這不僅僅包含在某些錯(cuò)誤被觸發(fā)時(shí),應(yīng)用本身和平臺(tái)是否提供自動(dòng)的處理手段,也包括在錯(cuò)誤無法被處理時(shí),提供更好的可觀測性,來提醒運(yùn)維人員介入。
-
前端web組件調(diào)用后端api組件地址需要進(jìn)行nginx代理
對(duì)于前后端分離的項(xiàng)目,合理的利用前端的web服務(wù)器進(jìn)行接口層的轉(zhuǎn)發(fā)是一種很好的體驗(yàn)。Rainbond工程師在幫助我們完成前端VUE項(xiàng)目的源碼構(gòu)建的同時(shí),也教學(xué)了如何通過在代碼根目錄下添加配置文件,來實(shí)現(xiàn)接口請(qǐng)求向后端組件的轉(zhuǎn)發(fā)。
L2級(jí)云原生應(yīng)用特征——前后端分離配置
Rainbond提供了便捷的方式來配置VUE等前端項(xiàng)目運(yùn)行的Nginx,配置后只需要將前后端組件依賴起來,就可以實(shí)現(xiàn)API的轉(zhuǎn)發(fā)。而不需要每部署一次,都要根據(jù)后端服務(wù)的地址變更而重新編譯。
-
實(shí)現(xiàn)一鍵交付
使用Rainbond的目的之一,是希望能夠借助其能力,實(shí)現(xiàn)業(yè)務(wù)系統(tǒng)的快速交付。通過與好雨科技交付團(tuán)隊(duì)的合作,我們只需要提供應(yīng)用模板離線包,好雨科技交付團(tuán)隊(duì)就可以幫我們在最終生產(chǎn)環(huán)境中一鍵交付整套業(yè)務(wù)系統(tǒng)。這極大的降低了我們的交付成本。
L2級(jí)云原生應(yīng)用特征——一鍵安裝
借助于 Rainbond 提供的應(yīng)用發(fā)布能力,我們可以將運(yùn)行在平臺(tái)上的企業(yè)應(yīng)用一鍵發(fā)布為一個(gè)應(yīng)用模版。我們對(duì)應(yīng)用模版最殷切的期待,是可以將這個(gè)應(yīng)用模版以最簡單的操作方式、盡可能少的人為調(diào)試即可安裝成為一個(gè)應(yīng)用。
-
實(shí)現(xiàn)一鍵升級(jí)
為了適應(yīng)最終用戶的需求,我們需要不斷迭代自己的產(chǎn)品,并在生產(chǎn)環(huán)境中持續(xù)升級(jí)我們的業(yè)務(wù)系統(tǒng)。Rainbond 基于應(yīng)用模板的版本實(shí)現(xiàn)了一鍵升級(jí)的能力,這個(gè)功能對(duì)我們非常有用,我們只需要提供更高版本的應(yīng)用模板離線包,好雨科技交付團(tuán)隊(duì)就可以幫我們在最終生產(chǎn)環(huán)境中一鍵升級(jí)整套業(yè)務(wù)系統(tǒng)。
L2級(jí)云原生應(yīng)用特征——一鍵升級(jí)
Rainbond 的應(yīng)用商店機(jī)制支持基于應(yīng)用模板的版本對(duì)已安裝的應(yīng)用進(jìn)行升級(jí)操作。平臺(tái)的升級(jí)機(jī)制解決了服務(wù)組件版本、配置、依賴關(guān)系等絕大部份屬性的版本管理問題。尚需應(yīng)用開發(fā)人員關(guān)注的問題在于數(shù)據(jù)的版本管理。
3.最終效果
應(yīng)用完成改造后,通過Rainbond可以查看我們產(chǎn)品的拓?fù)鋱D和依賴關(guān)系。
在實(shí)際項(xiàng)目當(dāng)中,我們產(chǎn)品流轉(zhuǎn)了三個(gè)環(huán)境:
開發(fā)環(huán)境:我們在公司內(nèi)部,使用開源版本的Rainbond在公司服務(wù)器上搭建了開發(fā)測試環(huán)境,我們開發(fā)團(tuán)隊(duì)通過源碼構(gòu)建,很快將業(yè)務(wù)系統(tǒng)搬上了Rainbond。通過一段時(shí)間的測試和迭代,我們拿出了首個(gè)版本的應(yīng)用模板,并使用離線導(dǎo)出功能導(dǎo)出了離線包。
準(zhǔn)入測試環(huán)境:利用光盤等介質(zhì),僅需一個(gè)工程師將離線包導(dǎo)入了最終客戶提供的私有云準(zhǔn)入測試環(huán)境,導(dǎo)入后產(chǎn)品一鍵安裝。對(duì)于客戶反饋的意見,我們在開發(fā)環(huán)境中導(dǎo)出新的離線包,并再次導(dǎo)入了準(zhǔn)入測試環(huán)境,進(jìn)行了一鍵升級(jí),經(jīng)過多次迭代最終達(dá)到客戶的準(zhǔn)入要求。
生產(chǎn)環(huán)境:最終生產(chǎn)環(huán)境是完全由客戶管理,我們僅需要提供經(jīng)過準(zhǔn)入的應(yīng)用模板離線包以及必要的文檔,客戶就可以非常快速的將我們的產(chǎn)品完成部署和升級(jí)。
相對(duì)于以前的交付方式和流程,接入Rainbond體系給我們帶來了這些更好的交付體驗(yàn):
-
更便捷的交付方式:交付物只是離線包,不需要關(guān)心客戶復(fù)雜的運(yùn)行環(huán)境。
-
更低的交付成本:無論從時(shí)間還是人力的角度,交付成本都極大的降低了。
-
應(yīng)用運(yùn)維過程自動(dòng)化:云原生技術(shù)切實(shí)的提升了業(yè)務(wù)系統(tǒng)的各項(xiàng)能力,可用性、容錯(cuò)性以及應(yīng)對(duì)流量陡增時(shí)動(dòng)態(tài)的伸縮能力。
最終僅用一個(gè)星期,我們就完成了各個(gè)業(yè)務(wù)系統(tǒng)的云原生改造工作,并測試通過云原生應(yīng)用標(biāo)準(zhǔn)規(guī)范認(rèn)證L2級(jí)。之前項(xiàng)目交付過程中交付難、維護(hù)難的問題,是我們最大的隱形成本,客戶只會(huì)看最終交付效果,并不會(huì)為交付過程而買單。
做了云原生改造后,之前需要派駐交付團(tuán)隊(duì)1個(gè)星期才能交付完的項(xiàng)目,現(xiàn)在一個(gè)基礎(chǔ)的運(yùn)維工程師刻盤過去安裝,1小時(shí)就可以搞定。并且用戶可以通過Rainbond的可視化界面快速上手掌握,95%的運(yùn)維問題都可以自行解決,或者遠(yuǎn)程指導(dǎo)客戶操作。
4.什么是云原生應(yīng)用標(biāo)準(zhǔn)規(guī)范認(rèn)證?
「云原生應(yīng)用標(biāo)準(zhǔn)規(guī)范認(rèn)證」為軟件廠商的應(yīng)用交付過程中的便利性、交付客戶后的可維護(hù)性、以及必要時(shí)的可遷移性等需求,提供可信賴的技術(shù)背書。現(xiàn)階段,「云原生應(yīng)用標(biāo)準(zhǔn)規(guī)范認(rèn)證」分為L1、L2、L3級(jí),在應(yīng)用交付及交付管理發(fā)揮重要作用。
-
L1關(guān)注:應(yīng)用跨環(huán)境交付后的一鍵安裝和自動(dòng)化運(yùn)維。如高可用、可伸縮性、可觀測性等,提升最終客戶的可維護(hù)性,降低客戶的學(xué)習(xí)成本。
-
L2在L1基礎(chǔ)之上關(guān)注:應(yīng)用跨環(huán)境交付后的一鍵升級(jí)。如全量/增量升級(jí)、版本回滾等,滿足客戶小步快跑的持續(xù)迭代交付需求。
-
L3在L2基礎(chǔ)之上點(diǎn)關(guān)注:應(yīng)用跨環(huán)境交付后的一鍵備份遷移。如包含完整數(shù)據(jù)的打包備份、可遷移性等,幫助客戶實(shí)現(xiàn)整體生產(chǎn)環(huán)境的遷移、災(zāi)備。
5.關(guān)于Rainbond
Rainbond作為開源的云原生應(yīng)用管理平臺(tái),是「云原生應(yīng)用標(biāo)準(zhǔn)規(guī)范」落地實(shí)施的最佳工具。
https://www.rainbond.com
https://github.com/goodrain/rainbond
總結(jié)
以上是生活随笔為你收集整理的柯基数据通过Rainbond完成云原生改造,实现离线持续交付客户的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flash计时器
- 下一篇: 什么是GPU云服务器,有哪些优势?