# microservices **Repository Path**: lgj9527/microservices ## Basic Information - **Project Name**: microservices - **Description**: 微服务项目,完善中。。。。。。。。。。。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: https://gitee.com/lgj9527 - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-22 - **Last Updated**: 2025-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 1.项目架构 ![项目架构](docs/image/项目架构.png) ## 2.项目结构 ```gitexclude microservices ├── nacos-server nacos选址服务 ├── auth-server 统一授权服务 ├── gateway-server 网关服务 ├── base-server 后台管理服务 ├── payment-center 支付中心 ├── common 全局公用包 ├── third-party-common 第三方依赖包工具 └── feign-common fegin调用自定义 └── log-common 日志依赖工具 └── oauth-common oauth2.0资源服务中间件封装 └── redis-common redission中间件封装 └── rocketmq-common rocketmq中间件封装 └── tool-common 接入第三方依赖工具,如短信 ``` ## 3.技术选型 | 技术 | 版本 | 说明 | |-------------|---------------|----------------| | SpringBoot | 2.6.8 | Web应用开发框架 | | SpringCould | 2021.0.3 | Web应用开发框架 | | mybatis | 1.3.2 | ORM框架,数据持久操作 | | nacos | 2.0.0 | 服务注册,服务发现,配置中心 | | gateway | 2.6.8 | 网关服务 | | oauth2.0 | 2.2.4.RELEASE | 统一认证和授权框架 | | RocketMQ | 5.0.0 | 消息队列,异步解耦,分布式事务 | | redis | 2.6.8 | 内存数据存储,分布式锁 | | skywalking | 8.13.0 | 服务监控,链路日志 | | elfk | 8.0.0 | 日志收集管理 | ## 4.技术实现 ### 4.1 Nacos寻址服务 对于服务注册,配置中心选择了nacos,主要考虑的是nacos同时支持服务注册和配置,像Eureka作为注册中心话还得单独搭建维护一个配置中心,对于服务 来说的话,服务的可用性至关重要,所以如果使用zookeeper作为注册中心,在zookeeper进行内部选举时是无法对外提供服务的也就是他们之前满足了强一致性 无法满足高可用,此外随着nacos2.0的升级,nacos的通信协议、一致性模型、架构分层和抽象都得到了升级,是的其性能大幅提升。 [nacos架构原理笔记](https://www.jianshu.com/p/1650003b6b94) [nacos架构原理总结](https://www.jianshu.com/p/503a4b3c0c94?v=1698937944580) ### 4.2 网关服务 网关使用springcloud gateway,它基于springboot+WebFlux(基于⾼性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模型)开发,正是因为gateway 底层基于Netty框架的异步非阻塞模型开发,在网关这种密集型访问的服务中发挥了更大的优势,在我们的网关服务,实现了跨域处理,服务限流处理,动态路由处理, 结合nacos灰度发布处理,自定义拦截器等等功能 [gateway详解](https://www.jianshu.com/p/97ac90515f7c) ### 4.3 统一授权服务 OAuth2.0(开放授权)是一个关于授权的开放的网络协议。支持丰富的授权模式,生产实际开发中运用的非常广泛,在我们的授权服务中我们实现了oauth2.0支持的 所有授权模式,并且在这基础之上,对于授权码模式实现了自定义授权登陆页面和授权页面,实现了自定义手机号+验证码模式,后面会继续开发接入微信,钉钉授权登陆。 [oauth2.0统一授权](https://www.jianshu.com/p/5bf8f08685a2) ### 4.5 支付服务 支付服务基于cola4.0开发,支持支付渠道开户,支付网关统一接入,支付路由渠道分发,支付订单,支付流水,支付回调等等。 [支付中心设计](https://mp.weixin.qq.com/s/LIQ9LSB-nedEuhEuv9073A) ### 4.6 链路日志 链路日志使用Skywalking实现,在链路实现方面还有sleuth+zipkin的实现方式,相比于Skywalking,它这种对代码的侵入性会高一点,基于拦截器实现,而 Skywalking是基于探针(Agent)技术实现,同时Skywalking有完善的服务监控,系统监控,告警和可视化诸多有点,所以决定使用Skywalking。 ### 4.7 日志收集与管理 日志收集采用ELFK架构,ELK和ELFK在架构上存在一些区别。总体来说,ELK是一个基于Elasticsearch、Logstash和Kibana的日志分析系统, 而ELFK在ELK的基础上增加了Filebeat,利用Filebeat分担Logstash 收集日志的压力,Filebeat收集到日之后将日志信息发往Kafka,Logstash可以 根据自身的处理能消费Kafka中的日志信息 ![项目架构](docs/image/elfk架构图.png) [ELFK-架构设计](https://www.jianshu.com/p/78438a7ab426) [ELFK-Filebeat日志收集](https://www.jianshu.com/p/d82b8280473d) ### 4.8 RocketMQ MQ我这使用了RocketMQ,主要是考虑RocketMQ在架构设计方面broker和topic都是由nameServer提供(AP),nameServer相比较kafka依赖zk(CP)对于服务可用会更稳定 消息储存方面RocketMQ和kafka类似,同样也是用了零拷贝技术是的消息可以快速查找,同时RocketMQ支持丰富的消息过滤,事务消息,消息回溯等等功能,在这个项目中在生产者 和消费者,还有事务消息发送和消费都做了一些改造,让使用的时候更简单。 ### 4.9 Redis ### 5.0 灰度发布 灰度发布的思路是实现ReactorLoadBalancer接口,自定义负载均衡策略,根据NacosServiceInstance对象获取nacos中配置服务的信息,找出灰度环境服务,然后在自定义策略中指向这些服务