Springcloud

Posted by Wh0ami-hy on September 15, 2023

1. 微服务

分布式系统开发一定会遇到的四个问题

  • 这么多服务,客户端如何访问
  • 这么多服务,服务之间如何通信
  • 这么多服务,如何治理
  • 服务挂了,怎么办?

根本原因:网络是不可靠的

解决方案

  • SpringCloud Netflix
  • Apache Dubbo Zookeeper
  • SpringCloud Alibaba

SpringCloud 是一种生态,不是框架

如何解决

  • API 网关,服务路由
  • HTTP、RPC、异步调用
  • 服务注册与发现->高可用
  • 熔断、限流、服务降级

2. SpringCloud Alibaba最佳实践

1. Spring Cloud Gateway:网关
2. Nacos:服务注册和配置中心
3. Sentinel:熔断限流
4. Seata:分布式事务
5. RocketMQ:消息队列,削峰填谷
6. Docker:使用Docker进行容器化部署
7. Kubernetes:使用k8s进行容器化部署

异步非阻塞通信

  • 消息队列

同步通信

  • Netty -> NIO、A工O
  • HTTP -> 应用层,跨防火墙,在不同的局域网之间通信
  • RPC-> 远程过程调用,TCP,第四层,传输层,优点:速度快,缺点:不能跨防火墙,仅支持局域网通信

对内RPC,对外REST

3. 概述

Spring Cloud Alibaba项目都是基于Spring Cloud,而Spring Cloud项目又是基于Spring Boot进行开发,并且都是使用Maven做项目管理工具。在实际开发中,我们一般都会创建一个依赖管理项目作为Maven的 Parent项目使用,这样做可以极大的方便我们对Jar包版本的统一管理。

4. 项目结构

  • dependencies管理
  • 生产者
  • 消费者
  • 网关

单拎出来每个项目都是spring boot项目

5. Nacos

Nacos 致力于帮助发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助快速实现动态服务发现、服务配置、服务元数据及流量管理。

5.1. 服务注册与发现

服务注册和发现是微服务治理的根基,服务注册和发现组件是整个微服务系统的灵魂

5.2. 服务提供者

Restful风格的服务

5.3. 服务消费者

Feign默认集成了Ribbon,Nacos 也很好的兼容了Feign,默认实现了负载均衡的效果

  • Feign采用的是基于接口的注解
  • Feign整合了ribbon

6. Sentinel

在微服务架构中,为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的雪崩效应。为了解决这个问题,业界提出了熔断器模型。

6.1. 熔断器防止雪崩

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

6.2. 熔断器仪表盘

7. Gateway

7.1. Gateway-API网关

Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式

7.2. Gateway-全局过滤器

全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP访问限制等等。

8. Nacos-分布式配置中心

9. SkyWalking

9.1. SkyWalking-链路追踪

什么是链路追踪

微服务架构是通过业务来划分服务的,使用REST调用。对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。

面对以上情况,我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这就是所谓的APM(应用性能管理)。

9.2. SkyWalking-服务端配置

9.3. SkyWalking-客户端配置

Java Agent服务器探针

什么是探针

探针是用来探测语言版本情况、服务器运行状况用的,探针可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息。

9.4. SkyWalking-Assembly插件

Assembly插件目的是提供一个把工程依赖元素、模块、网站文档等其他文件存放到单个归档文件里。

10. RocketMQ

主要用来实现异步通信

消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。主要具有以下优势:

  • 削峰填谷:主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题·
  • 系统解耦:解决不同重要程度、不同能力级别系统之间依赖导致一死全死
  • 提升性能:当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关系统
  • 蓄流压测:线上有些链路不好压测,可以通过堆积一定量消息再放开来压测

10.1. RocketMQ-生产者

10.2. RocketMQ-消费者


本站总访问量