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

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

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