背景
你已经采用了微服务架构并且将你的系统架构为一组服务。每个服务为了吞吐量和可用性,部署为一组服务实例。
问题
怎样将服务打包和部署?
限制
- 服务采用不同语言,不同框架,不同框架版本编写
- 每个服务为了吞吐量和可用性,存在多个服务实例
- 服务必须独立部署和扩展
- 服务实例彼此之间应该隔离
- 你需要可以快速的构建和部署服务
- 你需要可以限制服务消费的资源(CPU和内存)
- 你需要监控每个服务实例的行为
- 你想要可靠部署
- 你必须尽可能小成品的部署应用程序
解决方案
在单个主机(物理机或虚拟机)上运行不同服务的多个实例。
在共享的主机上部署服务实例有各种各样方法:
- 部署服务实例为JVM进程。例如,每服务实例一个Tomcat或者Jetty实例。
- 在相同的JVM进程部署多个服务实例。例如,像网站应用或者OSGI。
示例
结果
这个模式的优势包括:
- 与每主机每服务实例相比更有效的资源利用率
这个方法的弊端包括:
- 资源需求冲突时的缺陷
- 依赖版本冲突时的缺陷
- 很难限制单个服务实例的资源消耗
- 如果多个服务实例部署在相同的进程,很难检测每个实例的资源消耗。而且不可能隔离不同的实例
相关模式
- 每主机每服务实例模式是个可替代的解决方案。
- 无服务器部署模式是个可替代的解决方案。
网友评论