天天看点

微服务的一些概念单体架构(Monolithic Architecture)微服务与SOA的区别在哪?

单体架构(Monolithic Architecture)

传统的单体架构,把所有的功能都集中在一起,打包为一个war包,或者是可执行程序。部署的时候,需要部署一个完整的应用,升级时,也需要替换整个war包或是可执行程序,升级时,要中断正在提供的服务。单片架构的优势在于开发测试都比较容易,只需改动一个工程、启动一个应用。部署的时候,只需要复制应用及配置即可。当网站的流量很小时,我们只需要一个应用,并把所有的功能都部署在一起就可以了,以减少部署节点和成本。

但是随着应用规模越来越大,单体结构会面临问题:

  • 庞大的代码堆积在一个应用中,难以理解与维护
  • 部分修改,也需要构建和部署整个程序
  • 部署复杂,风险大,耗时长
  • 无法持续提供服务
  • 无法支持频繁改动的开发过程
  • 改动可能影响到本来可稳定运行的代码,在测试上,也需要整站测试,周期长
  • 伸缩性差

微服务

微服务是指开发一个单一的、小型的,但是有业务功能的服务。将原先的一整个的应用程序,拆分成多个可以独立开发测试部署的小服务,每个服务,都有自己的处理和轻量通信流程,可以部署在单个或者多个服务器上。微服务可以拥有自己的存储层,包括数据库或内存缓存。微服务是一种松耦合的、有明显责任边界的服务架构。也就是说,一个微服务的修改,不应该引起另一个微服务的同步修改,如果一个的改变会影响另外一个(应该失败隔离),那么就不适合做拆分。有了微服务,可以进行产品的快速迭代开发,并保证已有服务持续稳定提供服务。

微服务的缺点在于,服务分布式部署带来的分布式系统复杂性,需要有分布式事务的支持,服务之间依赖关系复杂,更新的时候需要谨慎处理。对服务划分的策略也需要谨慎,粒度太大,与单体甲架构有同样的缺点;粒度太小,则增大了系统的复杂性,用户的请求可能需要多个微服务跳转处理才能够返回,划分不合理了,整个系统也很难理解。

与SOA的区别在哪?

面向服务架构(SOA)是一种软件架构模式,一些应用程序组件,通过网络通信协议向其他组件提供服务,这些服务之间的通信,可以是简单的数据传递,也可以是两个或多个彼此需要互相协调的服务之间的互连。在服务中,可以实现纯粹的业务功能,例如购物车、收藏列表等。也可以是供其他服务调用的公共服务,例如登录鉴权服务。这些服务组合在一起,可以实现一个需求。

微服务与SOA是一脉相承的,区别主要在于规模与范围。微服务的核心思想,是对应用做有效拆分,以实现敏捷开发与部署,SOA包含的意义可能更广泛、不准确一些。

从实现方式上来说,微服务与SOA都是语言无关,协议跨平台的。微服务框架能够带来更大的敏捷性,构建更加轻量级、高效率的开发。而SOA更适合大型企业的应用集成。

从服务粒度上来说,微服务提倡服务的细粒度,每个操作甚至是方法都是独立开发的服务,足够小到不能再拆分。SOA没有这么极致的要求。

从部署方式上来说,微服务利用Docker技术,不依赖任何服务器和数据模型,是一个全栈应用,可以通过自动化方式独立部署,每个服务运行在自己的进程中。

参考

  • 《可伸缩服务架构 框架与中间件》
  • SOA和微服务架构的区别? - 徐兵元的回答 - 知乎