Java 微服务实用指南(一)( 五 )


所以总结来说 , 现在不再是简单地 scp 一个.jar 文件 , 而是:

  • 将 jar 文件打包成 Docker 镜像
  • 将该 docker 镜像传输到一个私有的 docker 注册表
  • 在目标平台上拉取该镜像 , 然后运行它
  • 或者 , 将 Docker 镜像直接 scp 到你的生产系统 , 然后运行它
如何使用 Docker Swarm 或 Kubernetes 来部署 Java 微服务假设你正在尝试 Docker 。 现在每次部署 Java 微服务时 , 你都要创建一个 Docker 镜像 , 它绑定了你的.jar 文件 。 你有若干这样的 Java 微服务 , 你希望将这些服务部署到若干机器上:即集群 。
那么问题来了:如何管理集群 , 也就是运行 Docker 容器、执行健康检查、发布更新、扩展 , 等等等等?
答案可能有两个:Docker Swarm 和 Kubernetes 。
由于篇幅所限 , 本指南不可能详细介绍它们 , 但实质上:它们最终都是基于你编写 YAML 文件来管理你的集群(参见本文“不是问题:YAML 缩进的故事”) 。 如果你想知道在实践中大概怎么做 , 可以简单在网上搜一搜 。
那么 , Java 微服务的部署过程现在看起来可能是这样的:
  • 安装和管理 Docker Swarm/Kubernetes
  • 执行上面所述的 Docker 步骤
  • 编写和执行 YAML , 直到所有的东西都工作正常
如何测试 Java 微服务假设你解决了在生产环境中部署微服务的问题 , 但是在开发过程中如何集成测试微服务呢?如何查看完整的工作流是否工作正常 , 而不仅仅是单一的局部呢?
在实践中 , 你会找到三种不同的方法:
  1. 做一点点额外的工作(如果你正在使用 Spring 之类的框架), 你可以把你所有的微服务包装成一个运行器类 , 使用一个 Wrapper.java 类来启动所有的微服务 , 当然 , 前提是你的机器上有足够的内存来运行所有的微服务 。
  2. 你可以尝试在本地也安装一套 Docker Swarm 或 Kubernetes 。
  3. 不再在本地进行集成测试 , 而是搭建一套专用的开发 / 测试环境 。 很多团队实际上都是这么做的 , 以避免承受在本地部署微服务之痛 。
此外 , 除了 Java 微服务之外 , 你可能还需要一个运行一个消息代理(比如:ActiveMQ 或 RabbitMQ) , 或者一个电子邮件服务器或任何其他消息传递组件 , 你的 Java 微服务需要通过这些组件来彼此通信 。
可见 , DevOps 方面的复杂度被大大低估了 。 可以了解一下微服务测试类库 , 能在这方面对你有所帮助 。