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

微服务概述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.xdnf.cn/news/18657.html

相关文章:

  • 【K8s】微服务
  • Claude Code快捷键介绍(Claude Code命令、Claude Code指令、Claude Code /命令、Claude命令、Claude指令)
  • P9246 [蓝桥杯 2023 省 B] 砍树
  • 学习嵌入式第三十六天
  • JAVA国际版东郊到家同城按摩服务美容美发私教到店服务系统源码支持Android+IOS+H5
  • PCB电路设计学习3 电路原理图设计 元件PCB封装设计与添加
  • Day12 数据统计-Excel报表
  • 数据结构——树状数组(Binary Indexed Tree)
  • UE5多人MOBA+GAS 53、测试专属服务器打包和连接,以及配置EOS
  • WiFi有网络但是电脑连不上网是怎么回事?该怎么解决?
  • 云原生高级——K8S总概
  • OpenHands:开源AI软件开发代理平台的革命性突破
  • 2025最新版mgg格式转MP3,mflac转mp3,mgg格式如何转mp3?
  • setup 语法糖核心要点
  • Windows应急响应一般思路(一)
  • MySQL 高级主题:索引优化、ORM 与数据库迁移
  • More Effective C++ 条款02:最好使用C++转型操作符
  • 【0基础PS】蒙版与剪贴蒙版详解
  • NoCode-bench:自然语言驱动功能添加的评估新基准
  • 3.4 缩略词抽取
  • 表格识别技术:通过图像处理与深度学习,将非结构化表格转化为可编辑结构化数据,推动智能化发展
  • Vue Teleport 原理解析与React Portal、 Fragment 组件
  • GEO优化专家孟庆涛发布:《GEO内容优化的四大黄金标准》
  • 普中烧录软件 PZISP,打不开,提示“应用程序无法启动,因为应用程序并行配置不正确.....”
  • 学习嵌入式第三十五天
  • Linux应用软件编程---网络编程1(目的、网络协议、网络配置、UDP编程流程)
  • APP Usage『安卓』:比系统自带强10倍!手机应用使用时长精确到秒
  • MySQL - 视图,事务和索引
  • java8 findAny()、findFirst()空指针NullPointerException问题
  • ​维基框架 (Wiki Framework) 1.1.0 版本发布​ 提供多模型AI辅助开发