Cloudpods Golang实践
Cloudpods是完全自研的一套云平台,Golang是该平台的主要后端开发语言。本文介绍我们在平台开发迭代过程中关于Golang的经验以及在Golang上积累的框架和库,包括积累的Golang工具库,以及基于这些工具库实现的开发框架。
背景介绍
Cloudpods从2017年开始迭代开发。当时企业的IT环境已经不仅仅是本地的虚拟机以及裸金属,不少企业已经逐步采纳多云。所以Cloudpods平台作为新一代的云平台,需要不仅能管理本地IT环境中的虚拟机和裸金属,还能管理其他的云平台的资源,特别是公有云。实现所有的资源在一个平台上统一运维,操作,起到降低运维复杂度并提高企业IT运维效率的目的。
为了实现一个统一的多云平台,我们采用了最适合开发云原生应用的 Golang作为后端开发语言。前端则采用Vue框架。整个平台基于微服务框架。服务之间的认证鉴权基于OpenStack Keystone的框架(我们用Golang重新实现了Keystone)。

Cloudpods Golang技术栈
云联壹 云的Golang技术栈包含两部分:
首先是一个Golang的服务框架,所有的服务组件都基于同一套服务框架来开发,这个服务框架针对云平台的特点做出优化,适合快速开发云服务的API和异步任务逻辑。
其次是四个主要的Golang工具库
-
jsonutils:JSON序列化和反序列化 (https://github.com/yunionio/jsonutils)
-
sqlchemy:模仿python SQLAlchemy的ORM库 (https://github.com/yunionio/sqlchemy)
-
structarg:基于结构体的命令行参数生成和解析工具 (https://github.com/yunionio/structarg)
-
pkg:其他一些辅助工具和方法 (https://github.com/yunionio/pkg)
Golang框架
大部分Cloudpods服务都基于同一套服务框架开发,此框架的特点是针对云服务开发进行了适配和优化。

Cloudpods的服务框架可以简单地认为是一套方便CRUD的脚手架。云服务主要是对云资源的操作,比如云资源的创建、删除、更新等。服务框架内置了云资源的CRUD API的基础框架,再加上异步任务机制实现对云资源的复杂操作以及资源模型的修改。
