<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>分布式 on Leanku 的博客</title><link>https://www.leanku.com/tags/%E5%88%86%E5%B8%83%E5%BC%8F/</link><description>Recent content in 分布式 on Leanku 的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 11 Jul 2025 20:46:01 +0800</lastBuildDate><atom:link href="https://www.leanku.com/tags/%E5%88%86%E5%B8%83%E5%BC%8F/index.xml" rel="self" type="application/rss+xml"/><item><title>高并发系统稳定性设计</title><link>https://www.leanku.com/post/microservice/%E9%AB%98%E5%B9%B6%E5%8F%91%E7%B3%BB%E7%BB%9F%E7%A8%B3%E5%AE%9A%E6%80%A7%E8%AE%BE%E8%AE%A1/</link><pubDate>Fri, 11 Jul 2025 20:46:01 +0800</pubDate><guid>https://www.leanku.com/post/microservice/%E9%AB%98%E5%B9%B6%E5%8F%91%E7%B3%BB%E7%BB%9F%E7%A8%B3%E5%AE%9A%E6%80%A7%E8%AE%BE%E8%AE%A1/</guid><description>&lt;h1 id="高并发系统稳定性设计"&gt;高并发系统稳定性设计&lt;/h1&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;本文适用于 Web 应用、API 服务、微服务、分布式系统等高并发场景，重点介绍现代企业级系统如何通过限流、熔断、降级、重试、超时、隔离和缓存等技术保障系统的稳定运行。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="一什么是高并发"&gt;一、什么是高并发&lt;/h2&gt;&#10;&lt;h3 id="11-高并发的定义"&gt;1.1 高并发的定义&lt;/h3&gt;&#10;&lt;p&gt;高并发（High Concurrency）是指系统在&lt;strong&gt;单位时间内需要同时处理大量用户请求&lt;/strong&gt;的能力。&lt;/p&gt;&#10;&lt;p&gt;例如：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;电商平台双十一抢购&lt;/li&gt;&#10;&lt;li&gt;秒杀活动&lt;/li&gt;&#10;&lt;li&gt;支付系统&lt;/li&gt;&#10;&lt;li&gt;社交平台热点事件&lt;/li&gt;&#10;&lt;li&gt;游戏服务器&lt;/li&gt;&#10;&lt;li&gt;视频直播&lt;/li&gt;&#10;&lt;li&gt;AI 大模型接口&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;假设一个用户访问商品详情页面，请求流程如下：&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;Client&#10; │&#10; ▼&#10;Nginx&#10; │&#10; ▼&#10;PHP&#10; │&#10; ├── Redis&#10; ├── MySQL&#10; └── Elasticsearch&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;一个用户访问几乎不会产生压力。&lt;/p&gt;&#10;&lt;p&gt;但是如果同时有10000个用户-&amp;gt;10000 HTTP Requests-&amp;gt;Application&lt;/p&gt;&#10;&lt;p&gt;系统就需要在极短时间内完成：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;HTTP 请求解析&lt;/li&gt;&#10;&lt;li&gt;身份认证&lt;/li&gt;&#10;&lt;li&gt;参数校验&lt;/li&gt;&#10;&lt;li&gt;Redis 查询&lt;/li&gt;&#10;&lt;li&gt;数据库访问&lt;/li&gt;&#10;&lt;li&gt;JSON 序列化&lt;/li&gt;&#10;&lt;li&gt;网络返回&lt;/li&gt;&#10;&lt;li&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;如果系统设计不合理，就可能出现响应变慢、超时甚至崩溃。&lt;/p&gt;&#10;&lt;h3 id="12-高并发--高性能"&gt;1.2 高并发 ≠ 高性能&lt;/h3&gt;&#10;&lt;h4 id="高性能performance"&gt;高性能（Performance）&lt;/h4&gt;&#10;&lt;p&gt;高性能关注的是&#10;&lt;strong&gt;单个请求处理速度。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;例如：&lt;/p&gt;&#10;&lt;p&gt;接口耗时：50 ms&lt;/p&gt;&#10;&lt;p&gt;优化 SQL 后：20 ms&lt;/p&gt;&#10;&lt;p&gt;这属于性能优化。&lt;/p&gt;&#10;&lt;p&gt;常见优化包括：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;SQL 优化&lt;/li&gt;&#10;&lt;li&gt;Redis 缓存&lt;/li&gt;&#10;&lt;li&gt;JVM / PHP Runtime 优化&lt;/li&gt;&#10;&lt;li&gt;协程&lt;/li&gt;&#10;&lt;li&gt;对象池&lt;/li&gt;&#10;&lt;li&gt;连接池&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="高并发concurrency"&gt;高并发（Concurrency）&lt;/h4&gt;&#10;&lt;p&gt;高并发关注的是：&#10;&lt;strong&gt;系统能够同时处理多少请求。&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>关于分布式</title><link>https://www.leanku.com/post/microservice/%E5%85%B3%E4%BA%8E%E5%88%86%E5%B8%83%E5%BC%8F/</link><pubDate>Tue, 11 Jun 2024 20:46:01 +0800</pubDate><guid>https://www.leanku.com/post/microservice/%E5%85%B3%E4%BA%8E%E5%88%86%E5%B8%83%E5%BC%8F/</guid><description>&lt;h1 id="关于分布式"&gt;关于分布式&lt;/h1&gt;&#10;&lt;h2 id="一什么是分布式"&gt;一、什么是分布式？&lt;/h2&gt;&#10;&lt;p&gt;一个系统，各组件分别部署在不同服务器。彼此通过网络通信和协调的系统。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;可以指多个不同组件分布在网络上互相协作&lt;/li&gt;&#10;&lt;li&gt;也可以一个组件的多个副本组成集群，互相协作如同一个组件，比如数据存储服务中心为了数据不丢失而采取的多个服务备份冗余&lt;/li&gt;&#10;&lt;li&gt;分布式最早出现的目的首先是解决单点问题，避免单点故障，然后解决了性能问题&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="二分布式和微服务的区别"&gt;二、分布式和微服务的区别？&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;微服务并不一定是分布式系统（微服务中多个服务不一定部署在不同服务器，单机部署情况则不算是分布式）&lt;/li&gt;&#10;&lt;li&gt;分布式一定不是微服务 （分布式祖耀侧重服务的部署方式，微服务则是针对应用的一种服务拆分的架构）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="三分布式cap原则"&gt;三、分布式CAP原则&lt;/h2&gt;&#10;&lt;p&gt;在设计一个分布式项目的时候会遇到三个特性：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;一致性&lt;/strong&gt;（Consistency）：所有节点数据实时同步，读取始终返回最新值&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;可用性&lt;/strong&gt;（Availability）：每个请求必须得到响应（无论数据是否最新），高可用&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;分区容错&lt;/strong&gt;（Partition Tolerance）：分布式最基本也是必需要有的特性，系统在遇到某个节点或网络分区故障时，仍然能够对外提供服务&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;三者无法同时满足，最多只能实现其中两个，网络分区发生时，必须牺牲C或A&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;‌CP&lt;/strong&gt;（牺牲可用性）‌：如ZooKeeper，确保数据强一致性但可能拒绝请求&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;‌AP&lt;/strong&gt;（牺牲一致性）‌：如Eureka，保证服务可用但允许数据短暂不一致&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="三-base理论"&gt;三、 BASE理论&lt;/h2&gt;&#10;&lt;p&gt;BASE理论是分布式系统设计原则，&lt;strong&gt;BASE&lt;/strong&gt; 是指基本可用（Basically Available）、软状态（ Soft State）、最终一致性（ Eventual Consistency），核心思想是即使无法做到强一致性（CAP 的一致性就是强一致性），但应用可以采用适合的方式达到最终一致性。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;基本可用（Basically Available）：分布式系统，在出现故障的时候，允许损失部分可用性。类似服务降级&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;软状态（Soft State）：允许系统存在中间状态，而该中间状态不会影响系统整体可用性。这里的中间状态就是 CAP 理论中的数据不一致。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;ol start="3"&gt;&#10;&lt;li&gt;最终一致性（Eventual Consistency）：系统中的所有数据副本经过一定时间后，最终能够达到一致的状态。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="四分布式事务及解决方案"&gt;四、分布式事务及解决方案&lt;/h2&gt;&#10;&lt;h3 id="分布式事务"&gt;分布式事务&lt;/h3&gt;&#10;&lt;p&gt;本地事务依赖数据库本身提供的事务特性来实现， 但是在分布式环境下，可能会出现需要远程调用，比如：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;begin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;transaction&lt;/span&gt;&lt;span class="err"&gt;；&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;本地数据库操作：张三减少金额&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="err"&gt;远程调用：让李四增加金额&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;commit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;张三和李四的账户不在一个数据库中甚至不在一个应用系统里，实现转账事务需要通过远程调用，由于网络问题就会导致分布式事务问题。&lt;/p&gt;&#10;&lt;h3 id="分布式事务解决方案"&gt;分布式事务解决方案&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;2PC&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;2PC 即两阶段提交协议，是将整个事务流程分为两个阶段，准备阶段（Prepare phase）、提交阶段（commit phase），2 是指两个阶段，P 是指准备阶段，C 是指提交阶段。偏向数据库&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;TCC&lt;/strong&gt;&#10;TCC 是 Try、Conﬁrm、Cancel 三个词语的缩写，TCC 要求每个分支事务实现三个操作：预处理 Try、确认 Conﬁrm、撤销 Cancel。Try 操作做业务检查及资源预留，Conﬁrm 做业务确认操作，Cancel 实现一个与 Try 相反的操作即回滚操作。TM 首先发起所有的分支事务的 Try 操作，任何一个分支事务的Try操作执行失败，TM 将会发起所有分支事务的 Cancel 操作，若 Try 操作全部成功，TM 将会发起所有分支事务的 Conﬁrm 操作，其中 Conﬁrm/Cancel 操作若执行失败，TM 会进行重试。偏向代码&lt;/p&gt;</description></item><item><title>Redis分布式</title><link>https://www.leanku.com/post/nosql/redis%E5%88%86%E5%B8%83%E5%BC%8F/</link><pubDate>Tue, 12 Mar 2024 20:46:01 +0800</pubDate><guid>https://www.leanku.com/post/nosql/redis%E5%88%86%E5%B8%83%E5%BC%8F/</guid><description>&lt;h1 id="redis分布式"&gt;Redis分布式&lt;/h1&gt;&#10;&lt;h2 id="一-redis分布式概述"&gt;一、 Redis分布式概述&lt;/h2&gt;&#10;&lt;h3 id="1-什么是redis分布式"&gt;1. 什么是Redis分布式&lt;/h3&gt;&#10;&lt;p&gt;Redis分布式是指将Redis数据分布到多个Redis节点上，通过集群方式提供更高性能、更大容量和更好可用性的解决方案。&lt;/p&gt;&#10;&lt;h3 id="12-为什么需要redis分布式"&gt;1.2 为什么需要Redis分布式&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;数据量增长&lt;/strong&gt;：单机内存容量有限&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;高并发需求&lt;/strong&gt;：单机性能瓶颈&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;高可用性&lt;/strong&gt;：避免单点故障&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;可扩展性&lt;/strong&gt;：支持业务动态扩容&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="13-redis分布式方案对比"&gt;1.3 Redis分布式方案对比&lt;/h3&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;方案&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;优点&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;缺点&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;使用场景&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;主从复制&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;部署简单，读写分离&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;写操作单点，故障需手动切换&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;读多写少，数据备份&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Redis Sentinel&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;自动故障转移，高可用&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;配置复杂，扩容不便&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;生产环境高可用&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Redis Cluster&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;数据分片，自动故障转移&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;客户端兼容性要求，迁移复杂&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;大数据量，高并发&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="二-redis分布式方案搭建"&gt;二、 Redis分布式方案搭建&lt;/h2&gt;&#10;&lt;h3 id="21-主从复制搭建"&gt;2.1 主从复制搭建&lt;/h3&gt;&#10;&lt;p&gt;配置文件示例&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;主节点 (master.conf):&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;port &lt;span class="m"&gt;6379&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;daemonize yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;pidfile /var/run/redis_6379.pid&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;logfile &lt;span class="s2"&gt;&amp;#34;/var/log/redis_6379.log&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;从节点 (slave.conf):&lt;/strong&gt;&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-bsah" data-lang="bsah"&gt;port 6380&#10;daemonize yes&#10;pidfile /var/run/redis_6380.pid&#10;logfile &amp;#34;/var/log/redis_6380.log&amp;#34;&#10;slaveof 127.0.0.1 6379&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;启动命令&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 启动主节点&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;redis-server master.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 启动从节点&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;redis-server slave.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="22-redis-sentinel搭建"&gt;2.2 Redis Sentinel搭建&lt;/h3&gt;&#10;&lt;p&gt;Sentinel配置文件&lt;/p&gt;</description></item></channel></rss>