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

RAG 还是 Lucene:私有化部署客服系统的 AI 知识库架构选型窗

在之前的文章中我们花了大量的篇幅从记录后端pod真实ip开始说起然后引入envoy再解决了各种各样的需求配置自动重载、流量劫持、sidecar自动注入到envoy的各种能力熔断、流控、分流、透明代理、可观测性等等已经可以支撑起一个完整的服务治理框架了而今天介绍的istio正是前面提到的这些所有功能的集大成者从本文开始我们将详细介绍istio并且与之前手搓的功能做一个详细的对比为大家以后选择服务治理的某个功能提供参考istio架构┌──────────────┐│ istiod │ ← 控制面│ (PilotCA) │└──────┬───────┘│ xDS (gRPC / TLS)│┌────────────┐ │ ┌────────────┐│ Envoy │?───┼───?│ Envoy │ ← 数据面│ (Sidecar) │ │ (Sidecar) │└─────▲──────┘ └─────▲──────┘│ iptables ││ │App Pod App Pod数据面就是之前一直在研究的envoy包括4/7代理、熔断、限流、可观测性等等envoy就是执行由控制面下发的配置控制面istiod主要的职责将配置下发到每一个envoy去。由于istio中配置以crd的形式成为了k8s的资源所以要不断的监听k8s apiserver将资源的变化翻译成envoy看得懂的配置并且下发到envoy去至于其余istio的资源我们后面详细介绍istio安装不说废话先把istio安装上去再说首先准备好k8s集群其次下载istio这一步有可能需要上网curl -L https://istio.io/downloadIstio | sh -cd istio-*sudo ln -s $PWD/istioctl /usr/local/bin/istioctl验证兼容性istioctl x precheck开始安装istioctl install --set profiledefault -y由于镜像仓库没法直接使用所以需要一些特殊的方法具体可以看这篇文章 快速拉取docker镜像需要的镜像有docker.io/istio/pilot:1.28.2docker.io/istio/proxyv2:1.28.2安装完成? kubectl -n istio-system get podNAME READY STATUS RESTARTS AGEistio-ingressgateway-865c448856-qs8s2 1/1 Running 0 8sistiod-86c75775bb-j7qbg 1/1 Running 0 12s安装完成要从哪儿开始呢istio的自动注入kubectl label namespace default istio-injectionenabled同之前envoy一样给namespace打上标签之后重启服务即可kubectl rollout restart deploy nginx-test重启之后sidecar已经注入进去了我们来观察一下istio注入到底做了什么事情先describe看看eventsEvents:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 8s default-scheduler Successfully assigned default/nginx-test-6f855b9bb9-9phsv to wilsonNormal Pulled 8s kubelet Container image docker.io/istio/proxyv2:1.28.2 already present on machineNormal Created 8s kubelet Created container: istio-initNormal Started 8s kubelet Started container istio-initNormal Pulled 8s kubelet Container image docker.io/istio/proxyv2:1.28.2 already present on machineNormal Created 8s kubelet Created container: istio-proxyNormal Started 8s kubelet Started container istio-proxyNormal Pulled 6s kubelet Container image registry.cn-beijing.aliyuncs.com/wilsonchai/nginx:latest already present on machineNormal Created 6s kubelet Created container: nginx-testNormal Started 5s kubelet Started container nginx-test1个initContainer1个业务container和1个sidecar其中initContainerInit Containers:istio-init:Container ID: containerd://2bf56cd37703d82a2a43e94e8c8d683ed66b0afe22bf7148a597d67b89a727a8Image: docker.io/istio/proxyv2:1.28.2Image ID: docker.m.daocloud.io/istio/proxyv2sha256:39065152d6bd3e7fbf6bb04be43c7a8bbd16b5c7181c84e3d78fa164a945ae7fPort:Host Port:Args:istio-iptables-p15001-z15006-u1337-mREDIRECT-i*-x-b*-d15090,15021,15020--log_output_leveldefault:info...和之前envoy中劫持流量的做法一样istio依然是使用iptables将端口流量导入到代理之中处理尝试访问一下? curl 10.22.12.178:30785/testi am backend in backend-6d76f54494-g6srz成功再次查看istio-proxy日志。空的为了调试方便将其打开并且输出至控制台kubectl -n istio-system edit cm istioapiVersion: v1data:mesh: |-accessLogFile: /dev/stdout...至此istio的第一个功能探索完毕自动注入sidecar container并且完成了流量劫持Upgrade Required 426 的问题当前的架构是左图现在要前进到右图watermarked-istio_1其实就是在backend注入istio-proxy直接重启就好? kubectl get pod -owideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESbackend-5d4d7b598c-f7852 2/2 Running 0 13s 10.244.0.49 wilsonnginx-test-6f855b9bb9-9phsv 2/2 Running 0 58m 10.244.0.48 wilson注入完成测试一下? curl 10.22.12.178:30785/testUpgrade Required? kubectl logs -f -l appnginx-test -c istio-proxy[2026-01-26T07:54:42.977Z] GET /test HTTP/1.1 426 - upstream10.244.0.48:80 duration6ms routedefault[2026-01-26T07:54:42.978Z] - - - 0 - upstream10.105.148.194:10000 duration9ms route-在nginx注入istio-proxybackend没有注入的时候并没有报错。而一旦nginx与backend都注入的时候就会出现Upgrade Required (426)错误Nginx Sidecar 发现目标Backend是一个纯文本服务它会回退到“透明代理”模式简单地把 Nginx 发出的流量透传出去Nginx Sidecar 发现目标也有 Sidecar它会尝试建立一个高度优化的、基于 mTLS 的隧道关于mTLS后面会详细介绍。如果此时 Nginx 发出的请求头比如缺少 Host 字段或者使用了 HTTP/1.0不符合 Envoy 对这种隧道协议的预期Envoy 可能会向 Nginx 发送一个特殊的响应或者 Nginx 在尝试通过这种隧道通信时因为某些 Header 冲突如 Connection: close自发产生了 426 错误想要解决这个问题有两种方法改造nginx中加入标记location /test {proxy_http_version 1.1; # 必须添加这一行proxy_set_header Host $host; # 这一行也是必须的proxy_pass http://backend_ups;}Nginx 的 proxy_pass 默认使用 HTTP/1.0。在 Istio 环境中HTTP/1.0 不支持长连接Keep-Alive以及一些现代的协议协商这与 Istio SidecarEnvoy默认的 L7 代理行为冲突Istio 需要 HTTP/1.1 来支持复杂连接管理问题改造backend service如果nginx改造有难度那也可以尝试改造backend-serviceapiVersion: v1kind: Servicemetadata:name: backend-servicenamespace: defaultspec:ports:- name: tcp-80 # 原为 http-80 改为 tcp-80port: 10000protocol: TCPtargetPort: 10000selector:app: backendIstio 只有在识别到流量是 HTTP 时才会进行深度的协议检查和转换。如果你把这个服务声明为 TCPIstio 就会将其视为原始字节流进行透传不再关心它是 HTTP/1.0 还是 1.1。优点就是彻底解决 426 问题无需改 Nginx。缺点则是你会失去 Istio 针对该服务的 HTTP 监控指标如请求数、4xx/5xx 统计、分布式追踪以及基于路径的路由功能http 1.0 与 http 1.1这里再简单介绍一下两个协议版本的区别连接管理最显著的区别HTTP 1.0短连接 (Short-lived)默认情况下客户端每发起一个请求都要与服务器建立一次 TCP 三次握手。请求结束并收到响应后TCP 连接立即关闭。如果页面有 10 张图片浏览器就要建立 10 次 TCP 连接。这带来了极高的延迟和资源开销。HTTP 1.1持久连接 (Persistent Connection / Keep-Alive)。默认开启 Connection: keep-alive。一个 TCP 连接可以被多个请求复用。只有在明确声明 Connection: close 或连接超时后才会关闭。在 Istio 中 Envoy 极度依赖持久连接来维持高性能的 Sidecar 间隧道。HTTP 1.0 的频繁断开会让 Envoy 感到“压力山大”甚至认为这是一种非标准的协议行为。Host HeaderHTTP 1.0人们认为一个 IP 对应一个网站所以请求头里不需要带域名信息。HTTP 1.1随着虚拟主机一个 IP 跑多个网站的流行HTTP 1.1 规定请求头必须包含 Host 字段。在 K8s/Istio 中 Istio 的路由决策、Service 的匹配完全依赖 Host 头。这也是为什么 Nginx 使用 HTTP 1.0 转发时如果不手动补全 Host 头后端往往会返回 404 或协议错误。以上是istio必须要求HTTP 1.1最主要的两个因素当然还有其他非常重要的区别特性 HTTP 1.0 HTTP 1.1连接模型 默认短连接每次请求新开 TCP 默认持久连接 (Keep-Alive)复用 TCPHost 头部 可选 (导致无法支持虚拟主机) 必须 (支持一 IP 多域名)流水线 (Pipelining) 不支持 支持 (但在实际应用中受限)断点续传 不支持 支持 (通过 Range 头部)缓存控制 简单 (Expires) 复杂且强大 (Cache-Control, ETag)默认协议版本 许多旧软件(如 Nginx proxy)的默认值 现代 Web 应用的基石标准小结本章内容算是一个开胃小菜成功安装了istio并且解决了一个非常常见的426问题至于怎么把之前在envoy的那些最佳实践搬迁到istio那就是后面的内容了敬请期待后记如果整个namespace都已经有了注入标签istio-injectionenabled但是某个deployment不想让istio注入kubectl patch deployment nginx -p {spec:{template:{metadata:{annotations:{sidecar.istio.io/inject:false}}}}}煞犊党蔷

相关文章:

RAG 还是 Lucene:私有化部署客服系统的 AI 知识库架构选型窗

在之前的文章中,我们花了大量的篇幅,从记录后端pod真实ip开始说起,然后引入envoy,再解决了各种各样的需求:配置自动重载、流量劫持、sidecar自动注入,到envoy的各种能力:熔断、流控、分流、透明…...

IINA:macOS原生级视频播放体验的现代化解决方案

IINA:macOS原生级视频播放体验的现代化解决方案 【免费下载链接】iina The modern video player for macOS. 项目地址: https://gitcode.com/gh_mirrors/iin/iina 在macOS平台上寻找一款既能提供专业级播放功能,又保持系统原生体验的视频播放器&a…...

如何永久保存你的数字记忆:WeChatMsg聊天记录导出与年度报告生成终极指南

如何永久保存你的数字记忆:WeChatMsg聊天记录导出与年度报告生成终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub…...

被忽视的Windows网络加速技巧:禁用QoS保留带宽到底有没有用?(附gpedit.msc完整配置)

被忽视的Windows网络加速技巧:禁用QoS保留带宽到底有没有用? 在Windows系统优化的江湖传说中,"禁用QoS保留带宽提升网速"这个技巧已经流传了十几年。从Windows XP时代开始,各种技术论坛和优化指南都会提到这个"秘技…...

从Java转行大模型应用,Dify 本地部署和可视化智能体创建全流程(低代码 + 脚本)

Dify 是开源低代码 AI 应用开发平台,支持Docker 一键本地私有化部署,通过可视化拖拽即可创建智能体,无需复杂编码,还可通过脚本自动化部署与智能体配置。以下是完整实操方案:一、本地部署(Docker Compose&a…...

化工园区智能一体化巡检平台

平台以数字孪生、AI智能研判、多模态感知为核心技术底座,整合全域数据,实现"一张屏管园区"的高效管控。数据可视化大屏:实时呈现园区设备状态、巡检轨迹、隐患告警等核心信息,支持3D园区模型缩放、旋转,精准…...

嵌入式图形渲染的跨平台解决方案:Adafruit GFX Library技术深度解析

嵌入式图形渲染的跨平台解决方案:Adafruit GFX Library技术深度解析 【免费下载链接】Adafruit-GFX-Library Adafruit GFX graphics core Arduino library, this is the core class that all our other graphics libraries derive from 项目地址: https://gitcode…...

YOLO 11 + Qwen3.5打造一站式视频智能监控分析平台

🧠 整体思路:大小模型协同这套方案的核心在于“大小模型协同”:YOLO11 (小模型 - 感知层):负责底层的实时感知,快速完成目标检测、追踪等任务。Qwen3.5 (大模型 - 认知层):对YOLO11提取的关键信息进行深度理…...

Spring Boot 4.0 Agent-Ready架构调优:为什么93%的团队在-Dspring.aot.enabled=true后反而变慢?3个反模式+2个HotFix配置

第一章:Spring Boot 4.0 Agent-Ready架构性能调优导论Spring Boot 4.0 引入了原生支持 Java Agent 的运行时增强能力,标志着 JVM 应用可观测性与性能治理进入新阶段。Agent-Ready 并非仅指兼容字节码增强工具,而是通过标准化的 Instrumentati…...

银河麒麟系统(arm64)下基于CMake的GEOS3.8.2编译实战指南

1. 银河麒麟系统与GEOS编译背景 最近在国产化替代的大背景下,越来越多的开发者开始接触银河麒麟操作系统。作为一款基于Linux的国产系统,银河麒麟在arm64架构上的表现相当出色,但同时也带来了新的挑战——很多常用的开源库并没有现成的arm64…...

OpenClaw权限管理:千问3.5-35B-A3B-FP8操作边界精细控制方案

OpenClaw权限管理:千问3.5-35B-A3B-FP8操作边界精细控制方案 1. 为什么需要权限管理? 去年夏天,我差点因为一个自动化脚本酿成大祸。当时我让OpenClaw帮我整理财务表格,结果因为模型误解了指令,差点删除了整个账本目…...

LabView用户登录程序:密码登录系统、用户管理、Access数据库制作

labview用户登录程序,可以直接用做密码登录系统,用户管理,实用强,使用方便,采用access数据库制作。最近在搞一个LabVIEW的项目,需要实现一个用户登录系统,顺便还带点用户管理的功能。琢磨了一下…...

行式存储(Row-based Storage)和列式存储(Column-base Storage)简介蚜

1. 哑铃图是什么? 哑铃图(Dumbbell Plot),有时也称为DNA图或杠铃图,是一种用于比较两个相关数据点的可视化图表。 它源于人们对更有效数据比较方式的持续探索。 在传统的时间序列比较中,我们通常使用两条…...

Midscene.js:用自然语言重新定义UI自动化,告别繁琐代码时代

Midscene.js:用自然语言重新定义UI自动化,告别繁琐代码时代 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 还在为编写复杂的UI自动化脚本…...

打破CAD数据孤岛:ACadSharp如何革新.NET平台的工程文件处理范式

打破CAD数据孤岛:ACadSharp如何革新.NET平台的工程文件处理范式 【免费下载链接】ACadSharp C# library to read/write cad files like dxf/dwg. 项目地址: https://gitcode.com/gh_mirrors/ac/ACadSharp 在数字化设计与智能制造深度融合的时代,工…...

Ostrakon-VL-8B商业应用:自动识别促销堆头高度/位置/物料完整性标准

Ostrakon-VL-8B商业应用:自动识别促销堆头高度/位置/物料完整性标准 1. 引言 如果你在零售行业工作,特别是负责门店运营或市场促销,一定遇到过这样的烦恼:公司花大价钱设计的促销堆头,到了门店执行时却五花八门。有的…...

【Debug】从 cv2 导入失败到 numpy + BLAS 根因:一次 conda 虚拟环境重建实录

从 cv2 导入失败到 numpy BLAS 根因:一次 conda 虚拟环境重建实录 表面上看,这是一次 cv2 导入失败的问题;真正追到最后,根因却落在 numpy 初始化底层 BLAS 运行库的阶段。更重要的是,这个问题并不是简单的“环境脏了…...

OpenClaw智能写作:Qwen3.5-9B驱动的草稿生成与优化

OpenClaw智能写作:Qwen3.5-9B驱动的草稿生成与优化 1. 为什么需要AI写作助手? 作为一个经常需要输出技术文档的开发者,我发现自己总在重复同样的困境:面对空白文档时大脑一片空白,写完后又陷入无休止的语法检查和格式…...

Java AES/ECB/PKCS5Padding加解密实战:从JCE配置到Base64/Hex输出

Java AES/ECB/PKCS5Padding加解密实战:从JCE配置到Base64/Hex输出 在数据安全日益重要的今天,加密技术已成为开发者必备的技能之一。AES(Advanced Encryption Standard)作为目前最常用的对称加密算法,因其安全性和高效…...

6G这事,我研究了3个月,说点不太好听的实话

🧠《6G这事,我研究了3个月,说点不太好听的实话》🪓一、先泼冷水:大部分人根本不需要6G这话可能不太讨喜,但先说结论: 👉 90%的人,用不上6G你现在用手机: 刷视…...

告别if-else地狱!在Godot 4.4里用状态机重构你的2D角色控制器

告别if-else地狱!在Godot 4.4里用状态机重构你的2D角色控制器 当你的2D平台游戏角色开始拥有跑跳、攻击、滑铲等复杂动作时,脚本里层层嵌套的if-else判断会像野草般疯长。上周我接手一个项目,发现玩家控制器脚本竟有200多行条件判断——添加新…...

Wonder3D:2-3分钟从单张图片生成高质量3D模型的完整指南

Wonder3D:2-3分钟从单张图片生成高质量3D模型的完整指南 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 单图生成3D模型一直是计算机视觉领域的挑战性…...

深入Navicat的AES加密机制:手写Python代码还原其密钥生成与加解密流程

深入Navicat的AES加密机制:手写Python代码还原其密钥生成与加解密流程 数据库管理工具Navicat在连接配置文件中采用AES加密存储密码字段,其固定密钥和初始向量的设计引发了安全研究者的广泛讨论。本文将带您从密码学原理出发,逐步拆解Navicat…...

AI时代的算法思维:大经典排序学习拐

引言 在现代软件开发中,性能始终是衡量应用质量的重要指标之一。无论是企业级应用、云服务还是桌面程序,性能优化都能显著提升用户体验、降低基础设施成本并增强系统的可扩展性。对于使用 C# 开发的应用程序而言,性能优化涉及多个层面&#x…...

calicoctl安装

下载二进制文件 # curl -L https://github.com/projectcalico/calico/releases/download/v3.21.4/calicoctl-linux-amd64 -o calicoctl为calicoctl添加可执行权限 # chmod x calicoctl安装calicoctl # mv calicoctl /usr/bin/查看添加权限后文件 # ls /usr/bin/calicoctl /usr/…...

Web自动化测试—如何生成高质量的测试报告?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 运行了所有测试用例,控制台输入的结果,如果很多测试用例那也不能够清晰快速的知道多少用例通过率以及错误情况。 web自动化测试实战之批量…...

被拉黑还有补救的方法吗?别慌,这样做反而更容易挽回

被拉黑的那一刻,很多人都会瞬间慌了神。是不是彻底结束了?是不是再也没有机会了?是不是不管做什么,都只会让对方更反感?你拼命想解释,却发不出消息;想道歉,却连门口都靠近不了&#…...

Spring with AI (): 搜索扩展——向量数据库与RAG(下)诼

. GIF文件结构 相比于 WAV 文件的简单粗暴,GIF 的结构要精密得多,因为它天生是为了网络传输而设计的(包含了压缩机制)。 当我们用二进制视角观察 GIF 时,它是由一个个 数据块(Block) 组成的&…...

如何从零开始组装高性能Voron 2.4 CoreXY 3D打印机:新手完整指南

如何从零开始组装高性能Voron 2.4 CoreXY 3D打印机:新手完整指南 【免费下载链接】Voron-2 Voron 2 CoreXY 3D Printer design 项目地址: https://gitcode.com/gh_mirrors/vo/Voron-2 还在为商业3D打印机的高昂价格和有限性能而烦恼吗?今天我要为…...

OpenClaw投资分析:Qwen3.5-9B处理财经新闻与报表摘要

OpenClaw投资分析:Qwen3.5-9B处理财经新闻与报表摘要 1. 为什么选择本地化金融数据处理方案 去年我在尝试搭建个人投资分析系统时,遇到了一个典型困境:既需要大模型处理海量财经信息,又担心将敏感财务数据上传到公有云的风险。经…...