当前位置: 首页 > news >正文

什么是微服务?-核心思想:化整为零,各自为战

微服务的概念:

微服务不需要像普通服务那样成为一种独立的功能或者独立的资源。定义中称,微服务是需要与业务能力相匹配,这种说法完全正确。不幸的是,仍然意味着,如果能力模型粒度的设计是错误的,那么,我们就必须付出很多代价。如果你阅读了Fowler的整篇文章,你会发现,其中的指导建议是非常实用的。在决定将所有组件组合到一起时,开发人员需要非常确信这些组件都会有所改变,并且规模也会发生变化。服务粒度越粗,就越难以符合规定原则。服务粒度越细,就越能够灵活地降低变化和负载所带来的影响。然而,利弊之间的权衡过程是非常复杂的,我们要在配置和资金模型的基础上考虑到基础设施的成本问题。

核心思想:化整为零,各自为战

想象一下,你有一个非常庞大、复杂的软件系统(比如一个像淘宝、微信或者美团那样的大型应用)。

  1. 传统方式(单体应用): 就像一个巨大的、实心的石头雕像

    • 所有功能(用户管理、商品展示、下单、支付、库存管理、物流跟踪等等)都紧紧地捆绑在一起,写在一个巨大的代码包里。

    • 优点: 一开始开发、部署可能简单点(就一个东西)。

    • 缺点:

      • 难修改: 想改一下“支付”功能?可能不小心就影响到“下单”功能,牵一发动全身。

      • 难扩展: 如果“双十一”下单的人特别多,你不得不把整个大石头雕像都复制好几份来分担压力,即使其他部分(比如用户管理)压力不大,也得跟着一起复制,浪费资源。

      • 难维护: 代码越堆越大,新加入的开发者很难理清头绪,一个小 bug 可能让整个系统瘫痪。

      • 技术栈单一: 整个大石头只能用一种技术(比如只能用 Java)来雕刻,想用更适合某个功能的新技术(比如用 Go 写支付)就很难。

  2. 微服务方式: 就像一堆独立的小乐高积木块拼成的模型。

    • 把那个大系统按照业务功能拆分成很多个小的、独立的服务。每个服务就负责自己那一块核心功能:

      • 用户服务:只管注册、登录、用户信息。

      • 商品服务:只管展示商品、搜索商品。

      • 订单服务:只管创建订单、管理订单状态。

      • 支付服务:只管收钱。

      • 库存服务:只管查库存、扣库存。

      • 物流服务:只管跟踪快递。

    • 每个小服务(积木块)都是独立的:

      • 独立开发: 不同的团队可以同时开发不同的服务,只要商量好怎么“对接”(接口)就行。

      • 独立部署: 可以单独更新“支付服务”,不用重启整个系统,其他服务不受影响。

      • 独立运行: 每个服务运行在自己的“小空间”(进程)里。

      • 独立扩展: 如果“双十一”下单的人多,就给“订单服务”多分配几台服务器资源。用户服务、商品服务如果压力不大,就不用动,省钱省力!

      • 独立技术栈: 用户服务可以用 Java 写,商品服务可以用 Python 写,支付服务可以用 Go 写,哪个最合适就用哪个!只要它们之间能“沟通”(通常是 HTTP API 或 RPC)。

    • 它们之间通过清晰定义的接口(API) 来“对话”和“合作”,完成一个完整的业务。比如,用户下单时:

      • 订单服务调用库存服务:扣库存!

      • 订单服务调用支付服务:收钱!

      • 支付成功后,订单服务调用物流服务:发货啦!

微服务的关键特点(通俗版)

  • 小: 每个服务只专注做好一件特定的事情(单一职责)。

  • 独: 自己管自己,开发、部署、运行、伸缩都尽量不依赖别人。

  • 聊: 通过明确的“语言”(API)和其他服务交流。

  • 韧: 一个服务挂了(比如支付暂时不可用),理想情况下不应该导致整个系统崩溃(比如用户还能浏览商品),系统整体更健壮。

  • 活: 可以快速更新某个服务,尝试新技术,更容易适应变化。

微服务的好处(对比大石头)

  • 灵活: 改东西快,加新功能快。

  • 伸缩性好: 哪部分忙就单独给哪部分加资源,省钱高效。

  • 技术自由: 不同服务可以用最适合的技术。

  • 容错性强: 一个服务出问题,不容易拖垮全局。

  • 团队自治: 小团队负责小服务,效率高,责任清晰。

微服务的挑战(没有免费的午餐)

  • 复杂度转移: 虽然单个服务简单了,但管理一堆服务和它们之间的通信、协调、依赖变得非常复杂(需要额外的工具和平台,比如服务发现、配置中心、API网关、监控系统)。

  • 网络问题: 服务间靠网络通信,网络延迟、不稳定、安全问题就变得很重要。

  • 数据一致性: 以前在一个数据库里改数据很容易保证一致性,现在数据可能分散在不同服务的数据库里,保证它们同步是个难题(需要分布式事务等复杂方案)。

  • 运维成本高: 需要更强大的自动化部署、监控、日志收集工具来管理这么多服务。

  • 调试追踪难: 一个请求可能穿越多个服务,找出问题在哪一环比较麻烦(需要链路追踪工具)。

总结一下

微服务就是把一个庞大复杂的软件系统,拆分成一堆小的、独立的、专门化的服务。这些服务像乐高积木一样,通过定义好的接口互相协作,共同构建出完整的应用。它让大型系统变得更灵活、更易扩展、更能拥抱变化,但也带来了管理和协调上的新挑战。

简单说:微服务就是“分而治之”思想在软件开发架构上的体现,把大系统拆成小服务,各自独立又能合作。

适合大型、复杂、需要快速迭代和扩展的应用。如果是小项目,用微服务可能就是杀鸡用牛刀,反而更麻烦了。

http://www.lryc.cn/news/588568.html

相关文章:

  • Node.js + Express的数据库AB View切换方案设计
  • 【EM算法】三硬币模型
  • 自动微分模块
  • Class9简洁实现
  • JavaScript进阶篇——第二章 高级特性核心
  • JavaScript进阶篇——第一章 作用域与垃圾回收机制
  • 力扣 hot100 Day44
  • java基础(day07)
  • 板凳-------Mysql cookbook学习 (十一--------10)
  • 06【C++ 初阶】类和对象(上篇) --- 初步理解/使用类
  • ThreadLocal内部结构深度解析
  • 《大数据技术原理与应用》实验报告三 熟悉HBase常用操作
  • 每天一个前端小知识 Day 31 - 前端国际化(i18n)与本地化(l10n)实战方案
  • html js express 连接数据库mysql
  • Java:继承和多态(必会知识点整理)
  • 为什么资深C++开发者大部分选vector?揭秘背后的硬核性能真相!
  • 9.服务容错:构建高可用微服务的核心防御
  • #Paper Reading# Apple Intelligence Foundation Language Models
  • 微服务初步入门
  • 量子计算新突破!阿里“太章3.0”实现512量子比特模拟(2025中国量子算力巅峰)
  • 【算法训练营Day12】二叉树part2
  • 《大数据技术原理与应用》实验报告二 熟悉常用的HDFS操作
  • 【小白量化智能体】应用5:编写通达信股票交易指标及生成QMT自动交易Python策略程序
  • UDP协议的端口161怎么检测连通性
  • 【PY32】如何使用 J-Link 和 MDK 开发调试 PY32 MCU
  • 【STM32】什么在使能寄存器或外设之前必须先打开时钟?
  • java基础-1 : 运算符
  • 使用dify生成测试用例
  • 13.计算 Python 字符串的字节大小
  • HTML 文本格式化标签