分布式系统的可靠性指的是什么 —— 你可能从来就没有认真思考过

避免重复请求:接口重试机制最佳实践 即使接收到了重复的请求,服务端也可以保证对同一个请求的多次执行不会产生不同的结果。客户端可以记录已经发起的请求的标识符,并在发起新请求前检查是否已经存在相同标识符的请求。只有在避免重复请求的基础上,接口重试机制才能得到有效的应用,为系统的稳定性和可靠性提供保障。服务端在处理请求后,可以返回结果的唯一标识符给客户端,客户端可以在重试前先查询结果是否已经生成,若已生成则可以直接使用,避免重复的请求。在设计重试机制时,可以限制客户端的重试次数并配合适当的重试间隔,防止因异常情况或网络问题导致的大量请求发送。 阅读详情

本文节选之 DDIA 《Design Data Intensive Applications》,DDIA是一本神书,是一本可以让很多高级资深工程师醍醐灌顶的书。

人们对于一个东西是否可靠,都有一个直观的想法。人们对可靠软件的典型期望包括:

  • 应用程序表现出用户所期望的功能。

  • 允许用户犯错,允许用户以出乎意料的方式使用软件。

  • 在预期的负载和数据量下,性能满足要求。

  • 系统能防止未经授权的访问和滥用。

如果所有这些在一起意味着“正确工作”,那么可以把可靠性粗略理解为“即使出现问题,也能继续正确工作”。

造成错误的原因叫做故障(fault),能预料并应对故障的系统特性可称为容错(fault-tolerant)或韧性(resilient)。“容错”一词可能会产生误导,因为它暗示着系统可以容忍所有可能的错误,但在实际中这是不可能的。比方说,如果整个地球(及其上的所有服务器)都被黑洞吞噬了,想要容忍这种错误,需要把网络托管到太空中——这种预算能不能批准就祝你好运了。所以在讨论容错时,只有谈论特定类型的错误才有意义。

注意故障(fault)不同于失效(failure)。故障通常定义为系统的一部分状态偏离其标准,而失效则是系统作为一个整体停止向用户提供服务。故障的概率不可能降到零,因此最好设计容错机制以防因故障而导致失效。本书中我们将介绍几种用不可靠的部件构建可靠系统的技术。

反直觉的是,在这类容错系统中,通过故意触发来提高故障率是有意义的,例如:在没有警告的情况下随机地杀死单个进程。许多高危漏洞实际上是由糟糕的错误处理导致的,因此我们可以通过故意引发故障来确保容错机制不断运行并接受考验,从而提高故障自然发生时系统能正确处理的信心。Netflix公司的Chaos Monkey 就是这种方法的一个例子。

尽管比起阻止错误(prevent error),我们通常更倾向于容忍错误。但也有预防胜于治疗的情况(比如不存在治疗方法时)。安全问题就属于这种情况。例如,如果攻击者破坏了系统,并获取了敏感数据,这种事是撤销不了的。但本书主要讨论的是可以恢复的故障种类,正如下面几节所述。

硬件故障

当想到系统失效的原因时,硬件故障(hardware faults)总会第一个进入脑海。硬盘崩溃、内存出错、机房断电、有人拔错网线……任何与大型数据中心打过交道的人都会告诉你:一旦你拥有很多机器,这些事情总会发生!

据报道称,硬盘的平均无故障时间(MTTF, mean time to failure)约为10到50年。因此从数学期望上讲,在拥有10000个磁盘的存储集群上,平均每天会有1个磁盘出故障。

为了减少系统的故障率,第一反应通常都是增加单个硬件的冗余度,例如:磁盘可以组建RAID,服务器可能有双路电源和热插拔CPU,数据中心可能有电池和柴油发电机作为后备电源,某个组件挂掉时冗余组件可以立刻接管。这种方法虽然不能完全防止由硬件问题导致的系统失效,但它简单易懂,通常也足以让机器不间断运行很多年。

直到最近,硬件冗余对于大多数应用来说已经足够了,它使单台机器完全失效变得相当罕见。只要你能快速地把备份恢复到新机器上,故障停机时间对大多数应用而言都算不上灾难性的。只有少量高可用性至关重要的应用才会要求有多套硬件冗余。

但是随着数据量和应用计算需求的增加,越来越多的应用开始大量使用机器,这会相应地增加硬件故障率。此外在一些云平台(如亚马逊网络服务(AWS, Amazon Web Services))中,虚拟机实例不可用却没有任何警告也是很常见的,因为云平台的设计就是优先考虑灵活性(flexibility)和弹性(elasticity),而不是单机可靠性。

如果在硬件冗余的基础上进一步引入软件容错机制,那么系统在容忍整个(单台)机器故障的道路上就更进一步了。这样的系统也有运维上的便利,例如:如果需要重启机器(例如应用操作系统安全补丁),单服务器系统就需要计划停机。而允许机器失效的系统则可以一次修复一个节点,无需整个系统停机。

软件错误

我们通常认为硬件故障是随机的、相互独立的:一台机器的磁盘失效并不意味着另一台机器的磁盘也会失效。大量硬件组件不可能同时发生故障,除非它们存在比较弱的相关性(同样的原因导致关联性错误,例如服务器机架的温度)。

另一类错误是内部的系统性错误(systematic error)。这类错误难以预料,而且因为是跨节点相关的,所以比起不相关的硬件故障往往可能造成更多的系统失效。例子包括:

  • 接受特定的错误输入,便导致所有应用服务器实例崩溃的BUG。例如2012年6月30日的闰秒,由于Linux内核中的一个错误,许多应用同时挂掉了。

  • 失控进程会占用一些共享资源,包括CPU时间、内存、磁盘空间或网络带宽。

  • 系统依赖的服务变慢,没有响应,或者开始返回错误的响应。

  • 级联故障,一个组件中的小故障触发另一个组件中的故障,进而触发更多的故障。

导致这类软件故障的BUG通常会潜伏很长时间,直到被异常情况触发为止。这种情况意味着软件对其环境做出了某种假设——虽然这种假设通常来说是正确的,但由于某种原因最后不再成立了。

虽然软件中的系统性故障没有速效药,但我们还是有很多小办法,例如:仔细考虑系统中的假设和交互;彻底的测试;进程隔离;允许进程崩溃并重启;测量、监控并分析生产环境中的系统行为。如果系统能够提供一些保证(例如在一个消息队列中,进入与发出的消息数量相等),那么系统就可以在运行时不断自检,并在出现差异(discrepancy)时报警。

人为错误

设计并构建了软件系统的工程师是人类,维持系统运行的运维也是人类。即使他们怀有最大的善意,人类也是不可靠的。举个例子,一项关于大型互联网服务的研究发现,运维配置错误是导致服务中断的首要原因,而硬件故障(服务器或网络)仅导致了10-25%的服务中断。

尽管人类不可靠,但怎么做才能让系统变得可靠?最好的系统会组合使用以下几种办法:

  • 以最小化犯错机会的方式设计系统。例如,精心设计的抽象、API和管理后台使做对事情更容易,搞砸事情更困难。但如果接口限制太多,人们就会忽略它们的好处而想办法绕开。很难正确把握这种微妙的平衡。

  • 将人们最容易犯错的地方与可能导致失效的地方解耦(decouple)。特别是提供一个功能齐全的非生产环境沙箱(sandbox),使人们可以在不影响真实用户的情况下,使用真实数据安全地探索和实验。

  • 在各个层次进行彻底的测试,从单元测试、全系统集成测试到手动测试。自动化测试易于理解,已经被广泛使用,特别适合用来覆盖正常情况中少见的边缘场景(corner case)。

  • 允许从人为错误中简单快速地恢复,以最大限度地减少失效情况带来的影响。 例如,快速回滚配置变更,分批发布新代码(以便任何意外错误只影响一小部分用户),并提供数据重算工具(以备旧的计算出错)。

  • 配置详细和明确的监控,比如性能指标和错误率。 在其他工程学科中这指的是遥测(telemetry)。 (一旦火箭离开了地面,遥测技术对于跟踪发生的事情和理解失败是至关重要的。)监控可以向我们发出预警信号,并允许我们检查是否有任何地方违反了假设和约束。当出现问题时,指标数据对于问题诊断是非常宝贵的。

  • 良好的管理实践与充分的培训——一个复杂而重要的方面,但超出了本书的范围。

可靠性有多重要?

可靠性不仅仅是针对核电站和空中交通管制软件而言,我们也期望更多平凡的应用能可靠地运行。商务应用中的错误会导致生产力损失(也许数据报告不完整还会有法律风险),而电商网站的中断则可能会导致收入和声誉的巨大损失。

即使在“非关键”应用中,我们也对用户负有责任。试想一位家长把所有的照片和孩子的视频储存在你的照片应用里。如果数据库突然损坏,他们会感觉如何?他们可能会知道如何从备份恢复吗?

在某些情况下,我们可能会选择牺牲可靠性来降低开发成本(例如为未经证实的市场开发产品原型)或运营成本(例如利润率极低的服务),但我们偷工减料时,应该清楚意识到自己在做什么。

640?wx_fmt=png

点击阅读原文,进入 DDIA 中文版继续阅读

STAR框架:构建失败感知的多智能体马尔可夫路由机制 在多智能体系统与时空推理领域,系统鲁棒性是核心挑战。传统方法常基于理想化假设,忽略了通信中断、行动失败等现实中的常态故障,导致协同效率低下。其原理在于,智能体间的路由决策若缺乏对失败概率的显式建模,极易引发连锁反应,造成系统震荡或死锁。这凸显了构建失败感知(Failure-Aware)模型的技术价值,它能将风险规避机制内嵌于决策过程,从而提升系统在动态环境下的可预测性与整体稳定性。该思想可广泛应用于无人机编队、分布式机器人调度、实时物流网络等对协同可靠性要求极高的场景。本文深入剖析的STAR框架,正是通过引 阅读详情

相关推荐

ThinkPad T14 Gen 2与T14P系列对比

表格您的需求推荐机型日常办公、出差、文档处理、视频会议✅(够用、轻便、便宜)视频剪辑、3D建模、编程编译、AI训练、高色准设计✅(性能强、屏幕好、扩展佳)想要未来 5 年不换机✅T14p预算低于 5000 元✅T14 Gen 2(或考虑 T14 Gen 3/4)T14p 2025 款 ≠ 小改款,而是架构级升级它从“高性能笔记本”进化为“AI 移动工作站”,核心差异在于NPU + Ultra 平台 + 全面屏显 + 超长续航。如果您从事AI 开发、视频创作、工程仿真、多任务编程。

tecoes的博客 2738

7. 确保分布式系统的可靠性

传统上,分布式计算基于消息传递模型,其中数据以消息的形式从处理器传递到处理器。RPC 实际上是相同的模型(或非常接近)。 DSM 是分布式系统的所有节点(处理器)共享的虚拟地址空间。程序访问 DSM 中的数据的方式与访问传统计算机虚拟内存中的数据的方式非常相似。在具有 DSM 的系统上,数据在不同计算机的本地存储器之间移动的方式与它们在一台计算机的 RAM 和外部存储器之间移动的方式相同。 6.1 DSM的优势 在消息传递模型中,程序员通过显式的消息发送和接收操作提供对共享数据的访问。在这种情况下,需

JiangTao2333的博客 1402

【锂离子电池力学耦合及相场法模拟技术与应用】

8. 电化学仿真软件的使用与案例分析 (1) 各向异性纳米线锂化应力分析(实例讲解1) (2) 化学反应及死锂现象研究(案例分析2)(3) 锂化循环损伤计算(案例分析3)6. 4. 电池材料的力学与电化学耦合性能分析(1) 耦合效应对电池性能的影响(2) 耦合模型的验证与应。5. 5. 电池颗粒、极片、电芯尺度力-电-化-热多场耦合模型概述力学-7. 颗粒尺度耦合模型在电池失效分析中的应用。2. 2. 电池电极材料的分类与特性。5. (2) 耦合模型的验证与应用。电化学耦合模型与仿真。

weixin_51101456的博客 522

分布式系统可用性和可靠性的区别,可用性如何计算,以及如何做到高可用和高可靠

含义 可用性 可用性是在某个考察时间,系统能够正常运行的概率或时间占有率期望值。 可靠性 可靠性一般指产品可靠性,是元件、产品、系统在一定时间内、在一定条件下无故障地执行指定功能的能力或可能性。 光看定义比较抽象,下面看一个具体的例子。 如果某个系统在每小时崩溃1ms,那么它的可用性就超过99.9999%,但是它还是高度不可靠。与之类似,如果一个系统从来不崩溃,但是每年要停机两星期,那么它是高度...

沧海一声浪的博客 5981

EDA课程实验:《数字逻辑电路》实验四___基于Minisys 平台 VIVADO工具与Verilog语言

(4)使用 Verilog HDL 实现一个分频器 clock_div,输入的是系统提供的 100MHz 频率,输出的是 1Hz 频率,占空比是 1:2,(实际上可以用一个加 1 计数器来实现降频,输入的是一个 100MHz 频率的方波,对这 个方波计数 1 亿次刚好到 1 秒(1Hz),题目要求输出频率占空比是 1:2,也就是这个 1Hz 的 方波高电平和低电平各 500ms,可以采用计数到中间值的时候输出电平翻转。(1)1) 拨动 SW1~0 为 01,按下 P4 按钮,GLD1~0 为 01;

ssjy_的博客 1296

c++界面开发入门

c++界面开发 DialogBox MessageBox

jiaodou2的博客 6516

学习分布式系统架构理论与组件

分布式架构采用多台机器协同工作,动态伸缩容量,使用冗余节点来消除单点故障,提高系统可用性。

明仔丶的博客 344

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-差分信号

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的差分拓扑进行说明,以下图为例,准备好发送接收端的IBIS模型, (ibis_se.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 440

分布式系统的故障抵御:如何确保系统的可靠性

1.背景介绍 分布式系统的故障抵御是一项至关重要的技术,它旨在确保分布式系统在面对故障时能够继续运行并提供服务。在现代互联网时代,分布式系统已经成为了支撑各种服务和应用的基础设施,例如云计算、大数据处理、电子商务、社交网络等。因此,分布式系统的故障抵御技术对于确保系统的可靠性和高可用性具有重要意义。 在这篇文章中,我们将从以下几个方面进行深入探讨: 背景介绍 核心概念与联系 核心算法原理和...

AI天才研究院 1028

【晶振专题】晶振学习笔记——ST AN2867应用手册 2

通过学习AN2867设计指南,我们知道皮尔斯晶振的基本知识。也了解了晶振的负载电容计算方法、安全因子测试方法和反馈电阻的作用。

一点硬件 1364

光斑定位 - MATLAB实现

光斑定位是一种常见的图像处理任务,它涉及到在图像中准确定位光斑或亮点的位置。在本篇文章中,我们将使用MATLAB来实现光斑定位的算法,并提供相应的源代码。希望本文提供的MATLAB代码和步骤能够帮助您实现光斑定位任务。通过这些代码,您可以在MATLAB环境中轻松地定位光斑,并在图像上进行可视化展示。这样,我们就完成了光斑定位算法的MATLAB实现。通过以上步骤,我们可以得到一个在光斑位置上标记的图像,从而实现了光斑的准确定位。光斑定位 - MATLAB实现。

qq_39605374的博客 764

105道Java面试题,认真思考对你面试很有价值

1、什么是面向对象?3、==和equals比较4、hashCode与equals5、final7、重载和重写的区别8、接口和抽象类的区别9、List和Set的区别10、ArrayList和LinkedList区别11、HashMap和HashTable有什么区别?其底层实现是什么?12、ConcurrentHashMap原理,jdk7和jdk8版本的区别?13、什么是字节码?采用字节码的好处是什么?14、Java中的异常体系15、Java类加载器16、双亲委托模型JDK。...

m0_54828003的博客 125

Spring AI Alibaba 项目源码学习(九)-其他继承BaseAgent

本文分析了Spring AI Alibaba Agent Framework中的A2aRemoteAgent实现,主要特点包括: 实现了Agent间的远程调用能力,支持分布式部署 核心组件包括AgentCard封装元数据、A2aNodeActionWithConfig处理调用逻辑、AgentCardProvider提供卡片管理 支持流式调用和状态共享机制 采用Builder模式构建Agent实例 通过指令传递实现Agent间通信 关键流程包括状态提取、请求构建、远程调用和状态更新四个步骤,形成Agent

819

Java大厂面试:当消息队列遇上AI,小润龙如何在财务管理场景中“挣扎”?

一篇以面试对话形式展现的Java技术文章,聚焦消息队列和AI技术在财务管理场景中的应用。文章通过面试官与“小润龙”的对话,深入探讨了Kafka、RabbitMQ、RAG、Agentic RAG、向量数据库等核心技术,并详细解析了其在实际业务中的设计与优化。适合Java开发者深入理解分布式系统和AI在企业级应用中的实践。

2303_76177839的博客 310

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

AI Agent开发盲区:从Anthropic连接故障看基础设施的重要性

在AI Agent与Multi-Agent系统开发中,开发者往往聚焦于智能体的推理、规划与工具调用等核心智能功能,却容易忽视其赖以运行的底层基础设施。一个稳定可靠的系统不仅需要强大的“大脑”,更需要健壮的“神经系统”——包括连接通信层的容错机制、可观测性体系、状态管理与安全架构。以近期Anthropic服务连接错误为例,看似简单的API配置或路由问题,实则暴露了基础设施层的脆弱性,可能导致整个智能体服务中断。这警示我们,AI Agent的工程化落地必须像构建分布式系统一样,重视LLM Gateway、重试熔

weixin_29045001的博客 261

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Zookeeper的选主机制,分布式集群协调

ZooKeeper是什么? ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. 翻译为:ZooKeeper是一个集中的服务,用于维护配置信息、命名、提供分布式同步和提供组服务。 配置管理 现在很多的应用都需要获取配置信息,通常都是由统一集群管理和维护

做技术,贵在学习与坚持! 761

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

极限压测下的架构抉择:P7技术面杀器与应届生的JVM调优碰撞

在终面倒计时5分钟的关键时刻,P7技术面杀器与一位手撕红黑树卡壳的应届生展开了一场激烈的JVM调优对决。面对QPS从2000飙升到10万的极端场景,面试官突然抛出一个FullGC告警,要求应届生现场诊断并优化。应届生凭借扎实的JVM底层知识和Arthas工具,硬刚性能质疑,最终用JOL破解对象内存布局,成功化解危机。这场面试不仅考验了技术深度,还展现了代际间的认知反差与技术碰撞。

Ared 739

AI人工智能时代,程序员如何保持核心竞争力?

随着AIGC(AI Generated Content,人工智能生成内容)技术的飞速发展,如ChatGPT、Midjourney、Claude等大语言模型的广泛应用,AI辅助编程工具正以前所未有的速度融入程序员的日常工作。AI不仅极大地提升了编码效率,也在逐步重塑开发者的角色和工作模式。这种变革引发了广泛的讨论:有人担心AI可能取代部分编程工作,也有人将其视为提高效率的得力助手。面对这一趋势,程序员应该如何应对?是专注于某个领域深耕细作,还是广泛学习以适应快速变化的技术环境?抑或是将重点转向AI难以轻易替代

m0_64146991的博客 1373

嵌入式软件工程师面试题——2025校招社招通用(操作系统篇)(十七)

嵌入式面试题-操作系统篇

weixin_45257157的博客 1224

七牛云校招笔试题卷二深度解析:从操作系统到分布式存储的考点与答题思路

在云计算与分布式系统日益普及的今天,扎实的计算机基础成为衡量工程师能力的重要标尺。进程与线程的调度机制、Linux内存分配链路、TCP三次握手的可靠性设计,以及海量数据场景下的TopK问题求解,都是笔试与实战中绕不开的核心知识点。理解这些概念背后的原理,不仅有助于解决技术难题,更能为构建高可用存储系统提供理论支撑。无论是面对对象存储的元数据管理,还是CDN回源中的网络优化,这些知识都直接关系到系统的性能与稳定性。本文围绕七牛云校招笔试题卷二展开,系统梳理相关考点、常见失分点以及工程化答题框架,帮助备考者将零

weixin_29726381的博客 302

六月份校招面试备战:面经拆解、算法攻坚与项目表达全攻略

技术面试考察的从来不只是知识点记忆,而是候选人对原理的理解、表达的结构化以及面对追问时的应变能力。在校招时间窗口里,系统拆解面经比盲目刷题更重要。面经中的追问链与考察路径能还原面试官的思维逻辑,帮助求职者建立精准的知识地图。通过将高频算法题、八股文与项目经历分类整理,并融入模拟实战与复盘迭代,才能把资料真正转化为面试战斗力。六月份正值秋招提前批启动前夕,利用这段时间完成基础复习、项目复盘与限时训练,将大幅提升后续面试的通过率。本文结合70+页校招面经,拆解高效备战方法,覆盖开发、算法、测开等岗位的差异化准备

weixin_34379433的博客 381

蚂蚁金服与阿里中间件面试实战:Java工程师如何备战分布式与底层原理

Java工程师在准备大型互联网公司面试时,通常从Java基础、并发编程、JVM调优等知识点入手,但真正决定面试深度的往往是分布式系统设计与中间件底层原理的理解。无论是业务研发岗还是基础技术岗,面试官都倾向于通过真实场景考察候选人对分布式事务、消息队列、RPC框架、微服务治理等核心技术的掌握程度。比如消息队列如何保证不丢不重、RPC框架的SPI机制如何实现、分布式协调服务如何选主,这些底层原理不仅体现技术功底,更决定了系统高可用与高性能的落地能力。在实际面试中,候选人需要将理论知识与工程实践结合,清晰阐述技术

weixin_34082789的博客 449

百度2018校招核心系统工程师笔试题复盘:从裸考失败到备考清单

互联网大厂的核心系统工程师笔试,往往侧重操作系统、网络协议、Linux内核等底层技术原理,而非单纯业务开发能力。这类岗位要求候选人对一个请求从进入到返回的完整链路有清晰认知,并能动手排查真实故障。因此,笔试题目多围绕进程线程、虚拟内存、死锁、TCP/IP、负载均衡、分布式一致性以及性能调优展开,考察的正是“是否具备向底层钻的潜力”。本文结合百度提前批真题,梳理了核心系统工程师岗位的考点分布、典型题目和答题思路,并分享了一套以“请求生命周期”为主线的系统化备考方法。无论你是准备投递大厂基础架构、系统研发还是S

weixin_26969967的博客 276

别再死背“八股”:把它拆成思维框架,搞定汇报、表达与技术面试

在职场和技术面试中,模板与套路常被视作思维枷锁,但真正高效的工作者懂得将其转化为可复用的思维框架。从结构化表达、STAR法则到技术问答的因果链推演,核心不在于背诵标准答案,而在于理解每个模块背后的思考任务:背景对应约束、行动对应决策、结果对应验证。无论是周报、项目复盘还是Redis性能分析,主动拆解模板能显著提升沟通效率与问题解决能力。本文以工程实践视角,演示如何从“背八股”转向“用框架”,让表达有信息量、面试有逻辑、汇报有重点,最终把套话变成个人思考的肌肉记忆。

weixin_30522983的博客 269

分布式存储系统可靠性如何估算?

常规情况下,我们一般使用多副本技术来提高存储系统的可靠性,无论是结构化数据库存储 (如典型的 mysql)、文档型 Nosql 数据库存储 (mongodb ) 或者是常规的 blob 存储系统 (GFS、Hadoop) 等,无不如此。 因为数据几乎可以称得上是企业生命力的核心,保障数据存储系统的可靠性对于任何企业来说都不是一件小事。 那...

weixin_34146805的博客 317
上一篇: 关于服务限流的一些思考
下一篇: Redis 精确去重计数 —— 咆哮位图
码洞
博客等级 码龄10年 41粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值