近期,公司推荐《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》,我们项目正在实践做第一个微服务化产品,本着学习的目的阅读了此书。
本书的作者是阿里的中间件首席架构师钟华,因此整本内容非常扎实,将阿里的技术架构演进和共享业务事业部的发展史娓娓道来,中间穿插了对SOA的相关概念(如:ESB、微服务、分布式等),以及服务化架构必然遇到的问题(如:数据库分库分表的实践、最终一致性的实践),结合阿里的业务特点(如:双11顶峰流量冲击)等的实战得出的总结,最后还介绍了应用输出到其他企业辅助转型的案例,可以认为本书是一套最佳实践集合。
产品架构(包括技术架构和组织架构)要跟着业务发展的需要走,这已经是业界的共识。我们SDN控制器是要做通用、易用的服务,支持快速智能的业务编排,我们的目标和阿里形成的“厚平台、薄应用”架构有很多相似之处,在阅读本书时我常常看到工作中类似的问题,有相当的借鉴意义,下面谈谈本书让我体会深刻的几方面。
构建共享服务体系
当我们开始讨论解耦的时候,“烟囱”就已经高高的耸立在那了,这里的“烟囱”可能是业务场景上的,可能是软件架构上的,也可能是人员组织架构上的。解耦的初衷都是为了保证为了未来几年的稳定,为此我们常见的做法是把人员分两拨,一波老版本维护仅接纳少部分评估必须做的需求,一波做新方案,约定时间点/版本切换,切换后又严格约束业务的使用约束,于是不多久新的“烟囱”又慢慢生长起来了,不仅如此在新老版本存续时期,可能要为新需求做2套实现方案。
阿里的做法是用SOA服务化瓦解“烟囱”,总结起来有几点:
1.服务重用,少造轮子,一再地重复是最大的浪费;
2.服务需要不断的业务滋养,服务不需要“业务稳定”, 需要不停的业务滋养,只有在滋养中才能从最初仅提供单薄业务功能的服务逐渐成长为企业最为宝贵的IT资产,而服务所需的滋养正是来自新的业务不断进行服务的接入;
3.业务创新,组织提效都需要领域专家,构建服务过程中要关注领域专家的培养;
4.“中台”要有能力赋予业务快速创新和试错的能力,这应该也是我们做平台的一个目标之一,让上层业务使用可以像美军作战小队一样,高效、敏锐、快捷。
打造数字化运营能力
传统的架构,内搭建日志框架,业务模块在需要的流程中自行调用接口记录日志,日志记录的粒度、维度等内容业务自洽。故障分析时,需要从海量日志中捞取有效信息分析,如果没有有效信息,可能还要尝试加日志重编版本复现问题,对线性调用关系的系统架构虽然繁琐还是能解决故障。但放在无中心的SOA架构下,如淘宝平台中复杂的服务调用关系,传统的依靠人来分析日志定位故障的方式已不再适用。因此引入鹰眼平台,在服务不感知的情况下嵌入到系统中,对每个操作的服务调用流程进行监控,并提供图形化的分析和管理页面。实现了服务的实时监控、服务调用链跟踪、服务调用链分析、业务全息排查、业务实时监控等功能。
在一个复杂的系统中,当出现问题时如何快速的排查和解决,是一个无法回避的问题。淘宝平台的鹰眼系统,给出了一个很好的例子。在平台中引入监控系统,对服务本身及每业务服务间的调用进行监控,通过对海量的日志进行分析,能够很方便、快捷的定位出业务故障的原因,并进行排查和解决。相比传统的认为分析每个服务log的排查方式,大大的提高了效率,增强的系统的可维护性。
打造平台稳定性能力
本书介绍淘宝平台如何在海量业务的情况下,保证平台的稳定性。比如限流和降级、流量调度、流量调度等手段,这些在我们的系统中都能找到对应的功能,例如QoS限速、端口限速等,对我们业务拓展提供范例。
系统稳定性,必定包含性能、可靠可用性等方面。我们常常遇到不知道自己的性能边界在哪里,需要通过在家模拟测试,但模拟测试约束与现网情况又有差异。本书还介绍了在线仿真性能测试方法:
1、容量压测即评估规划:将生产环境上的流量模型引流到压测服务器,获取单机处理最大能力,对服务集群进行容量评估和预测;
2、全链路压测平台:可以在线上环境不影响正常用户访问的情况下进行集群读写压测,获取最真实的线上实际承载能力数据;
此外,传统的业务出错都是事后补救,问题收敛的反射弧很长,这对阿里这样与钱打交道的互联网公司是不能接受的。本书专门介绍了业务一致性平台,通过对每个上线业务都能形成一对一的监控和检测,形成一个规范的业务上线和订正流程。我们现在开展的测试前移、分层测试等手段都是将验证提前,但验证如何与业务活动共生,很具有启发性。
淘宝采用的这些措施,如何借鉴它们来保障我们系统的能力,值得我们深深思考。
通读本书,能感受到阿里始终坚持“简单就是美”的理念。遇到实际问题,通过对问题的分解降级逐步解决,而不是期望一次性解决所有问题,例如业务响应时间长用户感受度不好就考虑异步化,数据分拆后事务处理难就考虑事务异步化,放弃强一致性考虑最终一致性,出于监控系统状态的考虑开发了多个在线平台等等,这些方法都不是创新但是逐步演化成为阿里的核心技术。这是非常值得我们学习的。很多时候我们面临的技术问题是缺乏业务场景的,并且期望一下子就获得一种放之四海而皆准的解决方案,这是我们需要抛弃的想法。
如今我们项目正在实践做第一个微服务化产品,阿里的共享服务中心建设给我们提供了很好范例和思路,值得我们一读再读。