微服务架构

SpringCloud是一系列框架的有序集合,它利用SpringBoot的开发便利性简化了分布式系统的开发

如:服务发现,负载均衡,断路器,智能路由,微代理,控制总线等等

微服务架构示例包含:

服务注册与发现(Eureka),客户端负载均衡(Ribbon),断路器(Hystrix)

  • 微服务架构的优势

可扩展性:微服务架构可以通过添加或者删除服务来扩展或缩小系统规模

独立部署:微服务可以独立部署,使得开发人员可以在不影响整个系统的情况下更新和维护单

个服务。

灵活性:微服务可以使用不同的技术和语言进行开发,使得开发人员可以选择最合适他们的工具。

  • 核心设计理念

1   注册中心:服务发现和注册是微服务架构的核心,SpringCloud使用Eureka,Consul或者Zookeeper等注册中心来实现服务的发现和注册。

Eureka是通过心跳检测,健康检查和客户端缓存等机制,提高系统的灵活性,可伸缩性和可用性

Eureka包含两个组件:Eureka Server和Eureka Client,Eureka Client是一个Java客户端。用于简化与Eureka Server 的交互,Eureka Server 提供服务发现的能力,各个微服务启动时,会通知Eureka Client和Eureka Server进行注册自己的信息,Eureka Server 会存储该服务的信息。

30S 客户端会每个30S去获取并更新数据

60S 服务端每隔60S 对客户端链接进行检查

90S 服务端超过90S没有接到客户端心跳,会移除该实例

15分钟 80% 如果15分钟内80%的客户端失效,就会启动自我保护机制。

@EnableEurekaServer 和 @EnableEurekaClient 注解分别用于标记应用为注册中心和服务提供者/消费者。服务消费者使用 @FeignClient 注解定义了一个远程调用的接口。当服务消费者需要调用服务提供者的服务时,它会通过 Feign 客户端进行远程调用。

2 负载均衡:在微服务架构中,服务可能会被部署在多个实例上,因此需要使用负载均衡算法来平衡流量,SpringCloud提供了Ribbon实现客户端负载均衡。

负载均衡是高并发高可用系统必不可少的组件

负载均衡器是基于Netflix Ribbon实现的,是一个客户端负载均衡器,它可以在客户端配置服务提供者的列表,并且可以根据特定的负载均衡策略来选择服务提供者。

Ribbon的配置和使用通常是隐式的,因为Spring Cloud集成了Ribbon,并且通过Spring Cloud Netflix提供了一套简化的声明式服务调用模板。

负载均衡的策略

轮询:默认策略,请求按顺序依次分配到各服务器

随机:请求随机分配到各服务器

最少活跃调用数:使用服务器的活跃请求数量来决定分配

最小响应时间:根据服务器响应时间来决定分配。

调用示例:

通常会有一个服务消费者(RestTemplate)来调用服务提供者。

服务提供者会注册到服务发现组件比如Eureka

消费者会使用服务提供者的名字进行调用,Ribbon会根据服务提供者的名字来查询服务列表,并根据配置的负载均衡策略来选择具体的服务提供者实例。

分为客户端的负载均衡和服务端的负载均衡

服务端的负载均衡,比如订单服务调用商品服务,此时订单服务就是客户端,商品服务就是服务端

Nginx就是一个比较有名的负载均衡器,请求会先到达负载均衡器,然后通过负载均衡算法,在多个服务之间访问。

客户端服务均衡时客户端进行负载均衡算法的分配,客户端先到注册中心获取服务列表,接下来客户端把负载均衡以代码公共类库的方式放到客户端,然后客户端获取服务列表之后,根据算法进行选择访问

负载均衡是一种思想,即按照什么样的策略进行负载均衡分配,目前支持

轮询策略和随机策略,Spring Cloud LoadBalancer 默认的策略是轮训策略

public class CustomLoadBalancerConfiguration {
 
    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,
                                                            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new RandomLoadBalancer(loadBalancerClientFactory
                .getLazyProvider(name, ServiceInstanceListSupplier.class),
                name);
    }
}

3 服务网关:服务网关是微服务架构中的另一个重要组件,它可以将客户端的请求路由到不同的微服务实例上。Gateway和Netflix Zuul是常用的服务网关。

过滤器和Zuul的过滤器在概念上类似,可以使用Filter拦截和修改请求,实现对上游的响应,进行二次处理,实现横切与应用无关的功能,如安全、访问超时设置、限流等功能

路由,网关配置的基本组成模块,和Zuul的路由配置模块类似。一个Route模块由一个ID、一个目标URI、一组断言和一组过滤器组成。如果断言为真,则路由匹配,目标URI会被访问

断言

4 熔断器:在微服务架构中,由于服务之间调用可能会产生故障,因此需要使用熔断器来保护系统免受故障的影响,SpringCloud Hystrix提供了熔断器的实现。

原理是基于断路器模式,这是一种分布式系统中防止服务雪崩效应的重要机制,

监控与统计:Hystrix为每个依赖服务的调用都包装成一个HystrixCommand或HystrixObservableCommand对象。它会跟踪该命令的成功、失败、超时和拒绝等指标,并维护这些指标的统计信息

断路器状态:Hystrix的断路器有三种状态:关闭(Closed)、开启(Open)和半开(Half-Open)。

  •    关闭状态:初始状态,允许请求正常通过到后端服务。
  •    开启状态:当一定时间内失败率达到阈值(如50%失败率)时,断路器切换到开启状态,此时所有对该服务的请求将不再实际执行,而是直接失败并调用降级逻辑(Fallback)。
  •    半开状态:经过一段时间(如默认的5秒),断路器会自动切换到半开状态,此时会允许少量请求尝试通过,如果这些请求成功,则认为服务恢复正常,断路器回到关闭状态;如果请求仍然失败,则断路器再次变为开启状态。

降级逻辑:当断路器开启时,Hystrix会执行预先定义的降级逻辑(Fallback),提供一个备选的响应,而不是让请求长时间阻塞或抛出异常。

资源隔离:通过线程池或信号量来实现服务间的资源隔离,即使某个服务出现故障或延迟,也不会耗尽整个系统的线程资源

5 配置中心:微服务架构中的配置管理也是非常重要的,SpringCloud提供了Config Server和Config Client来管理分布式系统的配置。

微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每次服务都需要必要的配置信息才能运行,所以也面临了一些问题

随着微服务工程的越来越多,每个工程都有一套配置文件,系统膨胀,如果每个项目都有公共的比如数据库连接信息,没有统一的管理,想要修改则需要每个工程都有修改,所以我们通常有很多系统环境如: prod-生产环境,test-测试环境,dev-预发布环境。因此一套集中式的,动态的管理设施是必不可少的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值