CAP定律与BASE理论:分布式系统取舍与工程实践
讲到分布式、微服务CAP定律和BASE理论是绕不开的两个门槛。很多同学看了一堆博客名词背得滚瓜烂熟什么“C一致性、A可用性、P分区容错性”什么“三选二”可真到了自己设计系统、排查故障的时候还是不知道怎么用。我最早接触CAP也觉得它就是一道面试题直到后来在真实项目里因为节点断连导致请求大面积超时才真正意识到这套理论背后藏的其实是分布式架构最根本的取舍逻辑。这篇文章不谈虚的我会把CAP定律里的每个字母掰开揉碎把BASE理论从ACID一路演进过来的思路讲清楚再结合注册中心、配置中心、分布式事务、订单系统这些真实落地场景聊一聊什么时候该保CP、什么时候该保AP以及那些文档里不常写的坑。无论你是刚转行做微服务的初学者还是已经在用分布式中间件但没时间深究原理的开发这篇文章应该都能给你一些启发。1. 先从整体把握CAP和BASE到底在说什么1.1 CAP定律并不是“三选二”CAP定律是分布式计算领域的一个经典结论它说的是一个分布式系统在同时面对网络分区时无法同时保证一致性、可用性和分区容错性这三个需求。很多人记成了“CAP三选二”这其实是最大的误解。真相是分区容错性在分布式系统里是必选项你不可能建一个分布式系统却要求网络永远不断、消息永远不丢。只要节点之间存在网络通信断连、延迟、丢包就是常态。既然P是必须满足的前提那么真正能选的只有一条路当分区发生时你是选择牺牲一致性保住可用性还是牺牲可用性保住一致性。用大白话说就是两个节点之间网络断了此时客户端发起请求系统到底是立刻返回一个“可能不是最新数据”的结果还是宁可告诉用户“现在服务不可用稍后再试”。这条岔路口就是CAP理论的核心。我见过不少初学者在画架构图的时候习惯性地往图里加一句“本系统满足CAP中的CA”这其实就是概念混淆。所谓CA场景只在单机或不存在网络分区的情况下才成立一旦你的系统有了多个节点P就必须被满足。换句话说任何分布式系统讨论CAP时实际讨论的都是CP还是AP的问题。1.2 BASE理论是对CAP的工程回应BASE理论是Basically Available基本可用、Soft state软状态、Eventually consistent最终一致三个词的缩写。它的出现比CAP晚一些是对CAP在实际工程里的妥协方案。CAP告诉我们分区时必须在一致性和可用性之间做选择但现实中很多业务比如电商首页、用户评论、社交动态并不需要强一致性只要最终一致就够了。BASE理论恰好描述了这种思路系统不要求任何时刻都保持一致允许存在中间状态只要经过一段时间后数据能收敛到一致即可。BASE和ACID经常被放到一起对比。ACID是传统单机数据库的事务标准强调原子性、一致性、隔离性、持久性可以理解成一个死板的完美主义者要么全做要么全不做。BASE则更像一个灵活的实用主义者核心功能保持可用细节允许暂时不一致事后慢慢把账补平。分布式系统里的很多中间件比如消息队列、缓存、分布式事务框架本质上都是在BASE的思想指导下做权衡。2. 把CAP拆开看一致性、可用性、分区容错性2.1 一致性不只是“数据一样”一致性在CAP里被定义为线性一致性也叫强一致性。意思是说在分布式系统中任何一个节点对数据的修改其他节点必须能立刻看到多个副本之间任何时刻看起来都像只有一个副本那样。听起来简单但在实现上是非常昂贵的。我从工程角度来拆解一下。假设你有一个订单服务订单数据同时存在主库和两个从库上。主库收到一笔新订单后需要同步给从库。如果同步还没完成此时用户查询订单就可能查不到最新记录。如果你要求强一致就必须在写操作完成前让所有副本都确认收到这个数据哪怕网络延迟再高也要等待。这个等待过程会造成明显的性能损失。我曾经在一个内部系统里测过把某个写操作从异步复制改成同步复制接口延迟直接翻倍。所以很多业务在需求分析阶段就会想清楚自己到底需不需要强一致。像余额转账、订单状态流转这类资金相关和强状态相关的场景强一致是必须的但像浏览量、点赞数、物品描述这样的数据稍微滞后几秒完全不影响体验。2.2 可用性的真实含义可用性在CAP里不是我们常说的“系统不宕机”而是每个请求都能在合理时间内获得响应但响应内容可以是旧数据。只要不返回错误、不超时无回应就算可用。我见过一个很典型的误区把可用性等同于“系统活着”。其实CAP中的可用性强调的重点是响应而不是正确性。也就是说哪怕你的服务进程还活着但所有请求都因等待同步而卡死这在CAP意义上也算不可用。因为客户端得不到预期的响应用户体验就是“系统挂了”。这也是在分区场景下选择AP的系统为什么要返回“旧数据”而不是“报错”。举个例子用户查询购物车购物车服务主节点挂了备用节点还存在一个两分钟前的副本。如果走AP路线系统直接返回这个旧购物车用户看到数据不最新但页面能正常打开。如果走CP路线系统会持续等待主节点恢复页面转圈最终超时。对大多数用户来说页面能打开、能继续浏览远比一两分钟前的数据更重要。2.3 分区容错性为什么是前提分区容错性指的是系统在网络断连、消息丢失、节点宕机等情况下仍然能继续对外提供服务的能力。分布式系统之所以叫分布式就是因为它由多个节点组成节点之间通过网络协作。网络本身是不可靠的硬件、链路、拥塞、负载都可能导致节点间通信中断。只要时间足够长网络分区一定会发生。我自己的经验是稳定性工作做得越久越觉得“网络一定会出问题”不是危言耸听。某次压测的时候我遇到过一台机器网卡松动导致间歇性丢包表面上看系统没宕机但节点间的心跳包一直在丢最终触发了大规模的节点标记下线。这种场景在单机系统里根本不存在但在分布式环境里就是家常便饭。所以P没有可选择性。既然选择了分布式架构就意味着你默认接受了可能分区的前提。能做的只是分区发生时你打算怎么办这就是CAP理论真正研究的二选一问题。2.4 分区发生时的“二选一”本质当分区真的发生时系统的所有节点会被分成若干小组组内可以通信组间无法通信。此时如果客户端恰好向包含“被修改数据”的某一组发起请求而该组无法与其他组同步就会出现两个选项。选CP为了保证所有节点数据一致系统拒绝那些读不到最新数据的请求直到网络恢复。这是ZooKeeper、etcd这类组件默认的路线。代价是一部分请求会失败或阻塞可用性下降。选AP为了保证用户能拿到响应系统允许不同分区内的节点各自独立处理请求各写各的数据。等网络恢复后再做数据合并和冲突处理。这是Eureka、Cassandra常用的路线。代价是数据可能出现短暂不一致需要额外机制兜底。我在实际业务中见过一个比较极端的例子一个抽奖系统为了保证用户体验采用了AP策略结果某次微服务调用超时多个副本同时处理同一个用户的中奖请求导致用户被发了两次奖。虽然最终通过幂等键做了清理但这个事故让我深刻意识到选AP不意味着不需要兜底恰恰相反AP系统需要更强的幂等、对账和冲突解决机制。3. 业务场景下的取舍什么时候该保CP什么时候该保AP3.1 为什么很多系统实际是CP凡是涉及钱、涉及唯一性、涉及严格状态流转的场景基本都是CP优先。转账不能出现一笔钱在两个账户里同时被加两次秒杀不能同一件商品被两个人同时下单成功订单状态不能从“已支付”突然又变回“待付款”。从技术上来说CP系统会把一致性控制放在最关键的数据路径上比如通过分布式锁、分布式事务、共识算法来保证全局唯一和操作顺序。代价就是性能相对低可用性在极端情况下要打折。比如用分布式锁的时候一旦锁服务发生分区为了不产生两个持有者锁服务可能选择拒绝新的加锁请求宁可让业务卡住也不愿冒锁冲突的风险。我在做一个进销存系统的时候库存扣减这一环就明确采用CP方案。每次扣减都要经过库存服务的强一致校验宁可高峰期损失一部分吞吐量也不能让库存数据出现负数或者对不上账。用户的购物体验很重要但财务对账对不上会更麻烦这个优先级在业务设计阶段就必须确定好。3.2 为什么很多互联网业务倾向AP多数互联网C端业务比如信息流、商品浏览、评论、弹幕对数据实时性的要求没那么高。用户看到一条评论晚了几秒或者首页推荐位的数据不是绝对最新没有人在意。这类系统更适合AP因为可用性直接决定了用户能否访问服务而访问不到服务比数据延迟更致命。一个很常见的AP实践是缓存和数据库的组合。用户修改个人信息后如果缓存没有立刻失效其他人可能在一段时间内看到旧头像、旧昵称。这其实就是基于BASE思想做的妥协允许短暂不一致通过缓存过期、消息通知等方式最终收敛。很多系统把这类数据称为“缓存最终一致”本质就是AP路线。值得一提的是即便选择AP也不能忽视最终一致性的达成速度。比如评论系统如果一条评论在数据库落库但缓存永远不更新那就不是最终一致而是永久不一致了。所以AP系统设计的重点要放在“什么时候把数据修对齐”上而不是放在“绝不出现不一致”上。3.3 一个容易忽略的中间状态很多人在做架构选型时容易陷入非CP即AP的二元思维忽略了“中间状态”的存在。实际系统完全可以针对不同数据设计不同的策略核心数据走CP非核心数据走AP允许软状态存在。比如一个电商系统订单主状态必须强一致但订单的物流轨迹可以允许暂时查不到。用户看到物流信息短暂丢失刷新一下又出来了这种体验完全可以接受。再比如用户注册流程用户名唯一性必须强一致但用户的个性化推荐设置可以异步更新先返回注册成功推荐配置后续慢慢生效。从架构角度说没有绝对的CP系统或者绝对的AP系统只有“在某个数据维度上倾向哪种策略”。看一些开源中间件的文档时会发现很多组件也允许你在一致性和可用性之间做配置切换比如某些分布式数据库可以设置读写强一致模式也可以设置读写最终一致模式。选型的第一步永远是分清数据的属性而不是先决定系统叫什么名字。4. BASE理论从ACID到最终一致的演进思路4.1 ACID在分布式环境下的困境ACID是单机数据库事务的黄金标准。它要求原子性、一致性、隔离性、持久性任何一步失败整个事务回滚数据回到最初状态。这个模型在单机数据库上跑了几十年直到分布式架构出现后事情变得复杂起来。分布式环境下的一个事务会涉及多个节点比如下单同时要扣库存、加积分、生成日志。如果严格按照ACID执行就需要一个全局事务协调者来锁住所有参与节点等全部提交完再释放。海量并发下这种锁定几乎不可接受而且一旦某个节点在执行过程中宕机整个全局事务的恢复将非常困难。X/Open DTP模型里定义的XA协议就是ACID在分布式环境下的标准实现它通过两阶段提交来保证所有参与节点要么全部提交、要么全部回滚。两阶段提交听起来完美但存在协调者单点、同步阻塞、脑裂等问题。我见过不少团队引入XA后因为性能太差最终不得不把一个大事务拆成多个本地事务再用补偿机制来处理失败。这条路走通了其实就已经是在向BASE靠拢了。4.2 BASE的三个核心要素BASE的第一个要素是基本可用。分布式系统允许在极端场景下损失部分可用性比如响应时间变慢、非核心功能降级、部分请求被限流但核心功能必须保持可用。比如电商大促时商品详情页可能会把推荐算法降级成简单排序评论区暂时不加载但用户还能正常下单付款这就是基本可用。第二个要素是软状态也叫柔性状态。它允许系统内部存在中间状态这个中间状态不影响系统对外继续提供服务。比如订单状态从“已下单”到“已支付”之间可能存在一段“处理中”的状态这个状态在某一时刻不同节点看到的值可能不一样。传统ACID会尽量避免这种中间态暴露BASE则认为这种状态可以存在只要最终能到达正确状态。第三个要素是最终一致。系统不保证任意时刻所有副本数据一致但保证在没有新写入的情况下经过一段时间后数据能收敛到一致状态。最终一致的最常见实现方式是异步复制比如主库写完后立即给客户端返回成功再通过消息队列把变更同步给其他副本。用户感受到的是响应很快代价是副本间有一小段延迟窗口。4.3 最终一致性的常见实现路径最终一致性听起来很抽象但在工程上有几条很成熟的落地路径。异步消息通知是首选。系统写主库成功后发布一条消息到消息队列其他系统订阅消息更新各自的数据。消息中间件自身已经通过重试、持久化、顺序保障等机制帮我们解决了很多传输问题。我在实际项目中用RocketMQ的延迟消息处理过库存超时释放效果稳定逻辑也清晰。本地消息表是十年前很流行的方案。业务在主事务中同时写业务表和消息表两个操作在同一个本地事务里保证原子性。之后有一个定时任务扫描消息表把未发送的消息发给MQ发送成功后更新消息状态。这个方案不怕MQ宕机消息表本身就是可靠存储缺点是业务表和消息表耦合在一起表结构会显得臃肿。事务消息是对本地消息表的中间件化改进。RocketMQ和Pulsar都支持事务消息先把消息发送到MQ事务提交后再发送确认消息消费者只有在收到确认后才会消费。这个机制把本地消息表的工作下沉到了MQ内部业务代码更干净。我自己的偏好是优先用事务消息毕竟不用维护额外的定时任务可靠性也更有保障。除此之外还有基于状态机的补偿方案和基于版本号的乐观锁方案。比如一个订单系统给每个订单维护一个状态机“待支付、已支付、已发货、已完成”每次更新时校验当前状态是否符合预期一旦状态流转出错就用补偿任务把数据拉回正确状态。最终一致不代表不需要管理状态相反需要更细致的状态管理才能保证“最终”能达成。5. 技术选型与落地实践哪些组件帮你实现了这些理论5.1 注册中心为什么会倾向于AP微服务架构里服务之间互相调用需要知道彼此的网络地址这个地址信息由注册中心来维护。服务启动时把自己的IP和端口注册上去服务消费者定期拉取服务列表。注册中心的选型是一个非常经典的CAP取舍案例。Eureka就是典型的AP实现。它把注册信息放在各个节点的内存里节点之间互相注册即使某几个节点失联剩下的节点依然可以继续对外提供注册和发现服务。Eureka的自我保护机制允许注册信息暂时不一致比如某个服务已经下线注册中心里仍然显示它在线消费者调用时可能会失败但通过重试和负载均衡能降低影响。这个设计换来的好处是注册中心本身很难挂很适合规模大、节点多、追求服务可用性的微服务集群。Consul则更偏向CP。它基于Raft共识算法要求多数节点同意后才能提交变更读操作默认也走共识保证各个节点看到的服务列表是完全一致的。代价是当少数节点失联时Consul会停止处理请求以等待多数节点恢复。对于注册中心这种读多写少的场景CP方案的可用性风险会更高但一致性保障更强。如果你的系统对服务列表的准确性非常敏感比如不能容忍调用一个已下线的服务Consul这类CP方案可能更合适。5.2 配置中心为什么更倾向于CP配置中心的职责是保证所有服务实例拿到同一份配置。比如一个功能开关从关闭变为开启如果一部分实例配置早生效另一部分实例配置晚生效就会出现线上不可控的灰度状态。所以配置中心普遍倾向CP。以etcd为例它用Raft协议保证强一致写操作必须获得多数节点的确认才能成功。在实际使用中配置写入的频率远低于读取频率用强一致的写操作换取绝对的配置正确性是划算的。哪怕写入时网络抖动导致短暂失败只要在重试机制下最终写入成功各个实例就能拿到一致的新配置。我在配置管理上吃过一次亏团队用Redis做配置缓存结果某个实例因为缓存没刷新一直在用旧配置跑了一个多小时线上出现了明显的不一致行为。后来改成支持版本号和推送能力的配置中心才彻底解决了这个问题。所以配置类的数据我强烈建议使用支持强一致的中间件而不是图省事塞进缓存。5.3 分布式事务方案背后的BASE思想分布式事务是BASE思想发挥最充分的地方。两阶段提交属于ACID思路适合小规模、对强一致有硬性要求的场景但在高并发和跨部门系统间并不好用。实际工程里主流方案基本都转向了柔性事务。TCCTry、Confirm、Cancel是一种常见的柔性事务模式。Try阶段预占资源Confirm阶段真正执行操作Cancel阶段回滚。比如下单时先把库存从可用库存转入冻结库存确认支付后再把冻结库存扣减如果支付失败则释放冻结库存。这个方案的每个阶段都是独立的本地事务整体不要求强一致但通过状态机和补偿机制最终达到一致。Saga模式是另一种思路把一个分布式事务拆成一系列本地事务每个本地事务都有对应的补偿事务。比如订单创建成功后触发扣款扣款失败则创建“取消订单”的补偿事务。Saga没有Try阶段的预占资源所以并发控制上比TCC弱但实现更简单。还有基于消息的最终一致方案这几乎成了互联网公司的标配。订单服务写订单表同时发送事务消息库存服务消费消息扣减库存如果库存不足则发送反向通知。整个过程没有全局锁吞吐量远高于两阶段提交代价是数据的短暂不一致。从BASE的角度看这就是典型的“基本可用软状态最终一致”。5.4 一个完整的落地例子订单系统我拿一个简化版的订单系统把上面的思路串一遍。用户下单时先创建订单订单状态为“待支付”。这个动作涉及订单服务和库存服务两个部门系统如果同时扣库存失败订单就要被取消。如果用强一致的分布式事务所有操作在同一全局事务里完成过程简单但性能差。用BASE思路订单服务先落库生成订单再发一条“扣减库存”的事务消息。库存服务消费消息后扣库存成功则发“扣减成功”消息失败则发“扣减失败”消息。订单服务订阅这些消息来更新订单状态。如果一直等不到回执就用定时任务扫描超时订单并主动查询库存状态。这里有个关键点订单创建和发消息必须在同一个本地事务里完成否则可能出现订单生成了消息却丢了或者消息发了订单却没了。我们公司当时的做法是用事务消息把这两个动作合并让MQ保证消息和业务操作要么一起成功要么一起失败。这样配合状态机整个系统在绝大多数时间对外表现是基本可用的数据在几秒内会达到最终一致。6. 常见误区与经验总结6.1 把CAP当成“必须三选二”是误解我再强调一遍这个误解太普遍了。CAP不是让你在三个选项中任选两个而是告诉你当网络分区发生时一致性、可用性、分区容错性不可能同时满足。而分区容错性又是分布式系统的默认前提所以真正的选择是在C和A之间做。平时系统没有发生分区时C和A是可以同时满足的这也是为什么很多人会误以为自己的系统满足CA。我遇到过不止一个候选人在面试时说“我们的系统是AP架构所以完全没有一致性问题”这其实是另一个极端。AP系统的不一致只是被容忍不是被消灭。电商系统选择AP后仍然要处理订单重复、库存超卖、评论延迟等问题只是把这些问题的处理时机推后了。容忍不等于放任这一点一定要拎清楚。6.2 “强一致”不等于“不可以用”有些团队一听到强一致就觉得性能一定差、一定没法用这也要分场景。很多强一致系统之所以慢是因为它们通过锁和等待来保证一致性。但如果你能用幂等、版本号、状态机来减少冲突强一致也未必那么可怕。比如用Redis实现分布式锁如果并发量不高、临界区执行时间短性能完全可接受。再比如用行级锁或乐观锁控制关键数据的并发更新避免了整个表的锁定吞吐量也不会太差。我在项目里做库存扣减就是用数据库的原子更新语句配合行锁既保证了强一致又保持了非常高的性能。所以选型还是要看具体的业务规模和请求量不能一概而论。6.3 关键词速查表我把这篇文章涉及的高频术语整理成一个速查表方便你工作或面试时快速查阅术语核心含义场景示例CAP分区时一致性、可用性二选一分布式系统设计决策CP保证一致性牺牲部分可用性配置中心、分布式锁、账户余额AP保证可用性允许数据不一致服务注册、商品列表、信息流BASE基本可用、软状态、最终一致多数互联网后端系统ACID强一致事务标准单机数据库事务两阶段提交全局事务提交协议小规模、强一致场景TCC预占资源、确认、补偿订单库存账户Saga本地事务补偿事务长流程业务事务消息消息与业务同生共死订单创建异步扣库存最终一致经过时间收敛到一致缓存同步、副本同步、跨服务数据最后分享一个我做系统设计时的习惯先问自己三件事——这个数据允许不一致多久不一致会造成多大损失系统宕机和服务降级哪个更可怕。想清楚这三件事CAP和BASE就不再是抽象的理论而是能直接指导你画架构图、选中间件、定数据同步策略的实用工具。至少对我而言用这种问题的思路去做技术决策比背多少遍定义都管用。

相关新闻

Agent-Reach:让多智能体像打电话一样直连协作

Agent-Reach:让多智能体像打电话一样直连协作

Agent-Reach 这个名字,我第一眼看到就想到了智能体之间那种“彼此够不着”的感觉。这两年我经手过好几个Agent项目,客服机器人、数据分析助手、自动运维巡检,单拎出来每个都能打,可一旦想让它们协同干成一件事,就开始卡…

2026/10/14 8:37:07 阅读更多 →
Vue+小程序构建高可用人脸识别问卷系统实战

Vue+小程序构建高可用人脸识别问卷系统实战

1. 项目概述:人脸识别问卷系统的技术实现 去年为某高校开发在线考试系统时,我们首次尝试将人脸识别与问卷功能结合。当3000名学生同时进行人脸认证考试时,服务器负载瞬间飙升到85%——这个意外让我们深刻认识到,这类系统在架构设计…

2026/10/14 8:37:07 阅读更多 →
动态枫叶飘落与重力摆动:SVG 矢量路径动画与 Web Animations API 协同控制

动态枫叶飘落与重力摆动:SVG 矢量路径动画与 Web Animations API 协同控制

深秋的景致里,最让人驻足沉思的,莫过于一片红透的枫叶从枝头挣脱,在清冽的空气中旋转飘零的过程。它并不像石子那样笔直下坠,而是在重力与空气浮力的微妙博弈中,如同一叶扁舟般左右摇曳、翻卷起伏,最终轻盈…

2026/10/14 8:37:07 阅读更多 →

最新新闻

KNN图像识别入门:从PCA降维到手写数字分类实战

KNN图像识别入门:从PCA降维到手写数字分类实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:37:04 阅读更多 →
52pojie 的 IoT 固件分析:熵值会告诉你哪一段藏了东西

52pojie 的 IoT 固件分析:熵值会告诉你哪一段藏了东西

副题:魔术字、香农熵、结构体——拆开一个固件镜像的三把钥匙 摘要:吾爱破解软件调试区里有一篇《IoT 漏洞分析之模拟环境搭建》(6037 回复),同区还有《记一次手机付费充电设备研究》(7196)。这…

2026/10/15 1:37:04 阅读更多 →
双 11 核心链路变异测试大摸底:让关键交易状态机测试坚不可摧

双 11 核心链路变异测试大摸底:让关键交易状态机测试坚不可摧

在电商交易系统中,最核心、也最令架构师夜不能寐的领域内核,永远是有限状态机(Finite State Machine, FSM)。 在双 11 狂风暴雨般的流量洪峰冲击下,一笔交易订单在几毫秒内可能经历极其错综复杂的状态跳转:…

2026/10/15 1:37:04 阅读更多 →
u-boot-2020.07在Exynos4412上的电源时钟内存初始化实战

u-boot-2020.07在Exynos4412上的电源时钟内存初始化实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:37:04 阅读更多 →
行业术语同义词图谱挖掘:从非结构化语料到标准化知识库的语义归一

行业术语同义词图谱挖掘:从非结构化语料到标准化知识库的语义归一

在将海量企业内部非结构化语料(如研发设计文档、售后工单、专家经验纪要、行业研报)汇聚到统一知识库并驱动 RAG(检索增强生成)系统时,工程团队往往面临一个巨大的语义鸿沟——“专有名词的极度多样性与非标准性”。 在…

2026/10/15 1:37:04 阅读更多 →
工业机器人坐标系全解析:从原理到标定实操

工业机器人坐标系全解析:从原理到标定实操

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:36:03 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →