- 博客(17)
- 收藏
- 关注
原创 双11、618大促要做什么?
大促除了紧张忙碌,还有就是快乐,大促1个月内有吃不完的零食,大促当天有领到手软的红包,各种小礼物,10几米长的桌子上摆满了饮料酒水、蛋糕、零食。一个良好的压测系统应具有流量染色的能力,各依赖接口和资源可基于sdk识别染色的压测流量,进行影子分身(如数据库的影子表、缓存的分身key),这样可防止压测流量产生垃圾数据污染正常的业务流转。不要忘记,系统是变化的,需求是不断变更的,变化就会引入新的问题或曾经出现过的问题。通常资源的负责人也会提前与研发进行沟通,哪些资源是重要的,需要在大促期间重点保护的。
2025-05-26 22:25:44
995
原创 海量帖子计数服务设计的2种思路
若帖子 ID 作为字符串存储(如 18 位数字),SDS 需要 4(len)+ 4(alloc)+ 19(18 位数字 + 终止符 \0)= 27 字节,但受内存分配器 jemalloc 对齐影响,实际分配 32 字节。仔细思考下,我们的id通过雪花本质上是带时间属性的,如果key拆分的位数正好满足一个时间戳的位数,是不是可以按时间段当做key呢?我们将一个long类型的帖子id拆分成高32位和低32位,其中高32位作为redis的key,低32位作为hash的field,value进行计数。
2025-05-01 22:47:35
683
原创 系统设计思维的讨论
Linux操作系统是一个可观测性做的非常好的系统,比如我们可以读取虚拟文件系统 /proc的运行时刻系统状态,syslog服务能够记录系统关键日志,全访问的监控命令(如top、netstat等),ebpf、systemtap技术实现内核级别的观测。而由于存量的存在,系统展现自身状态会存在延迟,如:热点事件发生,qps突增进行扩容,但系统需要部署,新的机器上缓存从冷到热是需要一个过程的,所以新机器扩容上来并不能立刻分摊突增的qps,在这里缓存的从冷填充满整个缓存空间步入到热的状态,缓存未填充的部分就是存量。
2025-04-12 17:46:52
489
原创 计算机系统设计中的一些常用方法
这句经典的理论已不知出自何处,但无数的先例都是基于此,调节CPU和硬盘之间的性能差是通过加了一个内存实现的,调节CPU和内存之间的性能差是通过加了L1 L2 L3缓存实现的,用户到服务器之间可以通过反向代理、cdn做很多事情。虽说并行提高的算力,但在这么高度的并行流程中,就会存在各种各样的问题,主要包括:执行的依赖关系与顺序、共享数据的并行写安全、为解决共享数据并行写安全问题引入的互斥竞争、并行部分成功和部分失败的问题。职责分离:最常见的就是数据库的主从,主复制写入数据,从同步主的数据后提供读的服务。
2025-04-12 16:34:27
418
原创 pipwire cpu 100%使用率的问题
在网上找到了社区的一篇bug反馈,可供参考https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/4621 这里也阐述了该字符设备引起的cpu 100%的bug。后打印火焰图,也是epoll_wait,虽然打印热点函数也是epoll_wait,但看函数栈似乎看不出啥,毕竟不熟悉pipewire。列出所有监听的fd,其中只有fd=54的代表监听音频设备/dev/snd/seq。sy列很高,用strace跟踪下系统调用发现大量的epoll_wait。
2025-04-06 18:06:49
265
原创 个人书单推荐
如果你对计算机很感兴趣或者想在这个行业做的好一点,请往下阅读,如果你只是想混两年赚点钱就再见,那这篇文章不适合你。书中自有颜如玉,书中自有黄金屋,从业十余载读过不少书籍。取其精华去其糟粕便形成了自己的知识体系,加以实践加深印象。好的书总是让人醍醐灌顶,读起来沁人心脾。一本好书价格也不低,赶在双十一、618等大促活动可以多囤一些慢慢看。一天之计在于晨,个人认为早晨读书是记忆最深刻,理解最清晰的时间。通常我会利用早晨上班路上地铁时间看书,大概1个小时多。
2024-11-27 10:49:19
690
原创 服务端问题剖析浅谈
这是一篇很随性的浅谈,主要围绕着作为一个服务端程序员如何解决疑难杂症这个话题。我是一名使用java的程序员,在我的认知范围内,java还是擅长于服务端业务编程。即:拥有完善的解决企业级信息化问题的生态,适用于服务端非极端性能要求下的一种编程语言。这里的重点是:生态健全,能够快速应对各种复杂业务。面向服务端,众所周知java在客户端(浏览器、桌面端、嵌入式)领域做的不是很好,只有安卓还说得过去。
2023-08-19 20:40:26
260
原创 如何构造一个安全的单例?
为什么要问这个问题?我们知道,单例是一种很常用的设计模式,主要作用就是节省系统资源,让对象在服务器中只有一份。但是实际开发中可能有很多人压根没有写过单例这种模式,只是看过或者为了面试去写写demo熟悉一下。那为啥说是一种常用的模式?其实我们用的spring管理对象生命周期,用到默认的scope就是单例。这样的场景几乎每天都在用,所以我们不需要自己手写单例了。那么为了面试,进大厂,是不是就要刷刷文章学习学习呢?当我们刷完单例的整体结构时,会发现还是很简单的嘛,无非就是懒汉、饿汉。饿汉上来就创建,没什么难
2023-08-07 23:35:23
1332
原创 Java是如何创建线程的(二)从glibc到kernel thread
上一节我们讨论了java线程是如何创建的,看了看从java代码层面到jvm层面的源码里都干了什么。整个流程还是比较复杂的,我将上一节总结的调用时序图贴在下面,方便你回忆起整体调用流程。这一节,我们再来详细看看glibc到linux kernel是如何创建线程的。这篇文章会涉及到一点汇编指令,因为我们要看看线程是如何进入内核态的。不用担心看不懂,我会写上注释,也不用死记硬背,只要知道线程进入内核态时是通过汇编指令进入的即可。
2023-02-11 20:26:30
956
原创 Java是如何创建线程的(一)从java到jvm
线程我们经常用,也会经常被面试或讨论到。我如果说Java如何创建线程的?你肯定回答下面三种:你一样会想,这么简单的问题有什么好问的,简直侮辱我的智商。但,请仔细想想,你真的知道上面3个问题,都包含在一个问题中,Java是如何跟操作系统交互创建线程,并被操作系统调度的?这3个问题,是我在2023年元旦放假休息的时候突然想到的,为什么会这么想?所以,我想看看背后的真相,看看线程的源代码是怎么实现的。在正式内容之前,我希望你抛弃之前对线程的认识,同时不要惧怕底层原理和代码,这篇文章也会很长。
2023-02-05 15:35:47
975
原创 警惕jdk8 UDP和Thread.interrupt的Bug
线上业务在热点流量大的情况下(业务采用Java编程语言实现),单机偶发出现Hystrix熔断,接口无法提供服务。
2022-12-01 00:45:13
1347
4
原创 有效的单元测试
本文阐述了单测的重要性,给出了错误的单测示范,针对错误反推出正确的姿势。有效的单测要把握3个特性:简洁、稳定、可靠。使用合适的单测工具库有助于写出好的单测代码(如:使用Spock基于TDD准则进行测试)。《代码整洁之道》和《重构》两本书中编写和重构代码的指导方法也同样适用于单测代码。《有效的单元测试》这本书非常推荐阅读。[1]《有效的单元测试》[2]《代码整洁之道》[3]《重构:改善既有代码的设计》[4]
2022-09-11 19:47:41
570
原创 某系统双十一内存飙升分析和解决方案
一、问题现象系统在双十一期间出现频繁内存飙升现象,内存在几天内直接飙升到报警阈值。在堆内存空间由3g调整到4g后,依然出现堆内存超过阈值问题,同时在重启若干次内存依然会飙升堆积。同时也发现了jvm一直不出现full gc,young gc稍微有点颤抖并出现young gc回收慢现象,很诡异,where is the full gc?!如图所示:同时可以看到,young gc后,内存逐渐......
2022-08-07 12:32:51
2399
原创 如何做一个可实施的故障预案?
其实写这篇博文的目的有三:我认为一个好的系统架构是面向错误和失败的,一个优秀的架构师除了能够给出解决复杂系统问题的方案,更需要给出异常和故障的解决方案。无论何时,我们应该精心设计,通过有限的资源解决复杂的问题,并最大化的预测故障,降低故障的发生概率。在这里,我希望能够阐述清楚工作中使用的故障分析方法、故障经验总结思路、预案构造过程,以及如何去实施预案。一份合理可实施的预案不是一个人能完全梳理清楚的,也不是一个人能完全实施展开的,这离不开一个团队。如果你的系统并没有什么用户使用,出现故障可以随时下线修复,那这
2022-05-31 20:42:08
1137
原创 一个可实施的技术方案模板
1. 背景描述项目背景,说清楚整个项目的背景以及业务方向。2. 目标根据背景列出要实现的目标点:xxxxxxxxx…3. 业务分析3.1 支持的能力若项目已上线,本次只是迭代,要写清楚已有业务的能力,以及针对本次迭代目标,要具备什么能力(功能)若是新项目,要写清楚针对本次迭代目标,要具备什么能力(功能)3.2 行业调研除非你创造了一个杀手级应用,否则你的轮子基本都是重复的。这里要写出业务领域内其他公司是如何实现的,若公司内有类似的实现,要写出公司内其他人是怎么实现的。他人的实现
2021-03-28 17:14:38
4745
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人