研发工具链概览
子曰:“工欲善其事,必先利其器”。前面已经提到,微服务架构的对开发水平提出了更高的=要求,我们更应该注重研发工具链的建设,以提高开发效率。
- 内部帐号管理:不论大小企业,无论企业性质,都需要一个集中式的帐号管理系统,员工只需要设置一次帐号密码,就可以方便地使用各个不同的系统。我们选用了经典的OpenLDAP 作为帐号管理服务器。OA、代码服务器、Jenkins等系统,都很方便地接入LDAP,实现“一套帐号,各系统共享”。
- 代码版本管理:从架构和团队协作模式考虑,在微服务架构下,git比svn更合适作为版本管理系统[^1]。GitLab和Gerrit都是经典的Git代码托管系统。GitLab类似于GitHub适合GitFlow的分支独立开发,Gerrit侧重于代码评审。考虑到代码评审的需求较为强烈,我们选用Gerrit。
- 依赖管理:无论什么开发语言,只要引入了开源库,就需要面对依赖管理的的问题。正如Python的Pip、Ruby的Gem、Node的npm,Java中使用Maven来管理库依赖。对于企业级开发,一般采用自搭建Maven私有仓库的方式,方便内部包的部署和依赖。我们选用Nexus搭建私有仓库,它被官方Maven仓库所采用,是Maven仓库的事实标准。
- 自动构建工具:既然使用了Maven的依赖管理,那么配套工具按理也应但选用Maven。然而在微服务的开发中,版本依赖比传统系统更为复杂,Maven的xml文件会变得非常难以维护。Gradle在兼容Maven依赖管理的基础上,使用了更为简洁的DSL描述语言,且构建速度更快,插件更为丰富。因此,我们选用Gradle 4.X作为微服务的构建工具。
- 效率脚本与工具:开篇介绍微服务优缺点时已经提到。微服务架构下,经常需要新增微服务。为了降低新增成本,我们一套代码层面的脚本或工具来提升效率。我们会介绍“微服务初始化模板”、“更新Thrift RPC接口”等工具,以提升微服务的开发效率。
本书的主线是微服务的架构及开发。为了保证这一主题的的稳定和连惯性,我们将上述研发工具链的使用单独抽提出来,在《研发工具链》一章中一并介绍。