{"id":22588425,"url":"https://github.com/654894017/cqrs","last_synced_at":"2025-04-09T18:22:09.607Z","repository":{"id":39650600,"uuid":"359166491","full_name":"654894017/cqrs","owner":"654894017","description":"cqrs是基于事件回溯的高性能架构，主要针对单个领域业务高度复杂且需要高性能的业务场景，可以说它能够作为高并发系统的通用解决方案。例如：秒杀、抢红包、12306卖票等。基于事件溯源，实现cqrs最复杂的模型， 通过事件是追加的特性，然后结合事件批量提交的手段，避免在高并发更新时多个线程update带来的严重锁冲突问题，从而来实现高性能。 支持聚合回溯，包括扩容、缩容聚合冲突事件回溯、聚合根在内存、聚合根快照、聚合事件组提交，可集成dubbo、spring cloud。","archived":false,"fork":false,"pushed_at":"2025-02-09T17:00:22.000Z","size":828,"stargazers_count":46,"open_issues_count":0,"forks_count":32,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-02T13:55:00.218Z","etag":null,"topics":["cqrs","ddd","dubbo","event-mailbox","event-sourcing","group-commit","in-memory","jdk21","kafka","rocketmq","spring-cloud","virtual-thread"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/654894017.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-18T14:30:43.000Z","updated_at":"2025-03-05T07:20:43.000Z","dependencies_parsed_at":"2023-01-22T02:32:53.357Z","dependency_job_id":"671e9611-563e-43b8-81e4-7501a0d23771","html_url":"https://github.com/654894017/cqrs","commit_stats":{"total_commits":157,"total_committers":2,"mean_commits":78.5,"dds":"0.15286624203821653","last_synced_commit":"0fa05bb2959dba87602a79cea832cc8230c8a472"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/654894017%2Fcqrs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/654894017%2Fcqrs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/654894017%2Fcqrs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/654894017%2Fcqrs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/654894017","download_url":"https://codeload.github.com/654894017/cqrs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248085676,"owners_count":21045194,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cqrs","ddd","dubbo","event-mailbox","event-sourcing","group-commit","in-memory","jdk21","kafka","rocketmq","spring-cloud","virtual-thread"],"created_at":"2024-12-08T08:09:28.445Z","updated_at":"2025-04-09T18:22:09.585Z","avatar_url":"https://github.com/654894017.png","language":"Java","readme":"### cqrs\n\ncqrs是基于事件回溯的高性能架构，主要针对单个领域业务高度复杂且需要高性能的业务场景，可以说它能够作为高并发系统的通用解决方案。例如：秒杀、抢红包、12306卖票等。基于事件溯源，实现cqrs最复杂的模型，\n通过事件是追加的特性，然后结合事件批量提交的手段，避免在高并发更新时多个线程update带来的严重锁冲突问题，从而来实现高性能。\n支持聚合回溯，包括扩容、缩容聚合冲突事件回溯、聚合根在内存、聚合根快照、聚合事件组提交，可集成dubbo、spring\ncloud。注意：并未支持saga业务编排，由业务方自己去编排。\n\n### 架构概述\n\n![架构图](image/71895e721aced94523d752f63e5cb0c.png)\n\n### 使用示例：\n\n//1.初始化商品库存管理服务\n\nGoodsStockService service = new GoodsStockService(committingService);\n\n//2.初始化商品\n\nGoodsAddCommand command = new GoodsAddCommand(IdWorker.getId(), 2, \"iphone 6 plus\", 1000);\n\nGoods goods1 = service.process(command, () -\u003e new Goods(2, command.getName(), command.getCount())).join();\n\n//3.库存+1\n\nGoodsStockAddCommand command = new GoodsStockAddCommand(IdWorker.getId(), 2);\n\nGoods goods2 = service.process(command, goods -\u003e goods.addStock(1)).join();\n\n### 注意事项\n\n1.如果使用dubbo、spring cloud负载均衡策略请选择一致性hash，这样可以减少在集群扩容、缩容聚合根回溯的成本。\n\n2.关闭dubbo、spring cloud的失败重试。\n\n3.Dubbo服务抛出该异常AggregateEventConflictException，客户端可以重新发起请求。(\n出现此异常的原因是当前聚合根在多个实例中存在（集群扩容时），可以捕获此异常然后重新在client发起调用，当前的请求会负载到新的实例上。)\n\n4.mysql 需要开启 rewriteBatchedStatements 批量操作选项，否则性能不佳。\n\n### 测试报告\n\nCPU:I7-3740QM（4核8线程） 24G内存 mysql 5.7 ssd(早期固态硬盘)  jdk1.8\n\n性能数据：\n\n商品添加：6.5K TPS/s\n\n单个商品库存添加：14K TPS/S\n\n三个商品库存添加：30K TPS/S mysql cpu：18% mysql内存占用：300M ， jvm cpu: 20% jvm 内存占用：1.8G \n\n### 案例\n\n1.如何通过事件溯源实现百万TPS全内存撮合交易引擎 \u003c/br\u003e\nhttps://blog.csdn.net/luxianping/article/details/143323082\n\n2.如何通过基于事件溯源架构高效解决12306的库存问题\u003c/br\u003e\nhttps://blog.csdn.net/luxianping/article/details/122857386\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F654894017%2Fcqrs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F654894017%2Fcqrs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F654894017%2Fcqrs/lists"}