就目前来看微服务并没有一个严格的定义,每一个人对微服务的理解都是不一样的. Martin Fowler 在它的博客中是这样表述微服务的
微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每一个服务运行在自己的进程中,服务间通信采用的轻量级通信机制(通常用 HTTP 资源 API)。 这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务公用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术, 微服务架构如下图所示:
微服务的优点
·易于开发和维护: 一个微服务只会关注一个特定的业务功能,所以它业务清晰、代码量少。开发和维护单个微服务相当简单。而整个应用是若干个微服务构建而成的,所以整个应用也被维持在一个可控状态。
·单个微服务启动较快: 单个微服务代码量较少,所以启动会比较快。
·局部修改容易部署: 单个应用只要有修改,就得重新部署整个应用,微服务解决了这样的问题。一般来说,对某个微服务进行修改,只需要重新部署这个服务即可。
·技术栈不受限: 在微服务架构中,可以结合项目业务及团队的特点,合理选择技术栈。例如某些服务可以使用关系型数据库 Mysql,有些服务可以使用非关系型数据库如 redis;甚至可根据需求,部分微服务使用 Java 开发,部分微服务使用 Node.js 开发。按需收缩: 可根据需求,实现细粒度的扩展。例如,系统中的某个微服务遇到了瓶颈,可以结合这个微服务的业务特点,增加内存、升级 CPU 或者增加节点。
微服务的缺点
·运维要求较高: 更多的服务意味着更多的运维投入。在单体架构中,只需要保证一个应用的正常运行。而在微服务中,需要保证几十甚至几百个服务正常运行与协作,这给运维带来了很大的挑战。
·分布式固有的复杂性: 使用微服务构建的是分布式系统。对于一个分布式系统,系统容错、网络延迟等都会带来巨大的挑战。
·接口调整成本高: 微服务之间通过接口进行通信。如果修改某一个微服务 API,可能所有使用该接口的微服务都需要调整。
猜你喜欢:
java中级程序员学习线路图