当前位置: 首页 > 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的各种能力:熔断、流控、分流、透明…...

Clawdbot汉化版代码实例:crontab定时任务+每日天气报告Telegram推送

Clawdbot汉化版代码实例:crontab定时任务每日天气报告Telegram推送 1. 项目概述与使用场景 Clawdbot汉化版是一个可以在微信、WhatsApp、Telegram等社交平台中使用的智能对话助手。与传统的在线AI服务不同,Clawdbot完全运行在用户自己的设备上&#xf…...

Pi0智能教育助手:个性化学习路径推荐

Pi0智能教育助手:个性化学习路径推荐 教育不是填鸭式的灌输,而是点燃学生内心的火焰。每个学生都有独特的学习节奏和方式,而传统教育往往难以满足这种个性化需求。 1. 为什么教育需要个性化? 你有没有遇到过这样的情况&#xff1…...

从Linux驱动本质到IgH EtherCAT完整流程:一篇彻底打通驱动、配置、库、硬件的硬核博客

在做EtherCAT运动控制、机械臂开发、机器人控制系统时,几乎所有人都会遇到一连串灵魂拷问:- Linux驱动到底是什么?- 为什么用户程序不能直接操作硬件?- ethercat.conf 绑定MAC、设置 generic 到底有什么用?- 用户程序…...

为什么专业编剧都在用Trelby?免费开源剧本写作软件的终极指南

为什么专业编剧都在用Trelby?免费开源剧本写作软件的终极指南 【免费下载链接】trelby The free, multiplatform, feature-rich screenwriting program! 项目地址: https://gitcode.com/gh_mirrors/tr/trelby 你是否曾经因为剧本格式问题而烦恼?是…...

Qwen3.5-2B轻量化教程:从模型下载、环境配置到7860界面访问完整链路

Qwen3.5-2B轻量化教程:从模型下载、环境配置到7860界面访问完整链路 1. 前言:认识Qwen3.5-2B轻量化模型 Qwen3.5-2B是Qwen3.5系列中的轻量化多模态基础模型,仅有20亿参数规模,专为低功耗设备优化设计。这个版本特别适合需要在端…...

我不是狐狸,我是那Harness Engineering廖

Julia(julialang.org)由Stefan Karpinski、Jeff Bezanson等在2009年创建,目标是融合Python的易用性、C的高性能、R的统计能力、Matlab的科学计算生态。 其核心设计哲学是: 高性能:编译型语言(JIT&#xff0…...

戴尔笔记本风扇控制终极指南:如何精准管理散热与噪音

戴尔笔记本风扇控制终极指南:如何精准管理散热与噪音 【免费下载链接】DellFanManagement A suite of tools for managing the fans in many Dell laptops. 项目地址: https://gitcode.com/gh_mirrors/de/DellFanManagement 你是否曾因戴尔笔记本风扇噪音过大…...

500+ RPG Maker插件终极指南:如何快速提升你的游戏开发效率

500 RPG Maker插件终极指南:如何快速提升你的游戏开发效率 【免费下载链接】RPGMakerMV RPGツクールMV、MZで動作するプラグインです。 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerMV 你是否正在为RPG Maker MV和MZ寻找高质量的插件资源&#xff…...

Mac外接显示器必看:从排列到亮度调节的完整避坑指南

Mac外接显示器完全指南:从基础设置到高阶调校 开篇:为什么你的Mac需要外接显示器? 作为一名长期使用MacBook Pro的深度用户,我清楚地记得第一次连接外接显示器时的困惑与惊喜。那块13英寸的Retina屏幕虽然精致,但在处理…...

国产FPGA进阶:紫光PDS中adf网表的5种应用场景与性能对比

国产FPGA进阶:紫光PDS中ADF网表的5种应用场景与性能对比 1. 技术背景与核心价值 在FPGA设计领域,网表文件作为设计流程中的关键中间产物,其应用方式直接影响项目的开发效率和质量控制。紫光同创PDS工具链中的ADF(Advanced Design …...

C语言期末突击:手把手教你搞定吉林大学计算机系高频考题(附完整代码)

C语言期末突击:吉林大学计算机系高频考题深度解析与实战指南 期末考试临近,对于吉林大学计算机系的同学们来说,C语言程序设计无疑是重点科目之一。面对复杂的指针操作、链表处理和递归算法,很多同学感到无从下手。本文将从历年高频…...

SetDPI完全指南:掌握Windows多显示器DPI缩放控制的高效方案

SetDPI完全指南:掌握Windows多显示器DPI缩放控制的高效方案 【免费下载链接】SetDPI 项目地址: https://gitcode.com/gh_mirrors/se/SetDPI Windows多显示器DPI缩放控制一直是专业用户面临的痛点,SetDPI作为一款开源命令行工具,提供了…...

BERT文本分割模型部署:为语音转写稿添加段落结构

BERT文本分割模型部署:为语音转写稿添加段落结构 1. 引言:语音转写稿的结构化困境 在会议记录、在线课程、访谈整理等场景中,我们经常需要将语音内容转换为文字稿。虽然自动语音识别(ASR)技术已经相当成熟,但生成的文本往往缺乏…...

FPGA双边滤波实战:如何用查找表(LUT)和流水线设计搞定实时图像去噪

FPGA双边滤波实战:如何用查找表(LUT)和流水线设计搞定实时图像去噪 在嵌入式视觉系统中,实时图像处理一直是开发者面临的核心挑战之一。无论是无人机避障、工业质检还是医疗内窥镜,对1080p60fps视频流的实时去噪需求日…...

收藏!小白程序员必看:如何低成本精准选型大模型,避免花冤枉钱?

选择大模型的关键在于匹配自身需求,需结合成本预算、技术能力、业务场景、合规要求四大维度进行筛选。文章提出先明确核心需求,拒绝参数崇拜,再根据个人开发者、小团队、垂直领域用户等不同类型给出具体选型建议。同时,文章还提醒…...

终极解决方案:如何让AMD显卡驱动轻装上阵

终极解决方案:如何让AMD显卡驱动轻装上阵 【免费下载链接】RadeonSoftwareSlimmer Radeon Software Slimmer is a utility to trim down the bloat with Radeon Software for AMD GPUs on Microsoft Windows. 项目地址: https://gitcode.com/gh_mirrors/ra/Radeon…...

CoPaw多模态理解初步探索:处理图像描述与图文关联任务

CoPaw多模态理解初步探索:处理图像描述与图文关联任务 1. 多模态理解的新尝试 最近在测试CoPaw模型时,我发现一个有趣的现象:虽然它并非原生支持多模态输入,但通过巧妙的提示工程,这个文本模型竟然能展现出对图像内容…...

WinBtrfs:让Windows用户也能享受Btrfs文件系统的强大功能

WinBtrfs:让Windows用户也能享受Btrfs文件系统的强大功能 【免费下载链接】btrfs WinBtrfs - an open-source btrfs driver for Windows 项目地址: https://gitcode.com/gh_mirrors/bt/btrfs WinBtrfs是一款专为Windows系统设计的开源Btrfs文件系统驱动程序&…...

MiniCPM-o-4.5-nvidia-FlagOS实战案例:企业级图文多模态助手在客服场景中的应用

MiniCPM-o-4.5-nvidia-FlagOS实战案例:企业级图文多模态助手在客服场景中的应用 想象一下,你的电商客服每天要处理上百张用户发来的商品图片,询问“这个衣服是什么材质?”、“这个零件怎么安装?”、“这个食品过期了吗…...

告别固定指纹:手把手教你修改Chromium源码,实现TLS JA4指纹随机化

深度定制Chromium:实现TLS JA4指纹动态随机化的完整实践指南 在当今高度监控的网络环境中,浏览器指纹识别已成为追踪用户行为的主要手段之一。TLS JA4指纹作为新一代网络指纹技术,能够通过分析客户端在SSL/TLS握手阶段提供的加密套件顺序来唯…...

快速上手LingBot-Depth:从镜像部署到深度图生成全流程

快速上手LingBot-Depth:从镜像部署到深度图生成全流程 1. 认识LingBot-Depth:深度感知的智能助手 1.1 深度图生成的核心价值 想象一下,当你看到一张照片时,大脑能自动判断画面中物体的远近关系——近处的树木轮廓清晰&#xff…...

如何自动化管理音乐元数据:开源音乐标签编辑器实战指南

如何自动化管理音乐元数据:开源音乐标签编辑器实战指南 【免费下载链接】music-tag-web 音乐标签编辑器,可编辑本地音乐文件的元数据(Editable local music file metadata.) 项目地址: https://gitcode.com/gh_mirrors/mu/music…...

深度解析Windows 11系统优化:3大高效修复策略实战指南

深度解析Windows 11系统优化:3大高效修复策略实战指南 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher Windows 11更新后&#xff0…...

个人品牌视觉打造:SPIRAN ART SUMMONER AI Agent学习你的偏好,定制专属头像与海报

个人品牌视觉打造:SPIRAN ART SUMMONER AI Agent学习你的偏好,定制专属头像与海报 1. 为什么需要AI驱动的个人品牌视觉 在数字时代,个人品牌视觉识别度直接影响专业形象和社交影响力。传统设计流程面临三个核心痛点:高昂的设计成…...

如何快速使用Diff Checker:面向初学者的完整文本对比指南

如何快速使用Diff Checker:面向初学者的完整文本对比指南 【免费下载链接】diff-checker Desktop application to compare text differences between two files (Windows, Mac, Linux) 项目地址: https://gitcode.com/gh_mirrors/di/diff-checker 你是否经常…...

高通Camera开发实战:ION内存与DMA-BUF的跨进程共享机制详解

高通Camera开发实战:ION内存与DMA-BUF的跨进程共享机制详解 在移动影像系统的开发中,内存管理始终是性能优化的核心战场。当Camera HAL层需要处理4K60fps视频流或超高分辨率连拍时,传统的内存拷贝方式会带来难以忍受的性能损耗。ION内存分配器…...

League Akari:5个核心技术模块深度解析与进阶配置指南

League Akari:5个核心技术模块深度解析与进阶配置指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一款基于LCU …...

SITS2026圆桌绝密推演(首次对外释放):当算力成本年降37%,AI原生研发的ROI拐点已提前至第8.2个月——附5步校准路径

第一章:SITS2026圆桌:AI原生研发的投资回报 2026奇点智能技术大会(https://ml-summit.org) 从成本中心到价值引擎的范式迁移 传统研发效能度量聚焦于人天、代码行数与缺陷率,而AI原生研发将核心指标转向“模型驱动交付周期”(MD…...

终极指南:如何用ArchivePasswordTestTool轻松找回遗忘的压缩包密码 [特殊字符]

终极指南:如何用ArchivePasswordTestTool轻松找回遗忘的压缩包密码 🔓 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool …...