什么是微服务?

目录

一、微服务的定义

二、为什么要用微服务?

单体架构的问题

微服务解决了什么?

三、微服务的核心特征

[1. 服务拆分](#1. 服务拆分)

[2. 独立部署](#2. 独立部署)

[3. 独立数据管理](#3. 独立数据管理)

[4. 服务间通信](#4. 服务间通信)

[5. 去中心化治理](#5. 去中心化治理)

四、微服务架构的典型技术组成

五、微服务并不适合所有场景

六、什么时候适合微服务?

[七、微服务 vs 单体架构](#七、微服务 vs 单体架构)

八、总结


在传统的 Java Web 开发中,我们通常会把所有功能写在一个应用里:用户模块、订单模块、支付模块、后台管理模块全部打包成一个系统,这种架构被称为单体架构

随着业务规模的扩大,单体架构逐渐暴露出一系列问题,于是微服务架构应运而生。

一、微服务的定义

微服务(Microservices) 是一种软件架构风格,它将一个复杂的应用拆分为多个小而独立的服务

每个服务:

  • 只关注一个业务能力
  • 独立开发、独立部署
  • 通过网络(通常是 HTTP / RPC)进行通信

一句话定义:微服务就是将系统按业务能力拆分成多个可独立运行的服务。

二、为什么要用微服务?

单体架构的问题

在单体架构中:

  • 代码量庞大,维护困难
  • 一个模块出问题,整个系统不可用
  • 发布一次功能,需要整体重新部署
  • 团队协作成本高

随着系统变大,这些问题会被无限放大。

微服务解决了什么?

微服务通过拆分系统,带来以下优势:

  • 模块解耦,职责清晰
  • 可以单独部署、单独扩容
  • 某个服务挂掉,不影响其他服务
  • 更适合团队并行开发

三、微服务的核心特征

1. 服务拆分

每个微服务围绕单一业务能力构建,例如:

  • 用户服务
  • 订单服务
  • 支付服务
  • 商品服务

一个服务只做一件事。

2. 独立部署

  • 每个服务都是一个独立应用
  • 拥有自己的代码仓库、构建流程、部署流程

发布互不影响。

3. 独立数据管理

  • 每个服务拥有自己的数据库
  • 服务之间不直接共享数据库

通过接口通信,而不是数据库通信。

4. 服务间通信

服务之间通过网络通信,常见方式包括:

  • RESTful API(HTTP + JSON)
  • RPC(如 Dubbo、gRPC)

5. 去中心化治理

微服务更强调:

  • 去中心化
  • 自动化
  • 服务自治

四、微服务架构的典型技术组成

在 Java 体系中,一个完整的微服务架构通常包含:

组件 作用
Spring Boot 构建微服务
Spring Cloud 微服务治理
注册中心 服务注册与发现
配置中心 集中配置管理
负载均衡 请求分发
熔断限流 系统稳定性
链路追踪 请求监控

Spring Boot 是基础,Spring Cloud 是生态。

五、微服务并不适合所有场景

虽然微服务有很多优点,但它也带来了新的复杂性:

  • 服务数量激增
  • 分布式事务复杂
  • 运维成本提升
  • 网络通信不可避免

因此:微服务不是所有系统的最佳选择。

六、什么时候适合微服务?

一般来说,微服务更适合:

  • 业务复杂、持续演进的系统
  • 多团队协作的大型项目
  • 对系统稳定性、扩展性要求高的场景

而对于:

  • 小型项目
  • 业务简单、变化少的系统

单体架构往往更合适。

七、微服务 vs 单体架构

对比项 单体架构 微服务
部署 整体部署 独立部署
扩展 整体扩展 按需扩展
技术选型 统一 可多样
运维 简单 复杂
容错性

八、总结

微服务是一种以业务为中心、强调服务自治和独立部署的软件架构风格。

相关推荐
only_Klein1 小时前
kubernetes-Service
云原生·容器·kubernetes
切糕师学AI2 小时前
成本治理(Cloud Cost Governance)是什么?
云原生·云计算
志栋智能2 小时前
AI驱动的监控系统自动化巡检:从“告警噪音”到“业务洞察”的智能跃迁
运维·人工智能·网络安全·云原生·自动化
不吃鱼的猫7482 小时前
【ffplay 源码解析系列】01-开篇-ffplay整体架构与启动流程
c++·架构·ffmpeg·音视频
匀泪4 小时前
云原生(nginx实验(4))
运维·nginx·云原生
郝学胜-神的一滴5 小时前
当AI遇见架构:Vibe Coding时代的设计模式复兴
开发语言·数据结构·人工智能·算法·设计模式·架构
阿寻寻10 小时前
【云原生技术】API 网关主动探测的通常是“域入口”(srpcgw),不是直接探测后端 Pod,也不是通过 srpcsrv/Consul 来判域健康
网络·云原生·consul
芭拉拉小魔仙10 小时前
企业级Vue项目的状态管理:从原理到实战架构
前端·vue.js·架构
马士兵教育13 小时前
程序员简历如何编写才能凸显出差异化,才能拿到更多面试机会?
开发语言·后端·面试·职场和发展·架构
SailingCoder14 小时前
【 从“打补丁“到“换思路“ 】一次企业级 AI Agent 的架构拐点
大数据·前端·人工智能·面试·架构·agent