3000万人同时刷视频,背后是怎样的亿级架构?
当一条爆款视频同时被两三千万人点开,后台究竟发生了什么?本文用一套"先算账、再架构成型"的方法,带你完整走一遍亿级短视频系统的设计过程。一、为什么要从"算账"开始很多同学一上来就画微服务架构图,这是误区。架构的本质是用多少资源解决多少问题,不先算清账,架构图就是空中楼阁。
连接池被打空:100%占满,服务没崩但查询全在排队
#头条我来了#数据库连接池100%被占满,服务进程活得好好的,CPU也不高,但所有查询都在getConnection上排队,最长的等了47秒才拿到连接。这是比服务崩溃更难受的一种故障形态——监控全绿、进程没死、接口全慢。
MQ消息堆积百万条:消费者明明活着,消费位点就是不动
#头条我来了#凌晨一点告警群炸了:订单积分堆积120万条。打开控制台一看,消费者在线、rebalance正常、没有死信,一路绿灯,就是TPS明晃晃的零。这比消费者宕机难办多了——宕机是明牌,会报警、会重连、会触发重平衡;"假活着"是什么都正常,就是活不干。
并行调下游,TP99飙到5秒
上周二下午三点,监控群炸了。订单查询接口 TP99 从 50ms 跳到 5 秒,告警刷屏。Leader 看了一眼最近一次提交记录:一个同事把原来串行调下游商品、库存、优惠券的代码改成了 CompletableFuture 并行调用,提交信息写得很自信——"并行调下游,性能优化"。
设计模式(14):模板方法模式——从原理到 Spring/MyBatis 源码
做过一个数据导出功能:导出 PDF 要读数据、拼模板、生成文件、发邮件通知;导出 Excel 也要读数据、拼模板、生成文件、发邮件通知。三个步骤完全一样,只有"生成文件"这一步不同。复制粘贴了五六次之后,新增一个 Word 导出又要从头来一遍。模板方法模式就是来解决这类问题的。
深入剖析 Java 线程的 BLOCKED 状态
在 Java 并发编程中,准确理解线程的生命周期状态是排查死锁、性能瓶颈的前提。在 Java 线程的 6 种状态(NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED)中,BLOCKED 状态往往是容易被误解的一个。
设计模式之单例模式
指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点,属于创建型设计模式。单例模式可以保证在一个 JVM 中只存在单一实例。1. 饿汉式单例写法饿汉式单例写法在类加载的时候立即初始化,并且创建单例对象(一个类中只有一个对象)。
第三篇:堆栈分析——jstack实战
上篇讲了数据量小还卡,先查环境配置。有朋友问:CPU不高、数据库正常、接口就是卡死不返回,怎么办?这种情况,大概率是线程被阻塞了。今天讲怎么用jstack命令抓线程堆栈,一眼看出线程卡在哪。一、什么是线程堆栈简单说,堆栈就是程序正在执行的方法调用链。