Golang 開發(fā)的一站式云原生 PaaS 平臺 —— Erda
Erda 是什么?
Erda 是端點(diǎn)開源的一站式云原生 PaaS 平臺,具備 DevOps、微服務(wù)治理、多云管理以及快數(shù)據(jù)管理等平臺級服務(wù)。以容器服務(wù)作為底座,憑借云原生的優(yōu)勢,為企業(yè)打造一個(gè)完整的技術(shù)平臺,助力于數(shù)字化轉(zhuǎn)型。
Erda 產(chǎn)品架構(gòu)圖如下:

Erda 解決了什么問題?
Erda 本身已經(jīng)不是一個(gè)單品,涵蓋了非常多的產(chǎn)品功能模塊。我們可以從兩個(gè)視角來看下 Erda 解決的問題。
面向開發(fā)者
Erda 內(nèi)置了流水線服務(wù),從代碼構(gòu)建、測試到部署提供了全自動化的 CI/CD 功能。在部署側(cè),Erda 以應(yīng)用為中心的思路,通過聲明式的方式,讓開發(fā)者用簡潔的語言描述整個(gè)應(yīng)用的依賴及部署過程,最終一鍵完成整個(gè)應(yīng)用的部署。
這整個(gè)過程,Erda 引入了基礎(chǔ)設(shè)施即代碼(IaC)的理念,抽象了兩個(gè)配置文件:
· pipeline.yaml: 來描述整個(gè)流水線;
· erda.yaml: 來描述整個(gè)應(yīng)用的部署依賴及過程,比如應(yīng)用依賴的中間件、配置等。
這兩個(gè)配置文件最終會沉淀到應(yīng)用代碼倉庫中,伴隨整個(gè)應(yīng)用的生命周期,之后應(yīng)用的變更、遷移都操作都可一鍵完成。
上面提到的整個(gè) CI/CD 流程都是運(yùn)行在 Erda 自研的異構(gòu)調(diào)度引擎之上,這層引擎很好的屏蔽了底層細(xì)節(jié),比如開發(fā)者不需要關(guān)心底層是否使用的是 Kubernetes,采用的什么分布式存儲、網(wǎng)絡(luò)等等。
通過這幾方面,都很大程度的降低了開發(fā)者的心智,對全流程進(jìn)行提效,讓開發(fā)者專注于自身業(yè)務(wù)代碼。
面向企業(yè)
企業(yè)的支撐平臺,有個(gè)很重要的核心就是為企業(yè)降本增效。前面提到的面向開發(fā)者提效,就是其一,但除了這個(gè),企業(yè)還會面臨很多其他的問題:
· 基礎(chǔ)設(shè)施多樣性,比如越來越多的云廠商,自建 IDC 等,導(dǎo)致管理成本高,應(yīng)用遷移上云困難;
· 軟件架構(gòu)多樣性,比如傳統(tǒng)行業(yè)會有大量的軟件供應(yīng)商、集團(tuán)內(nèi)部會有很多研發(fā)團(tuán)隊(duì),攀隨著 IT 技術(shù)層出不窮,企業(yè)內(nèi)部就會有大量煙囪式的軟件系統(tǒng),業(yè)務(wù)協(xié)同困難、數(shù)據(jù)孤島嚴(yán)重等;
· 迭代升級緩慢,缺乏統(tǒng)一的管理規(guī)范、方法論,導(dǎo)致企業(yè)無法持續(xù)迭代,無法持續(xù)性的創(chuàng)新;
· 無法安全生產(chǎn),缺乏有效的手段,保障業(yè)務(wù)穩(wěn)定性。
· 等等

所有的這些,最終都可以轉(zhuǎn)換成基礎(chǔ)資源 + 應(yīng)用系統(tǒng) + 組織角色之間的協(xié)同問題。Erda 就是提供了這樣一個(gè)平臺,來解決這堆問題,幫助企業(yè)管理者能更好的控成本、盯穩(wěn)定、提效能。
架構(gòu)演進(jìn)

Erda 誕生就是一個(gè)單體應(yīng)用,容器服務(wù)的底座我們選擇了 DC/OS。DC/OS 的內(nèi)核是 Mesos,Mesos 使用了雙層調(diào)度機(jī)制,第一層調(diào)度先將 Node 分配給 Framework,之后 Framework 再進(jìn)行二次調(diào)度,而在 Mesos 之上可以有多個(gè) Framework 進(jìn)行并行調(diào)度。在我們進(jìn)行容器編排選型時(shí),Mesos 除了有 Metronome、marathon 等服務(wù)、任務(wù)的調(diào)度框架,還有不少大數(shù)據(jù)的,這與我們的產(chǎn)品路線圖一拍即合,而當(dāng)時(shí) Kubernetes 還沒那么成熟,所以我們毅然選擇了 DC/OS。
隨著產(chǎn)品復(fù)雜度的提升,團(tuán)隊(duì)規(guī)模越來越大,迭代效率及穩(wěn)定性訴求的日益劇增,我們對整個(gè)產(chǎn)品架構(gòu)進(jìn)行了升級。把龐大的單體應(yīng)用進(jìn)行了模塊化拆分,細(xì)分了多個(gè)微服務(wù)組件,并獨(dú)立了一層異構(gòu)調(diào)度引擎,用于屏蔽底層的技術(shù)細(xì)節(jié),便于未來進(jìn)行擴(kuò)展。果不其然 Kubernetes 超越了 DC/OS、swarm 等技術(shù),成為了事實(shí)標(biāo)準(zhǔn),我們也在很短的時(shí)間內(nèi)將了 Kubernetes 切成 Erda 的默認(rèn)容器底座。
Erda 開源之后,我們意識到需要進(jìn)一步的新架構(gòu)改進(jìn)。Erda 的產(chǎn)品體系已經(jīng)越來越豐富,雖然我們進(jìn)行了組件拆分,但當(dāng)前架構(gòu)還是有不少歷史債,并沒有足夠模塊化,組件之間也沒有松耦合,導(dǎo)致了我們的幾大平臺根本無法獨(dú)立部署。近期我們已經(jīng)開啟了新一輪的架構(gòu)改進(jìn),結(jié)合我們的產(chǎn)品體系,重新梳理我們的架構(gòu),讓組件拆分更合理,采用高內(nèi)聚低耦合的設(shè)計(jì)來解決我們當(dāng)前的問題。
開發(fā)語言演進(jìn)
起初我們選擇了語法簡潔的 kotlin 開始了 Erda 平臺的第一行代碼,kotlin 和 Java 的交互性很好,可以無縫連接,這也方便了我們進(jìn)行團(tuán)隊(duì)建設(shè),身邊的 Java 小伙伴基本可以無成本的開始投入 Erda 從 0 到 1 的建設(shè)。
隨著容器技術(shù)的火熱, Kubernetes 的爆發(fā),一舉成為了容器編排領(lǐng)域的事實(shí)標(biāo)準(zhǔn),這也成就了 go 這個(gè)新生語言,讓其成為最適合云原生時(shí)代的編程語言。當(dāng)然我們也緊跟潮流,著手將所有的 kotlin 代碼切至了 go。
事實(shí)證明我們的選擇是對的,go 語言足夠簡單易學(xué),天生支持并發(fā),垃圾回收等功能,還有豐富的標(biāo)準(zhǔn)庫,相比較于 Java 也更輕量。
Erda 發(fā)展至今,已經(jīng)有近 70 多萬行 go 代碼,未來也會繼續(xù)基于 go 發(fā)光發(fā)亮。
總結(jié)
在過去的幾年,Erda 不僅完成了四大核心產(chǎn)品體系的建設(shè),還在大量頭部客戶完成了落地,今天的 Erda 已經(jīng)足夠成熟。在數(shù)字時(shí)代的浪潮下,企業(yè)對數(shù)字化轉(zhuǎn)型以及企業(yè)級的軟件架構(gòu)需求越來越高,Erda 選擇了開源并建設(shè) Erda Cloud,希望能夠盡綿薄之力幫助到更多的企業(yè)。未來 Erda 將不斷夯實(shí)技術(shù)基礎(chǔ),做具備全球影響力的產(chǎn)品。讓更多技術(shù)人看見、邀更多優(yōu)秀人才加入、歡迎更多企業(yè)一起免費(fèi)試用。
Erda 開源地址:https://github.com/erda-project/erda
Erda Cloud 官網(wǎng):https://www.erda.cloud
Gopher China2021大會日程詳情來了!
點(diǎn)擊下方「閱讀原文」即可報(bào)名參加大會
