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

Java学习第七十部分——微服务架构

目录

一、前言提要

二、核心优势

三、核心技术栈

四、构建步骤

五、困难挑战

六、总结归纳


一、前言提要

       Java 微服务架构是一种使用 Java 技术栈构建分布式系统的方法论,它将单一的大型应用程序分解为一组小型、独立、松耦合、可独立部署和扩展的服务。每个服务专注于一个特定的业务能力,并通过轻量级通信机制(通常是 HTTP/REST 或异步消息)进行交互。

二、核心优势

1. 服务独立

  • 独立开发: 不同团队可以独立开发、测试和部署各自的服务。

  • 独立部署: 修改一个服务无需重新部署整个应用,加速交付。

  • 独立扩展: 可以根据每个服务的负载单独进行水平扩展。

  • 独立技术栈: 理论上,每个服务可以选择最适合其需求的技术栈(语言、数据库)。但在 Java 微服务生态中,通常保持 Java/Kotlin/Scala 为主,以利用成熟的库和工具链。

2. 围绕业务能力组织: 服务边界根据业务领域(如订单管理、用户认证、库存服务)而非技术层级(如 UI 层、数据库层)来划分。
3. 去中心化治理: 鼓励团队拥有服务的全生命周期(“You build it, you run it”),可以选择最适合的服务工具(如数据库)。
4. 轻量级通信:

  • 同步: HTTP/REST API (最常见)、gRPC (高性能 RPC)。

  • 异步: 消息队列 (Kafka, RabbitMQ, ActiveMQ, Pulsar) 实现事件驱动架构,提高解耦性和弹性。

5. 自动化基础设施: 高度依赖 CI/CD 流水线、容器化 (Docker) 和容器编排 (Kubernetes) 来管理大量服务的构建、测试、部署和运维复杂性。
6. 容错设计: 单个服务故障不应导致整个系统崩溃。需采用熔断器 (Circuit Breaker)、超时、重试、舱壁隔离 (Bulkhead) 等模式。
7. 可观察性: 分布式追踪、集中式日志、指标监控是必备能力,用于诊断跨服务的问题。

三、核心技术栈

1. 基础框架

  • Spring Boot:绝对主流。 通过自动配置和约定优于配置,极大地简化了独立、生产级 Spring 应用的创建。是构建 Java 微服务的基石。

  • Micronaut: 编译时依赖注入和 AOP,启动超快,内存占用低,特别适合 Serverless 和资源受限环境。

  • Quarkus: 面向 Kubernetes 和云原生优化的框架,结合 GraalVM 实现亚秒级启动和极低内存占用 (Supersonic, Subatomic)。

  • Helidon: Oracle 推出的轻量级框架,提供 SE 和 MP 两种编程模型。

  • Dropwizard: 更偏向于构建 RESTful Web 服务的轻量级框架,集成度不如 Spring Boot 高。

2. 服务发现与注册: (解决“服务在哪”的问题)

  • Netflix Eureka (Spring Cloud Netflix): 经典选择,AP 系统。

  • Consul: 功能强大(服务发现、健康检查、KV 存储、配置中心),CP 或 AP 模式可选。

  • Zookeeper: 更成熟的 CP 系统,常用于协调服务(如 Kafka 依赖它),也可用于服务发现。

  • Nacos: 阿里巴巴开源,集服务发现、配置管理、动态 DNS 于一身,在国内非常流行。

3. API 网关: (系统的唯一入口点)

  • Spring Cloud Gateway: 基于 Spring WebFlux 的响应式 API 网关,功能丰富且易于扩展。

  • Netflix Zuul (Spring Cloud Netflix): 较老的网关,逐渐被 Spring Cloud Gateway 取代。

  • Kong: 基于 Nginx/OpenResty 的高性能、可扩展网关,功能强大。

  • Apigee, AWS API Gateway, Azure API Management: 商业云服务。

4. 配置中心: (集中管理外部化配置)

  • Spring Cloud Config Server: 与 Spring Boot 无缝集成,支持 Git、SVN、本地文件等后端。

  • Consul: 提供 Key/Value 存储功能,可用于配置管理。

  • Nacos: 同样提供强大的配置管理功能。

  • Apache ZooKeeper: 可用于存储配置。

  • HashiCorp Vault: 更专注于安全地存储和管理敏感信息(密码、证书、API Keys)。

5. 客户端负载均衡

  • Spring Cloud LoadBalancer: Spring Cloud 新一代客户端负载均衡器。

  • Netflix Ribbon (Spring Cloud Netflix): 经典客户端负载均衡器,已进入维护模式。

6. 熔断器与容错

  • Resilience4j: 轻量级、功能丰富的容错库,专为 Java 8+ 和函数式编程设计。Spring Cloud Circuit Breaker 的默认实现之一。

  • Netflix Hystrix (Spring Cloud Netflix): 广泛使用但已停止开发新功能,进入维护模式。Spring Cloud 官方推荐迁移到 Resilience4j 或 Sentinel。

  • Sentinel: 阿里巴巴开源的流量控制、熔断降级、系统负载保护的库。

7. 分布式追踪 (跟踪请求在微服务间的流转)

  • OpenTelemetry (OTel):当前标准。 是 OpenTracing 和 OpenCensus 的合并,提供统一的 API、SDK 和导出器规范,支持导出到 Jaeger、Zipkin 等后端。

  • Jaeger: CNCF 毕业项目,流行的分布式追踪系统后端。

  • Zipkin: 较早的开源分布式追踪系统。

  • Spring Cloud Sleuth: 简化在 Spring Boot 应用中集成分布式追踪(如 Zipkin, OTel)的工作。

8. 消息中间件 (异步通信/事件驱动)

  • Apache Kafka: 高吞吐、分布式流平台,常用于事件源、日志聚合、实时流处理。

  • RabbitMQ: 成熟、稳定、功能丰富的 AMQP 协议实现的消息代理。

  • Apache Pulsar: 新兴的云原生消息和流平台,结合了 Kafka 和 RabbitMQ 的优点。

  • Apache ActiveMQ / Artemis: 经典 JMS 实现。

  • Spring Cloud Stream: 简化在 Spring Boot 应用中构建消息驱动微服务,提供与不同消息中间件的统一抽象。

9. 容器化与编排

  • Docker: 容器运行时标准。

  • Kubernetes (K8s):容器编排的事实标准。 提供服务发现、负载均衡、自动扩缩容、滚动更新、自愈等能力,是管理大规模微服务集群的理想平台。

  • OpenShift: 基于 Kubernetes 的企业级容器平台。

10. 数据库

  • 每个服务拥有自己的数据库: 核心原则,确保数据隔离和解耦。数据库类型根据服务需求选择:

  • 关系型: PostgreSQL, MySQL/MariaDB, Oracle, SQL Server (使用 Spring Data JPA / MyBatis)。

  • NoSQL: MongoDB (文档), Cassandra / ScyllaDB (宽列), Redis (键值/缓存), Elasticsearch (搜索/分析), Neo4j (图)。

  • 模式: 共享数据库是反模式,应避免。常用模式有 Database per Service, Schema per Service。

四、构建步骤

1. 识别和定义服务边界: 使用领域驱动设计 (DDD) 中的限界上下文 (Bounded Context) 来划分服务。
2. 选择技术栈: 选择合适的框架 (Spring Boot, Micronaut, Quarkus) 和其他组件 (数据库、消息中间件等)。
3. 搭建基础服务:

  • 创建独立的 Spring Boot (或其他框架) 项目。

  • 实现服务功能 (业务逻辑)。

  • 定义 REST API 或消息接口。

  • 配置其专属数据源。

4. 实现服务间通信: 使用 REST API 调用 (Feign, RestTemplate, WebClient) 或消息队列。
5. 集成核心基础设施组件:

  • 将服务注册到服务发现中心 (Eureka, Consul, Nacos)。

  • 配置 API 网关路由规则。

  • 使用配置中心管理配置。

  • 集成熔断器 (Resilience4j)。

  • 集成分布式追踪 (Spring Cloud Sleuth + OTel)。

6. 容器化: 为每个服务创建 Docker 镜像。
7. 部署到编排平台: 使用 Kubernetes (或类似平台) 定义部署 (Deployment)、服务 (Service)、配置 (ConfigMap/Secret)、入口 (Ingress) 等资源描述文件 (YAML),部署和管理服务。
8. 建立 CI/CD 流水线: 自动化构建、测试、容器镜像打包、部署到不同环境。
9. 实现监控和告警: 集成 Prometheus (指标收集) + Grafana (可视化) + ELK/EFK (日志) + Jaeger/Zipkin (追踪) 等。

五、困难挑战

  • 分布式系统复杂性: 网络延迟、故障、数据一致性、事务管理 (Saga 模式)、测试难度陡增。

  • 运维复杂度: 需要管理大量服务、容器和基础设施,对自动化、监控、日志要求极高。

  • 最终一致性: 跨服务的数据强一致性难以保证,需要接受最终一致性模型。

  • 调试困难: 问题可能涉及多个服务,需要强大的分布式追踪和日志聚合。

  • 网络开销与性能: 服务间通信带来额外的网络开销和延迟。

  • 服务划分不当: 服务边界模糊会导致紧耦合,失去微服务的优势。

  • 团队协作与文化: 需要 DevOps 文化和跨职能团队协作。

六、总结归纳

  • Java 微服务架构通过将单体应用分解为独立的服务,提供了卓越的可扩展性、敏捷性、弹性和技术灵活性。

  • Spring Boot 及其生态系统 (Spring Cloud) 为构建 Java 微服务提供了强大且成熟的支持。当然,它也具有分布式系统的固有复杂性。

  • 成功实施微服务架构不仅需要选择正确的技术栈,更需要合理的服务设计、强大的自动化运维、完善的监控预警以及匹配的组织结构和 DevOps 实践。Kubernetes 已成为管理和编排 Java 微服务事实上的标准平台。

http://www.dtcms.com/a/295787.html

相关文章:

  • JavaWeb_原始项目初识(一)
  • ubuntu25.04+4070+cuda+docker安装
  • 进程通信————命名管道
  • Python-初学openCV——图像预处理(二)
  • 怎么样知道服务端是否支持sse服务?
  • 在 Ubuntu 20.04 上轻松安装和使用中文输入法
  • ZooKeeper 是什么?
  • day20 双向链表
  • 基于CloudBase+React+CodeBudddy的云上智能睡眠应用开发实践
  • 网易大模型算法面经总结第一篇
  • uni-app小程序云效持续集成
  • C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(三)
  • MYSQL中NOT IN和NOT EXISTS
  • vscode 的 settings.json
  • Go语言管道Channel通信教程
  • Lua(table)
  • 数据库集群环境漏洞修复
  • Vue-23-通过flask接口提供的数据使用plotly.js绘图(二)
  • Python爬虫实战:与dominoup.com平台结合的域名数据分析系统
  • 【数据可视化-72】苏超第七轮战罢:黑金大屏下的足球数据洞察(含完整代码、数据和大屏)
  • Windows 如何更改 ModelScope 的模型下载缓存位置?
  • 低功耗设计双目协同画面实现光学变焦内带AI模型
  • 几个常用的Oxygen编辑器插件
  • Python进阶第三方库之Matplotlib
  • Jenkins最新版本的安装以及集成Allure生成测试报告
  • “适应度”简介
  • 【牛客刷题】和零在一起
  • SQL基础⑫ | 视图篇
  • 学习设计模式《十九》——享元模式
  • ​Excel——SUMPRODUCT 函数