微服务研发工具链

子曰:“工欲善其事,必先利其器。居是邦也,事其大夫之贤者,友其士之仁者。”

                                                                                                                    -- 《论语》

普通话版:工匠想要做好工作,先要把工具打磨锋利。

程序员版:软件工程师要想写好代码,需要一把机械键盘,并定期清洗轴以维持最佳手感。

对于程序员而言,除了键盘等硬件,还有一系列软件。我们这里将这些软件称为工具链。

小王的一天

下面,让我们跟随小张 - 是的,就是在风口创业公司的那位 - 看看在微服务架构下,研发工具链包含了哪些内容。

时间工作工具需求备注
09:01打开浏览器,登录公司内网使用同一个账号,登录公司所有的内部系统。暂不讨论“操作系统”、“浏览器”等通用软件。
09:03打开代码审核平台,查看Review代码版本控制、代码托管,代码审核
10:23老张让我升级下xx的包,加了新接口版本依赖管理系统我们将开发语言暂时限定为Java
11:56修改了一部分逻辑,午饭前抓紧提交上去,看能否跑通所有Case持续集成(Continuous integration)系统暂不讨论“IDE”等通用软件。
15:20功能开发完毕,上线!持续交付(Continuous delivery)系统
16:03X功能重构,拆分到两个微服务中微服务开发辅助工具

研发工具链

小张的公司还处于创业阶段,出于节省成本的考虑,我们尽量选择开(mian)源(fei)的解决方案:

  1. 内部帐号统一管理:在企业的内部,存在许多内部系统。出于安全性、管理性的考虑,需要统一的帐号管理系统。这里我们选用OpenLDAP:一款的开源的帐号管理服务,它实现了广泛使用的“轻量级目录管理协议”(LDAP v3),可以轻松对接各类系统的帐号管理功能。

  2. 代码管理:团队协作的软件开发模式,需要版本控制系统。我们选用了Git做为代码的版本控制系统。在代码的托管、审核方面,GerritGitLab都是成熟的开源解决方案。Gitlab上手容易,生态链更加成熟;Gerrit有一定上手门槛,在代码Review方面更加优秀。关于两者的讨论,可以参考这篇帖子。经过多方面的综合考虑,我们选择了GitLab。

  3. 版本依赖系统:在Java开发中,Maven是依赖管理的事实标准。同时在企业开发中,不希望将私有包发布到公开仓库中,我们选用Nexus Repository OSS搭建私有的Maven仓库。

  4. 持续集成、持续交付,持续部署是三个既相近又重要的概念,我们将在下一小节展开讨论。

  5. 微服务辅助开发工具:在微服务架构下,新增微服务、升级pom版本,接口变更等操作会频繁发生。需要开发一些辅助工具,提升研发效率。我们会在后面展开讨论。

针对上述选择的工具,我们会在后续章节详细介绍。

微服务辅助开发工具

结合微服务的开发特点,我们需要这样一些辅助工具:

  • 自动创建新的微服务:包括从模板项目生成微服务代码、自动创建git项目、部署项目

  • RPC桩文件生成:在RPC的(IDL)接口文件变更后,需要重新生成桩文件,这个步骤较为繁琐,需要工具辅助完成。

  • pom版本自动升级:微服务之间的版本依赖,更新会更加频繁,我们需要一个工具,自动修改pom版本

这里我们只初步讨论一下需求,具体的实现会在后续章节展开。