小说连载系列是我第一次尝试的新的技术讲解方式,希望通过小说的形式将技术细节讲解清楚。
第二篇中长篇连载小说《新三国外传》,主要讲解一些架构、新技术以及程序员工作中的一些轶事,希望大家能够喜欢。
郑重声明:小说人物和故事情节取材自三国演义,作者融入了技术元素,做了大量修改,未经同意禁止任何形式的转载,侵权将进入法律程序。大佬除外。
欢迎大家转发文章,谢谢!
前情回顾
【技术小说连载】新三国外传——游说东吴
【技术小说连载】新三国外传——献连环计
【技术小说连载】新三国外传——赤壁之战
曹操自从赤壁之战大败之后,一蹶不振,本来的绝对优势变成了天下三分的局势。
曹操有个习惯,每次吃了败战,都要面壁思过一段时间。吃了这么大一个败战,曹操已经面壁思过了一年时间。
一年后的今天,曹操准备好 ppt ,想着召集众将士们一起复盘。
曹操:“一年,一年了,我没有发动过战争,就是因为赤壁之战对我的打击太大。”
众将士不语。
曹操:“若郭奉孝在,不使我至此啊!”
郭奉孝名郭嘉,是曹操军中第零大谋士,可惜天天 996 ,身体不好,赤壁之战前就病逝了。
众谋士听闻,都羞愧难当。
曹操:“你们谁能说说,赤壁之战失败的根因是什么?”
谋士荀彧先发言:“依我看都怪那庞统,献个什么连环计, 把我们系统改得乱七八糟,耦合太严重,才导致一个模块挂了,整个系统都挂了 。”
曹操:“庞统何在?”
程昱:“庞统早已离职。”
曹操恨那庞统也是恨得牙痒痒,这种 low 逼谋士,技术渣,上来胡乱在系统里写些垃圾代码,把系统搞臭了就离职。
但是回头想想,也是自己先同意了让庞统去做改造,自己也有不可推卸的责任。
曹操:“还有其他原因吗?”
武将张辽也发言:“我们 系统要缩扩容非常麻烦,要手动重装系统,再装环境 。”
曹操:“其他人不也一样吗?”
荀彧:“非也,我听说那周瑜, 用的是什么docker,系统缩扩容半分钟就完成了 ,所以才导致我东北 45 度火力模块瞬间被集火挂掉。”
曹操一听,原来还有这段战况,开始后悔自己不应该盲目自信,坐在监控室里喝酒,他把那绣到一半的十字绣扔进了垃圾桶:“以后我再也不绣了。”
曹操:“我也来说说我这一年来的反思, 以前我太关注系统功能实现,根本没考虑系统稳定性和容灾能力 ,才导致那庞统钻了空子。”
这时坐下一人大喜:“时机已到!”
他站起身来:“主公所言极是,且问主公准备如何改进?”
站起来这位不是别人,正是曹营第一大谋士,与那郭嘉齐名的司马懿。
曹操:“这也是我犯愁的地方啊, 用统一语言重写系统,要两年时间,不重写,系统之间通过RPC调用,耦合又太严重了,稳定性和容灾能力太差 。”
司马懿:“ 其实这分布式系统,模块之间的调用都是通过RPC,只是要考虑的东西更加复杂,比如网络不通,负载均衡,限流降级,服务发现等等 。”
程昱一听就泼冷水:“我前段时间也在看分布式系统,确实要考虑这些新问题, 但是我们现在有五种语言写的模块,你 每个语言都去实现这些能力,我估计你两年都写不完 。”
司马懿:“这些能力确实是每个模块都需要,但是我并没有说要让每种语言都去实现这些能力。”
程昱疑惑不解:“你不实现怎么能拥有这些能力?”
司马懿:“你可听说过 ServiceMesh ?”
程昱:“没听说过,这是什么东西?”
司马懿:“ ServiceMesh是一种与应用一起部署的轻量级的分布式网络代理 。”
程昱:“别整玄乎的概念,你就说说它怎么解决我们现在的问题?”
司马懿:“我们现在面临的问题无非就是 每个分布式模块,都要实现限流降级,服务发现等一系列容灾功能,这样一来对系统改造成本太大 。”
司马懿:“而 ServiceMesh 提出一种 边车模式(sidecar) , 应用相互之间不直接通信,而是和自己的边车通信,通过边车来实现限流降级,服务发现等一系列容灾措施 ,这样,应用的改造成本将非常小。”
程昱:“那边车是如何实现这些功能的?”
司马懿哈哈大笑:“并不是边车实现了这些功能,你且听我慢慢道来。”
司马懿:“ ServiceMesh是由控制平面(Control plane)和数据平面(Data plane)组成,其中Control plane中可以定义服务发现、路由、流量控制等策略,而Data plane负责sidecar之间的通信和执行这些策略。 ”
司马懿:你看上图,浅蓝色部分代表咱们现在各个语言的业务模块,灰色部分代表边车(sidecar),你可以看到, 业务模块只和自己的边车通信,而真正实现相互之间通信的是边车 。
司马懿:咱们把业务模块拿掉,你看上图,这些边车就组成了一张网络,这就是ServiceMesh(服务网格)名称的由来,而 这些边车组成的网络,就是数据平面 。
司马懿:在这数据平面之上,还有一个控制平面,面向用户,让用户来定义各种策略。数据平面则根据这些策略去执行相应的逻辑,比如实现限流降级、服务发现等功能。
程昱:“哦,我明白了,这倒是一种方法。那么实现 ServiceMesh 需要多长时间呢?”
司马懿:“不用自己造轮子了,现在已经有一些现成的方案,比如 istio 。”
曹操一听大喜:“行,就按照你说的来改造,但是这次改造完成,我们要执行严格的灾难测试。”
司马懿将代码回滚到庞统来之前,然后改造系统, 把系统搭在了k8s之上,用上了istio ,整个系统改造花了不到半年时间。
系统改造完毕,曹操安排了张辽 对系统进行灾难测试,主要就是把一些模块搞挂 。而那 ServiceMesh+k8s 搭载的系统,已经完全能够承受这种级别的灾难了。
曹操看到测试结果以后大喜,在铜雀台摆上了酒席宴请众将士。
曹操:“来,把甄姬叫来给大家跳个舞。”
众将士都沉浸在甄姬美妙的舞蹈当中,而曹操心里却已经盘算着如何灭掉孙刘。
是的,讲了这么多主要想说说ServiceMesh,写了4篇连载,这个小故事到这里就结束了。 敬请期待下一个新故事。
第一次尝试写技术小说,如果你喜欢这种形式,麻烦动动手指转发一下,你不经意间的动作,可能就会给大家带来一部伟大的技术小说。