本文为阿里云容器服务spring cloud应用开发系列文章的第九篇。前文讨论了如何开发基于spring cloud微服务应用,所有代码通过标准的dockerfile构建成为不同的镜像,我们还要写docker-compose.yml来描述容器启动参数和容器之间的关系,这个文件也就是我们常说的部署模版文件。
九、服务的部署和发布策略(本文)
在示例代码中有两个docker compose文件,一个是<code>docker-compose.yml</code>,另外一个是<code>docker-compose.acs.yml</code>。它们两者的区别是<code>docker-compose.yml</code>中的数据库是mysql容器,<code>docker-compose.acs.yml</code>中服务连接的是阿里云的<code>rds</code>。
两个eureka server组成的集群,容器名分别为<code>discovery1</code>和<code>discovery2</code>,对于所有使用eureka的其它服务来说,启动时的环境变量<code>eureka_server_list</code>设置成这两个eureka server的url,eureka client需要这个信息决定连接那个eureka server。
discovery1通过<code>aliyun.routing.port_8761</code>声明为对外可以访问,访问端点可以在控制台界面中的discovery1页面看到。
foo的<code>mysql:mysql</code>links声明将mysql(容器)和mysql(foo代码使用的dns地址)绑定起来,而且是跨主机的绑定。
模版部署文件中的其它内容已经都在前文中介绍过了,这里就不再重复了。
部署的过程在前面的文章已经讨论过了,这里把仅输入部署模版文件内容的部分再简单介绍一下。

点击<code>创建并部署</code>按钮,在对话框中输入负载均衡id,确认后创建应用。
部署成功的应用如果镜像发生了变化,需要在对应用<code>重新部署</code>,如果docker-compose.yml内容发生了变化,需要执行<code>变更配置</code>。
阿里云容器服务提供了多种发布策略,我们介绍一下这其中最简明的一种方式:<code>rolling update</code>发布,意思是在更新的服务时按顺序更新,只有当前一个服务更新成功后再做下一个服务的更新。这里的要求时需要用<code>aliyun.scale</code>标签声明容器实例数量,并且通过<code>aliyun.probe</code>声明了健康检查方式。
在本系列文章中我们讨论了如何利用springcloud构建一个微服务应用,以及如何在阿里云容器服务上部署微服务应用。阿里云容器服务在完全兼容docker api的前提提供了服务治理能力,这些服务治理能力都是和语言无关的,比如服务的注册、发现和绑定,服务健康检查,高可用保证,服务接入路由,多重服务发布策略,服务的管控等。
后续会有相关的文章详细介绍这些功能。
容器技术的应用隔离和一致性交付能力使得它成为微服务架构的最佳实践之一。由于封装了互联网级别的netfix开源产品,spring cloud成为java语言实现微服务应用的成熟框架。
阿里云的容器服务不但提供了语言无关的服务治理能力,同时对spring cloud应用也有很好的支持,还有很多对云应用动态管理的很多扩展。所有这些因素都使得阿里云容器服务部署运行微服务应用的一个完美平台。