微服务把我坑了!

2020年4月12日 250点热度 0人点赞 0条评论

技术总监张大胖在朋友圈看到一篇文章,讲的是Netflix的微服务实践。 


研究了一会儿以后,他不由地拍案叫绝:每个服务都是一个组件,可以

1. 独立开发 

2. 独立部署 

3. 独立伸缩


人家Netflix居然可以在生产环境随意地停掉微服务测试稳定性,这真的把张大胖镇住了!


张大胖上网搜索一番,发现网上已经有很多文章了,很多公司已经开始使用微服务了,输出了很多最佳实践,自己还不知道,太落伍了,这绝不能容忍!


他马上召集部门开会,商量微服务改造事宜。 


技术狂热粉小王率先发言:“现在支持微服务的有很多框架,比如SpringCloud , Dubbo等, 张总可以选择一下!”


张大胖找到了支持者,向小王投去了赞许的目光。


爱思考的小李说到:“张总, 我们维护的是一个企业内部系统,好像也不太复杂啊,需要改造成微服务吗?”

张大胖反问:“怎么不需要?微服务是未来业界的趋势,不顺势而为就会被时代抛弃。以后你没做过微服务,出门好意思给别人打招呼吗?!”

没人说话了。

张大胖又补充一句:“每个服务都是独立的,大家可以用自己喜欢的编程语言去开发啊!”

这句话太有杀伤力了, 各个开发人员浮想联翩:

小李:“嗯,我要试一下Go”

小王:“我正在学JavaScript,可以搞下Node.js”

小刘:“趁此机会练习下Python”

看到大家脸上的表情,张大胖心中暗喜, 他讲了一下自己选择的RPC框架,支持服务发现,负载均衡、网关、故障转移等各种功能。

然后他带着大家把现有系统做了划分,拆分成12个微服务,它们之间通过REST API调用。

微服务改造之路正式开启!

第一周

小李:“张总,现在配置个本地环境可真是麻烦啊,我负责的服务依赖其他五个服务,没法本地运行啊。”

张大胖:“嗯,这我事先倒是没想到,我看到大家都在用docker,要不我们也把微服务都形成docker镜像?这样每个人都可以在本地运行整个环境了。”

小李:“这能行吗?我的机器性能差,这么多微服务跑不起来吧?”

张大胖:“没事, 我申请经费,每人一台高性能电脑!”

第二周:

小王:“张总,你看我们每个微服务对应一个自己的数据库,原来的事务做不了了。”

张大胖大吃一惊,怎么把这一茬给忽略了!他知道分布式事务,两阶段提交,三阶段提交, 但是性能差,稳定性不好,上网搜锁了一下,发现了TCC,但是对业务的侵入性强,最后确定用“最终一致性”这么一个宝贝,发给了小王。 

小王看完后说到:“张总,这还得实现重试和幂等性啊,真是麻烦啊。”

张大胖拍拍小王的肩膀:“小伙子,要有开放的心态,这是多么好的学习机会啊?”

第三周:

小梁:“张总,这么多微服务,我为了定位一个问题,花了一个上午的时间,一个服务一个服务地查找,累死个人啊。”

张大胖很无奈,搜出一个“链路跟踪”的开源解决方案Zipkin,扔给小梁去实施。

看着密密麻麻的配置,小梁觉得很崩溃。

第四周:

小蔡:“张总,这日志文件都分布在不同的机器上,查看起来太麻烦了。”

张大胖找到一个“ELK日志分析”的解决方案,扔给小蔡去实施。

第五周:

小刘:“张总,小梁改了微服务的接口,增加了一个参数,他没给其他人说, 我们的微服务都没法运行了!”

张大胖说:“小梁怎么能这么做呢?”

小刘:“原来在一个工程中,在编译阶段就能发现接口的不匹配,现在都是靠文档约定的接口,发现问题就晚了。”

张大胖搜出一个“契约测试”,发到群里:“以后的服务改动,必须得通过契约测试!”

第六周:

小李:“张总,我们这12个微服务,每个服务部署3个实例,我昨天熬了一宿,才手工部署完成,必须得自动化了,要不咱们也来一套k8s?”

张大胖拍拍小李的肩膀:“小伙子挺有想法,微服务可不就得搭配k8s吗,搞起来!”

经过几个月的996的开发,微服务改造过的系统隆重上线,各种新技术在其中闪闪发亮:服务发现,负载均衡、网关、故障转移,最终一致性,链路跟踪,日志分析,契约测试,docker, k8s......

张大胖心满意足。

CEO把张大胖叫进了办公室。

CEO:“张大胖,你说搞系统改造,我还给你批了资金,现在系统怎么越来越慢了?”

张大胖:“老板您有所不知,我们的系统现在变成分布式的了,分布式系统要略微慢些。”

CEO:“我就问你,我就想看看这个报表,为什么半天都出不来结果?”

张大胖:“因为我们现在是微服务架构,这涉及到多个服务调用!我们实现了网关,负载均衡,故障恢复等很多高级的功能,不信您看,每个服务有3个实例,我把任意一个杀掉, 系统就会自动启动一个新的, 和Netflix一样..... ”

CEO 怒了:“你疯了吗?我们这个是内部应用,公司一共才几百人,你瞎搞啥负载均衡,故障转移!”

第二天, 张大胖被开除了。 

张大胖离开之前对组员说:“唉,没办法,领导们只关注业务,不关注技术的发展趋势,我要走了,大家以后好自为之吧。”

小李嘀咕道:“这技术不就是为业务服务的吗?微服务看起来很美,但是根本不适合我们。”

小王说:“张总,别听小李瞎说,我们学会了微服务,简历中也有干货了。”

张大胖心中一亮, 回去赶紧修改简历,加上了这么一条:


领导了单体项目向微服务的迁移,精通微服务的架构设计,部署,监控。 

后记:

写这一篇小品文,是想说明一个道理:不能“手里拿着一个锤子,眼中看到的全是钉子”,微服务虽好,也有适用的范围, 有很多项目单体应用活得好好的,根本没有拆分的必要,盲目追风,反而得不偿失。

(完)

图片

如何降低程序员的工资?

程序员,你得选准跑路的时间!

两年,我学会了所有的编程语言!

一直CRUD,一直996,我烦透了,我要转型

字节码万岁!

上帝托梦给我说:一切皆文件

Javascript: 一个屌丝的逆袭

Node.js :我只需要一个店小二

我是一个线程

TCP/IP之大明邮差

一个故事讲完Https

CPU 阿甘

图片

16530微服务把我坑了!

root

这个人很懒,什么都没留下

文章评论