从一锅粥到“亚洲之子”:我怎么把破烂系统拉回来的
兄弟们,今天必须得分享一下我最近这身老骨头折腾出来的活儿,这玩意儿叫什么“SOA亚洲之子”,听着挺高大上,就是个把所有乱七八糟的接口给统一起来的活儿,说白了,就是擦屁股。
怎么开始的?说起来都是泪。
我们公司之前那套系统,简直就是一锅大杂烩。十几个小服务,哪个小组写的用哪个语言,数据格式也是五花八门。你吐给我的是XML,我给你的是JSON,中间还有个老服务固执地非要用管道符分隔。大家谁也看不上谁,每次要新开个业务,光是拉接口文档,就能拉扯一个星期,谁也别想顺利跑起来。
真正让我动手,是被逼的。去年年底,上面突然说要过一个什么认证,要求我们所有对外接口必须统一标准、统一验证、统一数据模型。这标准,就叫那个狗屁“亚洲之子”——据说是从新加坡那边抄过来的一套架子。如果不能按时达标,整个部门的年终奖就全泡汤。
当时主管直接把我拉过去,说:“老王,你岁数大,稳重,这脏活累活就交给你了。你把那些老代码给我抠出来,谁家的接口不合格,你就给我盯着他,直到他改好为止。”
我动手的过程:像拆迁队一样干活
我接手这个活儿,1
把所有现有接口摸了一遍底。我发现,光是用户的登录验证,就有四个版本在跑,而且每个版本返回的错误码都不一样。我当时就炸了,这怎么可能统一?
- 第一步,我直接
拉了一个核心骨干的会议。我没跟他们讲什么SOA,我就告诉他们:不改,大家都没饭吃。然后我把那个“亚洲之子”要求的标准格式往桌上一砸,要求所有新老接口,一律按这个格式走,不许有例外。
- 第二步,
写了个统一的“翻译官”服务。这个服务不是用来替换老代码的,而是架在中间。老系统吐出来的脏数据,先过我这个服务,我给它洗干净,包上“亚洲之子”的外壳,再吐给新的调用方。这样老系统不用动筋骨,但外部看起来已经是统一规范的了。
- 第三步,
开始逐个击破。最难搞的是那个七年前用Python写的库存服务,代码根本没人敢动。我硬是蹲在工位上,花了两周时间,把那个服务原封不动地抄了一遍,只是在输出层套上了新接口。那段时间,我每天盯着屏幕看那些缩进混乱的Python代码,眼睛都快瞎了。
- 第四步,
跟数据库团队撕扯。统一接口的核心是数据结构要一致。我发现有几个核心字段在不同的数据库里叫法都不一样。我花了三天时间,终于说服他们,给这几个字段加了别名,并且强制要求所有新服务只能用新别名来查。
这期间,我跑断了腿,跟产品经理吵架,被测试组骂,但总算是把那些歪瓜裂枣的服务,全部用这个“亚洲之子”的标准给包起来了。虽然只是外面看着光鲜,里面依然是破旧的,但至少它们现在能像样地对话了。
现在回头看:这活儿值不值?
折腾了三个多月,年终奖是保住了。现在新的业务接进来,接入速度确实快了不止一倍。以前一个新服务上线需要一个月调试接口,现在一周内就能跑起来,因为接口标准是固定的,没人能再瞎搞了。
不过代价也是有的。这个翻译官服务现在成了我们系统的瓶颈,它每天都要处理几十万次数据的格式转换。上次半夜,服务器CPU突然飙高,吓得我直接从床上跳起来,一看就是那个翻译官又顶不住了。这“亚洲之子”虽然把表面功夫做足了,但留下的技术债,还得我们这些老家伙慢慢还。