进入正题之前,我们需要非常清楚的知道微服务的特点。只有明确了微服务自身的特点后,才能有目标的选择微服务的部署形式及方案。下面就让我们明晰下微服务的特点:
- 资源:每个微服务对资源的要求不一样
- 可扩展性:每个微服务都有具体的要求
- 监控:每个微服务的监控方式及要求不一样
- 框架:开发框架及语言可能不一样
但是无论我们选择哪一种部署方案或是实施怎样的部署方式,都需要达到以下目标:
- 快速:快速的实现服务的部署,尽量做到时间最少、成本最低
- 资源要求:按照服务要求分配指定的资源,能够实现资源的控制及监控
- 管理:实现微服务部署的管理性
基于微服务的特点及部署方案的要求,我们将探讨对比分析以下几种方案的优劣
- 一个主机,多个服务
主机可以是物理机或是虚拟机。这个方案理解起来很简单,就是一个主机上部署多个服务。形式如下图:
当然这种方案如果按照进程区别的话,可能有如下的不同。1、每个进程一个服务;2、多个服务共享一个进程,比如:一个tomcat服务器部署了多套服务。
这中方案对资源的利用率较高,由于一个tomcat服务器可以部署多套服务,并且共享一个主机资源。而且部署方式非常快,只需要上传我们的程序打包文件到指定的服务器即可。服务的启动也非常的快,我们只是需要中间件(tomcat)即可。但是这种方案也有他真正的缺点,没有相关的方案可以实现服务的隔离。资源的控制不好实现,如果其中一个服务用尽了内存,会对其他服务造成很大的影响。
2.每个虚拟机一个服务
每个服务被打包成一个虚拟机镜像,每个服务在虚拟机上运行。图解如下:
这种方式能方便的实现资源的控制,每个虚拟机都会有指定的Cpu、内存等;而且每个虚拟机相互隔离,非常的安全。由于现在的云服务供应商都提供了便利的工具,我们可以借助云框架体系。但是这种方案对资源利用率比较的低,每个服务均需要完整的VM及操作系统。由于虚拟机的镜像文件比较大,会导致打包、部署、启动的时间比较的长。由于轻量级的虚拟机镜像开始盛行,这种问题将会逐步得到解决。虚拟机的部署需要运维人员承担比较重的管理工作。
3.每个容器一个服务
我们可以对每个容器设置资源,控制每个容器的资源使用情况。
每个服务会被打包成为容器镜像,每个容器镜像会包含服务运行所需要的所有资源。这中方案和第二个方案非常的类似,我们能非常轻松的实现资源的控制及监控、服务的隔离。相比较第二种方案,容器方案是一种非常轻量级的方案,但是虚拟机的基础建设比较好。
下面我将用表格的形式对上述三种方式坐下对比分析: