当前位置: 首页 > news >正文

基于Kahn算法|动态线程池,支持扩展点并发执行|召回|过滤

背景

在《分布式领域扩展点设计稿》一文中,我们提到针对业务横向扩展点和纵向扩展点的编排能力。

那有这样的一种场景:针对于一次会话,同时会调很多外部服务,同时这些RPC服务会有多种直接或间接的关系,是否有更高效的方式能够让我们的一次会话时间变得更高效,同时也能够保证系统的相对稳定性呢?

设计思想

如果开发者在设计之初,对于领域边界以及子域能力划分比较清晰,那我们编排的业务扩展点就不会杂乱无章。

在SpringBoot启动时,伴随着IOC容器的初始化,领域扩展点容器也随之完成全量向量视图初始化、向量深度视图初始化、拓扑排序之后的容器初始化。

基于动态线程池思想,可以通过扩展点容器中的编排任务,动态调整线程池?根据拓扑排序后的结果,异步执行编排的任务,完成召回、过滤以及核心业务逻辑。

设计图

在这里插入图片描述

详细设计

  1. 容器初始化时,从云端配置中心拉取扩展点编排配置文件,本地编排配置文件可以做兜底,也可以调节两者权重
  2. 拿到编排数据源之后,渲染本地向量广度视图以及向量深度视图
  3. 通过Kahn算法,将两个视图清洗成拓扑排序之后的容器
  4. 通过权衡算法,初始化动态线程池,并预热核心线程
  5. 将上述操作数据上传到我们的扩展点监控中心
  6. 通过监控水位线,可动态配置线程池相关核心参数
  7. 当一次会话开始时,会通过拓扑排序,并发去执行扩展点任务
  8. 通过向量视图,可以针对所有扩展点做召回和过滤处理

核心算法伪代码

/*** Kahn算法** @author issavior*/
public class KahnTopologicalSort {/*** 向量广度视图*/private final Map<Integer, List<Integer>> adjList = new HashMap<>();/*** 向量深度视图*/private final Map<Integer, Integer> inDegree = new HashMap<>();/*** 拓扑排序结果*/private final List<Integer> topoOrder = new ArrayList<>();/*** 渲染向量视图和向量深度** @param u 向量头* @param v 向量尾*/public void addEdge(int u, int v) {// 渲染视图adjList.putIfAbsent(u, new ArrayList<>());adjList.get(u).add(v);// 更新入度  inDegree.put(v, inDegree.getOrDefault(v, 0) + 1);inDegree.putIfAbsent(u, 0);}/*** 拓扑排序** @return 业务节点顺序*/public List<Integer> topologicalSort() {Queue<Integer> queue = new LinkedList<>();// 将所有入度为0的节点加入队列  for (Map.Entry<Integer, Integer> entry : inDegree.entrySet()) {if (entry.getValue() == 0) {queue.offer(entry.getKey());}}while (!queue.isEmpty()) {int current = queue.poll();topoOrder.add(current);// 遍历当前节点的所有邻接点  for (int neighbor : adjList.getOrDefault(current, Collections.emptyList())) {// 减少邻接点的入度  int newInDegree = inDegree.get(neighbor) - 1;inDegree.put(neighbor, newInDegree);// 如果邻接点的入度变为0,则加入队列  if (newInDegree == 0) {queue.offer(neighbor);}}}// 检查是否所有节点都被访问过,若为有环图,初始化报错if (topoOrder.size() != inDegree.size()) {throw new IllegalStateException("Graph has a cycle and cannot be topologically sorted.");}return topoOrder;}
}

相关文章:

基于Kahn算法|动态线程池,支持扩展点并发执行|召回|过滤

背景 在《分布式领域扩展点设计稿》一文中&#xff0c;我们提到针对业务横向扩展点和纵向扩展点的编排能力。 那有这样的一种场景&#xff1a;针对于一次会话&#xff0c;同时会调很多外部服务&#xff0c;同时这些RPC服务会有多种直接或间接的关系&#xff0c;是否有更高效的…...

Bootstrap 4 表头固定,tbody滚动条

表格 <div class"row" style"background-color: #fff;overflow: auto;max-height: 500px;"> <table class"table table-striped table-bordered scrolltable text-nowrap"> <thead> …...

MYSQL知识点(持续更新)

数据库 文章目录 数据库Mysql基础篇数据库相关概念MYSQL启动数据库类型关系型数据库 SQL语法SQL通用语法SQL分类DDL - 数据库操作 Mysql基础篇 数据库相关概念 数据库、 存储数据的仓库&#xff0c;数据是组织的进行存储 数据库管理系统 操纵和管理数据库的大型软件 SQL语句…...

html+css网页设计 酷狗首页1个页面 (无js)

htmlcss网页设计 酷狗首页1个页面无js功能 页面还原度80% 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 …...

用户体验至上:9款软件界面设计工具分享

你知道如何选择正确的UI设计软件吗&#xff1f;您知道哪些界面设计软件需要设计美观的用户界面&#xff0c;以及带来良好用户体验的APP吗&#xff1f;根据APP界面的不同功能&#xff0c;制作软件界面的选择也会有所不同。但是&#xff0c;并非要非常精通所有的制作软件界面&…...

Lambda 表达式:解锁编程世界的魔法之门

引言 在这个技术日新月异的时代&#xff0c;编程语言不断进化以适应日益复杂的软件开发需求。其中&#xff0c;Lambda表达式作为一门现代编程语言的重要特性&#xff0c;已经成为了提升代码效率与可读性的关键工具。无论你是刚刚踏入编程领域的新手&#xff0c;还是已经在软件…...

【python】Pandas处理Excel表格用法分析与最佳实践

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

KL 散度(python+nlp)

python demo KL 散度&#xff08;Kullback-Leibler divergence&#xff09;&#xff0c;也称为相对熵&#xff0c;是衡量两个概率分布之间差异的一种方式。KL 散度是非对称的&#xff0c;也就是说&#xff0c;P 相对于 Q 的 KL 散度通常不等于 Q 相对于 P 的 KL 散度。 一个简…...

四种推荐算法——Embedding+MLP、WideDeep、DeepFM、NeuralCF

一、EmbeddingMLP模型 EmbeddingMLP 主要是由 Embedding 部分和 MLP 部分这两部分组成&#xff0c;使用 Embedding 层是为了将类别型特征转换成 Embedding 向量&#xff0c;MLP 部分是通过多层神经网络拟合优化目标。——用于广告推荐。 Feature层即输入特征层&#xff0c;是模…...

鹏鼎控股:最新面试求职SHL逻辑测评笔试题库讲解及真题分享

鹏鼎控股&#xff08;深圳&#xff09;股份有限公司&#xff0c;成立于1999年4月29日&#xff0c;是一家专业从事印制电路板&#xff08;PCB&#xff09;设计、研发、制造与销售的企业。公司产品广泛应用于通讯、消费电子、汽车、服务器等多个领域&#xff0c;服务全球市场。鹏…...

【Git】git 不跟踪和gitignore区别

文章目录 不跟踪&#xff08;Untracked&#xff09;&#xff1a;.gitignore 文件&#xff1a;总结 在 Git 中&#xff0c;不跟踪&#xff08;untracked&#xff09;和 .gitignore 文件有不同的作用和用途&#xff1a; 不跟踪&#xff08;Untracked&#xff09;&#xff1a; 不…...

51单片机—智能垃圾桶(定时器)

一. 定时器 1. 简介 C51中的定时器和计数器是同一个硬件电路支持的&#xff0c;通过寄存器配置不同&#xff0c;就可以将他当做定时器或者计数器使用。 确切的说&#xff0c;定时器和计数器区别是致使他们背后的计数存储器加1的信号不同。当配置为定时器使用时&#xff0c;每…...

熵权法模型(评价类问题)

一. 概念 利用信息熵计算各个指标的权重&#xff0c;从而为多指标的评价类问题提供依据。 指标的变异程度越小&#xff0c;所反映的信息量也越少&#xff0c;所以其对应的权值也应该越低。 指标的变异程度&#xff08;或称为变异性、波动性&#xff09;&#xff1a;描述了一…...

用uniapp 及socket.io做一个简单聊天app 踢人拉黑 7

在聊天群里&#xff0c;以及私聊时&#xff0c;可以点对方头象弹出踢跟拉黑&#xff0c;踢只是让对方退出聊天室。拉黑是记对方退出且不能再进入。 socket.io 中的踢人流程&#xff1a; 将用户从groupUsers 删除&#xff0c;表现在uniapp的界面&#xff0c;就是通知friends页&…...

springboot项目迁移到阿里云函数

注意&#xff1a;长耗时&#xff0c;高内存 的应用&#xff0c;定时任务 不适合迁移。spring-cloud的微服务项目暂不适合迁移。 一、根据模板创建项目 1.内网数据库连接配置 如果用到了rds或者阿里云上自建的mysql数据库 则配置 internetAccess: true vpcConfig:securityGrou…...

Java设计模式(桥接模式)

定义 将抽象部分与它的实现部分解耦&#xff0c;使得两者都能够独立变化。 角色 抽象类&#xff08;Abstraction&#xff09;&#xff1a;定义抽象类&#xff0c;并包含一个对实现化对象的引用。 扩充抽象类&#xff08;RefinedAbstraction&#xff09;&#xff1a;是抽象化角…...

【独家原创】基于APO-Transformer-LSTM多特征分类预测(多输入单输出)Matlab代码

【独家原创】基于APO-Transformer-LSTM多特征分类预测&#xff08;多输入单输出&#xff09;Matlab代码 目录 【独家原创】基于APO-Transformer-LSTM多特征分类预测&#xff08;多输入单输出&#xff09;Matlab代码分类效果基本描述程序设计参考资料 分类效果 基本描述 [24年最…...

【大模型】大模型指令微调的“Prompt”模板

文章目录 一、微调数据集格式二、常用的指令监督微调模板2.1 指令跟随格式&#xff08;Alpaca&#xff09;2.2 多轮对话格式&#xff08;ShareGPT&#xff09;2.3 其他形式2.4 常见模板 参考资料 一、微调数据集格式 在进行大模型微调的过程中&#xff0c;我们会发现“Prompt”…...

Spring的设计模式----工厂模式及对象代理

一、工厂模式 工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。通过使用工厂模式&#xff0c;可以将对象的创建与使用代码分离&#xff0c;提供一种统一的接口来创建不同类型的对象。定义一个创建对象的接口让其子类自己决定实例化哪一个工厂类&#xff0c;…...

【算法】浅析广度优先搜索算法

广度优先搜索算法&#xff1a;层层推进&#xff0c;全面探索 1. 引言 在计算机科学和算法设计中&#xff0c;广度优先搜索&#xff08;Breadth-First Search&#xff0c;简称BFS&#xff09;是一种用于遍历或搜索树或图的算法。这种算法从起点开始&#xff0c;优先访问所有距…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...