相信这几年你一定被层出不穷的新技术、名词、概念方法论迷惑:container、Kubnernetes、ServiceMesh、FaaS、Observability、Serverless、DevOps、FinOps...不一而足。
每一个领域下都有7、9种选择,也难怪,行业的人被整的普遍焦虑,担心自己跟不上趋势,因技能过时而被淘汰。
你肯定不想花了很多时间去学习一门技术,刚刚学成就发现它已经被淘汰了,你付出巨大的精力学习,又承受这些软件在未来某一段时间取代消亡的尴尬境地,程序员职业变成了有巨大体力支撑的青春饭。或者搞了十年CRUD, 猛然回头才发现没有拿得出手的核心技能。面试时被问起自己的核心优势时,只能回答 “打字快”。
这行业的很多变化只是昙花一现的表象,其根本性变化并没有那么快,很多“老”技术、 “老”方法在过去多年一直很有效,预计未来相当长时间仍然会保持有效。笔者举个例子,你看 Kubernetes 的网络方案,Cilium、Calico、Flannel、weave 表面五花八门,但它们的基本技术和底层原理总结下来基本没什么变化,只是把这些不同的计算机基本原理、方法重新组合起来,换种形式去解决因为业务变化带来的新问题。
真正有长久生命力并能作到历久弥新的技术是少数
笔者也未曾花费精力去介绍某一种技术的 feature,软件的迭代速度是非常快的,越往上层,花活越多,埋没在技术的细节里,
而软件之间的竞争更是成了 to be or not to be 生死存亡。用一个具体的例子,供你感受:Docker 2013 年横空出世、微服务时代如日中天、云原生时代黯然落幕,仅仅五六年时间。所幸,无论软件形态如何千变万化,如果尝试理清它们脉络,总能找到若干贯穿其中的一些共用的底层原理、方法论。我“自大”地希望能说清楚问题的本质,解释清楚这样、那样的设计背后的考量,以及整个服务架构的发展历程, 走过了哪些弯路,以至于今天使用了哪些技术的缘由。讨论他们背后遵循的不变的原则、知晓这些技术做的取舍、探索它们的设计选择。
善于思考总结的人总会从历史的进程中得到相关的规律,所以,过时的不是基础的技术原理和方法,而是人的思考能力以及没有跟上节奏的对技术的认知。
如果你想更进一步,开脱程序员的视野,逐步走上优秀程序员的队列,希望本书能作为你的引路人。
本书主要针对软件工程师、软件架构师以及技术经理等,特别是那些需要对系统架构做权衡的人,譬如需要选择一些工具去解决某个领域的特定问题。退一步,如果你不需要做这些决定,本书也可以帮助你更好的理解这些技术的优缺点。
阅读本书,最好了解一些请求/响应型(Web)系统原理,有一些后端开发经验,熟悉一些常见的网络协议(譬如 TCP、HTTP ),这将会对阅读有很大帮助,至于你是何种编程语言倒是没有太大关系。
由于作者的认知局限,难免产生各种各样的错误。
首先感谢我的家人,
写作不是无中生有,