当前位置: 代码迷 >> 综合 >> Golang 开发的一站式云原生 PaaS 平台 —— Erda
  详细解决方案

Golang 开发的一站式云原生 PaaS 平台 —— Erda

热度:88   发布时间:2023-12-06 01:12:44.0

Erda 是什么?

Erda 是端点开源的一站式云原生 PaaS 平台,具备 DevOps、微服务治理、多云管理以及快数据管理等平台级服务。以容器服务作为底座,凭借云原生的优势,为企业打造一个完整的技术平台,助力于数字化转型。

 

Erda 产品架构图如下:

 

Erda 解决了什么问题?

Erda 本身已经不是一个单品,涵盖了非常多的产品功能模块。我们可以从两个视角来看下 Erda 解决的问题。

面向开发者

Erda 内置了流水线服务,从代码构建、测试到部署提供了全自动化的 CI/CD 功能。在部署侧,Erda 以应用为中心的思路,通过声明式的方式,让开发者用简洁的语言描述整个应用的依赖及部署过程,最终一键完成整个应用的部署。

 

这整个过程,Erda 引入了基础设施即代码(IaC)的理念,抽象了两个配置文件:

· pipeline.yaml: 来描述整个流水线;

· erda.yaml: 来描述整个应用的部署依赖及过程,比如应用依赖的中间件、配置等。

 

这两个配置文件最终会沉淀到应用代码仓库中,伴随整个应用的生命周期,之后应用的变更、迁移都操作都可一键完成。

 

上面提到的整个 CI/CD 流程都是运行在 Erda 自研的异构调度引擎之上,这层引擎很好的屏蔽了底层细节,比如开发者不需要关心底层是否使用的是 Kubernetes,采用的什么分布式存储、网络等等。

 

通过这几方面,都很大程度的降低了开发者的心智,对全流程进行提效,让开发者专注于自身业务代码。

面向企业

企业的支撑平台,有个很重要的核心就是为企业降本增效。前面提到的面向开发者提效,就是其一,但除了这个,企业还会面临很多其他的问题:

 

· 基础设施多样性,比如越来越多的云厂商,自建 IDC 等,导致管理成本高,应用迁移上云困难;

· 软件架构多样性,比如传统行业会有大量的软件供应商、集团内部会有很多研发团队,攀随着 IT 技术层出不穷,企业内部就会有大量烟囱式的软件系统,业务协同困难、数据孤岛严重等;

· 迭代升级缓慢,缺乏统一的管理规范、方法论,导致企业无法持续迭代,无法持续性的创新;

· 无法安全生产,缺乏有效的手段,保障业务稳定性。

· 等等

 

所有的这些,最终都可以转换成基础资源 + 应用系统 + 组织角色之间的协同问题。Erda 就是提供了这样一个平台,来解决这堆问题,帮助企业管理者能更好的控成本、盯稳定、提效能。

 

架构演进

Erda 诞生就是一个单体应用,容器服务的底座我们选择了 DC/OS。DC/OS 的内核是 Mesos,Mesos 使用了双层调度机制,第一层调度先将 Node 分配给 Framework,之后 Framework 再进行二次调度,而在 Mesos 之上可以有多个 Framework 进行并行调度。在我们进行容器编排选型时,Mesos 除了有 Metronome、marathon 等服务、任务的调度框架,还有不少大数据的,这与我们的产品路线图一拍即合,而当时 Kubernetes 还没那么成熟,所以我们毅然选择了 DC/OS。

 

随着产品复杂度的提升,团队规模越来越大,迭代效率及稳定性诉求的日益剧增,我们对整个产品架构进行了升级。把庞大的单体应用进行了模块化拆分,细分了多个微服务组件,并独立了一层异构调度引擎,用于屏蔽底层的技术细节,便于未来进行扩展。果不其然 Kubernetes 超越了 DC/OS、swarm 等技术,成为了事实标准,我们也在很短的时间内将了 Kubernetes 切成 Erda 的默认容器底座。

 

Erda 开源之后,我们意识到需要进一步的新架构改进。Erda 的产品体系已经越来越丰富,虽然我们进行了组件拆分,但当前架构还是有不少历史债,并没有足够模块化,组件之间也没有松耦合,导致了我们的几大平台根本无法独立部署。近期我们已经开启了新一轮的架构改进,结合我们的产品体系,重新梳理我们的架构,让组件拆分更合理,采用高内聚低耦合的设计来解决我们当前的问题。

 

开发语言演进

起初我们选择了语法简洁的 kotlin 开始了 Erda 平台的第一行代码,kotlin 和 Java 的交互性很好,可以无缝连接,这也方便了我们进行团队建设,身边的 Java 小伙伴基本可以无成本的开始投入 Erda 从 0 到 1 的建设。

随着容器技术的火热, Kubernetes 的爆发,一举成为了容器编排领域的事实标准,这也成就了 go 这个新生语言,让其成为最适合云原生时代的编程语言。当然我们也紧跟潮流,着手将所有的 kotlin 代码切至了 go。

事实证明我们的选择是对的,go 语言足够简单易学,天生支持并发,垃圾回收等功能,还有丰富的标准库,相比较于 Java 也更轻量。

 

Erda 发展至今,已经有近 70 多万行 go 代码,未来也会继续基于 go 发光发亮。

 

总结

 

在过去的几年,Erda 不仅完成了四大核心产品体系的建设,还在大量头部客户完成了落地,今天的 Erda 已经足够成熟。在数字时代的浪潮下,企业对数字化转型以及企业级的软件架构需求越来越高,Erda 选择了开源并建设 Erda Cloud,希望能够尽绵薄之力帮助到更多的企业。未来 Erda 将不断夯实技术基础,做具备全球影响力的产品。让更多技术人看见、邀更多优秀人才加入、欢迎更多企业一起免费试用。

 

Erda 开源地址:https://github.com/erda-project/erda

Erda Cloud 官网:https://www.erda.cloud

 

 Gopher China2021大会日程详情来了!

点击下方「阅读原文」即可报名参加大会