> 技术文档 > 【springcloud】快速搭建一套分布式服务springcloudalibaba(六) 完结篇_springcloudalibaba完整项目

【springcloud】快速搭建一套分布式服务springcloudalibaba(六) 完结篇_springcloudalibaba完整项目

【springcloud】快速搭建一套分布式服务springcloudalibaba(六) 完结篇_springcloudalibaba完整项目

第六篇 基于nacos搭建分布式项目 总结
项目所需 maven + nacos + java8 + idea + git + mysql + redis + skywalking + es
本文主要总结springcloud前面五篇的内容,本来楼主还想着一直连更的,更到现在发现分布式基本上就这些了,其余的boot都去整合实现就完了,目前这五篇就很能打了(文章已被官方认可收录)。网关系统/用户系统/商品系统/订单系统

快速搭建一套分布式服务springcloudalibaba(六) 完结篇

  • 快速搭建的架构
  • 本连篇的主要组成
  • 项目结构
    • 代码
    • nacos配置(自带导入)
    • mysql
  • 项目内容
    • (一)基于 Nacos 搭建 SpringCloud 分布式服务基础框架
      • 摘要
      • 理解
    • (二)基于 Nacos 搭建分布式项目网关
      • 摘要
      • 理解
    • (三)基于nacos搭建分布式项目 分布式事务(分布式锁+事务)
      • 摘要
      • 理解
    • (四)分布式系统日志链路追踪(Skywalking)
      • 摘要
      • 理解
    • (五)完善分布式系统日志(Skywalking+ES 详细配置)
      • 摘要
      • 理解

【springcloud】快速搭建一套分布式服务springcloudalibaba(六) 完结篇_springcloudalibaba完整项目

快速搭建的架构

  1. 服务注册与发现(Service Registry)
    常用组件:Netflix Eureka、Consul、Nacos
    作用:服务自动注册与发现,无需硬编码服务调用地址
  2. 服务网关(API Gateway)
    常用组件:Spring Cloud Gateway、Netflix Zuul
    作用:统一入口,路由分发,权限校验
  3. 负载均衡(Load Balancer)
    常用组件:Ribbon、Spring Cloud LoadBalancer
    作用:客户端负载均衡,提高系统可用性
  4. 熔断器(Circuit Breaker)
    常用组件:Resilience4j、Netflix Hystrix
    作用:服务降级与熔断,防止级联故障
  5. 配置中心(Config Server)
    常用组件:Spring Cloud Config、Nacos
    作用:集中化配置管理,动态刷新
  6. 服务调用(Service Invocation)
    常用组件:OpenFeign、RestTemplate
    作用:简化服务间调用

本连篇的主要组成

  1. 服务注册与发现 nacos (管理实例注册/发现与健康检查) 让服务节点自动发现彼此,动态维护服务列表,避免硬编码 IP 地址。
  2. 分布式通信(openfeign+loadbalancer)用于保证实例间的通讯
  3. 统一网关Spring Cloud Gateway 安全机制 自带熔断保护 业务校验JWTToken是否有效
  4. 分布式事务与分布式锁 用于保证数据最终一致性要求 确保多节点对共享资源的互斥访问(如库存扣减场景)
  5. nacos 配置中心 统一管理分布式系统的配置,支持动态更新
  6. 链路追踪 skywalking 通过 Java Agent 动态注入追踪代码,实现对应用性能数据的收集与分布式日志链路追踪

项目结构

代码

git clone git@gitee.com:goodluckv/ali-cloud-common.gitgit clone git@gitee.com:goodluckv/ali-cloud-gateway.gitgit clone git@gitee.com:goodluckv/ali-cloud-user.gitgit clone git@gitee.com:goodluckv/ali-cloud-goods.gitgit clone git@gitee.com:goodluckv/ali-cloud-order.git

nacos配置(自带导入)

【springcloud】快速搭建一套分布式服务springcloudalibaba(六) 完结篇_springcloudalibaba完整项目

链接: https://pan.baidu.com/s/1WZ62pX6Lds_VvkYMVY_ebg 提取码: j6h2

mysql

【springcloud】快速搭建一套分布式服务springcloudalibaba(六) 完结篇_springcloudalibaba完整项目

# user-- auto-generated definitioncreate table user_account( id  bigint auto_increment primary key, user_name varchar(64) null comment \'用户名\', pass_word varchar(128)  null comment \'用户密码\', phone_no varchar(32) default \'\' not null comment \'手机号\', real_name varchar(128)  null comment \'用户名字\', id_number varchar(128)  null comment \'证件号码\', email varchar(128)  null comment \'用户邮箱\', remarks varchar(360)  null comment \'备注\', create_time datetime  null comment \'创建时间\', update_time datetime  null comment \'修改时间\', is_del tinyint default 0 null comment \'是否删除 1为已删除\', creator_id bigint  null comment \'创建人id\', creator_name varchar(32) null comment \'创建人名称\', updater_id bigint  null comment \'修改人id\', updater_name varchar(32) null comment \'修改人名称\', version int default 0 null comment \'乐观锁标记\') comment \'用户信息\' engine = InnoDB  auto_increment = 2;# order-- auto-generated definitioncreate table order_info( id  bigint auto_increment comment \'订单ID\' primary key, order_no varchar(64) not null comment \'订单编号\', user_id bigint not null comment \'用户ID\', product_id bigint not null comment \'商品ID\', product_name varchar(128) not null comment \'商品名称\', quantity int not null comment \'购买数量\', unit_price decimal(10, 2)  not null comment \'单价\', total_amount decimal(10, 2)  not null comment \'总金额\', order_status tinyint default 0  not null comment \'订单状态:0-待支付,1-已支付,2-已发货,3-已完成,4-已取消\', pay_time datetime null comment \'支付时间\', create_time datetime default CURRENT_TIMESTAMP not null comment \'创建时间\', update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment \'更新时间\', constraint uk_order_no unique (order_no)) comment \'订单表\' engine = InnoDB  auto_increment = 2;create index idx_product_id on order_info (product_id);create index idx_user_id on order_info (user_id);# goods-- auto-generated definitioncreate table product_stock( id bigint auto_increment comment \'主键ID\' primary key, product_id bigint not null comment \'商品ID\', stock int default 0  not null comment \'库存数量\', pre_stock int default 0  not null comment \'预占库存数量\', version int default 0  not null comment \'版本号,用于乐观锁\', create_time datetime default CURRENT_TIMESTAMP not null comment \'创建时间\', update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment \'更新时间\', constraint uk_product_id unique (product_id)) comment \'商品库存表\' engine = InnoDB  auto_increment = 2;-- auto-generated definitioncreate table frozen_inventory( id bigint auto_increment primary key, xid varchar(128) not null comment \'全局事务ID\', product_id bigint not null comment \'商品id\', freeze_qty int not null comment \'冻结数量\', status tinyint default 0  not null comment \'状态:0-TRY,1-CONFIRM,2-CANCEL\', create_time datetime default CURRENT_TIMESTAMP not null, update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP, constraint uk_xid_product unique (xid, product_id)) comment \'库存冻结记录表\' engine = InnoDB;create index idx_product_id on frozen_inventory (product_id);

项目内容

(一)基于 Nacos 搭建 SpringCloud 分布式服务基础框架

基于nacos搭建一套springcloud分布式服务

摘要

本文基于 Nacos 搭建 SpringCloud 分布式服务,首先明确项目所需环境,包括 maven、nacos、java8 等。接着介绍项目结构,涵盖 commonUtil 服务、用户服务和商品服务等。详细阐述了 Nacos 的下载、解压与配置过程,以及如何创建和启动各服务项目。同时,针对启动过程中可能出现的如配置占位符报错、URL 冲突、循环依赖等问题,给出了具体的解决办法。最后通过用户服务和商品服务的交互调试,展示了服务间的调用流程。

理解

Nacos 的核心作用:Nacos 作为服务注册与配置中心,实现了服务的自动发现与动态配置,降低了服务间的耦合度,使得服务的部署和扩展更加便捷。
项目结构设计:采用模块化设计,将通用功能封装在 commonUtil 服务中,用户服务和商品服务各司其职,这种设计有利于代码的复用和维护。
问题解决思路:在项目搭建过程中遇到的各种问题,本质上是分布式系统中常见的兼容性和配置问题,解决这些问题的过程体现了分布式系统调试的重要性。

(二)基于 Nacos 搭建分布式项目网关

基于nacos搭建分布式项目 网关

摘要

说明了分布式系统中网关的重要性,包括统一入口、路由负载均衡、安全认证等功能。然后介绍了项目结构,创建了网关项目并配置相关依赖。详细解析了路由参数,包括路由配置、全局配置、跨域配置等。通过示例展示了过滤器的使用,如熔断、限流、用户认证等。最后介绍了灰度发布与流量控制的实现方式,包括基于路径、Header 和权重的流量分发。

理解

网关的地位:网关作为系统的统一入口,承担了流量控制、安全防护等重要职责,其配置的合理性直接影响整个系统的性能和安全性。
熔断与限流的必要性:在分布式系统中,服务间的调用可能会出现故障或流量高峰,熔断和限流机制能够有效防止级联故障,保证系统的稳定性。
灰度发布:灰度发布允许新功能逐步推向用户,降低了新功能发布的风险,同时也为用户体验的优化提供了灵活的方式。

(三)基于nacos搭建分布式项目 分布式事务(分布式锁+事务)

基于nacos搭建分布式项目 分布式事务(分布式锁+事务)

摘要

本文主要讲解分布式事务和分布式锁的实现。首先介绍了何时需要分布式锁以及不同的实现方式,如基于数据库和 Redis+Lua 脚本的实现。然后详细阐述了分布式事务的各种模式,包括 2PC、AT、TCC、SAGA、XA 和本地消息表模式,并对比了它们的一致性、性能和适用场景。最后以 TCC 模式为例,展示了库存系统的乐观锁实现和订单系统的调用流程。

理解

分布式锁的核心作用:分布式锁用于解决分布式系统中的并发问题,确保在分布式环境下对共享资源的访问具有唯一性。
分布式事务模式的选择:不同的分布式事务模式各有优缺点,选择合适的模式需要根据业务场景的一致性要求、性能需求等因素综合考虑。
TCC 模式的灵活性:TCC 模式通过手动编写补偿逻辑,能够更好地适应复杂的业务场景,但也增加了开发的复杂度。

(四)分布式系统日志链路追踪(Skywalking)

基于nacos搭建分布式项目 分布式系统日志(skywalking+es)

摘要

文章针对分布式部署后日志排查困难的问题,介绍了 Skywalking 的使用。首先阐述了使用 Skywalking 的原因,它是一款开源的应用性能监控和分布式追踪系统。然后详细介绍了 Skywalking 的安装部署步骤,包括下载、配置和启动。接着展示了启动成功后的页面和部署后的拓扑图等。最后介绍了如何将 Skywalking 与 ES 集成,实现日志的存储和查询。

理解

日志追踪的重要性:在分布式系统中,日志是排查问题的重要依据,Skywalking 能够将分散在各个服务的日志串联起来,大大提高了问题排查的效率。
Skywalking 的工作原理:通过 Java Agent 动态注入追踪代码,实现对应用性能数据的收集,这种无侵入式的方式降低了对应用的改造成本。

(五)完善分布式系统日志(Skywalking+ES 详细配置)

基于nacos搭建分布式项目 分布式系统日志(skywalking+es)

摘要

本文是对第四篇的补充,主要介绍如何将 Skywalking 的存储配置改为 ES。首先介绍了 ES 和 Kibana 的安装与配置,包括版本选择和配置文件修改。然后详细阐述了 Skywalking 配置更改 ES 存储的步骤,包括关闭旧服务、修改配置文件、启动新服务等。接着介绍了如何校验 Skywalking 与 ES 的连接,以及查看日志是否存储到 ES 和 Skywalking 页面是否正常。

理解

存储方式选择的影响:将 Skywalking 的存储从默认的 H2 改为 ES,能够提高日志的存储和查询性能,更好地适应大规模分布式系统的需求。
版本兼容性问题:在分布式系统的组件集成过程中,版本兼容性是一个需要重点关注的问题,选择合适的版本能够避免很多不必要的麻烦。
配置验证的必要性:配置修改完成后,通过一系列的验证步骤确保配置的正确性,这是保证系统正常运行的重要环节。

小结
楼主本来以为分布式项目可以写很多篇文章一起进步的,目前看基本的架构这五篇就差不多了,之后再看看其他的感兴趣的研究研究。