微服务简介

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: • 一个 war 包含所有功能的应用程序,通常称为单体应用。尽管在程序中进行了模块化,但若干业务模块被打包在一个 war 包中,这样的应用系统称为单体应用。• 优点:容易部署、测试。可以快速实现需求。• 缺点:随着需求的不断增加,开发团队的状大,代码库也在迅速增长, 此时单体应用变得越来越臃肿,可维护性、灵活性逐渐下降,维护成本高:a. 模块非常多、模块的边界模糊、依赖关系不清晰、每次修改代码心惊胆战,甚至增加一个简单功能或修改一个 bug 都会带来隐含的缺陷。


单体应用架构存在的问题


  • 一个 war 包含所有功能的应用程序,通常称为单体应用。尽管在程序中进行了模块化,但若干业务模块被打包在一个 war 包中,这样的应用系统称为单体应用。
  • 优点:容易部署、测试。可以快速实现需求。
  • 缺点:随着需求的不断增加,开发团队的状大,代码库也在迅速增长, 此时单体应用变得越来越臃肿,可维护性、灵活性逐渐下降,维护成本高:
  1. 模块非常多、模块的边界模糊、依赖关系不清晰、每次修改代码心惊胆战,甚至增加一个简单功能或修改一个 bug 都会带来隐含的缺陷。
  2. 随着代码的增多,构建和部署的时间也会增加,在单体应用中,每次功能的变更或修改 bug 都会导致重新部署整个应用。全量部署耗时长、影响范围大。
  3. 可靠性差,某个 bug 可能 OOM ,最终导致整个应用崩溃。
  4. 扩展受限,无法根据业务模块的需要进行伸缩部署。如:有的模块是计算密集型的,需要更强劲的 CPU ;有的模块是 IO 密集型的,需要更大的内存。
  5. 技术创新受阻,单体应用往往使用统一的技术平台或方案解决所有的问题。

单体应用架构问题的解决方案


将一个单体应用开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级别通信机制。这些服务围绕各自的业务能力构建并通过全自动机制独立部署。每个服务可用不同的语言开发,使用不同的数据存储技术。

微服务的优点与挑战


优点

  • 每个微服务可独立运行在自己的进程里,单个微服务代码量较少,所以启动会较快。
  • 局部修改容易部署,单体应用只要有修改,就得重启整个应用,微服务进行修改,只需要重新部署这个服务即可。
  • 一系列独立运行的微服务共同构建整个系统。
  • 每个微服务为独立的业务开发,一个微服务只关注某个特定的功能,所以业务清晰、代码量较少。如订单管理、用户管理等。
  • 微服务间通过一些轻量的通信机制进行通信,如 RESTful API。
  • 结合项目业务及团队特点,合理地选择技术栈,可以使用不同的语言与数据存储技术。
  • 按需要伸缩,可根据需求,实现细粒度的扩展,如某个微服务遇到瓶颈,可以结合这个微服务业务特点,增加内存、升级 CPU 或增加节点。

总之,单体应用架构的缺点,恰好是微服务的优点,但不是完美的解决方案,微服务同样有很多挑战。

挑战

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

微服务的设计原则


  • 单一职责原则,指一个单元(类、方法或服务等)只关注整个系统功能中单独、有界限的一部分,可以帮助我们更优雅地开发、更敏捷地交付。
  • 服务自治原则,指每个微服务应具备独立的业务能力、依赖与运行环境。在微服务架构中,服务是独立的业务单元,与其他服务高度解偶。从开发、测试、构建、部署,都可以独立运行,而不应该依赖其他服务。
  • 微服务间应该通过轻量级别的通信机制进行交互。跨语言、跨平台。微服务中常用的协议有 REST、 AMQP 等。
相关文章
|
存储 人工智能 Serverless
微服务和 Serverless 架构-函数计算 FC 简介及应用场景
微服务和 Serverless 架构-函数计算 FC 简介及应用场景
微服务和 Serverless 架构-函数计算 FC 简介及应用场景
|
监控 负载均衡 测试技术
服务网格简介:探索现代微服务架构中的服务网格概念和价值
服务网格简介:探索现代微服务架构中的服务网格概念和价值
305 0
|
5月前
|
存储 搜索推荐 Java
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门
79 2
|
5月前
|
存储 消息中间件 数据库
分布式系统详解--架构简介(微服务)
分布式系统详解--架构简介(微服务)
87 0
|
存储 安全 API
微服务技术系列教程(40)- SpringCloud -OAuth2简介&原理
微服务技术系列教程(40)- SpringCloud -OAuth2简介&原理
56 0
|
安全 Java 数据安全/隐私保护
微服务技术系列教程(37)- SpringBoot -SpringSecurity简介
微服务技术系列教程(37)- SpringBoot -SpringSecurity简介
70 0
|
消息中间件 JSON Java
微服务技术系列教程(33) - SpringCloud-消息驱动简介&原理
微服务技术系列教程(33) - SpringCloud-消息驱动简介&原理
59 0
|
Dubbo Java 应用服务中间件
微服务技术系列教程(16) - SpringCloud -简介
微服务技术系列教程(16) - SpringCloud -简介
74 0
|
6月前
|
Java API 数据库
微服务简介
微服务简介
53 6
|
开发框架 负载均衡 Dubbo
带你读《Apache Dubbo微服务开发从入门到精通》—— 一、 Dubbo简介
带你读《Apache Dubbo微服务开发从入门到精通》—— 一、 Dubbo简介
935 8
带你读《Apache Dubbo微服务开发从入门到精通》—— 一、 Dubbo简介
下一篇
无影云桌面