高并发系统设计-限流

高并发系统设计-限流 一、什么是限流 限流(Rate Limiting)是指限制单位时间内允许进入系统的请求数量。 简单来说,就是: 控制流量进入系统的速度,而不是等系统崩溃之后再处理。 例如: 某接口限制:1000 Request / Second 如果一秒钟来了:1500 Request 那么:1000正常处理,500拒绝访问 通常返回:HTTP 429 Too Many Requests 限流的本质就是: 宁可拒绝一部分请求,也不要让整个系统崩溃。 二、为什么需要限流 因为系统资源是有限的。 例如: 服务器配置: CPU:8 Core Memory:16GB MySQL连接池:100 Redis连接池:200 这些资源都存在上限。 假设数据库最大只能处理: 5000 QPS 如果突然来了:30000 QPS 没有限流:30000全部访问MySQL->连接池耗尽->CPU100%->慢SQL->超时->…->系统崩溃 有了限流:30000->Gateway->允许5000->25000直接拒绝->系统稳定 虽然部分用户会收到"系统繁忙"的提示,但系统整体仍然保持可用。 这正是限流存在的意义 三、典型应用场景 限流几乎存在于所有互联网系统中。 1、登录接口 例如:POST /login 限制:每个IP 5次/分钟 防止: 暴力破解密码 恶意攻击 短时间大量登录 2、短信验证码 3、支付接口 4、秒杀系统 5、开放API 四、限流的位置 限流通常不是只有一层。 一般有四层。 第一层:CDN 例如: Cloudflare->限制恶意流量 主要抵御: CC攻击 DDoS Bot 第二层:Nginx / Gateway 例如: Client->Gateway->Application...

2025年07月11日 · 3 min · Leanku

高并发系统设计-隔离

高并发系统设计-隔离 一、概述 1.1 什么是隔离 隔离(Bulkhead)源自船舶结构设计: 船体被分割成多个“水密舱”,即使某一舱进水,也不会导致整船沉没。 在分布式系统中对应为: 将不同业务流量或依赖资源隔离开,避免相互影响。 例如: 订单服务 支付服务 库存服务 推荐服务 如果没有隔离: 推荐服务慢查询 → 占满线程池 → 订单无法处理 → 系统崩溃 1.2 为什么需要隔离 在高并发系统中,最危险的不是“单点失败”,而是: 资源被某一个模块耗尽 典型问题: 1. 线程池被占满 慢接口占用所有 worker → 新请求无法处理 2. 连接池被耗尽 某服务频繁调用DB → 连接池100个全部占满 3.某服务拖垮整个系统 推荐服务异常 → 影响订单服务 → 影响支付服务 → 全系统不可用 1.3 隔离的核心目标 隔离的本质是: 限制资源共享范围,防止“一个坏点影响全局” 目标: 防止资源争抢 防止链式崩溃 提高系统稳定性 控制故障范围 1.4 典型场景 场景1:电商系统 订单 / 支付 / 推荐 / 搜索 要求: 推荐挂了不能影响下单 搜索挂了不能影响支付 场景2:微服务调用 Service A → B → C → D 如果 D 崩溃:...

2025年07月11日 · 1 min · Leanku

Dify 指南:从入门到部署

Dify 指南:从入门到部署 一、Dify是什么? Dify(发音为/ˈdɪfaɪ/,意为“Design Intelligence For You”)是一个开源的大语言模型(LLM)应用开发平台,你可以把它理解为AI应用开发领域的“低代码平台”。它通过可视化编排 + API优先的方式,帮助开发者快速构建、测试、监控并上线基于大语言模型的解决方案,支持从聊天机器人、检索增强生成(RAG),再到智能体(Agent)的全功能覆盖。 自发布以来,Dify在GitHub上已获得超过13.8万Star,服务了全球150个国家的开发者。 Dify与其他方案的对比: 方案 优势 劣势 适合谁 手写Agent 完全可控,理解深 开发周期长 想深入理解原理的人 LangChain 生态丰富,灵活 学习曲线陡峭 有一定经验的开发者 Dify 可视化,上手快,有API 极端定制需二次开发 零基础/快速验证 Coze(扣子) 字节出品,中文友好 数据存云端,企业合规风险 个人/轻量场景 结论:如果你想快速落地本地Agent,同时保留未来迁移/定制的可能性,Dify是当前最优解。 二、Dify能做什么?—— 六大核心能力 功能模块 说明 工作流(Workflow) 可视化画布上拖拽连接LLM调用、工具集成、条件分支等节点,构建复杂任务链 RAG管道 端到端的文档处理与知识库检索能力,支持PDF、PPT、Markdown等格式 Agent智能体 基于LLM函数调用或ReAct范式,可添加50多种内置工具(Google搜索、DALL·E等) 模型管理 一键接入OpenAI、DeepSeek、Claude、通义千问等**300+**模型 Prompt IDE 可视化编排提示词,支持多模型效果对比 可观测性 监控日志、性能指标,持续优化应用效果 一句话总结: Dify = 前端界面 + AI能力 + 工作流引擎 + RAG知识库 + 模型管理。 三、系统架构深度解析 3.1 Beehive架构 Dify采用模块化的Beehive架构——各核心模块(对话系统、RAG、插件、模型运行时)可独立部署、水平扩展,但通过统一的API层实现高度协同。 3.2 四层解耦设计 用户交互层:可视化编辑器,支持拖拽式对话流程设计、多模态输入输出组件(文本、图片、文件上传)、主题自定义与多终端适配(Web、微信小程序、企业微信) 工作流编排层:基于节点的**有向无环图(DAG)**结构,支持条件分支、循环调用、异步任务调度与外部系统集成 模型服务层(Model Hub):内置模型注册中心,支持多种模型格式(Hugging Face、ONNX、TensorRT)的统一接入,自动完成模型加载、缓存管理、负载均衡与推理加速(支持TensorRT、vLLM等引擎)...

2025年07月08日 · 2 min · Leanku

Windows PowerShell 增强方案

PowerShell 和 Windows PowerShell 是两个独立的产品,虽然名字相似,但底层技术和定位完全不同 Windows PowerShell 是 2006 年随 Windows 推出的“老将”,基于 .NET Framework,只能跑在 Windows 上。 PowerShell 7(早期叫 PowerShell Core)是微软在 2016 年开源的“继任者”,基于跨平台的 .NET Core / .NET 5+ 重写。它不仅能跑在 Windows 上,还能跑在 Linux 和 macOS 上 一、升级到 PowerShell 7 Windows 自带的 PowerShell 5.1 基于 .NET Framework,启动速度和模块加载效率都不理想。PowerShell 7 基于 .NET Core,启动更快,且与 5.1 并行运行,安装后不会覆盖系统原有的 powershell.exe 安装方式(WinGet) winget install --id Microsoft.PowerShell --source winget 安装完成后,可执行文件为 pwsh.exe,在 Windows Terminal 中新建标签页时选择 “PowerShell” 即可使用。官方安装文档(MSI、ZIP 等其他方式):在 Windows 上安装 PowerShell 7 - Microsoft Learn-1...

2025年07月08日 · 2 min · Leanku

witr 系统诊断工具

witr 使用指南:从“什么在运行”到“为什么在运行” 一、介绍 witr 是一个用 Go 编写的系统诊断工具,名称来自它要回答的核心问题:“Why is this running?”(这为什么在运行?)。 传统的 ps、top、lsof、ss 告诉你的是一堆“事实”——哪个进程在跑、哪个端口被占。witr 做的事不一样:它把这些事实串成一条因果链。你给它一个 PID、端口或容器名,它往上追溯:是谁启动了它?是 systemd 服务、Docker Compose、npm dev server,还是某个 SSH 会话? 它的定位是“在经典可观测性命令之上的一层因果解释”,尤其适合开发者在本地机器、容器、服务管理器和语言特定的开发服务器之间来回切换时使用。 github地址:https://github.com/pranshuparmar/witr 二、安装 witr 的安装方式覆盖了几乎所有主流平台和包管理器。以下按平台分类。 Windows # Winget(推荐) winget install -e --id PranshuParmar.witr # Scoop scoop install main/witr # Chocolatey choco install witr # 一行式 PowerShell 脚本 irm https://raw.githubusercontent.com/pranshuparmar/witr/main/install.ps1 | iex Windows 版本使用 Get-CimInstance、tasklist、netstat 收集信息,不需要 WSL 或 PowerShell 兼容层。 macOS / Linux # Homebrew(macOS 和 Linux) brew install witr # 通用一行式脚本 curl -fsSL https://raw....

2025年07月08日 · 2 min · Leanku

从 PhpStorm 到 VS Code

从 PhpStorm 到 VS Code,最需要适应的不是编辑器本身,而是插件、快捷键和一些操作习惯。 PhpStorm 很多功能是内置的,而 VS Code 更依赖插件和项目自身的工具。因此,迁移时重点把常用功能补齐即可,没有必要把所有 PhpStorm 功能全部搬过来。 一、插件清单 PHP 开发 PHP Intelephense:PHP 开发核心插件,提供代码补全、跳转定义、查找引用、代码分析等功能。 PHP Debug:Xdebug 调试支持。 PHP Namespace Resolver:自动导入 PHP Namespace,适合经常需要添加 use 的项目。 Composer:Composer 依赖管理。 PHP CS Fixer:PHP 代码格式化。 PHPUnit Test Explorer:在 VS Code 中运行和管理 PHPUnit 测试。 EditorConfig:统一项目的缩进、换行符等编辑器配置。 如果是 PHP 后端项目,前几个基本就够用了。 其他常用插件 GitLens:增强 Git 功能,可以查看代码作者、提交记录和文件历史。 Error Lens:将错误和警告直接显示在代码行旁边。 Todo Tree:集中查看 TODO、FIXME 等代码标记。 Docker:管理 Docker 镜像、容器和 Compose。 REST Client:直接在 VS Code 中测试 HTTP API。 DotENV:.env 文件语法高亮。 YAML:YAML 文件语法检查和提示。...

2025年07月08日 · 2 min · Leanku

PHPUnit使用指南

PHPUnit 使用指南 一、介绍 PHPUnit 是 PHP 领域最流行的单元测试框架,它受到 JUnit 的启发,为 PHP 开发者提供了编写和运行单元测试的工具和方法。使用 PHPUnit 可以带来以下好处: 验证代码的正确性,确保函数和方法按预期工作 便于代码重构,修改后可以快速验证是否破坏了现有功能 帮助理解代码功能,测试用例本身就是一种文档 支持测试驱动开发 (TDD) 流程 二、安装 PHPUnit 1. 安装 PHPUnit(可以通过 composer require --dev phpunit/phpunit 安装) 2. 配置PhpStorm 运行 PHPUnit(Docker环境为例) 2.1. 配置 Docker 远程解释器 打开 PhpStorm,进入 File > Settings > Build, Execution, Deployment > Docker 在右侧选择 Docker for Windows(通常会自动检测) 点击 Apply 确认配置,确保连接成功(底部会显示 “Connection successful”) 进入 File > Settings > Languages & Frameworks > PHP 点击 CLI Interpreter 右侧的 … 按钮,点击左上角 + 号,选择 From Docker, Vagrant, VM, WSL, Remote… 选择 Docker 并找到你的 php 容器 选择容器中的 PHP 可执行文件路径(如 /usr/local/bin/php) 点击 OK 完成配置,PhpStorm 会自动检测 PHP 版本和扩展 2....

2025年06月30日 · 2 min · Leanku

wrk 使用指南

wrk 使用指南 一、介绍 wrk 是一款现代化的 HTTP 基准测试工具,使用 C 语言编写,基于事件通知机制(如 epoll, kqueue),能够产生巨大的负载。相比 ab(apache benchmark),wrk 具有以下优势: 支持多线程 + 协程模式,能更好地利用多核 CPU 支持 LuaJIT 脚本扩展,可自定义请求生成和结果处理 性能更高,单机可轻松产生数万 QPS 提供更详细的统计信息(延迟分布等) 二、安装 wrk Linux 系统安装 # Ubuntu/Debian sudo apt install wrk -y # CentOS/RHEL sudo yum install wrk -y # 或从源码编译安装 git clone https://github.com/wg/wrk.git cd wrk make sudo cp wrk /usr/local/bin/ macos brew install wrk 三、基础使用方法 1. 基本命令格式 wrk <选项> <测试URL> 2. 常用选项说明 选项 说明 示例值 -t 使用的线程数 12 (建议设置为CPU核心数的2-4倍) -c 保持打开的连接数 100 -d 测试持续时间 30s (30秒), 2m (2分钟) -s 指定Lua脚本 post....

2025年06月30日 · 2 min · Leanku

EFK技术栈解析及PHP应用实践

EFK 技术栈深度解析:从原理到 PHP 应用的全流程实践 日志系统是现代企业级应用不可或缺的基础设施,它如同软件系统的 “黑匣子”,记录着系统运行的每一个关键节点。在众多日志解决方案中,EFK 技术栈以其轻量级、高性能的特点,成为容器化环境和高并发场景下的首选方案。本文将从 EFK 的核心概念出发,详细阐述其安装配置流程,并结合 PHP 开发场景,展示如何将 EFK 集成到实际项目中。 一、EFK 技术栈核心概念与架构解析 EFK 是 Elasticsearch、Fluentd 和 Kibana 三个开源组件的组合缩写,作为 ELK 技术栈的优化变种,它将 Logstash 替换为更轻量级的 Fluentd,形成了更适合现代云原生环境的日志处理体系。 1.1 EFK 各组件功能定位 Elasticsearch:分布式日志存储与检索引擎 基于 Lucene 的分布式文档存储系统,支持 PB 级日志数据的存储与检索 采用倒排索引结构,实现毫秒级日志搜索响应 天生支持集群架构,通过分片和副本机制保证高可用性 提供 RESTful API 接口,方便与 PHP 等语言集成 Fluentd:高性能日志收集与处理管道 用 C 语言开发的轻量级日志收集器,内存占用仅为 Logstash 的 1/10 支持 “一次写入,多次输出” 的 Buffer 机制,确保日志不丢失 插件化架构支持 150 + 数据源,包括 PHP 应用、MySQL、Kafka 等 内置 JSON 格式标准化处理,解决多源日志格式不一致问题 Kibana:可视化日志分析与监控平台 为 Elasticsearch 提供图形化查询界面,支持 DSL 语句可视化构建 内置多种可视化组件(折线图、仪表盘、拓扑图等) 支持基于日志数据的实时告警规则配置 提供日志模式识别功能,自动发现异常日志模式 1....

2025年06月22日 · 5 min · Leanku

PHP8新特性:JIT

PHP8新特性:JIT(Just-In-Time) 一、JIT(Just-In-Time)编译技术概述 1.1 什么是JIT编译 JIT(Just-In-Time)编译是一种动态编译技术,它在程序运行时将字节码或中间代码编译为机器码执行,而不是预先编译(AOT,Ahead-Of-Time)或纯粹解释执行。PHP 8.0首次引入了JIT编译器,这是PHP性能演进史上的重要里程碑。 1.2 PHP执行模式的演进 解释执行模式(PHP 5.x及之前): 每次请求都需要解析、编译和执行 无任何形式的持久化缓存 OPCache缓存模式(PHP 5.5+): 缓存预编译的opcode 减少重复编译开销 但仍需解释执行opcode JIT编译模式(PHP 8.0+): 将热代码(频繁执行的代码)编译为机器码 直接执行机器码,绕过解释器 1.3 JIT带来的性能提升 根据官方基准测试,JIT在某些计算密集型工作负载上可带来: 数学运算:1.5-3倍提升 字符串处理:1.2-2倍提升 框架综合性能:10-30%提升 注意:JIT对I/O密集型应用(如纯数据库CRUD)提升有限 二、PHP JIT工作原理 2.1 PHP脚本执行流程 PHP源代码 ↓ Zend编译器 (生成opcode) ↓ OPCache (缓存opcode) ↓ Zend VM解释执行 ↓ JIT编译器 (追踪热代码) ↓ 生成机器码 ↓ 直接执行机器码 2.2 JIT编译流程 代码追踪: 监控执行过程中的热代码(频繁执行的代码路径) 默认阈值:执行次数超过3次触发JIT编译 编译优化: 寄存器分配 循环优化 死代码消除 内联函数调用 机器码生成: 针对当前CPU架构生成优化后的机器码 支持x86和ARM架构 执行切换: 后续执行直接跳转到机器码 绕过Zend虚拟机解释器 2.3 JIT与OPCache的关系 协同工作: OPCache是JIT的基础 JIT只编译OPCache中缓存的opcode 内存管理: JIT使用OPCache的共享内存存储机器码 opcache....

2025年06月22日 · 2 min · Leanku