微服务架构

简介: 微服务架构

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-预发布环境。因此一套集中式的,动态的管理设施是必不可少的。


目录
相关文章
|
27天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
3天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
371 16
|
19天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
6天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
21天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
23天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2593 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
5天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
182 2
|
3天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
105 65
|
7天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
332 2
|
23天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1580 17
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码