当前位置: 首页 > 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;优先访问所有距…...

OpenClaw日程管理:千问3.5-9B解析邮件创建待办

OpenClaw日程管理&#xff1a;千问3.5-9B解析邮件创建待办 1. 为什么需要AI助手管理日程&#xff1f; 每天早上打开邮箱&#xff0c;总能看到十几封未读邮件——会议邀请、项目更新、待办提醒混杂在一起。上周我就因为漏看了一封包含截止日期变更的邮件&#xff0c;差点耽误了…...

8大AI核心概念,让你秒懂智能体、多智能体系统、RAG、工作流、微调、函数调用、MCP和A2A!

本文介绍了8个AI核心概念&#xff0c;包括智能体&#xff08;Agent&#xff09;和多智能体系统&#xff08;Multi-Agent System&#xff09;&#xff0c;以及如何通过RAG&#xff08;Retrieval-Augmented Generation&#xff09;、工作流&#xff08;Work Flow&#xff09;、微…...

达梦数据库图形化安装界面常见报错及解决方案

1. 达梦数据库图形化安装界面常见报错解析 达梦数据库作为国产数据库的代表之一&#xff0c;在企业级应用中越来越普及。但在实际安装过程中&#xff0c;尤其是图形化安装界面环节&#xff0c;不少用户会遇到各种报错问题。我自己在第一次安装达梦数据库时也踩过不少坑&#xf…...

Sequel批量插入性能终极指南:如何快速处理百万级数据

Sequel批量插入性能终极指南&#xff1a;如何快速处理百万级数据 【免费下载链接】sequel Sequel: The Database Toolkit for Ruby 项目地址: https://gitcode.com/gh_mirrors/seq/sequel Sequel作为Ruby的强大数据库工具包&#xff0c;提供了高效处理数据的能力&#x…...

论文阅读:arxiv 2026 Agent Privilege Separation in OpenClaw: A Structural Defense Against Prompt Injectio

总目录 大模型安全研究论文整理 2026年版&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/159047894 https://arxiv.org/abs/2603.13424 Agent Privilege Separation in OpenClaw: A Structural Defense Against Prompt Injection 该论文名为《Agent Privilege …...

MyBatis拦截器黑科技:不修改业务代码实现动态数据权限控制

MyBatis拦截器黑科技&#xff1a;零侵入实现企业级数据权限管控 在当今企业级应用开发中&#xff0c;数据权限控制是一个无法回避的核心需求。传统方案往往需要在每个SQL语句中硬编码权限条件&#xff0c;或者通过AOP切面批量修改Mapper接口&#xff0c;这些方法要么维护成本高…...

各种 32 位单片机(MCU),本质上是围绕不同 CPU 内核、由不同厂商设计的 32 位微控制器家族,最主流的是基于 ARM Cortex‑M 内核的各类兼容 / 派生系列,其次是少数自研内核架构。

一、按内核架构&#xff1a;两大阵营1. ARM Cortex‑M 内核&#xff08;绝对主流&#xff0c;占 90% 以上市场&#xff09;所有基于 ARM 公司授权的 Cortex‑M 系列处理器内核 的 MCU。内核谱系&#xff08;从低到高&#xff09;&#xff1a;Cortex‑M0 / M0&#xff1a;入门、…...

【算法日记】Day 9 动态规划专题——最长递增子序列问题及扩展

Abstract&#xff1a;#动态规划 #最长递增子序列 #二分查找 #排序 1. 题目 题目&#xff1a;LeetCode 354. 俄罗斯套娃信封核心思路&#xff1a;先将信封按宽度升序排序&#xff0c;若宽度相同则按高度降序排序。然后对排序后的高度序列求最长递增子序列&#xff08;LIS&…...

从PyTorch到FPGA:手把手教你将MobileNetV2模型部署到Zynq平台(附完整代码)

从PyTorch到FPGA&#xff1a;手把手教你将MobileNetV2模型部署到Zynq平台&#xff08;附完整代码&#xff09; 在边缘计算领域&#xff0c;FPGA因其低延迟、高能效和可重构特性&#xff0c;正成为轻量级CNN模型部署的理想选择。本文将带您完成一个从PyTorch模型训练到Xilinx Zy…...

boss __zp_stoken__

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 部分python代码result ctx.…...