首页 > 其他分享 >微服务中「组件」集成

微服务中「组件」集成

时间:2023-06-19 09:04:26浏览次数:33  
标签:集成 服务 数据源 模式 消息 组件

目录

有品:There is no silver bullet;

一、简介

在微服务工程的技术选型中,会涉及到很多组件的集成,最常用包括:缓存、消息队列、搜索、定时任务、存储等几个方面;

如果工程是单服务,对于集成组件的管理来说并不算复杂;但是在分布式的多服务系统中,随着拆分的服务数量上升,统一管理各种组件的复杂度也会提高;

如上图,是团队内部维护的一份重要的系统清单:描述整个微服务体系中核心组件的依赖情况;【并不完整】

在整个工程内部拆分了几十个服务,基于一份系统架构图和一份组件依赖清单,如果熟悉微服务架构模式,可以非常快速的了解系统的基础原理和结构;

复杂系统对于中间件的依赖很重,需要在实践过程中不断的积累和总结经验,持续优化各种组件的应用策略;

对于组件来说,与项目工程的集成模式,核心的应用场景,以及在业务场景中的迭代优化,是研发需要重点关注的方面;

二、缓存管理

【集成模式】

Redis作为最常见的缓存选型,在与分布式工程集成时,其形式也存在很大的灵活度;

单服务:在分布式工程中,如果服务使用独立的Redis组件,通常是该服务支持的业务场景比较独特,比如高并发或者数据体量较大等;

分布式服务:微服务常见的集成方式,不同的服务使用同一个Redis的不同DB编号,其他服务必须通过该服务的接口访问其缓存数据;

缓存中心:整个工程基于一个缓存中心服务来管理,其适配的业务场景比较特殊,多个服务紧密协作,调度和处理相同的数据主体;

在实际的分布式系统中,通常是模式一模式二两种都采用,而模式三更多的是应对特殊的需求场景;

【应用方式】

虽然Redis可以极大的提升效率,但是在实际的应用中,涉及最多的就是数据缓存和加锁两个核心能力,对于组件的API使用并不算复杂;

无论是在框架层面的浅封装一层,还是围绕Redis组件编写常用的工具方法,都可以很好的实现工程和Redis相关API之间的解耦;不同服务之间缓存数据获取,需要通过各个服务提供的接口进行查询;

三、消息队列

【集成模式】

Kafka作为消息队列的常见技术选型,在与分布式工程集成时,在设计上会围绕消息生产和消费的基本模式;

服务内集成:在各个服务内部直接引入消息组件,服务可能是消息生产者也可能是消费者,当重度依赖消息通信时,流程可维护性比较差;

消息服务封装:单独封装消息生产消费两个服务,来统一调度和管理消息通信,虽然提高了技术面的复杂度,但是极大降低了异步流程的管理难度;

在实际应用时,如果工程内对于消息的使用并不高频,通常是采用模式一的策略,建议做好流程注释和文档维护;如果消息使用非常高频,可以考虑模式二的策略,减轻组件维护的难度;

【应用方式】

生产和消费能力追求平衡,即便有偏差也只能是消息的【消费】大于【生产】的效率,才能避免消息堆积从而影响正常的业务流程;

实践来看单纯的基于MQ的重试机制,并不能稳定的解决分布式架构中复杂流程的中断问题,需要围绕消息的存储设计相应的调度策略,从而推动整个流程的完整执行,无论是向下推进还是向前回滚;

四、搜索引擎

【集成模式】

对于搜索引擎Elasticsearch来说,个人感觉在常规业务场景中是最容易出问题的组件,使用ES索引的数据模型,通常结构复杂并且数据体量偏大,还涉及到大量的检索条件;

服务内管理索引和数据:通常是核心的业务场景,对数据的实时性要求极高,从常规的架构设计来考虑,虽然索引相关的结构和数据可能来自多个数据库,但是其管理的接口会统一封装在业务联系最密切的服务内;

独立组件管理索引数据:基于独立的组件(常用Logstash)进行调度,动态地采集、转换和传输数据,不受格式或复杂度的影响,数据往往以各种各样的形式,或分散或集中地存在于很多系统中;

无论是模式一还是模式二,都是ES常用的集成策略,比如模式一对于核心数据模型的构建,常见于订单或商品等,模式二的经典用法之一ELK日志采集等;

【应用方式】

以服务内部管理索引的方式来说,多数情况下索引的结构会不断的扩展,结构更新必然也会引起数据和检索条件的同步更新,如果是结构新增的方式更新,管理难度并不大,但是已有字段的类型更新,还需要索引重建;

对于ES这种操作起来比较复杂的技术组件,建议是把各种常用的操作编写程序脚本来处理,并且开发相应的管理功能,用更加稳定可控的方式来管理索引的结构和数据调度;

五、定时任务

【集成模式】

Quartz任务调度组件,在分布式系统中并不算复杂,基于定时器去触发各种任务执行即可;

服务内构建定时器:在一些简单的相对独立的服务中,可以在服务内配置定时器,去执行相应的任务流程,这种模式在复杂的分布式系统中很难维护;

独立的任务调度服务:可以统一管理任务的调度策略和执行方式(比如同步或异步),同时对任务调度服务进行监控和维护,以此确保任务调度系统的稳定性和可靠性;

通常模式一只会在个别独立的服务中采用,对于模式二来说,封装独立的任务调度服务,可以统一与其他服务进行集成或者通信,比如通过消息服务及时通知失败的任务等;

【应用方式】

在任务调度服务中,难免要和其他服务进行通信交互,从而触发相关任务的执行,如果系统内部定时任务不多的话,可以采用feign接口的方式触发,如果任务非常多,可以考虑直接构建Http请求的方式,避免服务频繁的升级迭代;

在调度任务中可能存在数据体量比较大的场景,通常就是采用分片算法加线程池并发处理的策略,但是前提也要优化好数据查询和任务处理流程,从整体上提升任务的执行效率;

六、数据存储

【集成模式】

以MySQL为代表的数据存储是系统中最核心的一层,其集成的形式也是灵活多变,与存储层相关的组件更是五花八门;

多服务共用数据库:对于模式一来说,在相对简单的系统中比较常用,或者服务和数据库本身偏向通用的功能性质,可以采用这种策略;

服务和库的拆分模式二是分布式架构中最常用的设计,每个服务都具有自己相应的独立数据库,其他服务想要访问必须通过调用相应服务提供的接口才可以;

多数据源模式:在一个服务内集成多个数据源,像模式三读写分离和模式四分库分表,这是偏数据服务的业务场景中经常使用的模式;

对于系统中的数据源管理本身就是一件复杂的事情,需要兼顾各个方面,比如数据读写性能,数据安全,以及服务的稳定性等;

【应用方式】

在常规的微服务工程中,通常每个服务都会使用各自独立的数据库,在多数据源的集成模式中,常用的逻辑就是动态路由、读写分离、分库分表等,如果逻辑简单可以自定义封装,如果逻辑复杂可以使用成熟的组件;

服务集成多数据源的模式中,存在一个比较明显的复杂问题,如何在不停止服务的情况下,进行数据源的动态管理,此前实践过的模式:提供不同数据源的适配服务来实现各自的策略,在完成数据源的动态调整后,停止其中旧服务即可,虽然流程偏重偏复杂,但是稳定可靠;

七、参考源码

编程文档:
https://gitee.com/cicadasmile/butte-java-note

应用仓库:
https://gitee.com/cicadasmile/butte-flyer-parent

标签:集成,服务,数据源,模式,消息,组件
From: https://www.cnblogs.com/cicada-smile/p/17490210.html

相关文章

  • springboot启动流程 (2) 组件扫描
    SpringBoot的组件扫描是基于Spring@ComponentScan注解实现的,该注解使用basePackages和basePackageClasses配置扫描的包,如果未配置这两个参数,Spring将扫描该配置类所属包下面的组件。在服务启动时,将使用ConfigurationClassPostProcessor扫描当前所有的BeanDefinition,解析Configur......
  • 要禁用 Windows Server 2022 2025时自动打开服务器管理器,可以通过以下批处理命令实现
    要禁用WindowsServer20222025时自动打开服务器管理器,可以通过以下批处理命令实现:首先打开记事本,输入以下命令:@echooffregadd"HKLM\Software\Microsoft\ServerManager"/vDoNotOpenServerManagerAtLogon/tREG_DWORD/d1/f保存文件,将文件名后缀改为.bat。......
  • 73.Mysql密码验证组件
    Mysql在设置用户密码时有一个关于密码验证组件,该组件的功能就是提高用户设置密码时的安全性。1.安装和卸载mysql>INSTALLCOMPONENT'file://component_validate_password';mysql>UNINSTALLCOMPONENT'file://component_validate_password';2.查看mysql>SHOWVARIABLE......
  • 网络服务——DHCP服务
    目录前言:一.信息介绍1.什么是DHCP服务2.DHCP定义:  二.范围 三.工作原理1.分配方式2.租约过程四.DHCP服务配置  五.DHCP服务安装前言:动态主机配置协议是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码......
  • 小鱼深度产品测评之:阿里云新款通用算力型ECS云服务器Universal实例,实力与能力并存的一
    ECSU实例评测1、引言2、购买流程3、向导展示4、实例4.1创建实例4.2迁移上云4.3查询功能4.3.1下拉框选项4.3.2查询结果保存4.4默认定位4.5分组4.6监控4.6.1查看监控大盘4.6.2自定义报警规则4.6.3一键报警4.7列表操作4.7.1资源变配4.7.2远程链接4.7.3续费4.8云安全......
  • React - 07 类组件的渲染逻辑
    1.ES6类的知识ES6类的继承2.创建类组件创建类组件创建一个构造函数(类)+要求必须继承React.Component/PureComponent这个类+我们习惯于使用ES6中的class创建类「因为方便」+必须给当前类设置一个render的方法「放在其原型上」:在render方法中,返回需要渲染的......
  • bitwarden 搭建密码管理服务器
    BitwardenOpenSourcePasswordManager支持多端同步部署代码点击查看代码mkdir/app/bitwarden/datadockerrun-d\--rm\--namebitwarden\-p8080:80\-p3012:3012\-eSIGNUPS_ALLOWED=true......
  • 使用 Nginx 在服务器上搭建一个 Xooxle 镜像站
    配置目标期望能够通过xooxle.example.com访问www.xooxle.com。配置DNS配置地址:「DNS解析DNSPod」->「域名」->「解析」->「添加记录」xooxleA222.233.233.23配置Nginx切换到Nginx配置目录:cd/etc/nginx/sites-enabled新建配置:touchxooxle.conf修改配置:......
  • AD域服务
    AD域服务器的作用是:1、安全集中管理,统一安全策略。2、软件集中管理,按照公司要求限定所有机器只能运行必需的办公软件。3、环境集中管理,利用AD可以统一客户端桌面,IE,TCP/IP等设置。4、活动目录是企业基础架构的根本,为公司整体统一管理做基础。其它isa,exchange,防病毒服务器......
  • 申威3231服务器Redis性能验证-及最全信创CPU性能分析
    申威3231服务器Redis性能验证-及最全信创CPU性能分析背景公司里面新进了几台服务器.有台申威服务器.因为前段时间参与过一次申威的POC验证.当时对性能有一点简单的理解.但是因为不方便,没有测试更多.这次有了一台实体机器,并且可以上网,所以感觉可以方便的多了.本来想使用......