一文让你搞懂什么是微服务

1.什么是微服务

        微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用HTTP API通讯。同时,服务会使用最小规模的集中管理 (例如Docker)技术,服务可以用不同的编程语言与数据库等。

这是维基百科上定义的是不是看着有些晕,现在我根据我的理解解释一下,但此之前我想先介绍一下与微服务与之相对的是单体架构:

1.1单体架构

1.1.1什么是单体架构

        单体架构(Monolithic Architecture)是一种传统的软件架构模式,将整个应用程序作为一个单一的、统一的单元进行开发、部署和扩展。在单体架构中,所有的功能模块都被打包在一起,共享同一个代码库和数据库。

        在早些年间各大互联网公司的应用技术栈大致可分为LAMP(Linux + Apache + MySQL + PHP)和MVC(Spring + iBatis/Hibernate + Tomcat)两大流派。无论是LAMP还是MVC,都是为单体应用架构设计的,其优点是学习成本低,开发上手快,测试、部署、运维也比较方便,甚至一个人就可以完成一个网站的开发与部署。但随着项目规模的扩大,单体架构的问题逐渐暴露出来。

1.1.2单体架构的缺点
  1. 可扩展性差:由于所有功能模块都耦合在一起,当应用程序需要扩展时,必须扩展整个应用程序,而不仅仅是某个特定的模块。
  2. 维护困难:随着应用程序规模的增长,代码库会变得庞大且复杂,导致维护困难。
  3. 技术栈限制:由于整个应用程序使用相同的技术栈,因此难以使用不同的技术栈开发特定模块。
  4. 可靠性差:由于整个应用程序是一个单一的实体,当某个模块出现问题时,整个应用程序可能会崩溃

正因单体架构的缺点的放大,微服务这一概念也随之诞生。人们提到微服务就想到的springcloud,但微服务是一种概念、设计模式,而springcloud是一种微服务框架,一种具体的实现方式。下面我来正式介绍一下微服务的概念。

1.2微服务

微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征:

  • 单一职责:微服务拆分力度更小,每个服务对对应唯一的业务能力,做到单一职责,避免重复业务开发。
  • 面向服务:微服务对外暴露接口。
  • 自治:团队独立、技术独立、数据独立、部署独立
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题。

 微服务就是将一个大的项目进行拆分,分成不同的模块,如用户服务、会员服务、订单服务等等。将项目开发以服务为粒度进行拆分,以服务为单位进行开发。而服务与服务之间的相互调用也发生了改变,由传统的单机应用中通过JAR包依赖产生的本地方法调用,改造成通过RPC接口产生的远程方法调用。

http://t.csdn.cn/W7WNX    远程过程调用(RPC)详解

1.3微服务的缺点

  1. 复杂性增加:微服务架构引入了分布式系统的复杂性,包括服务发现、网络通信、数据一致性等方面的挑战。
  2. 运维成本增加:由于涉及多个服务,运维和监控的成本相对较高。
  3. 分布式事务管理:在跨多个服务的操作中,确保数据的一致性和事务管理是一个挑战。
  4. 系统间通信开销:由于服务间需要通过网络进行通信,会引入一定的延迟和开销。

微服务的使用场景

  1. 应用过于复杂时:当应用程序变得庞大且复杂时,用单体架构开发相对困难,微服务可以将应用程序拆分为多个小型的、自治的服务,使得开发、测试、部署和维护更加容易。

  2. 有高可扩展性需求时:微服务架构可以根据需求独立地扩展特定的服务,而不需要整个应用程序一起扩展,从而提供更好的可扩展性和性能。如:这是一个抢购应用,对于抢购这一服务具有很高的资源要求,而其他服务资源要求不高,此时由于不同的服务部署再不同的服务器当中,就可以多部署几台服务器再抢购这个服务上,提高抢购服务的性能。

  3. 需要多团队协作,提高开发速度时:当多个开发团队同时开发和维护一个应用程序时,微服务可以提供独立的服务边界,使得不同团队可以独立开发、测试和部署各自的服务,提高协作效率。加快开发速度。

  4. 技术栈异构时:微服务架构支持使用不同的技术栈开发和部署各个服务,因此适用于需要使用不同技术栈的场景。

综上所述,微服务架构适用于复杂、大规模和需要灵活性的应用场景,但也需要权衡其复杂性和运维成本。

猜你喜欢

转载自blog.csdn.net/qq_64680177/article/details/131146883