目录
1. 什么是微服务?
2. 微服务的优势?
3. 单体架构,分布式架构,微服务架构的区别以及优缺点?
4. SpringCloud和Spring Cloud Alibaba是什么?
5. SpringCloud和SpringCloudAlibaba的区别?
6. SpringBoot与SpringCloud兼容版本说明
7. 服务拆分示例
8. SpringCloudAlibaba功能介绍
9. SpringCloudAlibaba的idea配置
10. SpringCloudAlibaba官方文档
1. 什么是微服务?
微服务是一种软件设计和架构的风格,它将应用程序分为一组较小的,相互独立的服务,并通过轻量级的通信机制进行协作。每个微服务都专注于完成一个特定的业务功能,可以独立开发,测试,部署和维护。在微服务架构中,服务之间是松耦合的,每个服务都是独立的运行单元,可以根据业务需求进行快速迭代和演进。
与传统单体应用程序不同,微服务的架构将应用程序拆分为多个小的服务,每个小的服务都遵循单一的职责,负责执行某个具体的功能,不必关注其他服务的实现细节。此外,由于每个服务都是独立的,可以使用不同的编程语言,框架和技术来开发和部署不同的服务,这大大降低了技术选型的限制。
2. 微服务的优势?
- 高度可伸缩性和弹性:由于每个服务都是独立的,可以根据实际业务需求进行快速的扩展和缩减,提高系统的弹性和可伸缩性。
- 更快的应用程序迭代和部署:微服务可以被独立开发,测试,部署,升级,维护,实现更快的应用程序迭代和部署。
- 更好的故障隔离和容错能力:由于微服务之间是松耦合的,一个服务故障不会对其他部分产生影响,且可以使用各种容错机制提高容错能力。
- 更好的团队组织和管理:微服务架构可以便于团队更加专注于各个模块以及业务功能,更好地进行分工协作,降低团队的沟通成本。
3. 单体架构,分布式架构,微服务架构的区别以及优缺点?
- 单体架构
- 单体架构是一种传统的软件设计和架构风格,应用程序作为一个整体运行在单个进程中,所有的功能模块和数据访问都被打包在一起。
- 优点:单体架构部署简单,易于管理,对于小型应用程序来说开发速度快,可以提高代码复用性。
- 缺点:难以维护和扩展,一旦应用程序规模变大,就会导致代码复杂度增加;部署和升级需要停机维护,影响用户的体验;耦合度高,一处出问题可能影响整个程序。
- 分布式架构
- 通过分布式架构将应用程序划分成多个模块和组件,在多个计算机上分布运行,并通过网络进行通信和数据交换。
- 优点:通过分布式部署,可以实现更好的可伸缩性和可靠性;可以灵活选择合适的技术进行开发;通过分布式部署,可以更好的实现模块化和松耦合,易于管理。
- 缺点:分布式开发需要更多的沟通与协作;需要处理分布式事务和数据一致性等问题;需要考虑负载均衡和网络通信的性能问题;需要对系统进行综合监控和管理。
- 微服务架构
- 微服务架构是一种面向服务的架构风格,将应用程序划分为多个小,松耦合的组件,在不同的主机独立运行,并通过轻量级通信机制进行协作。
- 优点:通过模块化的设计,可以实现更快的迭代和部署;更好的实现松耦合,容错性更高;方便地对业务变化,易于维护和扩展。
- 缺点:需要更多的开发和运维资源,需要更好的治理机制来确保服务的稳定性和可靠性;需要考虑服务之间的通信和一致性的问题;需要对架构进行全局监控和管理。
4. SpringCloud和Spring Cloud Alibaba是什么?
- SpringCloud
- SpringCloud是基于SpringBoot的微服务框架,可以帮助开发人员快速构建,部署和管理分布式系统。提供了一系列的工具和组件,如服务注册与发现,配置中心,负载均衡,断路器等,支持多种云平台和技术栈,使开发人员快速构建高可用,可扩展的微服务应用程序。
- SpringCloudAlibaba
- SpringCloudAlibaba是在SpringCloud基础上,集成了阿里巴巴公司的一系列分布式解决方案,包括Nacose注册中心,Sentinel熔断降级,DubboRPC等,提供了更完善的分布式解决方案。相比于SpringCloud,Spring Cloud Alibaba更加全面的分布式解决方案,能满足复杂的需求
5. SpringCloud和SpringCloudAlibaba的区别?
- 服务注册与发现
Spring Cloud使用Eureka或Consul作为服务注册中心,而Spring Cloud Alibaba使用Nacos作为注册中心。Nacos支持更多的服务发现和服务注册功能,如DNS解析、动态配置等。
- 配置管理
Spring Cloud使用Spring Cloud Config来管理配置文件,而Spring Cloud Alibaba使用Nacos Config来管理配置文件。Nacos Config支持更多的动态配置和管理功能。
- 熔断降级
Spring Cloud使用Hystrix来实现熔断降级,而Spring Cloud Alibaba使用Sentinel来实现熔断降级。Sentinel相比于Hystrix,提供了更加完善的流量控制和熔断降级管理功能。
- 分布式事务
Spring Cloud使用Spring Cloud Sleuth和Zipkin进行分布式事务追踪,而Spring Cloud Alibaba使用Seata进行分布式事务管理。Seata是一个全局性的分布式事务管理框架,支持AT、TCC和SAGA三种分布式事务模式,并提供了更丰富的事务管理功能。
总之,Spring Cloud和Spring Cloud Alibaba都是优秀的微服务框架,它们在不同的业务场景下都有各自的应用。如果需要基本的微服务框架和解决方案,可以选择Spring Cloud;如果需要更全面、更复杂的分布式解决方案,可以选择Spring Cloud Alibaba。
6. SpringBoot与SpringCloud兼容版本说明
2022.0.x aka Kilburn | 3.0.x |
2021.0.x. aka Jubilee | 2.6.x,2.7.x(从 2021.0.3开始) |
2020.0.x aka Ilford | 2.4.x,2.5.x(从2020.0.3开始) |
Hoxton | 2.2.x,2.3.0(从SR5开始) |
Greenwich | 2.1.x |
Finchley | 2.0.x |
Edgware | 1.5.x |
Dalston | 1.5.x |
7. 服务拆分示例
SpringCloud-test:父工程,管理依赖。
用户模块:用户微服务,负责所有用户相关业务。
教师模块:教师微服务,负责教师信息相关业务。
8. SpringCloudAlibaba功能介绍
-
流量控制和服务降级:流量控制,断路和系统自适应保护与阿里巴巴哨兵。
-
服务注册与发现:实例可以在Alibaba的Nacos中注册,客户端可以使用spring管理的bean发现实例。支持Ribbon,通过SpringCloudNetflix的客户端负载均衡。
-
分布式配置:使用阿里Nacos作为数据存储。
-
事件驱动:构建与SpringCloudStream RocketMQ Binder连接的高度可扩展的事件驱动。
-
消息总线:使用Springcloud总线RocketMQ连接分布式系统节点。
-
分布式事务:支持具有高性能和易于使用的Seata分布式事务解决方案。
-
Dubbo RPC:通过Dubbo RPC扩展SpringCloud服务到服务调用的通信协议。
9. SpringCloudAlibaba的idea配置
pom中的依赖项:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>{project-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
如果想为阿里云服务使用Spring Boot starter,可以将阿里云Spring Boot BOM添加到pom.xml:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-spring-boot-dependencies</artifactId>
<version>{project-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
10. SpringCloudAlibaba官方文档
Spring Cloud Alibaba Reference Documentation
11. SpringCloud常用组件表
服务注册与发现(eureka,nacos,consul)
服务负载均衡(ribbon)
服务相互调用(openFeign)
服务的容错(hustrix,sentinel)
服务的网关(gateway,Zuul)
服务的统一配置管理(config-server)
服务的消息总线(bus)
服务的安全组件(security,Oauth2.0)
服务监控(admin)(JVM)
链路追踪(sleuth+zipkin)