“如果我看得更远,那是因为我站在巨人的肩膀上。”
-牛顿
本系列,主要结合个人经验,讲述工业级的百万级qps服务,如何搭建和落地。作者分享的原因是,我在工作当中,读了多个系列的文章和书籍,再结合实际经验,最终形成目前的系统性方法,这个过程中,走了一些弯路,也留下了很多笔记。所以我想分享我的经验,让校园中,或者工作几年,缺乏海量数据处理实践机会的同学,有些许收获。
另外文章的作用,受作者的经验和认知的局限,这里简单叙述下个人经验,帮助读者甄别。个人在百度、阿里一直从事后端开发相关工作,和本书相关的主要工作经验为:
- 单批次10T级别的离线数据处理系统开发
- QPS百万级的毫秒级延迟的查询系统1号位,负责从0到1设计、开发
- EPS千万级的秒级延迟的流式处理系统1号位,负责从0到1设计、开发
实现目的,简单还是复杂,很大程度取决于有多少前人已经完成过。
如果在20年前,说“构建工业级QPS百万级服务很简单”,是噱头,但是在2024年,这不是一件难事,因为它已经被多个企业、团队、甚至个人完成。而我,只是结合个人经验,再基于前人经验做一些总结和改进。
本文不会花大篇幅讲,使用频率极低的、接口成熟但原理晦涩难懂的、几乎只会出现在面试中的内容,因为这类文章曾经让我在成为一位靠谱工程师的道路上浪费了许多时间,并且学习一周后完全忘掉,对于软件工程师,我们要把更多的精力放在如何站在巨人的肩膀上,去实现目标。而不是花大量时间研究,linux在部署Alpha 架构时,如何管理应用死锁的,这些经验,只有在你实际遇到这类问题的时候,再去研究吧(最好永远不要遇到),毕竟人的精力是有限的,让我们把精力花在更有趣的事上面。
服务是和团队一起搭建的,功能是给人用的,脱离了使用者和合作者的服务,是空中楼阁,所以我也会花一些篇幅去描述代码之外的经验。
文章中大部分内容与语言无关。虽然作者也曾使用java、python开发服务。但是主要使用语言是c++,所以会有单独一部分描述语言使用经验,跳过也完全不影响这个系列的阅读和逻辑连贯性。
最后,本系列的文章,是我在工作之余,从个人历史的笔记、总结、分享中提炼出来。我会优先整理最近频繁使用或者有感触的内容,有一定量之后再考虑合并。如有错误,还望指正。
文章地址(持续更新中)
《工程实践》
通用工程思路
《高并发系统正确性保障 - 锁的范式》 | 《构建可观测软件系统的落地方法》 |
《分布式系统可用性保证方法和实践》 |
无状态服务
概述 | 01 - 从单机到集群 |
02 - 单人开发到多人开发 | 03 - 服务出问题了怎么办 |
04 - 如何降低成本 |
有状态服务
01 - 存储选型实践 | 02 - 冷启动和热更新 |
03 - 消息队列 | 04 - 服务一致性 |
05 - 持久化存储 |
《项目落地》
《如何给项目排期》 | 《选择项目工具的方法论》 |
《项目成员高效沟通的方法》 |
《语言经验》
《海量数据服务的c++ core dump问题调查难点和方法》 | 《c++的高性能内存管理库tcmalloc和jemalloc》 |
《c++11获取系统时间最快的方式》 | 《c++最快的日志库spdlog》 |
《使用google profiler 对c++应用进行性能热点分析》 |