第1节: 微服务架构设计篇
本章重点
了解各类微服务架构模式,SpringCloudAlibaba的相关知识和组件,以及直播的流程分析和系统架构图
记录、交流、实践,让每一份付出皆可看见,让你我共同前行😁
1.微服务架构模式
详细文档可以参考: 六种微服务架构的设计模式_微服务架构设计模式-CSDN博客
以下是六种架构模式的简易了解:
1.1 代理模式
- 请求与微服务之间引入代理层,代理层负责请求的转发与响应。客户端需要自行拼装微服务放回的数据,这样会增加相应的工作量。
1.2 聚合器模式
- 在请求和微服务之间添加了一个API层,在API层完成数据聚合和转化,通过API层将不同的数据转发出去,从而将拼装工作转移到后端,减少了客户端的负担。
1.3 链式微服务模式
- 此模式调用链路很长,网络传输开销大
- 在微服务设计过程中应该避免深度链式调用,减少跨进程通信带来的消耗
1.4 分支微服务模式
- API层直接调用多个微服务节点,数据统一放回在API层拼装
- 调用深度仅一层,显著降低链路复杂度与网络开销
1.5 数据共享模式
- 微服务拆分初期,多个服务共享同一个数据库
1.6 异步消息传递模式
- 核心机制: 通过消息队列 (
RocketMQ
,RabbitMQ
,Kafka
)实现服务之间异步通信,解除强耦合依赖
2.SpringCloudAlibaba
官方文档: Spring Cloud Alibaba
Spring Cloud Alibaba是Spring Cloud生态下的一个重要组成部分,由阿里巴巴团队开发并维护。它为开发者提供了一套完整的微服务解决方案,涵盖服务治理、配置管理、容断降级、限流、分布式事务等关键技术。
网关 | Gateway |
注册中心 | Nacos |
配置中心 | Nacos,Apolo |
远程调用 | Dubbo |
熔断 | Sentinel |
链路追踪 | Skywalking |
2.1 Nacos
服务注册与发现组件,同时支持动态配置管理。
// 引入Nacos依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
// 配置文件application.yml
spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848
// 启动类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosExampleApplication {public static void main(String[] args) {SpringApplication.run(NacosExampleApplication.class, args);}
}
2.2 Sentinel
微服务熔断与限流组件,能帮助开发者快速实现微服务的高可用性
// 引入Sentinel依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
// 配置文件application.yml
spring:cloud:sentinel:transport:dashboard: localhost:8080
// 限流规则
@RestController
public class FlowController {@GetMapping("/testA")@SentinelResource(value = "testA")public String testA() {return "Hello Sentinel";}
}
2.3 Seata
分布式事务解决方案,能够帮助开发者实现服务的事务管理
// 引入Seata依赖
<dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.4.2</version>
</dependency>
// 配置文件application.yml
seata:enabled: truetx-service-group: my_tx_group
// 事务管理
@GlobalTransactional
public void transferMoney(String fromAccount, String toAccount, double amount) {accountService.debit(fromAccount, amount);accountService.credit(toAccount, amount);
}
2.4 RocketMQ
消息中间件,支持高吞吐量和低延迟的消息传递
// 引入RocketMQ依赖
<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.1</version>
</dependency>
// 消息生产者
@RocketMQMessageProducer
public class Producer {@Autowiredprivate RocketMQTemplate rocketMQTemplate;public void sendMessage(String message) {rocketMQTemplate.convertAndSend("test-topic", message);}
}// 消息消费者
@RocketMQMessageListener(topic = "test-topic", consumerGroup = "test-group")
public class Consumer {@RocketMQListenerpublic void onMessage(String message) {System.out.println("Received message: " + message);}
}