- 博客(38)
- 收藏
- 关注
原创 节点调度优化 + redis 现有问题优化
业务场景:对于在pod内部存储了连接状态,因为我的SSE 在多进程业务中是使用的map内部存储的 如果map里已经存在则使用命中缓存 这种情况下 如果连接失败了重新连接的时候调度到别的pod内则会造成内存没有正确释放 有僵尸进程。因为nlb和 gateway pod所在的可用区不一定相同 经常出现需要跨可用区请求访问 这个无法避免 但是流量从gateway到后端业务pod时 可以针对可用区节点的调度进行优化。从gateway转发请求时优先转发给同可用区的pod。# 配置节点分散可用区部署。
2026-10-21 01:44:24
155
原创 K8S部署踩坑总结
中台连接集群,~/.kube/config 下面配置文件 单集群 (如果后期要多集群切换的话 --kubeConfig指定配置文件切换集群 或者其他方案 这个后续研究~)中台服务器 集群 集群节点需要在同一个VPC下面 集群节点添加到集群中 需要在被添加的节点服务器上 运行云厂商命令 成功后 使用kubelet 查看。本文的环境是使用阿里云ACK托管集群,项目结构是ecs中台管理器,ecs前端+mongodb数据库,集群中目前暂时一个节点服务器 后台服务集群。集群需要访问外部服务 mongodb。
2026-06-05 18:52:20
378
原创 k8s生产实际问题排查(网关,数据库读写等)
设置sessionid的时机,应该在onopen的时候,因为onmessage是当服务端主动推送数据时才会触发,如果只在onmessage的时候设置,有可能会造成部分会话丢失,因为没有及时在请求头中携带x-mcp-session-id 具体实现代码如下。higress和 nginx的配置可能会有所差异,如果当前的网关已经是higress管理的话,使用nginx的方式配置可能不会生效,如果是route not found则是网关没生效,找不到对应的网关请求路径,根据path能看到实际请求的地址,
2026-11-07 04:23:58
159
原创 ai agent 多会话切换 长短记忆 human in loop 实战总结
业务逻辑 当从agent返回的最新的message里 如果存在 interreup则 判断需要执行中断逻辑 则通过sse通知到前端 前端接受通知后渲染需要进行判断的ui 当前端手动触发 确定 或者拒绝 ,触发后端接口 接口里继续执行 agent.invoke command thread_id要和中断前保持一致 其余配置或者参数也需要和之前中断的agent一致 ,agent会自动识别执行到对应的tool。c) thread_id 并且在ttl 有效时间范围内。长期记忆 mongoStore存储库。
2026-11-02 11:14:53
21
原创 关于多进程sse连接通知的实战
当我们开ai agent的时候需要从后端推送给前端消息,通过sse ,如果后端项目是运行的多进程,此时对于多进程下的sse连接管理,和前端连接,就需要一个完整的方案,如果处理不好就会出现冗余连接未删除,后端通知丢失,前端频繁触发后端close等问题,本文则是针对这些实际问题总结出解决方法。
2026-10-27 02:46:10
149
原创 higress网关访问+ 模型访问的安全策略管控
kubectl logs -n higress-system -l app=higress-gateway --tail=-1 | grep -i "ip-restriction" 查看请求的源ip。nginx.ingress.kubernetes.io/whitelist-source-range 配置允许访问的白名单地址 注意直接配置后 静态资源的路径问题。在修改higress gateway服务配置的时候 通过helm upgrade --reuse-values -f .yaml 因为。
2026-09-29 18:09:47
219
原创 helm 托管 + higress 网关
kubectl get svc -n higress-system获取 地址+端口 如果能成功看到 internalip 则loadBalance运行成功 方位 internalIp +port 如果为null 则使用 nodeIp (node服务器节点)+port进行访问 需要在node服务器的安全组入方向开启port端口。helm install mongodb ./xx-chart -n backend-space --dry-run=server 本地运行。开启higress ai网关配置。
2026-09-24 01:46:58
211
原创 K8S基础组件作用和关系整理
api-server 集群的整体网关 用于创建集群资源 集群的统一入口 所有节点的调度控制 都通过apiserver 用于查询或者修改集群内资源的状态。kube scheduler 节点调度 用于调度 发现新的未被分配的pod 到合适的node节点 通过apiServer监听资源 发现未被分配的pod。controller manager 用于维护节点的扩容 缩容 亲和性 污点节点处理 通过 apiServer监听资源 状态 进行维护。kube-proxy 将cluster ip等 解析为podip。
2026-09-07 15:51:24
221
原创 langchain V1+ createAgent 使用与 withTools 对比与实战
model就是llm tools就是工具数组 这些都可以复用,但要注意 createAgent比bindTools 的优势就在于是会进行多轮尝试,当他认定回调执行失败后就会自动再次执行识别,而我的项目里有时用到异步任务队列,在识别完成后返回到前端的是识别结果但不是执行工具回调的结果,所以需要在回调里明确返回 '任务已成功提交到后台任务队列,等待后台处理,请耐心等待。let messages = [['system', '你是一个智能助手,根据用户需求选择合适的接口API,并返回对应的参数。
2026-09-03 18:05:49
212
原创 redis集群部署与连接
1)运行时机,有可能再运行sentinel 读取 configMap时 master pod还没有运行 2)dns解析的结果是有延迟的,即使master 已经运行 也不能保证 通过configMap里获取的是最新的dns解析的结果 所以直接在 sentinel command里面使用命令 getent host手动获取dns解析结果 是最稳妥的。livenessProbe 健康检查 + restartPolicy重启策略。开启服务的时候 先开启master ->slave->sentinel。
2026-08-28 17:17:46
221
原创 configMap定义和使用
volumes 定义卷的名称 name configMap声明使用configMap items key path 使用configMap里的指定key value。volumesMounts name mountPath 卷名称 挂载容器内的路径。metadata name 定义。或者emptyDir仅声明卷数据。
2026-08-16 02:58:10
19
原创 clusterIp 与 statefulSet+headless 配置和使用场景对比
但是 headless + statefulSet 返回的是podip 客户端和pod 连接都需要通过podIp连接 假设 pod名称为 mongodb 如果单个为mongodb-0 后期扩展多个副本时 为mongodb-0 ,mongodb-1... 连接配置为 mongodb-0?因为 clusterIp 返回的是虚拟地址 直接通过 [serviceName].[namespace].svc.cluster.local。关于主从策略的分配 只要pod之间的访问打通 mongodb会自动进行主从分配。
2026-06-25 23:32:55
257
原创 k8s配置文件
containerPort: 3300 # 容器监听的端口 要与 service里面 spec.ports.port 容器监听端口一致。selector.matchedLabels 用于持续管理设置的标签 将其归入当前deployment的管辖范围。app: Pod 的标签(关键!)要与 service里面 selector.spec.app 标签对应。app: Deployment 自身的标签。app: 匹配要管理的 Pod 标签。app: 匹配 Pod 的标签(关键!
2026-06-17 12:30:03
188
原创 openresty 和nginx配置进阶
解压安装包 通过./configure --with指定参数 通过nginx -V / openresty -V 查看当前安装的版本 和安装时携带的模块 在./configure -with时携带之前的模块 并加载指定路径下的新模块 make 生成新的二进制文件 注意不要 make install。1.如果后端报错直接返回500 可以直接使用 upstream。使用lua脚本 直接使用openresty更方便。Kill - WINCH 关闭旧的 master。kill -USR2 开启新的master。
2026-04-17 01:21:21
100
原创 模块联邦和monorepo实战比较和pnpm包管理工具
所有的子项目都需要是pnpm的项目 我之前vue项目直接通过vue create 创建 是 npm的项目所以在安装本地依赖的时候一直报错,可以通过pnpm recursive ls查看当前workspace 如果和项目结构对应的workspace都存在则没有问题。可以看到一个核心区别是项目结构,多仓和单仓,还有模块联邦是远程组件,如果远程组件服务出问题则会影响所有使用的页面,apps下的项目则可以通过 pnpm add 组件包名 -w将其安装本地依赖。一般来说一个标准的monorepo项目结构为。
2026-03-04 17:43:52
352
原创 多平台部署脚本兼容
可以使用node os.platform判断当前系统 然后 spawn执行对应的脚本命令 使用spawn而不是exec 是因为可以将命令控制台的打印同步到spawn执行的输出中 而不是像exec会形成无响应 等到全部执行完成再输出,容易阻塞,不方便定位问题 对于npm run dev / build区分 可以通过cross-env 增加环境变量 再node里 process.env. 进行获取 cross-env可以解决linux 和window命令行里设置环境变量写法不统一的问题。
2026-02-26 17:53:40
39
原创 原生js的h5项目 babel对es6语法的处理配置
最后除了原文件外会新增一个 转化后的js 和maps对应文件 将其部署到生产环境时,点击文件的对应行数即可直接定位到原文件的对应位置。在项目的根目录下,npm i @babel/cli @babel/preset-env @babel/core corejs。当你通过babel进行代码转化后 生成的文件是压缩混淆过的 非常不便于阅读理解 如果直接部署到生产 当有问题时也不方便定位。target可以根据自己的实际项目来设置,看需要兼容ie chorme的版本是多少,
2026-02-11 21:25:17
47
原创 vuecli配置多页面+history模式路由完整配置
historyApiFallback的作用是 对于不同页面访问不存在的子路由 能够跳转到对应的多页面的index 不能直接像单页面配置一样 true 否则会跳转到index。注意 每个配置的页面都需要当作一个完整的单页面应用配置完整的一套 public/XXX.html main.js入口文件 分别注册子应用。每个页面的路由需要配置 base 基础路由路径 base与 实际 访问路径 页面 rewrite from 一致。
2026-02-02 17:44:28
59
原创 docker相关知识和优化
通过容器名称直接进行容器间的自定义网络通信 ,这样的好处是 比容器端口映射到宿主机 进行端口和端口之间的访问相应要快的多。假如contianer1为前端项目 container2为后端服务项目 在前端项目的nginx配置中 直接通过。docker create network [net1] //这里的net1是指自定义网络的名字。发现除了上面的容器端口映射到宿主机 然后进行外部访问 还可以通过。
2025-12-28 02:50:20
299
原创 记录一次el-dialog拖拽用户体验优化
不要修改position top left (具体和浏览器的渲染逻辑有关 )4.mousemove事件里 改变transform时 通过。3.在mousedown 绑定mousemove事件。包裹处理 匹配浏览器刷新试图的频率 将动画更加平滑。如果拖拽的div内部嵌套内容过多 需要增加。阻止其他的冒泡事件 造成性能阻塞。将内部元素单独放在新的GPU层。mouseup时 要进行解绑。2.需要给拖拽的元素增加。修改transform。在mousedown。
2025-12-17 11:29:00
225
原创 langchain 自然语言转化接口参数和url
这里apiKey字段当作每个接口定义的唯一标识 ,langchain识别也是通过,自然语言关键字对应到apiKey进行匹配。下面是接口字典 ,会放在prompt里面 就是这边的name1 与 上面schema里的apiKey对应。返回的对应schema格式的匹配结果 可以根据返回对象里的url 进行接口请求。需要通过z.descrimination 定义联合接口的schema。prompt里需要包含接口字典,用户输入内容和格式化的解析器。
2025-12-12 09:27:15
236
原创 nginx常见问题记录
之前学习了nginx的基本配置后 个人项目运用过 正好最近公司的项目需要将手上的工作独立拆分出来 于是就需要我这独立配置一套新的nginx 在过程中也发现了不少之前没注意到的问题 (所以说实践还是检验问题的唯一方法啊 汗(lll¬ω¬) )话不多说 我们快速进入正题。
2025-11-15 21:45:14
331
原创 qiankun/microApp微前端集成vue和react项目实战踩坑
最近除了自己开发一个协同办公的项目以外,又尝试用react开发了一个简易的低代码平台,了解到了微前端技术后,想尝试下使用微前端将现有的vue开发的协同办公和react低代码平台集成在一个项目里,特此用文章记录下中间的踩坑过程,如有不准确的地方,欢迎大家一起讨论技术选型。
2025-11-14 16:51:39
1098
原创 docker日志定时分割
通常在docker运行后 docker logs [ container name ] 获取运行的容器日志 但长期会产生大量日志数据 无法快速定位到问题信息 所以定时日志分割 和清理就很必要 本文主要记录docker运行后 定时切割运行容器中的nginx日志。
2025-10-21 00:16:17
293
原创 记录一次elementui table嵌套el-autocomplete位置偏移解决引发的问题
想着直接根据当前的弹窗进行定位 但修改了以后 发现一个问题 由于table 的层级很高 导致底部的border会遮挡在下拉框上 而且当弹出层滚动时 也会直接触发table的滚动而不是当前下拉弹出层的滚动 根本原因其实还是层级问题 并且 此时不管你怎么修改下拉弹出层的z-index 都无效。top的动态设置 我是使用了css变量和calc进行计算的 而上面的index 和 h4则记在css变量里 方便计算。获取当前行数的index 及 dialog距离文档顶部距离 -- h1。
2025-05-22 10:37:50
430
原创 vite自定义插件总结
还可以借用第三方插件库 babel-parse babel-traverse 写法和babel插件的写法类似。之前总结过webpack自定义插件,今天准备总结下vite自定义插件的关键点。参数 options是 使用插件实例时 传入的options。可以在此修改模块路径 名称 等。除此之外还有一些生命周期钩子。
2025-05-20 16:01:25
332
原创 记一次undefined 空字符串 null值比较引发的问题
结果之前做一个功能需要在表格里将后端回传的数据 进行格式化处理 当时的判断条件做的是 当 变量==’‘ 则不进行处理 那个时候后端返回的也是'' 所以并未发现异常 结果上了生产后 突然发现所有无值的都默认进行了转化操作 看了下后端回传的数据是null 经过验证才发现== null 和 =='' 结果是不一样的 (wtf)看来有很多细节平时还是需要多注意,准备再将== 的结果 进行一个系统的总结。之前印象中一直以为空字符串 == null | undefined。最后解决方案是将判断条件变成了!
2025-05-19 09:10:22
188
原创 记一次通过两个接口控制变量引发的回显问题
由于项目中有两个变量是通过不同的接口进行返回 ,现需要通过这两个变量控制页面第三个变量的显示及置灰效果,思路是通过computed进行及时控制,但是 此时被联动控制的变量需要知道是要被赋值修改 还是使用原本已经获取的接口传递的原始值。一开始 我是直接在接口里直接进行判断赋值 ,但是由于上面控制的两个变量是接口里获取,无法掌握变化的时机,对于。
2025-03-29 01:13:19
162
原创 react基本用法总结
内部的状态管理 钩子 常用的是useState ,可以通过过useState 初始化状态和改变状态的方法 具体如下 对于useState的dispatch改变状态方法 最佳使用方法是传入回调方法进行赋值 这样才能保证每次修改后都会及时更新。不同于 vue props emit的传参和触发事件 react直接通过props 传递参数 和方法 (子组件直接调用传递的方法即可触发父组件里的绑定事件)2.对于元素的事件绑定的两种方法( 直接在行内调用 / 通过定义的函数进行调用 )关于 生命周期函数钩子。
2025-03-25 09:21:22
734
原创 记录wujie学习过程中的踩坑
最近自己在独立进行协同办公项目的时候,想到如果后期要在项目中集成多个项目拓展功能,并且公司业务里也出现了一个平台汇集了多个项目,一方面代码量巨大,打包速度缓慢,另一方面每次修改部署,有可能因为一个平台的功能从而影响到另一个平台造成阻塞性错误,此时 采用微前端其实是不错的方案,上网查了些资料,发现wujie 框架的上手门槛较低,特此记录下学习中遇到的一些问题。
2025-03-20 10:20:38
813
原创 vite+vue3项目打包实战问题总结
在使用vite进行一系列配置后,本地开发模式正常,结果部署上线发现白屏报错了,结果在本地打包运行后发现确实有问题 =_=|| 经过排查还是vite 配置的问题,特此用文章记录下 ,方便以后规避相同错误。1.rollup external配置有误引发的 module "vue" ./ relative path not module。暂时解决,将external的配置先注释,直接进行打包 ,没有报错,但治标不治本,如果我就是想使用external 单独分离,
2025-02-26 10:45:28
688
原创 记录自动化部署前(Vue)后端(express)项目的实操过程
自动化是可以及时根据github上的最新代码 因为配置了webhook在每次提交的时候 都会触发一遍流水线打包部署重启nginx的流程 也就是手动打包dist 上传并配置nginx 重启的过程。docker build -t XXX . 表示会在当前目录下找对应的XXX dockerFile 文件。ADD XXX YYY 将XXX拷贝到镜像的YYY中 XXX可以是远程url。
2025-01-07 16:23:14
595
原创 webpack自定义插件相关
complication.chunks -->chunks里有多个模块 可通过chunk.modulesIterable进行遍历获取 模块里有多个依赖 可以通过 module.dependencies 获取依赖信息 compilaction.plugins 可以扩展已有的插件 第一个参数是插件事件 第二个是callback)compiler.hooks.[具体钩子名称].[触发方式]compiler compiler里面可以设置钩子方法。先创建一个构造函数(可传入config)Webpack 提供三种。
2025-01-06 16:56:00
449
原创 webpack插件清除打包后html缓存
以上代码会生成一个记录打包时间戳的version.json文件 在静态文件目录static下,然后通过axios对该文件进行访问 将值记录在localstorage 并可以进行比对 如果不相等则强制刷新页面 具体代码如下。项目中打包上环境后总是会有一些旧版本的文件缓存 今天经过仔细排查发现是因为访问的html没有及时响应最新版本 上网搜了很多方法 经验证自定义webpack插件 生成version文件进行对比更新是有效的 特此记录下。自定义的webpack插件。
2024-12-24 20:24:34
412
原创 webpack 优化配置梳理
对于webpack 异步加载的模块(require.ensure / ()=>import(''))都是runtime模块 如果设置false 则在运行模块改变时 直接改变app.js的hash 如果设置true|single...则会单独生成runtime 的js。require.ensure([],()=>{ require() },'chunkName') 第三个参数指定分出的chunk名称 ,需要配合output配置。optimization:runtimeChunk 打包运行时的模块。
2024-12-19 22:08:37
381
原创 ES6 proxy 属性实现 表单数据提交之前校验拦截
最近在学习ES6的特性 看到proxy代理 上网查了一下运用场景看到有用proxy 可以进行表单提交数据拦截 所以敲一个demo记录一下话不多说 贴代码<!-- html部分 --><form action=""> <div> <label for="">姓名</label><in...
2020-04-16 09:13:03
605
原创 vue实现购物车功能
通过官网和视频的学习,使用vue写出了购物车的功能下面直接上代码<style> p{ margin:0; } ul,li{ list-style:none; padding:0; margin:0; } .car...
2018-03-14 09:22:38
504
原创 Vue插槽--解决点击整体而不是局部获取id
因为最近在学习vue.js,正好之前遇到一个公司的项目,做一个单一活动页,里面每个产品介绍的样式都是统一的,因为公司项目不方便截图展示,那我就用一个粗糙简略的页面代替一下假设说我想做如上的效果,然后点击整个蓝色部分可以获取当前id,之前在做的时候尝试着使用了v-for,确实实现了静态页面,稍微写下代码: rabbit
2018-01-11 16:44:39
920
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅