-
服务注册与发现: Nacos / Eureka
-
配置中心: Nacos / Spring Cloud Config
-
API网关: Spring Cloud Gateway
-
远程调用: OpenFeign
-
负载均衡: Spring Cloud LoadBalancer
-
容错熔断: Resilience4j / Sentinel
-
数据持久化: Spring Data JPA (如您所见) / MyBatis-Plus
-
数据库: MySQL / PostgreSQL
-
权限控制: Spring Security + JWT / OAuth 2.0
-
消息队列: RabbitMQ / Kafka (用于模块间异步通信)
-
缓存: Redis
-
监控: Spring Boot Actuator + Micrometer + Prometheus + Grafana
核心比喻:将微服务系统比作一个 “购物中心”
一个个独立的店铺(如服装店、餐厅、电影院) = 一个个微服务(user-service, order-service)
顾客 = 外部用户或客户端
1. 服务注册与发现 (Nacos / Eureka) - “商场导览图”
作用:解决“服务在哪里?”的问题。
详解:在分布式系统中,服务实例的网络地址(IP和端口)是动态变化的(例如,一个服务可以启动多个实例来做负载均衡)。服务注册中心就像一个动态的通讯录。
服务注册:每个微服务启动时,都向注册中心“报到”,登记自己的地址信息。
服务发现:当一个服务(如order-service)需要调用另一个服务(如user-service)时,它就去注册中心查询user-service所有可用实例的地址列表,然后再发起调用。
常用产品:Nacos (阿里开源,功能强大)、Eureka (Netflix开源)
2. 配置中心 (Nacos / Spring Cloud Config) - “中央布告栏”
作用:解决“配置如何集中管理?”的问题。
详解:传统的配置文件(如application.yml)打在jar包里,修改配置需要重新打包部署,非常麻烦。配置中心将所有服务的配置(如数据库连接、第三方API密钥、功能开关)集中存储在一个地方(通常是Git仓库)。
微服务启动时,会从配置中心拉取自己的配置。
运行时,如果配置中心的配置发生变化,可以动态推送给微服务,无需重启服务。
常用产品:Nacos (同时具备注册中心和配置中心功能)、Spring Cloud Config (需配合Git等使用)
3. API网关 (Spring Cloud Gateway) - “商场总服务台/大门”
作用:解决“外部请求如何接入?”的问题,是所有流量入口的统一大门。
详解:外部客户端(如手机APP、浏览器)不需要知道内部有多少个微服务。它只需要访问网关的一个地址,由网关负责将请求路由到内部正确的微服务上。它还负责:
身份认证与授权:统一校验用户身份和权限(集成Spring Security + JWT)。
流量控制与限流:防止恶意请求冲垮后台服务。
日志记录:记录所有访问日志。
跨域处理:统一解决跨域问题。
4. 远程调用 (OpenFeign) - “内部对讲机”
作用:解决“服务之间如何优雅地互相调用?”的问题。
详解:它让服务间的HTTP调用像调用本地方法一样简单。开发者只需要定义一个Java接口并用注解声明要调用的远程服务名和API路径,OpenFeign就会自动生成实现,处理一切HTTP通信的细节(序列化、发请求、反序列化)。
5. 负载均衡 (Spring Cloud LoadBalancer) - “店员调度员”
作用:解决“请求应该发给多个相同服务实例中的哪一个?”的问题。
详解:当一个服务有多个实例时(例如user-service部署了3台服务器),负载均衡器会根据某种规则(如轮询、随机、根据响应时间加权)将请求平均地分发到各个实例上,从而避免单个实例压力过大,提高系统整体处理能力。OpenFeign默认就集成了负载均衡功能。
6. 容错熔断 (Resilience4j / Sentinel) - “电路保险丝”
作用:解决“某个服务故障了,如何防止故障蔓延导致系统雪崩?”的问题。
详解:在分布式系统中,服务之间依赖复杂,一个服务故障或响应过慢,可能导致调用它的线程全部被阻塞,最终耗尽资源,拖垮整个系统。熔断器就像电路中的保险丝:
关闭:正常状态,请求畅通无阻。
打开:当失败率达到阈值,熔断器“跳闸”,后续所有请求立即失败,不再调用故障服务,给故障服务恢复的时间。
半开:熔断一段时间后,尝试放一个请求过去,如果成功了就关闭熔断器,恢复调用。
7. 消息队列 (RabbitMQ / Kafka) - “内部物流配送中心”
作用:解决“服务间如何实现异步通信和解耦?”的问题。
详解:服务A不需要直接调用服务B,而是把一条“消息”(一个任务或事件)发送到消息队列中就可以返回了。服务B根据自己的处理能力,从队列中取出消息进行消费。
优点:异步(提高响应速度)、解耦(服务之间不直接依赖)、削峰填谷(应对突发流量,防止系统被冲垮)。
8. 缓存 (Redis) - “临时储物柜”
作用:解决“如何降低数据库压力、提高读取速度?”的问题。
详解:将频繁读取但很少修改的数据(如用户信息、商品目录、热点新闻)存放在内存数据库Redis中。后续请求可以直接从极快的内存中获取数据,大大减少对慢速磁盘数据库(如MySQL)的访问,显著提升系统性能。
9. 监控 (Actuator + Micrometer + Prometheus + Grafana) - “商场监控室和数据大屏”
作用:解决“系统运行状态是否健康?性能指标如何?”的问题。
详解:
Actuator:为Spring Boot应用提供生产级的监控端点(endpoints),可以暴露健康状态、指标信息(如CPU、内存使用率、HTTP请求计数)。
Micrometer:一个监控指标的度量库,相当于Java版的SLF4J。它提供统一接口,让应用代码可以方便地记录各种指标,并支持输出到多种监控系统(如Prometheus)。
Prometheus:一个开源的系统监控和警报工具包。它会定时抓取(pull)各个微服务暴露的指标数据,并存储在自己的时间序列数据库中。
Grafana:一个强大的数据可视化平台。它从Prometheus等数据源读取数据,生成漂亮的图表和仪表盘,让运维和开发人员可以直观地观察系统状态。

168万+

被折叠的 条评论
为什么被折叠?



