微服务浅谈与原理

2022-09-28 19:17:54 浏览数 (1)

[TOC]

0x00 什么是微服务

Q:什么是微服务? 答:微服务(Microservice Architecture)是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。我们在此引用 ThoughtWorks 公司的首席科学家 Martin Fowler 的一段话:

代码语言:javascript复制
   In short, the microservice architectural style 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.

谷歌翻译如下:
简而言之,微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 
这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。

为什么会出现微服务? 比如:下图就是常见扩展方式(集群),但是我们现在的性能瓶颈是支付模块,希望只针对支付模块做水平扩展,下面的单体架构系统是做不到的。

WeiyiGeek.单体架构

单体架构的痛点:在传统的MVC架构中,所有业务子模块系统都集成在一个很重的JVM进程之中; 单体架构的好处与坏处:所有的代码都在同一个项目之中便于管理,当产品规模达到一定限度时候其耦合性变高开发成本也会变高;

  • 缺点一:项目过于臃肿当大大小小的功能模块都集中在同一项目的时候,整个项目必然会变得臃肿,让开发者难以维护。
  • 缺点二:资源无法隔离就,整个单体系统的各个功能模块都依赖于同样的数据库、内存等资源,一旦某个功能模块对资源使用不当,整个系统都会被拖垮。
  • 缺点三:无法灵活扩展当系统的访问量越来越大的时候,单体系统固然可以进行水平扩展,部署在多台机器上组成集群,但是这种扩展并非灵活的扩展

微服务与单体架构的展现:图中左边是单体架构的集群,右边是微服务集群。

WeiyiGeek.单体与微服务

微服务有什么样的具体特点呢?

  1. 独立部署,灵活扩展传统的单体架构是以整个系统为单位进行部署,而微服务则是以每一个独立组件(例如用户服务,商品服务)为单位进行部署。
    • 比如根据每个服务的吞吐量不同,支付服务需要部署20台机器,用户服务需要部署30台机器,而商品服务只需要部署10台机器,这种灵活部署只有微服务架构才能实现。
  2. 资源的有效隔离微服务设计的原则之一,每一个微服务拥有独立的数据源,假如微服务A想要读写微服务B的数据库只能调用微服务B对外暴露的接口来完成。
    • 有效避免了服务之间争用数据库和缓存资源所带来的问题,同时由于每一个微服务实例在Docker容器上运行,实现了服务器资源(内存、CPU资源等)的有效隔离。

WeiyiGeek.模块数据库分离

  1. 团队组织架构的调整微服务设计的思想也改变了原有的企业研发团队组织架构。
    • 传统的研发组织架构是水平架构,前端有前端的团队,后端有后端的团队,DBA有DBA的团队,测试有测试的团队。
    • 而微服务的设计思想对团队的划分有着一定的影响,使得团队组织架构的划分更倾向于垂直架构,比如用户业务是一个团队来负责,支付业务是一个团队来负责。

WeiyiGeek.水平与垂直团队

注意:这种垂直划分只是一个理想的架构,实际在企业中并不会把团队组织架构拆分得这么绝对。

Q:微服务与面向服务架构SOA的区别? 在上面我们了解了什么是微服务,但是概念听起来和SOA架构思想好像差不多,但实际上是有所区别的;SOA和微服务都是架构思想; SOA架构:是一种粗粒度、松耦合的服务架构,其更多的强调异构系统之间的服务通信,在Dubbo框架与Spring Cloud框架都很好的支持了SOA和微服务架构;

  • SOA架构强调的是 “异构系统之间” 的通信和解耦合
  • 微服务架构强调的是系统按 “业务边界” 做细粒度的拆分和部署

WeiyiGeek.SOA架构

微服务架构的不足:

  • 微服务把原有的项目拆成了多个独立工程,增加了开发和测试的复杂度;
  • 微服务为了保证不同服务之间的数据一致性,引入了分布式事务和异步补偿机制,为设计开发带来一定的挑战;

0 人点赞