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

微服务概述1

一、微服务架构核心概念

1. 微服务 vs 单体应用

特性单体应用微服务
部署一个包、一次部署多个独立服务,可独立部署
模块耦合高耦合低耦合
技术栈单一可多样化
扩展整体扩展服务级别扩展
容错整体宕机单个服务宕机,不影响全局
数据管理共享数据库每个服务独立数据库

2. 微服务特点

  • 独立性:每个服务独立运行和部署。
  • 自治性:服务自己管理数据和业务逻辑。
  • 弹性伸缩:可根据负载独立扩容。
  • 可观测性:日志、监控和链路追踪清晰。
  • 服务间通信:一般通过 REST、gRPC、消息队列。

二、Java 微服务技术栈(深度解析)

1. 核心开发框架

  • Spring Boot:快速搭建独立服务,内置 Tomcat。

  • Spring Cloud:提供微服务常用组件:

    • Eureka:服务注册与发现
    • Ribbon:客户端负载均衡
    • Feign:声明式 REST 调用
    • Gateway / Zuul:API 网关
    • Config:配置中心
    • Hystrix / Resilience4j:熔断、降级

2. 数据与持久化

  • 每个微服务拥有自己的数据库,避免服务间耦合。

  • 使用 Spring Data JPA / MyBatis 简化 ORM 操作。

  • 分布式事务解决方案:

    • Saga 模式:基于事件的异步事务
    • TCC(Try-Confirm-Cancel):显式三步事务

3. 消息与异步通信

  • 消息队列(MQ)用于异步解耦:

    • RabbitMQ / Kafka / RocketMQ
  • 常用于:

    • 事件驱动架构(EDA)
    • 异步处理(订单支付、库存更新)

4. 配置与治理

  • 配置中心:Spring Cloud Config、Nacos

  • 服务治理

    • 动态注册和发现
    • 健康检查(Health Check)
    • 负载均衡(Ribbon / Gateway)
    • 熔断器与限流(Resilience4j)

5. 容器化与运维

  • Docker:打包微服务镜像

  • Kubernetes:编排和自动伸缩

  • CI/CD:Jenkins/GitHub Actions/GitLab CI 实现自动部署

  • 监控与日志

    • ELK(Elasticsearch + Logstash + Kibana)
    • Prometheus + Grafana
    • 链路追踪:Sleuth + Zipkin 或 SkyWalking

三、微服务设计原则

  1. 单一职责:每个服务只做一件事。

  2. 去中心化:服务自治、数据独立。

  3. 轻量通信:REST/gRPC/消息队列,尽量避免重型 RPC。

  4. 容错与弹性

    • 熔断、限流、防雪崩
    • 重试机制
  5. 可观测性

    • 集中日志
    • 指标监控
    • 分布式链路追踪

四、Java微服务典型架构

           +--------------------+|    API Gateway     |+--------------------+|+---------------+----------------+|               |                |
+------+       +--------+        +------+
| User |       | Order  |        |Payment|
+------+       +--------+        +------+|               |                |v               v                vUser DB        Order DB          Payment DB

1. API 网关

  • 统一入口,负责路由、鉴权、限流。
  • 技术:Spring Cloud Gateway / Zuul

2. 服务注册与发现

  • 服务启动注册到 Eureka/Consul。
  • 服务调用通过服务名解析实际地址。

3. 服务调用

  • 同步调用:REST + Feign + Ribbon
  • 异步调用:消息队列 Kafka / RabbitMQ

五、典型代码示例(Spring Boot + Spring Cloud)

1. 服务注册中心(Eureka Server)

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

2. 服务提供者(User Service)

@SpringBootApplication
@EnableEurekaClient
@RestController
public class UserServiceApplication {public static void main(String[] args) {SpringApplication.run(UserServiceApplication.class, args);}@GetMapping("/user/{id}")public String getUser(@PathVariable String id) {return "User-" + id;}
}

3. 服务消费者(Order Service 调用 User Service)

@FeignClient("user-service")
public interface UserClient {@GetMapping("/user/{id}")String getUser(@PathVariable("id") String id);
}@RestController
public class OrderController {@Autowiredprivate UserClient userClient;@GetMapping("/order/{id}")public String getOrder(@PathVariable String id) {return "Order-" + id + ", " + userClient.getUser("1");}
}

六、微服务实践注意事项

  1. 服务拆分策略

    • 按业务领域拆分(DDD)
    • 避免过度拆分(导致分布式复杂性高)
  2. 容错设计

    • 使用 Resilience4j 或 Spring Retry 实现熔断和重试
    • 降级策略
  3. 分布式事务

    • Saga 或 TCC,避免跨服务锁
  4. 监控和追踪

    • 集中日志 + 分布式链路追踪
  5. 安全性

    • OAuth2 / JWT 认证
    • 网关统一鉴权
http://www.dtcms.com/a/346599.html

相关文章:

  • Elasticsearch Ruby 客户端 Bulk Scroll Helpers 实战指南
  • 【Redis 进阶】----主从复制(重点理解流程和原理)
  • 【Tech Arch】Apache Flume海量日志采集的高速公路
  • 如何在 Spring Boot 中安全读取账号密码等
  • SpringBoot3整合dubbo3客户端【最佳实践】
  • 【204页PPT】某著名企业信息化规划方案(附下载方式)
  • 沟通效率提升 - 智能写作与邮件处理
  • 集成电路学习:什么是CNN卷积神经网络
  • 浏览器解析网址的过程
  • MiniOB环境部署开发(使用开源学堂)
  • 【小沐学GIS】基于C++绘制三维数字地球Earth(OpenGL、三维瓦片地球)第九期
  • 达梦数据库巡检常用SQL(二)
  • Flutter BLoC 全面入门与实战(含代码示例)
  • C#--- 锁总结
  • 在SAP Query中添加双击事件
  • 【CSP初赛】程序阅读3
  • 通过官方文档详解Ultralytics YOLO 开源工程-熟练使用 YOLO11实现分割、分类、旋转框检测和姿势估计(附测试代码)
  • 54 C++ 现代C++编程艺术3-移动构造函数
  • 园区节能减碳大屏可视化设计指南
  • SpringBoot 快速上手:从环境搭建到 HelloWorld 实战
  • frp+go-mmproxy 实现透明代理的内网穿透
  • Vue3 学习教程,从入门到精通,基于 Vue 3 + Element Plus + ECharts + JavaScript的51购商城项目(45)
  • Intel RealSense D435 深度相机详解
  • 小程序备案话术
  • 文献阅读笔记【物理信息神经网络】:Physics-informed neural networks: A deep learning framework...
  • Kubernetes网络服务全解析
  • 【领码方案】PageData 完整解决方案 · 自引用树全链路提速(1.1版 集成层次树)
  • chapter05_从spring.xml读取Bean
  • 网络编程-基本概念及UDP
  • [Vid-LLM] 功能分类体系 | 视频如何被“观看“ | LLM的主要作用