服务组合模式之链式模式

1736 未经授权,禁止转载了解课程
课程介绍
讨论{{interaction.discussNum ? '(' + interaction.discussNum + ')' : ''}}
适合人群
1. 已经掌握Spring Cloud & Alibaba等微服务开发中基础组件的使用 2. 有微服务开发需求的小伙伴 3. 有意向在微服务开发领域进阶的小伙伴
你将会学到
学员将能够学习到微服务的本质、拆分策略、Restful模型、不同微服务之间的组合模式。
课程简介

微服务架构设计课大纲:

微服务架构设计.png

课程内容节选:

CQRS(Command Query Responsibility Segregation,命令查询责任分离)是一种在微服务架构下常用的软件架构模式。

  • 命令:增加、删除、修改

  • 查询:数据的获取

在单体应用中,特别是以数据库为中心的管理系统中,命令和查询往往是在同一个据库的同一组实体上执行。这些实体一般就是关系数据库中表的记录。在增、删、改、查操作中,读写模型经常以同样的形式存在。

传统的 CRUD 方法存在以下的缺点:

  • 在实际应用中,数据的读取和写入的格式之间不一定需要完全匹配。但在同样的读写模型下,二者必须是统一的数据格式。

  • 当针对同一组数据实体的数据进行并发操作时,要么通过悲观锁来避免更新冲突,其代价是引起系统并发吞吐量的降低;要么通过乐观锁来进行并发更新,但需要处理其可能引起的冲突并回滚操作。这些成本都会随着系统的复杂性和吞吐量的增加而增大。

  • 每个实体都受读写操作的限制,使得安全性和权限的管理变得更加复杂。

CORS 的实现方案

命令和查询职责分离(CQRS)是一种读写数据分离的服务协作模式。通过区分命令和查询的操作,将数据的读写分离。视用命令和查询职责分离的模式具有一些明显的优势:

  • 与传统 CRUD 中使用的单一数据模型相比,CORS 使用单独的查询和更新模型,能够简化设计和实现,增强灵活性。

  • 查询模型和更新模型可以访问不同的物理存储。通过将数据分成不同的物理存储能显著地提高性能、可扩展性和安全性。

image.png

image.png

CORS模式的适用场景:

  • 数据读取与数据写入的性能需要分开进行优化。例如在许多电商网站里,对于商品信息的读操作次数是写操作的许多倍,在这种情况下可以考虑扩展读模型,而只在一个或几个实例上运行写模型。

  • 需要跨团队开发协作时。例如一个团队可以专注于写模型的场景,另一个团队可以专注于读模型和用户界面。

  • 与其他系统集成,特别是与事件溯源相结合时,某个子系统的临时故障不会影响其它系统的可用性。



展开更多
发布
头像

{{ item.user.nick_name }} {{ EROLE_NAME[item.user.identity] }}

置顶笔记
讨论图
{{ item.create_time }}回复
  • 删除

    是否确认删除?

    确认
    取消
  • {{ item.is_top == 1 ? '取消置顶' : '置顶'}}

    已有置顶的讨论,是否替换已有的置顶?

    确认
    取消
{{ tag.text}}
头像
{{ subitem.user.nick_name }}{{ EROLE_NAME[subitem.user.identity] }}
{{ subitem.create_time }}回复
删除

是否确认删除?

确认
取消
发布
{{pageType === 'video' ? '讨论区抢占沙发,可获得双倍学分' :'讨论区空空如也,你来讲两句~'}}
发布
{{tips.text}}
{{ noteHeaderTitle }} 笔记{{ hasMyNote ? '我的笔记' : '记笔记' }}
{{ hasMyNote ? '我的笔记' : '记笔记' }}
优质笔记
更新于:{{ $dayjs.formate('YYYY-MM-DD HH:mm:ss', item.last_uptime*1000) }}
头像
{{ detail.username }}

公开笔记对他人可见,有机会被管理员评为“优质笔记”

{{ noteEditor.content.length }}/2000

公开笔记
保存
提问

讲师收到你的提问会尽快为你解答。若选择公开提问,可以获得更多学员的帮助。

记录时间点
记录提问时视频播放的时间点,便于后续查看
公开提问
提交