链路追踪:如何定制一个分布式链路跟踪系统 ?

分布式链路跟踪服务属于写操作频繁而读操作相对较少的服务类型,它在我们进行线上问题排查时发挥着重要的支撑作用。我曾参与过一个系统,该系统同时为多条业务线提供支持,…

实时统计:链路跟踪实时计算中的实用算法

如果数据量庞大,那么需要投入的服务器资源就会更多。就拿我们之前经历过的最大规模来说,曾投入了大约 2000 台服务器来搭建 ELK。然而,如果服务器资源十分匮乏…

稀疏索引:为什么高并发写不推荐关系数据库?

提及高并发写,必然绕不开新型分布式数据库 HTAP,它成功融合了 OLAP 和 OLTP,能够同时提供数据分析挖掘以及关系查询服务。实际上,HTAP 的 OLA…

系统隔离:如何应对高并发流量冲击?

在一次活动中,系统出现了大规模崩溃情况。活动开始时,约有五万学员同时进行操作,大量请求瞬间涌向服务器,使得服务端出现大量请求堆积,最终系统资源耗尽而停止响应。我…

分布式事务:多服务的2PC、TCC都是怎么实现的?

前言
目前,业界流行微服务,DDD(领域驱动设计)也随之流行起来。DDD 是一种拆分微服务的方法,它从业务流程的视角从上往下拆分领域,通过聚合根关联多个领域,将…

本地缓存:用本地缓存做服务会遇到哪些坑?

在探讨数据服务相关内容时,有一个方面不得不提及,那就是缓存。
要知道,就当下的情况而言,唯有缓存能够承担起大流量的数据服务需求。而我们常见的缓存架构呢,基本上都…

流量拆分:如何通过架构设计缓解流量压力?

今天,我打算以直播互动作为例子,引领大家一同去了解在面对读多写多的情况时,应当怎样去应对所产生的流量压力。通常而言,这类服务在多数情况下都属于实时互动服务。由于…

数据引擎:统一缓存数据平台

任何一个互联网公司都会有几个核心盈利的业务,我们经常会给基础核心业务做一些增值服务,以此来扩大我们的服务范围以及构建产业链及产业生态,但是这些增值服务需要核心项…

业务脚本:为什么说可编程订阅式缓存服务更有用?

我们已经习惯了使用缓存集群对数据做缓存。然而,这种常见的内存缓存服务存在诸多不便之处。首先,集群会独占大量的内存。这意味着在资源有限的情况下,可能会对其他系统资…

流量调度:DNS、全站加速及机房负载均衡

我们已经学习了有关从架构设计层面去应对流量压力的相关内容。大家都知道,像直播这类服务呀,其用户流量是很难预先准确估计的。一旦用户流量增大到某个程度,达到一个机房…

高并发系统:它的通用设计方法是什么?

在高并发系统的设计中,面对大流量的挑战,我们通常需要运用一些巧妙的方案来有效地分流和处理这些流量,从而保证系统的稳定性和用户体验。可以通过一个比喻来帮助理解:就…

多层依赖:如何避免落入数据服务接口的陷阱?

前面,我们讨论了不同类型系统(如读多写少、强一致、写多读少和读写密集)的优化方法。但在很多复杂的业务系统中,读写逻辑往往相互交织、互相制约,这让优化工作变得更具…

业务缓存:元数据服务如何实现?

当你打开微博或一个新闻网站时,眼前会呈现出丰富的媒体文件:图片、文本、音频、视频等应有尽有。有时,一个页面甚至由成百上千个文件组合而成。那么,这些文件究竟存放在…

网关编程:如何通过用户网关和缓存降低研发成本?

如果说用户的流量就像波涛汹涌的海浪,那网关就是防御冲击的堤坝。在大型的互联网项目里,网关必不可少,是我们目前最好用的防御手段。通过网关,我们能把大量的流量分流到…

存储成本:如何推算日志中心的实现成本?

在技术选型时,我们往往会仔细考量各项成本,尤其关注实现成本,这种“斤斤计较”其实能带来直接的经济效益。那么,你是否有系统地思考过如何计算这些成本呢?本节课将通…

系统设计目标:如何提升系统性能?

高并发系统设计的三大目标:高性能、高可用、可扩展
高并发系统设计的核心目标是要保证系统在处理大量并发请求时,能够保持高性能、高可用性以及良好的可扩展性。这三个方…

系统怎样做到高可用?

高可用系统设计的思路
一个成熟系统的可用性需要从系统设计和系统运维两方面来做保障,两者共同作用,缺一不可。那么如何从这两方面入手,解决系统高可用的问题呢?

系…

如何让系统易于扩展?

高可扩展性是架构设计中的关键指标,它意味着系统能够通过增加服务器数量来线性提升处理能力,从而应对更高的流量和并发需求。有人可能会问:“为什么在设计之初不直接规划…

池化技术:如何减少频繁创建数据库连接的性能损耗?

一天,公司 CEO 将你叫到会议室,向你展示了一个新出现的商业机会,希望你能带领一位同事,快速推出一款面向某垂直领域的电商系统。面对有限的人手和紧迫的时间,你毫…

强烈建议你不要再使用Date类了!!!

一、有什么问题吗java.util.Date?
java.util.Date(Date从现在开始)是一个糟糕的类型,这解释了为什么它的大部分内容在 Java 1…