微服务架构不是银弹
微服务架构设计课大纲:
课程内容节选:
CQRS(Command Query Responsibility Segregation,命令查询责任分离)是一种在微服务架构下常用的软件架构模式。
命令:增加、删除、修改
查询:数据的获取
在单体应用中,特别是以数据库为中心的管理系统中,命令和查询往往是在同一个据库的同一组实体上执行。这些实体一般就是关系数据库中表的记录。在增、删、改、查操作中,读写模型经常以同样的形式存在。
传统的 CRUD 方法存在以下的缺点:
在实际应用中,数据的读取和写入的格式之间不一定需要完全匹配。但在同样的读写模型下,二者必须是统一的数据格式。
当针对同一组数据实体的数据进行并发操作时,要么通过悲观锁来避免更新冲突,其代价是引起系统并发吞吐量的降低;要么通过乐观锁来进行并发更新,但需要处理其可能引起的冲突并回滚操作。这些成本都会随着系统的复杂性和吞吐量的增加而增大。
每个实体都受读写操作的限制,使得安全性和权限的管理变得更加复杂。
CORS 的实现方案
命令和查询职责分离(CQRS)是一种读写数据分离的服务协作模式。通过区分命令和查询的操作,将数据的读写分离。视用命令和查询职责分离的模式具有一些明显的优势:
与传统 CRUD 中使用的单一数据模型相比,CORS 使用单独的查询和更新模型,能够简化设计和实现,增强灵活性。
查询模型和更新模型可以访问不同的物理存储。通过将数据分成不同的物理存储能显著地提高性能、可扩展性和安全性。
CORS模式的适用场景:
数据读取与数据写入的性能需要分开进行优化。例如在许多电商网站里,对于商品信息的读操作次数是写操作的许多倍,在这种情况下可以考虑扩展读模型,而只在一个或几个实例上运行写模型。
需要跨团队开发协作时。例如一个团队可以专注于写模型的场景,另一个团队可以专注于读模型和用户界面。
与其他系统集成,特别是与事件溯源相结合时,某个子系统的临时故障不会影响其它系统的可用性。
公开笔记对他人可见,有机会被管理员评为“优质笔记”
{{ noteEditor.content.length }}/2000
讲师收到你的提问会尽快为你解答。若选择公开提问,可以获得更多学员的帮助。
课程大纲
![架构设计实战课](https://s2.51cto.com/images/avater/202405/e2ef346101f4505f4fa50591212d90ab82aaa5.jpg?x-oss-process=image)
![微服务架构设计课](https://s2.51cto.com/images/avater/202312/0787c842359b261d824603b6d981df4bc67303.jpg?x-oss-process=image)
![软件架构师之路:设计模式与系统架构](https://s2.51cto.com/wyfs02/M02/2C/A0/wKiom1OP25viA8UFAAFya8uMOt0770.jpg?x-oss-process=image)
![JAVA-ACE-架构师系列视频课程-Redis权威指南(上)](https://s2.51cto.com/images/201612/62e292a296c917a273b8148ae9a9cc2bb68aeb.jpg?x-oss-process=image)
![自动化测试框架搭建指南视频课程](https://s2.51cto.com/wyfs02/M02/5C/9A/wKioL1UeUFaiYD7sAADo17L4Ezk375.jpg?x-oss-process=image)
![跟着李刚老师学SSM:轻量级Java Web企业应用实战](https://s2.51cto.com/images/202008/24/9240a359c4e72467d91f9e519a111585.jpg?x-oss-process=image)
![UML项目设计----企业项目设计详解](https://s2.51cto.com/images/202011/04/3213b991a859c8cc76b4525c1d277727.png?x-oss-process=image)
![58沈剑谈数据库架构典型设计方案](https://s2.51cto.com/images/201804/03/9147265de4b4c9c375267a06c5c7cf27.png?x-oss-process=image)