# SpringCloud-demo-yege **Repository Path**: yegetaier/spring-cloud-demo-yege ## Basic Information - **Project Name**: SpringCloud-demo-yege - **Description**: SpringCloud架构设计 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-23 - **Last Updated**: 2023-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringCloud, springCloud框架 ## README # 全局云架构 ![img](https://tvs97fkddot.feishu.cn/space/api/box/stream/download/asynccode/?code=ODY2YmI3MDM4MWJjZjMwYmU5Y2QxYzRmYWI3NTgwNDVfbUR0UllXcEJTOHFweVNlWnl4T3h4OVZOeDZuT0VFZkRfVG9rZW46UFcyeWJERFFTb2tnVzB4UjFud2NZVUNHbjJkXzE2OTgwNjI5MDI6MTY5ODA2NjUwMl9WNA) ## 关键组件(应用层) ### **Spring Cloud** **Alibaba** Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。Spring Cloud Alibaba包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。 ### SpringBoot SpringBoot 是一个 Java 应用程式框架,它可以帮助开发人员快速、简单地创建和部署 Java 应用程式。它采用了模块化的架构设计,使得它的开发体验非常轻量级,可以让开发人员专注于应用程式的核心功能。 ### JDK Java Development Kit (JDK) 是 Java 语言的开发工具包,主要用于开发、编译和运行 Java 程式。JDK 提供了 Java 编程语言的核心类库,包括类、方法、接口、数据类型、包和异常等。使用 JDK,可以轻松地创建和使用 Java 程式,并且可以跨平台运行,支援 Windows、Mac 和 Linux 等多种作业系统。JDK 也提供了丰富的 API 文档和开发手册,可以帮助开发人员快速、正确地使用 JDK。 ### Tomcat Tomcat 是一个开源的 Web 伺服器和应用程式服务器,由 Apache 软体基金会维护和发展。它是一个轻量级的 Web 伺服器。Tomcat 基于 Java 平台,采用了轻量级的架构设计,具有高效的系统架构和内存占用率。 ### JVM JVM(Java Virtual Machine)是一种开源的、基于虚拟机的 Java 程式语言运行环境,它可以在计算机上执行 Java 字节码文件,并且支援多种操作系统,例如 Windows、Linux 和 MacOS等。 ### MySQL(RDS) MySQL 是一个开源的关联式资料库管理系统(RDBMS),它支援多用户、多语言、多范例,以及多个资料表、视图和索引等。MySQL 的目的是提供一个效能高、功能强大、可靠性高、安全性高和使用方便的资料库管理系统。 ### PolarDB-X2 PolarDB-X2 是阿里云基于云原生架构的分布式关系型数据库。PolarDB-X2 支援数据分片机制,可以将数据按照不同的策略分成不同的数据分片,从而提高数据的查询效率和吞吐量。PolarDB-X2 是一款性能高、可靠性好、安全性高的分布式关系型数据库,它可以帮助您实现分布式数据管理和查询,提高您的工作效率和数据的安全性。 ### JDBC JDBC(Java Database Connectivity)是Java连接数据库的标准API,它提供了一组用于访问关系型数据库的API,包括数据库连接、数据库操作、事务管理等。JDBC是Java平台中最基础的API之一,它可以用于连接各种不同类型的数据库,如MySQL、Oracle、SQLServer等。使用JDBC可以进行数据的增删改查、事务管理等操作,可以使用Java程序代码来访问和操作数据库,提高了程序的可移植性和可维护性。 ### Druid Druid是一个开源的数据库连接池管理系统,它可以帮助开发人员更加轻松地管理数据库连接。Druid专门为大规模数据仓库和数据管道的高效查询处理而设计,它可以提供高水平的并发性能和数据库整体性能。 ### Mybatis Plus Mybatis Plus是一个基于Mybatis的Java ORM框架,它是在Mybatis的基础上增加了一些扩展功能和优化措施,可以提高Java程序员在使用Mybatis进行ORM操作时的开发效率和代码质量。Mybatis Plus支持多种数据库,包括MySQL、Oracle、SQLServer等,同时也支持Spring Boot等框架,可以方便地与各种应用程序集成。 ### Redis Redis 是一种内存数据库,它可以在内存中存储和管理数据,从而实现快速的数据读写和数据操作。Redis 的主要特点是快速、高效、灵活、可靠和高可用性。 ### Lettuce Redis连接池Lettuce是一个用于管理Redis连接的开源项目,它基于Netty的NIO框架实现,旨在提供高效、可扩展和线程安全的Redis客户端。 总的来说,Redis连接池Lettuce是一个性能高、扩展性好、线程安全、可靠性高的Redis客户端管理框架,可以帮助开发人员更加高效地管理Redis连接,提高应用程序的性能和可靠性。 ### RabbitMQ RabbitMQ 是一种高性能的通信中间件,它支援多种通信协议,例如 TCP、HTTP、SMTP 等,可以实现消息的传输和管理。RabbitMQ 的主要特点是高性能、易于使用、开放性和可扩展性。 ### OSS 对象存储(Object storage)是一种新型的数据存储方式,它通过在存储数据时将数据打包成对象的方式来实现高效的数据存储和检索。对象存储的主要特点是可扩展性、高性能和低成本。 ### CDN CDN(Content Delivery Network)是一种内容分发网络,它可以帮助网站和应用程序更快地传输数据和内容。CDN 可以将网站和应用程序的内容分发到全球各地的服务器上,从而实现内容的分发和缓存,从而提高网站和应用程序的性能和用户体验。 ### Nginx Nginx(Engine X)是一个高性能的 HTTP 服务器和反向代理。它是一个开源的软体,可以在 Linux、FreeBSD、Mac OS X 和 Windows 等不同的操作系统上运行。 ### SLB SLB(Server Load Balancer)是阿里云的一项负载均衡服务,它可以帮助您将流量均衡地分配到多个后端服务器上,从而提高网站的并发能力和服务质量。SLB可以按量付费,选择按量付费的话,SLB的规格会随着流量的变化而变化,比较节省成本。 ### Spring Cloud Stream Spring Cloud Stream是一种基于 Spring Cloud 的微服务架构,它可以帮助您在微服务架构中实现服务之间的数据流通和协作。Spring Cloud Stream 提供了一些基本的功能,例如数据流管理、路由和聚合,从而可以帮助您快速构建分布式应用程序。 ### Spring Cloud Load Balancer Spring Cloud Load Balancer 是 Spring Cloud 的一个模块,它可以帮助您实现服务的负载均衡和故障转移。Spring Cloud Load Balancer 提供了一些基本的功能,例如服务发现、负载均衡和故障转移,从而可以帮助您快速构建分布式应用程序。 ### Scheduler(**Alibaba Cloud SchedulerX**) Scheduler是Apache Flink中的一个任务调度系统,用于管理任务的执行时间和节点分配。它允许用户以可靠、可预测的方式定义和执行任务,同时提供了监控和管理任务执行的能力。 ### Seata(**Distributed Transaction**) Seata是一个开源的分布式事务处理框架,它可以用于分布式系统中的各种场景,例如数据库分布式、分布式文件系统、分布式缓存等。 Seata主要应用于分布式系统的事务处理和容错,可以提高系统的可靠性、稳定性和容错能力。 ### Nacos Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。 Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 ### OpenFeign OpenFeign 是一种开源的网络请求框架,它可以帮助您轻松地发起网络请求并进行路由和转发。OpenFeign 提供了一些基本的功能,例如请求路由和转发、请求参数和数据处理,从而可以帮助您快速实现网络请求。 ### **Sentinel**(AHAS) 阿里云AHAS(Application High Availability Service)是一款专注于提高应用高可用能力的SaaS产品,提供应用架构自动探测、故障注入式高可用能力演练、一键应用防护和增加功能开关等功能,可以快速低成本地提升应用可用性。 ### ARMS 阿里云ARMS(Application Performance Monitoring Service)是一款基于阿里云的应用性能管理(APM)类监控产品,提供实时监控、数据分析、预警及告警等功能,以帮助企业快速发现和解决应用性能问题。 ### Logback(SLS) Logback是一个开源的日志框架,用于收集、过滤、输出日志。它支持各种日志记录格式。Logback的主要目的是为了解决大规模的日志记录问题。它可以帮助您在应用程序中记录大量的日志,同时确保这些日志能够被正确地处理和分析。 ### VPC 专有网络(Private Network)是一种用于限制网络访问和数据流量的网络,它可以帮助企业和机构在内部网络中实现安全和管理。专有网络可以通过设置安全策略、设备和用户白名单等方式来限制网络访问,从而提高网络的安全性和可靠性。理解为一个内网即可。 ### ECS 阿里云ECS(Elastic Compute Service)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。 云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。 阿里云ECS持续提供创新型服务器,解决多种业务需求,助力您的业务发展。 ## 关键组件(工具层) ### GitLab GitLab是一个以代码托管和版本控制为主的开源项目管理和协作平台,旨在为团队和组织提供一个集中的代码存储库和协作平台,以便协作开发、发布和共享代码。GitLab可以帮助团队协作管理代码库、分支和问题,实现版本控制、问题跟踪、通知和报告等功能,同时也提供了一些其他功能,如代码审查、代码加密和分支管理等。GitLab可以在个人和商业环境中使用,其开源免费,支持多种语言和平台,是目前最受欢迎的开源代码托管和协作平台之一。 ### Nexus Nexus私服是一种特殊的远程仓库服务,它是架设在局域网内的仓库服务,供局域网内的开发人员使用。可以理解为各种依赖的仓库中心。 ### Maven(Gradle) Maven是一种基于规范的项目管理和自动构建工具,它使用一种称为“依赖管理”的机制来管理项目中的依赖项。依赖管理是指将项目中使用的各种模块和库都声明为一个个独立的“依赖”,并且将这些依赖打包成一个或多个“组件”,以便在项目运行时自动装配。这样,开发人员就可以在不需要手动下载和安装依赖的情况下,通过引用各种组件来构建和运行项目。 ### IDEA IntelliJ IDEA是一款广泛使用的Java开发工具,它提供了一个功能强大的代码编辑器、自动补全、调试器、版本控制、项目管理、代码格式化、重构等工具,可以帮助开发人员更加高效地开发和管理Java应用程序。IntelliJ IDEA还支持各种开源项目管理工具和插件,可以方便地管理和协作开发Java项目。其界面友好,支持多语言,拥有很高的用户口碑和市场占有率。 ### MyBatisX IDEA插件MybatisX是一个基于Mybatis的Java ORM框架,它可以帮助开发人员更加轻松地进行ORM操作,提高开发效率和代码质量。MybatisX支持多种数据库,包括MySQL、Oracle、SQLServer等,提供了更加灵活和易于维护的API。 ### SonarLint IDEA插件SonarLint是一个基于SonarQube的Java代码分析插件,它可以帮助开发人员检查代码中的安全漏洞、性能问题、代码规范等,并提供了相应的报告和建议。SonarLint可以帮助开发人员更加规范地编写代码,提高代码质量和可维护性。同时,它也可以提高代码的安全性,避免了一些常见的安全漏洞。 ### Alibaba Java Coding Guidelines Alibaba Java Coding Guidelines是阿里巴巴集团推出的Java编码规范,它提供了一系列的规范和指南,帮助开发人员更加规范地编写Java代码。该规范适用于阿里巴巴集团内部的所有Java项目,包括Web应用程序、服务器端应用程序、移动应用程序等。 ### Google-java-format Google-java-format是一个非常实用的工具,可以帮助开发人员更加轻松地检查Java代码中的格式问题,提高代码质量和开发效率。同时,它也可以帮助开发人员更加方便地进行代码转换和导出,提高代码的可维护性。使用Google-java-format可以帮助开发人员更加轻松地进行代码管理和开发,提高开发效率和代码质量。 ### Save Actions IDEA插件Save Actions是一个非常实用的工具,可以帮助开发人员和设计师在项目中更加高效地创建、存储和分享动作,提高团队协作和记录工作流程的效率。同时,它也可以帮助开发人员更加方便地管理和处理动作数据,提高动作数据的可靠性和安全性。使用IDEA插件Save Actions可以帮助开发人员更加轻松地进行动作记录和管理,提高开发效率和代码质量。 ### Alibaba Cloud Toolkit Alibaba Cloud Toolkit是阿里巴巴集团推出的一个云开发套件,主要用于快速构建和部署各种云原生应用和工具。它提供了丰富的基础设施服务和API接口,支持云原生应用的开发、测试、部署和运行。 使用Alibaba Cloud Toolkit可以实现远程部署Jar包或者热部署Jar应用。 ### Jemeter(PTS) Jemeter 是一种用于性能测试和负载测试的工具,它可以帮助您快速评估应用程序的性能和负载。Jemeter 提供了一些基本的功能,例如性能测试、负载测试和报告生成,从而可以帮助您快速完成性能测试和负载测试。 ### Jenkins Jenkins主要用于自动化构建、测试和部署软件项目,可以帮助开发人员降低项目的整体开发和部署成本,提高开发效率和软件质量。 ### JRebel 使用JRebel热部署插件,开发人员可以轻松地解决热部署问题,提高应用程序的质量和稳定性。JRebel热部署插件还提供了代码重构和性能分析功能,可以帮助开发人员优化和重构代码,提高应用程序的性能和响应速度。 ### GitHub Copilot GitHub Copilot插件可以通过使用自然语言处理技术来检测和提供代码补丁。它可以自动检测代码中的问题和错误,并提供修复代码的建议。除了提供代码补丁之外,GitHub Copilot插件还可以帮助开发人员使用和推荐代码库中的最佳实践和代码风格。它可以提供代码示例和最佳实践,帮助开发人员更加高效地使用和组织代码库。 # 依赖软件 ## GitLab ## Nexus # SpringCloud架构 ## Maven依赖关系图 ![img](https://tvs97fkddot.feishu.cn/space/api/box/stream/download/asynccode/?code=M2YzNThhMjFmYmJiMjYzNTlkNGEzMjFmMjU4ZTg3Y2FfUTYxdUdvVXR0SFVFcjV3NnhLbGFlQ1U5OXAxR09kc1pfVG9rZW46S1lsOGJzOVRyb1lPR3d4SG9memNtcEhTbkFnXzE2OTgwNjI5OTg6MTY5ODA2NjU5OF9WNA) ## SpringCloud各模块关系图 ![img](https://tvs97fkddot.feishu.cn/space/api/box/stream/download/asynccode/?code=Y2YyNmI4NzdiNzczMWJmMzAxYzljZTQwN2UwYWYyMTRfZ2hMekE2V21TOWd4MEQxdEs0Z01tY2l0b3NlTVBDZ0ZfVG9rZW46RWM1TWJRUUx0b2ZFTmR4OG5NRGNGdERobmlkXzE2OTgwNjI5OTg6MTY5ODA2NjU5OF9WNA) ## SpringCloud各模块内容 ### opengate-parent 配置SpringCloud项目的根pom.xml 1. 统一管理SpringCloud项目的版本 2. 统一管理SpringCloud项目的全局依赖和公共依赖 3. 统一管理SpringCloud项目的插件 ### opengate-nexus Nexus的全局配置文件 settings.xml 使用时,需要将 settings.xml 放到 maven 的 .m2 目录下 不使用时,将 settings.xml 修改为 settings-bak.xml 即可,不建议删除 ### opengate-contact 继承opengate-parent,作为合约的父依赖,方便管理。 ### opengate-service 提供业务服务的基础依赖,方便管理。 ### opengate-base 各项目模块的基础Base,提供基本SDK供直接使用。 主要处理类有:断言处理器类、登录authToken类、全局常量类、全局上下文类、获取当请求用户CurrentUser类、全局异常处理类、HTTP请求类、拦截器类、API文档Knife4j类、OSS操作类、Page分页类、Redis操作类、返回结果类、stream消息处理类、线程池类、获取请求IP地址类,等。 ### opengate-gateway 全局网关服务 1. 登录鉴权 2. 路由分发 3. 访问限制 ### opengate-demo 项目demo 包含三部分: 1. opengate-demo-api: 业务 2. opengate-demo-contact: 对内对外合约 3. opengate-demo-task: 任务(如定时调度任务) ## SpringCloud使用 1. 到opengate-nexus仓库获取setting.xml文件,修改Nexus用户名和密码,放置文件到maven根目录(.m2)。 2. 登录GitLab仓库,克隆opengate-gateway、opengate-demo到本地。一者完善网关业务;一者参照demo创建新业务模块,可以复制修改demo为实际业务名实现,也可以新建模块,迁入demo内容实现。如果涉及opengate-base修改,拉取到本地并修改,完成后deploy到Nexus仓库。如果还涉及maven依赖增加,需要考虑是否需要把增加的依赖放到opengate-parent、opengate-contact、opengate-service,若需要,同样拉取项目到本地,修改之后,deploy到Nexus。注意:deploy后的模块,引用其的项目一定需要reload maven,才能获取到最新deploy的模块。新开发项目需要新建分支或新建仓库,并说明分支或仓库指向环境。 3. 代码编写完成,调试单模块,直接在Knife4j调试API,API地址:http://${IP}:${port}/api/v1/doc.html 4. 本地测试业务可用性,或,部署测试环境测试(成本)。 5. 部署生产环境。 6. 完善相关的性能、安全、监控、预案。 # 部署 按照云架构设计,使用基本云产品,配置网络访问和安全策略,分模块部署,统一GateWay为唯一入口。 业务+性能+安全+监控+预案。