如何落地业务建模
徐昊
Thoughtworks 中国区 CTO
24830 人已学习
新⼈⾸单¥68
登录后,你可以任选2讲全文学习
课程目录
已完结/共 32 讲
如何落地业务建模
15
15
1.0x
00:00/00:00
登录|注册

13|云时代的挑战(下):如何保持弹性边界的独立性?

弹性耦合(Elasticity Coupling)
弹性依赖(Elasticity Dependency)
反思前云平台的架构约束对建模的影响
8X Flow的出发点
业务建模需要配合云时代的架构约束
弹性作为首要考虑的因素
异步中间态对聚合根的一致性控制
引入技术概念的需求
处理异步调用对聚合关系一致性的影响
异步调用与模型的结合
将组件间的同步调用模式改为异步
云平台处理依赖于响应时间的弹性依赖
云平台处理依赖于吞吐量的弹性依赖
弹性边界间的依赖与耦合
弹性优先原则
弹性边界的概念
思考题
小结
默认异步对业务建模的挑战
如何避免弹性耦合?
弹性边界对业务建模的影响
徐八叉:云时代的挑战(下)——如何保持弹性边界的独立性?

该思维导图由 AI 生成,仅供参考

你好,我是徐昊。今天我们来继续聊聊弹性边界对业务建模的影响。
上节课我们介绍了弹性边界的概念,以及弹性优先原则。照此来看,我们是不是按照组件不同的弹性要求,将它们分别放置到不同的弹性边界中,就可以最优化地利用云平台的能力了呢?
答案并没有这么简单。因为除了弹性边界外,我们还需要考虑流量的传播,以及在弹性边界间造成的依赖关系。
今天我们就来讲一讲弹性边界间的依赖关系。包括什么样的依赖关系是合理的,有什么样的依赖关系是我们希望避免的,以及不同的弹性依赖关系又会给业务建模带来什么样的影响。

弹性边界间的依赖与耦合

就好像软件的模块之间会存在依赖关系一样,弹性边界间也会存在依赖关系。不恰当的软件模块依赖,最终会引发散弹式修改(Shotgun Surgery),也就是软件模块的边界并没能隔离变化的传播。换句话说,在一个模块中出现的变化,会传播到其他模块中,引起其他模块的修改。
而弹性边界间的依赖(也就是服务间调用关系,或是数据交换关系),会造成流量的传递。如果上游弹性边界突然需要处理大量的流量,那么这些流量自然也会传递到下游弹性边界中。
让我们举一个生活中的例子,来帮助理解弹性边界间的依赖关系。假设你是一家快餐店的负责人,你雇佣了一个负责点餐的员工。厨房是负责制作餐食的部门,有一套能完成对应操作的设备,以及负责餐食制作的厨师。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了弹性边界对业务建模的影响及其依赖关系,强调了关注流量传播和弹性边界间的依赖关系的重要性。文章提出了合理的依赖关系和需要避免的依赖关系,并探讨了不同的弹性依赖关系对业务建模的影响。此外,还讨论了云平台对于吞吐量和响应时间的弹性依赖处理能力的差异,以及弹性耦合对微服务拆分的影响。通过生动的比喻和技术原理的解释,读者能够深入理解弹性边界间的依赖与耦合,以及在云原生架构下的应用。文章还探讨了如何避免弹性耦合,将组件间的同步调用模式改为异步,以及默认异步对业务建模的挑战。总的来说,本文对于读者了解如何保持弹性边界的独立性具有重要意义,为业务建模提供了宝贵的思路和指导。文章还提到了在云原生时代,需要将弹性作为首要考虑的因素,纳入建模的考量,以及弹性边界划分和弹性耦合的重要性。同时,强调了在异步模型下解读业务逻辑、维护业务一致性等关键点。文章内容丰富,对于理解云原生架构下的业务建模具有重要参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《如何落地业务建模》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • Jxin
    本章内容 1.异步交互:如果最后践行的结果依旧是使用同步代码的方式写异步代码,那应该没问题。但如果是以异步的方式去写,感觉就有点诺曼设计了。业务建模引入异步设计的复杂性,总觉得不是一个好的形式。我认同云原生下异步交付能发挥更大价值,只是践行的方式还是有待观察。毕竟异步交互在云原生下节省的性能成本,不见得就能盖过业务建模和异步设计的叠加带来的设计成本的增长。 2.谈点实现,瞎猜:弹性伸缩必要重要的价值理应是解决峰值并发场景带来的短时吞吐量述求差异大的问题(毕竟你服务流量很平稳,我靠人工扩容好像也没啥问题)。但感觉能想到的方式都有挺多资源冗余或则说浪费。先说基本思路: (按空闲程度分发)理论上实现弹性扩容,无非就是监控服务资源水位+自动扩/缩容。但实际上,对于高并发场景这个是做不到的,毕竟高并发不讲道理,不会等着监控服务资源的实时情况做分发。服务资源的情况,监控必然有延迟,高并发会借助这个延迟直接干翻你的单个服务造成部分用户不可用;节点的扩容也必然有延迟,而这个延迟,高并发可以让你的集群都不可用。可以想到的应对的解决方案:平均分发,不依赖服务资源监控,均分流量;冷后备,预备大量冷后备节点减缓扩容的时差。但这些,似乎对资源最优分配还是有些距离,只是用冗余保可用而已。 课后题 自治,容错。 自治: 前微服务重心在以业务边界拆分独立的作战单元,讲究的是最小完备/自我履行/稳定空间/独立进化。体现就是软件产品化,数据隔离,迭代自由。 容错:前微服务我们一样接受服务总会出错的现实,所以服务间交互会是以依赖集群+自动隔离故障+自动发现新服务(也就是服务治理)的方式。每个发布单元就像人体的一个细胞,生生死死不断轮回,但都不会影响某个器官(服务)的正常运作。

    作者回复: 业务天生是异步的。同步是简化

    2021-07-31
    2
    7
  • zenk
    “业务天生是异步的。同步是简化” 大佬,怎么理解

    作者回复: 字面意思

    2021-10-25
  • 极客侠女
    云带来了哪些运营模式的变化?像例子中,举动极客时间专栏提供了企业版,这个变化跟 云的关系在哪呢?请教老师细细解释下呢

    作者回复: 云更便宜

    2021-09-01
  • 菜菜
    如果把异步技术引入到模型中,就相当于把事务性引入了业务当中,所以复杂度可能会发生质的变化

    作者回复: 业务本身就具有事务性

    2021-08-02
  • Oops!
    下次去上海我也去这家咖啡店体验一下。言归正传,为了解除弹性耦合,就需要使用异步的方式实现业务流程,将响应时间的依赖转变为对吞吐量的依赖。从一致性这个角度看,就是系统从保证强一致转变为最求最终一致性,通过各种兜底逻辑保证所有中间态都能到达最终最终状态。

    作者回复: 每季菜单都不同

    2021-07-31
  • webmin
    O.P.S. Cafe 这家不足10平方米的顶流大店,咖啡确实不错,排一个小时队是常态,现制咖啡还是受制于咖啡师,咖啡师无法被Clone,水平扩张无从谈起。

    作者回复: 然则他们已经预调了

    2021-07-31
  • 我有个疑问,关于点餐和厨房的例子的,不管是异步还是同步,厨房的吞吐能力不行,还是没解决顾客耐心耗尽的问题。

    作者回复: 同步消耗更快

    2021-07-31
    2
  • 事实是,我们的现实世界就是异步的,软件也是越来越向现实世界靠拢。从同步走向异步,从强一致走向最终一致。
    2021-08-03
    7
  • 6点无痛早起学习的和尚
    2024年01月18日09:00:16 异步交互的确会引来很多问题,这些问题属于同步无得,所以人还是喜欢同步,那蛮期待后面如何解决异步交互带来的问题,比如一致性、状态机、整个流程的编排、轮询时间等等
    2024-01-18归属地:北京
  • 常文龙
    看了几遍本文,也看了asyncapi和netflix zuul2的异步改造,我对文中的“异步”的理解,是采用nio方式发起请求,这节省了线程数,但在使用侧看来,依然是同步的。 然后对 【弹性依赖】 应该秉持 允许 的态度,对 【弹性耦合】 应该通过异步避免。 希望老师点评
    2022-06-23
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部