微服务把我坑了!
技术总监张大胖在朋友圈看到一篇文章,讲的是 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 怒了:“你疯了吗?我们这个是内部应用,公司一共才几百人,你瞎搞啥负载均衡,故障转移!”
第二天, 张大胖被开除了。
张大胖离开之前对组员说:“唉,没办法,领导们只关注业务,不关注技术的发展趋势,我要走了,大家以后好自为之吧。”
小李嘀咕道:“这技术不就是为业务服务的吗?微服务看起来很美,但是根本不适合我们。”
小王说:“张总,别听小李瞎说,我们学会了微服务,简历中也有干货了。”
张大胖心中一亮, 回去赶紧修改简历,加上了这么一条:
** 领导了单体项目向微服务的迁移,精通微服务的架构设计,部署,监控。 **
后记:
写这一篇小品文,是想说明一个道理:不能“手里拿着一个锤子,眼中看到的全是钉子”,微服务虽好,也有适用的范围, 有很多项目单体应用活得好好的,根本没有拆分的必要,盲目追风,反而得不偿失