Skip to content

Latest commit

 

History

History
81 lines (47 loc) · 7.72 KB

intro.md

File metadata and controls

81 lines (47 loc) · 7.72 KB

前言

如果你是一位互联网从业者,我猜出这几年你大概率被这些层出不穷的概念包围:云计算、边缘计算、PaaS、FaaS、CaaS、ServiceMesh、Serverless,当然不能遗漏了各种 Ops,诸如 DevOps、GitOps、MLOps、FinOps 等等。

近几年来,软件开发技术经历了翻天覆地的变革,对构建业务应用的方式产生了重大影响。在探索那些令人兴奋的技术以及讨论如何为业务赋能之前,我们不妨先思考一下,推动这一波技术浪潮的核心驱动力是什么?

软件在吞噬世界

互联网投资人 Mark Andreessen 曾在文章《软件正在吞噬世界》中探讨了软件如何改变各个行业。以下是文章中的部分内容:

:::tip 《软件在吞噬世界》节选

我们处于戏剧性和广泛的技术和经济转变的中间,软件公司准备接管大量的经济。... 十年前,当我在创办的 Netscape 公司时,大概只有 500 万人使用宽带互联网,而现在有超过 20 亿人使用宽带互联网... :::

文章发表于 2011 年,2023 年再来回顾互联网的冲击,感触更加深刻,部分软件变成像水、电、媒一样的基础设施。

在展望互联网规模时,作者曾预测:“在未来 10 年,全球至少有 50 亿人将拥有智能手机,每个人都可以随时随地利用互联网”。如今,我们可以确认,Mark Andreessen 的预测很准确:移动互联网时代的用户规模已经接近全球人口基数,亿级 DAU 规模的移动应用不断涌现。

软件对各行各业的渗透和对世界的改变,以及移动互联网时代巨大的用户基数下快速变更和不断创新的需求对软件开发方式带来巨大的推动力,我们清晰地看到如此波澜壮阔的技术浪潮:

  • 软件正在改变世界。
  • 移动互联网让这个变革影响到每一个人。
  • 传统软件开发方式受到巨大的挑战。
  • 因为云计算以及相关技术的普及,软件上云成为趋势。
  • 云计算的形态,与之对应的软件技术在持续演进。

过去二十年,软件的规模和质量要求不断提升,云基础设施和平台日益强大,软件技术逐渐发展成为它本来该有的模样,形成了与云环境匹配的架构,并催生了相应的开发流程和方法论。

大时代下的个体

视角转回到个体,不管你是否接受,软件行业解决问题的技术一直在变化。

这种变化并非简单的升级,而是剧烈的革新替代。例如,容器替代虚拟机,服务网格替代 Spring Cloud,观测替代监控,Network Policy 替代 iptables 等等。这种替代打破了软件开发中许多固有的假设。在如此剧烈的变革中,如果我们只关注眼前的工作,不抬头“看天”,当大革命来临时,曾经关注的细节可能再也没有意义。

所以,本书很少描述某个软件如何安装、如何使用,而是聚焦问题本质,剖析不同方案的核心原理,并探索技术发展的规律。例如,网络优化受限于物理世界的约束,分布式系统的演进则是对 CAP 定理的权衡,受时间和空间法则的制约。近几年流行的容器、服务网格也不是什么黑科技,只是把计算机的基本原理、方法重新组合,换种形式解决业务变化带来的新问题。

读完本书,相信你将对系统的整体运作有全新的理解,能够从容选择方案,轻松应对各种复杂问题。

本书适合哪些读者

本书主要面向软件工程师、架构师和技术负责人,特别适合那些需要在系统架构中做出权衡的技术决策者。即便你不直接参与这些决策,本书也能帮助你深入理解各种技术的优缺点。

阅读本书时,最好了解一些请求/响应型(Web)系统原理,熟悉一些常见的网络协议(譬如 TCP、HTTP 等)。如果再有一些后端开发经验,这将加深对本书内容的理解,至于你熟悉何种编程语言倒没有太大关系。

总体上讲,若以下条件适用你,你将从本书获取收益。

  • 想了解行业技术发展趋势和动态。
  • 需要在系统架构中做出权衡,避免常见设计陷阱。
  • 需要构建可靠、高效率、低成本的系统。
  • 对互联网系统的整体运作有着天然的兴趣,并乐于探索其中的奥秘。

如何阅读本书

本书围绕“构建高可用系统”(更可靠、更效率、更低成本)展开,共分为六个部分:

  1. 第一部分,是全书的绪论。内容只有第 1 章。我们将从需求的背景、解决问题的角度讨论这几年技术架构演进的趋向。该部分适合所有读者,尤其是希望了解近期技术发展概况的人士。

  2. 第二部分,主题是网络。我们将从一道经典的面试题“浏览器打开 url 到页面展现,中间发生了什么?”出发,了解贯穿其中的整个网络请求链路,并努力实现“足够快”目标(第 2 章)。紧接着,我们将跟随网络数据包进入内核,学习操作系统的基本规则,了解内核各模块和设备的协作及其对应用层的影响(第3章)。最后,我们将根据网络数据包的转发/处理的逻辑,讨论四层/七层负载均衡的设计原理(第 4 章)。

  3. 第三部分,主题是分布式系统。首先,我们将了解数据一致性的基本概念,接着讨论 CAP 定理及其影响下的各类分布式事务模型(第5章)。随后,我们将探讨分布式副本容错模型,这是实现分布式系统可靠性的关键,重点关注如何在网络不可靠和节点可能宕机的环境中实现共识(第6章)。读完本部分内容,相信您将对分布式系统有全新的理解。

  4. 第四部分,主题是基础设施。我们将先了解 Google 内部系统的演变,并学习 Kubernetes 在计算、网络 存储、容器编排调度的设计原理(第7章)。随后,我们将回顾过去十几年服务通信的发展历程,探讨服务网格技术的出现的背景,弄清楚它到底解决了什么问题(第8章)。

  5. 第五部分(第9章):主题是确保复杂系统的可靠运行。这其中的关键是,统一收集、关联和分析系统输出(日志、指标、追踪),从而构建出能推断其内部状态的能力。

  6. 最后一部分(第 10 章),我们将深入探讨 Kubernetes 等基础设施的演进,剖析声明式管理的本质,领会“以应用为中心”的设计理念,探索几种流行的应用层软件交付模型与抽象(如 Kustomize、Helm、Operator 和 OAM),帮助我们更加高效、自信地开发和交付应用。

致谢

首先,我要感谢我的爱人。在我决定开始写作时,她毫不犹豫地承担起照顾两个孩子的责任,并在三年里忍耐我将所有空闲时间投入到写作中。没有她的支持,我无法完成该作!其次,还要感谢在 Github 帮我校验书稿的网友,他们帮我指出了大量的笔误、不严谨的内容,提升了书稿的质量。感谢你们 songzhibin97、sunway910、HUGHNew、watermeion、CrypticDriver、nyufeng、MoguCloud MoguCloud、lengchu、chesha1、zhangwt-cn、Timmer2338 Timmer2338、5isi、owen-kuai、zyp461476492、msqtt、hexody、zhuweileo、gcmutator、acechef、vikiboss、xxm1995、czy0538、binc4t、ercJuL、MarushiruDonato、ChengS-U、yiyungent、Snailclimb、cplayer、AllinProgram、wjp-cn、iakihsoug、MoshiCoCo、SSShooter、XBIsland、qinxuliang...。

最后,谨将本书献给我的家人以及热爱技术的朋友们。

勘误

由于笔者的认知和精力有限,本书难免存在一些错误。如在阅读过程中发现问题,欢迎指出并提出宝贵意见,我将继续在本书的网址 https://www.thebyte.com.cn/ 进行勘误和修正。