当DDD遇上大数据:记一次数据分析类项目的DDD建模过程

业务背景

几个月前,我参与引导了一个大型通讯企业某个技术团队的DDD实施过程。这个团队的主要业务是通过底层通讯设备内置的探针不断采集海量数据,然后进行一系列的数据操作,从而对网线网络站点等网元进行评估与优化,同时包含一些网络规划的功能。覆盖的网络场景包括覆盖分析、话务分析、用户分析、高铁评估 、业务质量管理、客户感知保障、商业智能支持等。底层通讯设备采集的数据量非常巨大,基本上都是以GB为单位,这与以往的作业类系统不同,是一个典型的以数据处理分析为主的系统。项目类型上的不同也导致后面在DDD建模过程中,遇到了一些以往没有遇到过的问题。

建模过程

 经过与客户的讨论,我们初步选择了楼宇分析这个业务领域进行试点建模。

在《DDD实施过程中的点滴思考》这篇文章里我也提到,我一直想在建模开始的时候就把业务问题域梳理清楚,明确核心域,通用域和支撑域;然后就核心域进行建模,接着把模型放回核心域验证是否能解决业务问题。所以这一次,我一上来就先使用名词动词法对业务进行梳理。一般来说,名词动词法就是让客户通过简单的几句话描述业务要解决什么样的问题,然后注意其中的关键名词与动词。


名词动词法


通过名词动词法梳理的业务领域如下:

楼宇分析业务领域梳理


由于某些词语涉及到客户信息,所以被mask了。总体来说,通过这种方法,能把某个业务下的细分场景捋清楚,但这不是最关键的,最关键的是当把细分场景梳理出来后,对核心域,通用域,支撑域的识别与区分。这非常重要,因为传统意义上来说,DDD认为核心域代表了产品的独特的核心竞争力,团队只应该对核心域进行建模,并把主要精力投在核心域的开发工作上,而对于通用域与支撑域,DDD主张通过购买或者外包来实现。具体的识别过程,需要客户的领域专家一起参与讨论。但是实际上,在之前的项目过程中,我们还是会把其余两个域的模型都建了。这次也一样。

按照传统套路,当核心域识别出来后,后面就是事件风暴大法了。

楼宇分析事件风暴

熟悉事件风暴的同学可能就已经看出与标准的事件风暴有什么不一样了。“数据模型”这个概念在标准的事件风暴里面是没有的。那为什么这里会出现这么一个概念呢?按道理说,事件风暴完了后,就应该是识别聚合了。问题就出现在这里。当时我们发现,根据以上事件流无法识别聚合。因为聚合的一大特征是它是有状态的,而在这个场景下,事件流里面的都是没有状态的数据。做过大数据或者数据分析类项目的同学可能清楚,这类项目对数据的处理就是数据采集、解析、清洗、拼接、过滤等步骤,在这个过程中,数据是没有状态的,可以认为每一步产生的数据都是全新的数据。因此这里再沿用传统的聚合概念就不合适了。所以这类我们引入了“数据模型”这个概念。可以认为,数据模型就是数据分析类项目里的“聚合”。

基于这个共识,我们可以往前再走一步,整理一下数据模型的事件与命令,

楼宇分析数据模型与聚合

这里区分了数据面和控制面。数据面主要负责对数据的处理流程,控制面主要是传统作业,负责控制层面的工作,所以它会出现传统意义上的聚合。例如图中的“特征库构建任务”。

建模到这一步,下一步应该就是限界上下文了。但是,这里我们先不着急。由于事件流里面流动的是数据模型,所以事件流即数据流,我们何不看一下数据的流动呢?所以我们基于数据流再梳理了一次:

楼宇分析数据流建模


这一下数据的流动就清晰多了。然后下一步才做的限界上下文:

楼宇分析数据模型限界上下文地图

我们把限界上下文投射回最开始时通过名词动词法梳理的业务领域,验证是否能解决业务问题。这一步同样需要业务领域专家一起讨论。

后记

后面因为某些原因,项目终止了。我们的建模工作也结束了,没法再继续验证模型的可用性。但是还是把楼宇分析业务场景的建模基本完成了,后面其实就是实现域的事情。 在实现层面,客户热衷于微服务,但坦率来说,微服务架构是否真的适合这种数据分析类项目,我个人是持保留意见的。把微服务应用于GB级的数据传输,可想而知挑战有多大。

说回这次建模。通过这次建模得到的模型是否能很好的指导后面的实现落地,这很难说。毕竟把DDD应用于大数据或者是数据分析类项目的建模,我还是第一次做,业界做的也不多。方法论需要更多的项目来整理,提炼与验证。通过这次建模,我的总结如下:

1. 建模前通过某些方法(如动词名词)把业务领域梳理清楚是可行的,这可以避免得到解决方案再来反推问题域的尴尬。我们要做的只是把解决方案投射回业务领域验证就行。

2. 对于大数据或数据分析类项目,可认为数据模型即聚合。

3. 事件风暴或许并不适合这类项目,可能基于数据流建模的方法更合适。将来如果还有类似的项目,我可能就会直接基于数据流建模了。当然这个需要更多的项目去提炼验证。

4.DDD完全适合于这类项目,只是具体的落地方法可能需要调整。因为DDD的核心理念是业务领域驱动架构设计,任何系统架构都必须随业务架构变化而演进。借用我从EA培训听到的一句话,无业务不IT,无架构不解决方案。套在DDD上,就是无DDD不架构。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容