3.2.1 开发环境
微服务的开发环境即本地开发环境。比如在使用Golang语言开发时,在本地编译出二进制文件并运行即可。但在实际的项目开发中,一个软件产品往往对应着数个甚至数十个微服务。不同的微服务往往需要不同的外部依赖,在数据源、编程语言等方面也不尽相同。如果开发人员仍要尝试在本地启动这些微服务,那么就需要对每个微服务都有所了解,这会使日常开发工作变得非常痛苦。
我们可以使用容器技术来解决这一问题。使用服务镜像来代替本地搭建能够极大地节省精力,使开发人员只关注少数的微服务即可。Docker提供了运行多个容器的工具Docker Compose。开发人员可以将依赖服务的容器定义到docker-compose.yaml文件中,并在yaml文件所在路径下执行如下命令,自动构建镜像并启动服务的容器。
Docker Compose解决了启动多个服务的问题,但随之而来的是yaml文件的维护成本。特别地,如果开发人员需要在多个微服务之间进行切换,那么就需要不停修改docker-compose.yaml文件。为此,我们研发了基于Docker Compose开发环境的搭建工具Docker Switch。
Docker Switch中包含一个docker-compose.yaml文件和一个docker-switch.json.template文件。docker-compose.yaml由若干个服务镜像组成。docker-switch.json.template是用来生成本地配置的模板文件。
使用时,需要先在本地新建一个配置文件docker-switch.json。docker-switch.json由两部分组成,envs和switches,前者描述了容器网络、数据库等外部依赖,后者指明了哪些服务需要在Docker中运行,哪些服务需要在本地直接运行,示例如下。
然后,可以调用启动脚本来启动Docker Switch。启动脚本会读取docker-switch.json文件,生成.env文件来保存服务运行的基本信息,生成.stopservices文件来描述需要停掉的服务,生成.scaleservices文件来描述需要水平扩容的服务。启动脚本也中包含了Docker Compose启停命令,具体如下。
这样,开发人员只需要修改docker-switch.json文件,再重新启动Docker Switch就可以完成服务在容器环境和本机环境之间的切换了。