微服务的定义以及优劣

微服务的定义以及优劣

一、什么是微服务

单体架构存在很多问题,微服务的出现就是为了解决单体架构面临的困难。就目前来看,微服务本身并没有一个严格的定义,Martin Fowler是这样定义微服务的。

In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

原文地址:https://martinfowler.com/articles/microservices.html

翻译:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务问通信采用轻量级通信机制(通常用HTTP资源APT)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。

二、微服务架构的特征

  • 每个微服务可独立运行在自己的进程里。
  • 一系列独立运行的微服务共同构建起整个系统。
  • 每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理、用户管理等。
  • 微服务之间通过一些轻量的通信机制进行通信,例如通过RESTful API进行调用。
  • 可以使用不同的语言与数据存储技术。
  • 全自动的部署机制。

以电影售票系统为例,使用微服务来架构该应用,架构图如下:
在这里插入图片描述
将整个应用分解为多个微服务,各个微服务独立运行在自己的进程中,并分别有自己的数据库,微服务之间使用REST或者其他协议通信。

三、微服务架构的优点

  • 易于开发和维护:一个微服务只会关注一个特定的业务功能,所以它业务清晰、代码量少。开发和维护单个微服务相对简单。而整个应用是由若干个微服务构建而成的,所以整个应用也会维持在一个可控状态。
  • 单个微服务启动较快:单个微服务代码量少,所以启动会比较快。
  • 局部修改容易部署:单体应用只要有修改,就得重新部署整个应用,微服务解决了这样的问题。一般来说,对某个微服务进行修改,只需要重新部署这个服务即可。
  • 技术栈不受限:在微服务架构中,可以结合项目业务及团队的特点,合理地选择技术栈。例如某些服务可使用关系型数据库MySQL;某些服务有图形计算的需求,可使用Neo4j;甚至可根据需要,部署微服务使用java开发,部分微服务使用Node.js开发。
  • 按需伸缩: 可根据需求,实现细粒度的扩展。例如,系统中的某个微服务遇到了瓶颈,可以结合这个微服务的业务特点,拉架内存、升级CPU或者是增加节点。

综合来看,单体应用架构的缺点,恰恰是微服务的优点,而这些优点使得微服务看起来简直完美。然而完美的东西并不存在,下面来看看微服务面临的有哪些挑战。

四、微服务架构有哪些挑战

  • 运维要求较高:更多的服务意味着更多的运维投人。在单体架构中,只需要保证一个应用的正常运行。而在微服务中,需要保证几十甚至几百个服务的正常运行与协作,这给运维带来了很大的挑战。
  • 分布式固有的复杂性:使用微服务构建的是分布式系统。对于一个分布式系统,系统容错、网络延迟、分布式事务等都会带来巨大的挑战。
  • 接口调整成本高:微服务之间通过接口进行通信。如果修改某一个微服务的API,可能所有使用了该接口的微服务都需要做调整。
  • 重复劳动:很多服务可能都会使用到相同的功能,而这个功能并没有达到分解为一个微服务的程度,这个时候,可能各个服务都会开发这一功能,从而导致代码重复。尽管可以使用共享库来解决这个问题(例如可以将这个功能封装成公共组件、需要该功能的微服务引用该组件),但共享库在多语言环境下就不一定行得通了。

猜你喜欢

转载自blog.csdn.net/qq_42647711/article/details/109217672