前言

随着互联网的迅猛发展,全球网民数量以及网民在网络上消耗的时间都明显增长,随之而来的就是互联网系统的并发量明显提升。以下是几个我们曾参与其中的案例:

QuestMobile的数据显示,2023年“双11”期间,购物类App的日均活跃用户数约为7.0亿;

2024年春运期间,火车票官方售票网站12306的单日最高售票量创下春运历史纪录,达到2090.1万张,单日最高访问量达838.8亿次;

在2015年除夕第一次出现抢红包的互动形式时,微信“摇一摇”的互动峰值达到了每分钟8.1亿次。

然而,并不是只有开发、运维这些大型应用的开发和运维人员才会面对高并发的问题。无论是电子商务、社交网络、在线娱乐还是金融服务等方面的系统,当面对运营活动时,都可能需要处理大量的并发请求,需要系统开发和运维人员确保系统在高负载下仍然能保持稳定、高效运行。

前瞻产业研究院在2024年发布的一份报告中指出,在全球从事软件行业的公司中,99%以上是中小微企业。对于这些企业运维的系统来说,其日均活跃用户数不会超过百万,请求量也不高,因此其开发人员缺少高并发系统设计的经验。

而在当今竞争激烈的技术行业,高并发系统设计成了许多岗位的必备技能之一。无论是互联网公司、金融机构还是其他企业,都对具备高并发系统设计技能的候选人持有很高的需求。这是因为高并发系统设计不仅代表着对系统架构和性能优化的深入理解,更意味着候选人具备解决复杂技术难题的能力。因此,对于求职者而言,精通高并发系统设计成了一张极具吸引力的名片,是打开许多公司大门的“钥匙”之一。因此,缺乏高并发系统设计经验的开发人员,亟需一本系统、全面地讲解高并发系统设计的图书,帮助他们更深入地理解和应用高并发系统设计技术。

本书的内容覆盖高并发系统设计和运维,旨在帮助读者系统、快速地掌握设计和搭建高并发系统的原理,学习互联网“大厂”积累的与高并发系统相关的实践经验。

高并发系统的设计是本书的重点内容,本书先明确设计难点是系统的高可用和访问的高性能,然后展开讲解4个基本设计原则(面向失败编程、可扩展、缓存和并发)及其实现方式。做好运维,是保证高并发系统的高可用和高性能的重要手段,本书将从系统运维和团队流程管理两个角度展开。

本书共6章,内容组织如下。

第1章,从高并发系统的发展历史讲起,重点介绍高并发系统的设计难点、基本设计原则和度量指标。需要注意,高并发系统的4个基本设计原则对应了众多方式,如系统容错、冗余、分片等,这些内容将在后续章节展开。通常情况下,在高并发系统的设计中,系统的高可用可以通过面向失败编程、可扩展和缓存这3个基本设计原则的实现来保证,访问的高性能可以通过并发这一基本设计原则的实现来保证。如图0-1中两条虚线所示。

第2章,讲解系统容错的6种实现方式,包括重试、熔断、降级、超时、限流和隔离。系统容错用于解决当系统出现局部问题时如何确保整体系统的高可用的问题。

第3章,讲解冗余的3种实现方式,包括存储资源冗余、计算资源冗余和机房冗余。其中,存储资源冗余包括存储冗余、缓存冗余、CDN冗余;计算资源冗余的主要实现方式是服务器冗余;而机房冗余则将存储资源和计算资源作为实现冗余的方法,从而提升系统跨机房、跨地域的可用性。

第4章,介绍分片,包括数据库分片和缓存分片这两种实现方式,以及分片后引入的新问题及对应的解决方案。

第5章,介绍并发与异步,这是提高高并发系统访问性能的常用手段。本章先介绍并发与异步的区别,然后介绍并发编程的实现方式、安全性与性能,最后介绍使用消息队列实现异步编程时可能遇到的问题及相应的解决方案。

第6章,从系统运维和团队流程管理两个角度介绍高并发系统的运维。从系统运维角度,本章将介绍如何通过全链路监控、报警系统、全链路压测和故障演练发现系统问题、性能瓶颈和系统可用性方面的薄弱点;从团队流程管理角度,本章将从变更流程、SOP文档、故障复盘机制和日常系统梳理方面介绍如何在团队内构建稳定性保障流程,从而提升高并发系统的可用性。

本书的内容组织结构如图0-1所示。

图0-1 本书的内容组织结构

本书案例的代码主要使用的是Java语言,在讲解熔断开源实现时用到了Go语言。为方便阅读,本书将在正文和代码注释中对代码的主要逻辑、重点和难点进行讲解,因此不要求读者同时具备Java和Go的语言基础。

最后,我要向许多人表达最诚挚的感谢和深深的敬意,本书的完成离不开他们的支持、帮助和鼓励。首先,我要感谢我的家人,他们在我最需要支持和理解的时候给予了我最大程度的关爱和包容,让我有了充分的精力和动力投入写作;其次,我要衷心感谢我的领导,他们在我职业生涯的各个阶段都给予了我无私的指导、支持和鼓励;同时,我还要感谢所有参与本书撰写和编辑的同事们,他们辛勤工作、通力合作,为本书的顺利完成提供了坚实的保障;最后,我要向所有阅读本书的读者表示诚挚的感谢,是你们的支持和关注,让我有了写作的动力和信心。我希望本书能够给读者带来有益的指导,成为读者学习和工作中的良师益友。

唐扬

2024年9月