1.2 云原生出现的背景
了解云计算的技术演进后,我们再回过头看看世界的变化,思考世界变化对软件开发的影响。
1.2.1 软件正在吞噬世界
Mark Andreessen 是风险投资公司 Andreessen-Horowitz 的联合创始人(如图 1-6 所示),该公司投资了 Facebook、Groupon、Skype、Twitter、Zynga、Foursquare 等公司。
图 1-6 《Software is Eating The World》 —— by Mark Andreessen, in 2011
2011 年 8 月 20 日华尔街日报上,Mark Andreessen 发表了名为“Why Software Is Eating the World”的文章,内容主要阐述了软件如何影响各个行业,援引其中部分内容:
《软件正在吞噬世界》内容节选
我们处于戏剧性和广泛的技术和经济转变的中间,软件公司准备接管大量的经济。
为什么现在发生这种情况?
计算机革命六十年,微处理器发明四十年,现代互联网兴起二十年,通过软件转变行业所需的所有技术终于有效,并可在全球范围内广泛传播。
文中列出了被重塑的产业,具体有最大的书店 Amazon、最多人订阅的 Video service Netflix、最大的音乐公司 iTunes、Spotify and Pandora 等、成长最快的娱乐领域 videogame、最好的电影制片厂 Pixar、最大的行销平台 Google、Groupon、Facebook 等、成长最快的电信公司 Skype 、成长最快招聘公司 LinkedIn。
文章发表于 2011 年,2023 年再来回顾,互联网冲击已经无所不在,部分软件已经变成水电煤一样的社会经济中的基础设施,感触更加深刻。思考这样的软件如果宕机,对社会产生什么影响?
1.2.2 移动互联网在加剧变化
还是那篇文章,Mark Andreessen 展望互联网规模时,写道“在接下来的 10 年里,我预计全球至少有 50 亿人拥有智能手机,每个人每天都可以随时随地使用手机充分利用互联网”。
现在,我们已经可以确认 Mark Andreessen 的预测很正确,移动互联网时代的用户规模已经开始向人口基数看齐,开始出现各类亿级 DAU 规模的移动应用。移动互联网如此巨大的用户规模会对软件开发有什么影响?
援引 Netflix 的一页 PPT,如图 1-7 所示,这里按照规模和变更速度将软件企业划分为四个象限/四种类型:
- 企业 IT(Enterprise IT):规模小、变化慢,容易处理。
- 电信(Telcos):规模大、变化慢,主要应对硬件失败。
- 初创公司(Startups):规模小、变化快,主要应对软件失败。
- 网络规模的互联网企业(Web-Scale):规模大、变化快,软硬件或者说所有东西都会出问题。
图 1-7 Netflix 按照规模和变更速度对软件企业划分的总结
在十年前乃至二十年前的互联网时代,大多数软件企业都位于图 1-7 左边的两个象限“规模或许有大有小,但是变更速度相对今天都不快”。当企业发展壮大时,体现的也更多是在规模上,变更速度并不会发生质的变化。
而今天的移动互联网时代,则都位于图 1-7 右边的两个象限“无论规模是大是小,变更速度都要求非常快”。并且当企业逐步发展壮大,规模十倍百倍增长时,对变更速度的要求并不会降低,甚至会要求更快。
在移动互联网时代,能够成长并发展起来的这些公司,它们的共同点是:
- 快速变更,不断创新,随时调整。
- 提供持续可用的服务,应对各种可能的错误和中断。
- 弹性可扩展的系统,应对用户规模的快速增长。
- 提供新的用户体验,以移动为中心。
这样的背景下,对软件质量有了更高的要求,软件开发的方式也不得不跟随时代而变化,首当其冲的就是如何解决规模越来越大同时变更越来越快的难题。
1.2.3 云原生诞生
前面谈到了软件对各行各业的渗透和对世界的改变,以及移动互联网时代巨大的用户基数下快速变更和不断创新的需求对软件开发方式带来的巨大推动力,1.1 节描述的过去二十年间云计算的发展演进和软件上云的趋势,我们可以清晰地看到如此波澜壮阔的技术浪潮:
- 软件正在改变世界。
- 移动互联网让这个变革影响到每一个人。
- 传统软件开发方式受到巨大挑战。
- 云计算普及,软件上云成为趋势。
- 云的形态持续在演进。
在过去二十年,云的底层基础设施和平台越来越强大,软件架构的发展也逐渐和云匹配:
- 通过不可变基础设施(镜像)解决本地和远程一致性问题;
- 通过服务网格(ServiceMesh)将非业务逻辑从应用程序中剥离;
- 通过声明式 API 描述应用程序的状态,而不用管中间的处理过程;
- 通过 DevOps 方法论以及一系列工具来提升研发/运维效率...。
应用程序中的非业务逻辑不断被剥离,并下沉到云/基础设施层,代码越来越轻量。由此,工程师的开发工作回归本质(软件开发的本质是解决业务需求,各类“高深”、“复杂”的技术难题是业务需求的副产物,并不是软件开发的主题)。
最终,上帝的归上帝,凯撒的归凯撒,云原生就此诞生!