推荐序
大约在10年前,移动互联网处于萌芽阶段,老牌的互联网巨头摩拳擦掌,纷纷布局以手机、Pad为代表的移动端,期望将传统PC端的成功复制下去。而一些互联网新贵则凭着自身敏锐的洞察力、强大的产品力,轻装上阵杀入各个垂直领域。很快,这些产品延伸至老百姓的日常生活,最终形成千万级产品,移动互联网的时代终于到来。与此同时,支撑互联网发展的底座——软件技术及架构,也一直在变化。
对于大多数中小型互联网公司来说,早期的产品属于MVP试验阶段,用户量较小,所采用的架构以单体为主,技术选型也相对简单,无须考虑高并发问题。上线部署时,通常是手工打包,然后上传到某Linux单机上。在很长一段时间内,开发和运维的工作泾渭分明、互不干涉。一般来说,只有在系统出现故障时,双方才会认真地打个照面,长此以往,摩擦和误会必然存在。此时,有经验的运维工程师会考虑将一部分手动工作脚本化,以减少人为操作失误,从而提高工作效率;而有经验的开发工程师会考虑将自己的系统变得更加友好,以降低事故率和缩短排查时间。随着时间的推移,产品的用户量越来越大,单机单体的架构已经不足以支撑海量请求,工程师们开始考虑用分布式服务集群来缓解单机压力。至此,微服务架构应运而生。围绕着微服务架构有很多技术,比如统一网关、注册中心与服务发现、负载均衡等,相信大家也都有所了解。
此时,优秀的开发和运维工程师们又开始考虑另一个问题:现在的服务越来越多,版本发布越来越频繁,非常容易出现人为故障,系统也总处于不稳定的状态,我们该如何优化整个交付流程呢?
DevOps正是解决该问题的良方,它打破了开发、测试与运维之间的壁垒,将整个CI&CD流水线化、智能化。但这还不够,对于大规模微服务架构,我们可能会更进一步关注资源与效率问题,比如服务(或机器)能否弹性扩容,能否在资源出现异常时有足够的韧性提供持续服务等。随着云计算、容器化、微服务框架等技术的发展,业界提出了云原生架构。它旨在将系统中的非核心业务代码剥离出来,让IaaS和PaaS接管,而在实现CI&CD时,直接通过Docker镜像进行交付,配以Kubernetes进行容器编排,让整个应用服务处于灵活部署、灵活扩展且资源可检测的状态。
可以看到,在技术架构不断演进的过程中,运维工程师所需的能力栈也在发生变化。从最开始的手工运维到脚本化运维,再到基于云原生架构的自动化运维,运维工程师逐渐将触角延伸到开发领域,最终和开发人员共同承担系统稳定性保障的责任,这其实非常考验工程师的综合能力。老余的这本书,正是在这个背景下创作出来的,本书不仅覆盖了Python开发、Linux集群负载(LVS、HAProxy、Nginx等)等基础内容,还包含了云原生微服务架构下的Kubernetes、Service Mesh服务网格Istio等前沿技术。同时,他还用亲身经历的亿级流量系统来讲解高并发系统的架构该如何设计。本书内容基本能涵盖一名优秀工程师应该掌握的所有运维技能(不仅限于运维工程师),这确实是一本不可多得的好书!
老余告诉我,这几年他一直在开发云原生相关产品,在实践中解决过很多问题,也经历过挫折与困扰,但“除了学习之外,好像也没什么其他乐趣”,2020年十一期间,他基本都是在学习和工作,他也希望能将自己所遇到的问题,以及重要的知识点分享出去,让其他人少走弯路。老余作为一名畅销书作者和运维专家,还能保持在一线战斗,并仍能花费较大精力做高质量的经验输出,这着实让人敬佩!
阿里云MVP、资深技术顾问
《Akka实战:构建高可用分布式应用》和
《软件开发实践:项目驱动式的Java开发指南》作者
杜云飞