作者:基思·布雷思韦特(KeithBraithwaite)
负责构建系统的人似乎无法接受这样的事实,没有哪种数据模型、消息格式、消息传送机制,甚至主流的架构组件、策略、观点能够单独用来解决所有的业务问题。毕竟大家都希望摆脱业务需求不断滋生的意外和烦恼。但事实如此,如果企业规模庞大,即便是设置“账户”表,也必须给出多种不同的设计,才能适应未来公司10年的发展,单一的“账户”表无论如何也不可能满足这种需求。
在技术领域实现唯一性相对容易。但是在业务领域,大家要在而对千万头绪、纷繁复杂的现实世界。更糟的是,业务压根就不是与“现实世界”打交道,而是要应付人们对局部世界片面的看法和意见。有人把业务领域的问题技术化,妄想找到唯一解。但“现实”正如菲利普·迪克(译注1)笔下所描述的,“一旦发现事实,就再也无法回避”(that which does ont go away when one stops believe in it)(译注2),随着业务发展,麻烦迟早会出现。于是企业数据团队之类的组织应运而生,他们浪费宝贵时间争执不休,妄想借助文档定义(DTD,Document Type Definition)的方法治疗存在性优虑症(ExistentialDread)(译注3),不过是水中捞月罢了。这类服务很难令付费客户满意。
为什么我们不愿承认世界是混乱的?为什么不接受服务方式、表现形式、解决方案可以是多样的、不一致的和重叠的?因为大家都怕遇到错综复杂的依赖关系,担心数据更新无法同步,还有额外的维护开销,这些都是技术人员的噩梦。不妨看看数据仓库给我们的启示。概要性质的数据集市(译注4)通常都是非规范化的,导入数据比较自由,计算也相对随意,展现出来的数据视图与底层的数据库大相径庭。但是数据集市仍然可以正常工作,没有因为这些非功能属性(译注5)而失效。因为ETL过程(译注6)可以将事务处理和分析处理两个截然不同的世界联结起来,哪怕两者在更新频率、查询频率、吞吐量、设计的变更频率、甚至容量上有着迵然不同的要求。关键在于子系统的设计上,要充分利用非功能属性的差异性,实现对不同表现形式的管理。
采用多种表现方法,多种传输方式不是为了消遣。应当认识到,通过分解系统的非功能参数,可以为客户提供多样化的解决方案。
译注1:菲利普·迪克(PhilipKindred Dick),美国当代著名科幻小说作家,生前穷困潦倒,屡遭退稿,身后被世人重视,作品多被搬上影幕,包括:《银翼杀手》(Blade Runner)、《全面回忆》(Total Recall)、《少数派报告》(Minority Report)、《盲区行者》(A Scanner Darkly)、《冒名顶替(Impostor)》等。
译注2:出自菲利普·迪克的小说《银翼杀手》,原指男主角开始怀疑自己是克隆人,念头挥之不去。这里借喻现实世界的复杂多变是不可避免的。
译注3:心理学术语,指一种根本性焦虑症,这里指面对复杂多变的现实世界时不知所措的心态。用定义文档的方法治疗心理疾病显然荒唐,这是作者的讽刺。
译注4:数据集市(data mart),可以理解为数据仓库的某个子集,其数据模型是从数据仓库抽象出来的,用以满足特定部门的应用需求,数据集市可以在一定程度上缓解访问数据仓库的速度瓶颈。
译注5:组件式软件服务包括功能属性(functional properties)和非功能性属性(nofunctional properties)。简单来讲,功能属性是指系统所能提供的功能,而非功能属性是指这些功能的实现方式。
译注6:ETL过程(ETL Process)是数据抽取(Extract)、转换(Transform)、装载(Load)的统称,它负责将数据源身目标数据仓库转化,是构建数据仓库的重要环节。