写点什么

坚定推动 DDD 一年后,去哪儿网如今怎么样了?

  • 2022-07-28
  • 本文字数:4936 字

    阅读完需:约 16 分钟

坚定推动 DDD 一年后,去哪儿网如今怎么样了?

嘉宾|郑吉敏

作者|贾亚宁


微服务盛行之后 DDD 又再次回到我们的视野之中,并一度成为各大公司竞相投入的重地。DDD 指的是领域驱动设计,是一种架构设计方法论,帮助我们拆解业务、划分业务、确定业务边界,继而可以更好地实现技术架构的演进。


DDD 一般包含两个方面:战略设计和战术设计;战略设计一般从业务视角出发,战术设计则从技术角度出发。一个完整的 DDD 首先会在战略设计部分建立领域模型,在战术设计部分进行技术实现和落地。那如何才能设计一个和业务匹配度更高的领域模型,如何更好地推动技术实现落地呢?



当下 DDD 的热度不减,各大公司纷纷进场,那它是实现技术架构演进的万能解药吗?究竟什么样的业务适合 DDD,如何避免盲目推进呢?当前成功落地案例少之又少,哪里去寻找合适的落地参考呢?


出于对以上问题的好奇,我们特地采访了去哪儿网机票目的地事业群技术总监郑吉敏老师,他是去哪儿网的技术委员会委员、业务架构 SIG 负责人,负责酒店报价中心团队和业务架构组。在 2020 年金项奖评选中主导的“对内 DDD 对外 API 驱动的酒店报价业务重塑”项目获得了 CEO 特别奖,也曾在多个业内顶尖技术大会进行分享。郑吉敏老师也在积极地推动技术品牌的建设,关于如何推广技术品牌的问题我们也可以得到一些启发。


同时,郑吉敏老师也是 3 月初上线的 QCon+ 案例研习社去哪儿网 DDD 落地实践」专题的出品人,带队来分享去哪儿网内部多业务 DDD 落地的最佳实践。因此我们针对 DDD 落地和技术品牌的建设推广相关问题对郑吉敏老师进行了采访,一起来看看他的实践和思考吧。

InfoQ:你最近在负责什么样的工作呢?


郑吉敏:我目前的工作主要由两部分组成:


  1. 负责酒店报价中心团队和业务架构组


当大家使用“去哪儿旅行 App”预定国内酒店时,会看到酒店售卖房型及对应的价格和优惠,这部分对应的后端技术团队就是我负责的,我们主要完成国内酒店定价业务和营销业务的技术承接。同时,我还会结合业务变化对整体架构进行把控和优化,通过这些来做产研提效的工作。


2. 技术委员会相关的事情,包括业务架构兴趣小组的日常运营、业务线重点项目的技术方案评审、技术品牌建设等。


最近我牵头将 2021 年公司内部几个不错的 DDD 落地案例在“极客时间 App”的 QCon+ 案例研习社上进行了分享,希望能给大家带来启发。同时大家也可以关注 B 站上“Qunar 技术大本营”,那里有我作为出品人在公司内部出品的多门技术系列课,比如“DDD 领域驱动设计”、“高并发解决方案”等。


这两部分工作相得益彰,前者为后者提供了大量的理论实践素材,后者能很好地展现前者的价值,并反过来指导前者更好地开展业务。

InfoQ:在推广 DDD 的工作中,你有遇到过什么困难吗?可以具体分享一下吗?


郑吉敏:去哪儿网内部推广 DDD 其实是高层自上而下推进的,要说困难,我感觉比较深刻的是一定要有团队能成功落地 DDD 并能输出成功经验,才能保证整体推广的顺利进行。


从我的角度上看,我认为要推广 DDD 有两个关键点:


  1. 公司层面的支持和重视


对一个核心业务进行 DDD 实践,如果想要做得彻底,通常需要几十人日甚至更多资源投入。这么大力度的成本投入,如果没有公司层面的支持和重视,是很难开展的,甚至可能开展过程中被强制叫停。


  1. 有成功经验的指导


2020 年我主导的酒店报价 DDD 重构项目中,我们就花了很大精力完成战略设计阶段、战术设计阶段、系统实现阶段的关键经验总结及思考。在公司内外部大会分享时,每次都能吸引很多听众,有一部分人想学习 DDD 思想,其余的大部分人都希望能在更多的成功经验指导下实际落地 DDD。DDD 失败的例子太多了,有成功经验指导,很多人才敢放开手脚去做,这样也更容易成功。公司内部也是有了多种 DDD 实践经验分享之后,更多的业务团队才开始去落地,这也是我们公司内部在 2021 年有多个团队能成功落地 DDD 的主要原因。


实际落地 DDD 会遇到各种各样的困难,以我自己负责的自下而上的业务重塑的案例,给大家具体分享一下系统实现阶段遇到的问题及应对方案


  • 新产品需求的应对


首先我们需要明确,新模型的上线必须要保证过程中发布的需求都能跟着上线,因此本质上在新模型上做重复开发是必须的。新模型理论上有很大优势,正好可以借助新需求去验证是否能达到提效的目的,这样开发团队可以提前看到新模型的适应性,也可以在系统实现阶段提前明确新模型上线后的效果(实际对比发现提效明显),这样反而可以在过程中提升开发团队的士气,树立一定能成功的信念,而不是强制把一些需求直接压下去。


  • 额外产生需求的应对


这个主要根据价值、优先级、工时等多方面因素,来决定是否在本次需求里做。比如,本次重写导致之前的自动化 case 都用不了了,由于自动化 case 对我们系统重构后的验证有关键作用,因此就需要按照新模型的设计完全重写自动化 case。再比如,我们发现有很多过滤逻辑需要从不同的服务及流程里取数据,较好的做法是搭建一个酒店禁售系统来汇总,但是这个属于重要不紧急的任务,于是我们就计划在当前项目上线后再单独跟进。


  • 计划投入的人力被其他需求抢走的应对


这是个最难的挑战。进入系统实现阶段从计划投入 6 人到只能投入 4 人,于是加班就变成必然,这里需要额外做很多协调工作。首先开发团队和测试团队达成共识,测试团队提前进入,优先测试已经开发及自测完成的内容;开发团队根据优先级进行开发,对于优先级低或者工具类型的功能点,可以放到提测之后开发,不需要完全保证在提测日全部开发完成。这样一来,大家心里压力会小很多。同时,整个过程中要让团队不断认可这个项目的价值,这样大家才有动力全力去推进完成项目。最终,整个项目提前一天完成全量且没有出现故障,我们整个团队的士气也得到了空前的高涨。

InfoQ:DDD 的落地有哪些必须满足的条件吗?如何才能高效落地 DDD?


郑吉敏:DDD 落地核心包含三个过程,战略设计阶段、战术设计阶段、系统实现阶段。系统实现阶段主要偏向于实现已确定的方案,重点做好项目管理;战术设计阶段更多偏向于基于近乎确定的需求制定模型和方案,掌握好 DDD 的一些基本概念(域、聚合等)及规则,问题也不大;战略设计阶段是整个落地的基础,只有战略设计阶段做到位、做彻底,后面两个阶段才有意义。


DDD 战略设计


这里我们总结了做好战略设计阶段的一些必要条件,可以概括为【两个前提】、【一个原则】【一个方法】,具体为:


  • 两个前提:这个主要是对领域专家角色的要求,本质上是为了明确现状并能规划未来。


a. 对核心业务运营的逻辑有深刻的了解。

能输出核心业务玩法和未来的规划,这样对业务玩法的讨论才会有明确的方向,最终制定的模型才能满足当前业务的诉求和未来调整的规划。有了这个前提,就不会讨论出一些大家谁都不知道会不会发生、也没人敢拍板的场景。


b. 对现有业务需求的来龙去脉有所了解。

明确核心业务诉求及限于当前架构等各种因素采用的业务玩法,这样就可以有目的地进行改善。


  • 一个原则:业务原子原则。

基于业务原子,容易划清业务边界避免业务职责重叠、过耦合。从根本上说,业务的划分应该到业务原子级别。做到了上面说到的两个前提,业务原子其实并不是难事。


  • 一个方法:通过业务本质保证业务原子。

寻找业务本质的方法,可以基于业务开展的目的。任何明确的业务都有属于自己的玩法,开展这项业务也一定是有实际的目的,玩法根本上是要为目的服务的,目的是玩法最终希望表现的结果。只有抓住业务开展的目的,从根本上了解业务的本质和玩法,才能保证最终业务边界是基于业务原子划分的。


在明确上面提到的这些必要条件后,加上充足的讨论,才能最终完成这个阶段目标:对业务理解达成共识。这些会让沟通变得更容易,目标变得更明确,落地执行更有效率,后续迭代更有规划,团队也更容易创造出更多价值。

InfoQ:目前你们公司推进 DDD 的成果如何?你认为哪些业务适合 DDD,哪些不适合呢?


郑吉敏:公司在 2020 年开始大力推进 DDD,我自己主导的 DDD 项目在 2020 年的金项奖评选中获得了 CEO 特别奖,之后我们在公司内部尝试以技术系列课的形式去分享 DDD 的落地经验。2021 年多个业务线借助 DDD 落地也都取得了不错的业务成果,典型的比如酒店订单交易、酒店基础数据、机票主站、服务平台业务、公共会员卡业务等,这些具体的实践过程都已经分享在了 QCon+ 案例研习社中,大家可以去看看。


去年我们的 DDD 落地经验也登上了多个业界顶尖技术大会,一些公司看到我们的 DDD 成果还主动邀请我们去他们公司内部做 DDD 落地的分享。2021 年金项奖评选中 Qunar 的技术委员会获得了 CEO 特别奖,这里面 DDD 的成果及基于 DDD 做的分享为去哪儿技术品牌影响力提升做出了突出贡献。


当然 DDD 不是万能的,它主要用来解决复杂领域的问题,建议核心业务使用,而不是非核心业务。如果没有明确的领域专家(领域专家可以由多个团队的核心人员组成),那么也不建议去直接进行 DDD 落地。实际开展 DDD 时,建议以业务重塑为主、系统重构为辅,避免纯技术重构。

InfoQ:在你看来,技术影响力对一家公司而言有什么价值?


郑吉敏:技术影响力对公司非常重要,我结合去哪儿网从对内和对外两方面来说一下:


  • 对内:随着公司技术影响力的提升,我们内部有越来越多的技术人员站出来去打造影响力。内部分享是很容易搞起来的,技术同学们愿意去分享自己的经验和总结,这对于提升一线开发同学的技术能力、提升公司的综合技术水平都非常有效,也能间接地支持业务的发展,提升技术人员的幸福感。去年我们公司一共组织了 282 次主题分享,包括各类内部技术分享、外部输出、应届生课程、行业大会、在线直播、B 站视频、文章输出等,总计涉及人次超过 30 万。


  • 对外:公司不断在业界发声,可以获得更多和外界交流及交换资源的机会,也推动更多外部开发人员认识去哪儿网。目前,很多技术大会都能看到我们公司的分享,我们也会主动做一些直播分享并上传到 B 站“Qunar 技术大本营”供大家长期观看学习。得益于这些,也有多家公司邀请去哪儿网技术人员来交换分享,大家拿出各自擅长的话题去对方公司交流,互相学习、共同进步,这种效果非常好。公司间也可以联合创立类似 ITCP 联盟这样的组织促进合作持续进行。

InfoQ:你认为如何才能提升公司的技术影响力?对于管理层而言,至少需要具备什么能力?


郑吉敏:对于管理层而言,我认为需要有这些能力:


  • 积极开放的心态

  • 敏锐的行业洞察力

  • 坚韧的性格

  • 不拘一格降人才的识人用人格局


这里主要是保持开放的心态,积极地关注行业变化、技术革新,敢于引入潮流的思想和技术;遇到困难和挑战很正常,要坚定地去解决,并能在这个过程中,识人用人,借助这些事情去历练团队,最后也要做好总结和经验分享。


提升公司的技术影响力,我们是这样做的:


  • 微信公众号技术文章分享:尽量定期发表,遇到文章产出少时,可以基于一些分享邀请相关分享人输出文章

  • 内外部技术大会分享:举办内部技术嘉年华、出品内部技术系列课以及报名参加业界技术大会分享等

  • 公司间技术交流:包括互访做技术分享、搭建 ITCP 联盟定期举办分享活动等


做影响力是有马太效应的,做得好和不做的差距会越来越大,持续地去做,也许当前较为棘手的问题很有可能在不久的未来变成自己的优势。

InfoQ:目前你主要做的是管理工作,那你想对初入管理 / 致力于转行做管理的技术人说写什么呢?


郑吉敏:初入管理或者刚做管理,确实有一些需要注意的地方,简单分享一下:


  • 心态准备

初入管理,首先要调整自己的心态,将个人产出转变为领导团队产出。很多初级管理者,尤其是技术人员初做管理,很容易和之前的工作状态一样专注个人的产出。


  • 不断学习

初级管理者需要不断地学习基础管理理论,同时持续丰富个人管理工具方面的储备。这个过程中可以获得很多解决问题的方法,看待问题的视角也会不断变化和提升,很多管理方面的问题自然就容易解决了。


  • 内外兼修

初级管理者依旧需要关注技术方面的不断提高,同时持续加强对业务的深入理解,这些对于团队方向的把握和日常的决策都很重要。


嘉宾简介


郑吉敏 去哪儿网 机票目的地事业群技术总监


2019 年 8 月入职去哪儿网,机票目的地事业群技术总监、技术委员会委员、业务架构 SIG 负责人,负责酒店报价中心团队、业务架构组。2020 年金项奖评选中主导的“对内 DDD 对外 API 驱动的酒店报价业务重塑”项目获得了 CEO 特别奖。2021 年获得技术品牌最佳贡献奖,曾在 QCon、Top100、CSDI、SACC、MPD 等大会做过技术分享。

2022-07-28 15:478124

评论

发布
暂无评论
发现更多内容

虚谷未来CEO 唐佳娴:让虚拟人“灵” 动起来

阿里云弹性计算

XR 虚拟人

创建自定义的配置信息

Wk

5月月更

web前端培训 | Tree shaking问题排查

@零度

web前端开发

直播预告 | 服务网格规模化应用下的 Istio Sidecar 灵活配置实践

阿里巴巴云原生

阿里云 云原生 直播 服务网格 Istio Sidecar

墨天轮高分技术文档分享——Oracle升级迁移篇(共96个)

墨天轮

MySQL 数据库 oracle postgresql 国产替代

大数据培训 | 数据仓库构建方法论和实践

@零度

数据仓库 大数据开发

监控告警平台的国产化选择—Rancher与夜莺的集成

Rancher

Kubernetes k8s rancher

开源夜聊栏目开播:聊聊新晋 CNCF 项目 sealer 背后的故事

阿里巴巴云原生

阿里云 开源 云原生 直播

发现一个开源项目优化点,点进来就是你的了

捉虫大师

开源 性能优化 sentinel 5月月更

使用 Amazon DevOps Guru for Serverless 自动检测 Lambda 函数中的运行问题

亚马逊云科技 (Amazon Web Services)

DevOps Lambda severless

互联网公司实行目标管理(OKR)五点原则和基础

laofo

互联网 OKR 研发效能 快手 绩效考核

开发者玩转机器学习不能错过的15篇深度文章!

阿里云大数据AI技术

算法 数据处理 算法框架/工具 机器学习/深度学习 搜索推荐

金融街资本携手索信达:助推金融行业数智化转型

索信达控股

汇顶科技GR551x系列开发板已支持OpenHarmony

科技汇

单机GPU云服务器的深度学习训练和预测模型分析

Finovy Cloud

云服务器 GPU服务器

有没有支持vmware/openstack/zstack私有云的堡垒机?

行云管家

私有云 云服务器 堡垒机 行云管家

Python 编程

兮子

5月月更

java培训 | API 接口如何实现统一格式返回

@零度

JAVA开发 API

洞见科技数据科学家王湾湾:隐私计算助推金融业数字化转型

洞见科技

数据挖掘 金融科技 隐私计算

JavaScript== 和 ===

源字节1号

软件开发 前端开发 后端开发 小程序开发

全场景式全流程监控,博睿数据为券商IT运维难题提供范例

博睿数据

数字化转型 博睿数据 数据链DNA 证券行业

海豚调度5月Meetup:6个月重构大数据平台,帮你避开调度升级改造/集群迁移踩过的坑

白鲸开源

Apache 大数据 开源 DolphinScheduler workflow

知识管理在企业创新中的作用

小炮

知识管理

技术分享| 浅谈IM 产品中的“缩略图”功能

anyRTC开发者

音视频 IM 实时消息 发送图片 缩略图

直播预告丨 OpenHarmony 标准系统多媒体子系统之相机解读

OpenHarmony开发者

OpenHarmony

GPU不可不知的指标项

AIWeker

人工智能 gpu 5月月更

亚马逊云基础架构:一场从未停歇的技术创新革命

亚马逊云科技 (Amazon Web Services)

架构 亚马逊云

无聊科技正经事周刊(第8期):让子弹飞一会儿,用长期的眼光看中国开源

潘大壮

开源 程序员 周刊 开源中国 科技周刊

DCM:一个能够改善所有应用数据交互场景的中间件新秀

华为云开发者联盟

数据处理 数据交互 多样性数据源 DCM

Wallys/QCN9074 /11ax 4x4 6G M.2

wallys-wifi6

wifi6 m.2

青藤《关键信息基础设施增强保护安全实践》论文入选中国科技核心期刊

青藤云安全

信息安全 关键信息 安全保护

坚定推动 DDD 一年后,去哪儿网如今怎么样了?_QCon+_Alice_InfoQ精选文章