前言

  首先非常感谢开源社区,在各位作者无私得奉献下,我才有幸接触CAP。在拜读源码和理解设计原理过程中,发现CAP的源码是一个非常值得我们学习的代码。本人代码的基本框架采用简单的DDD,在练习Demo中发现开启事务的时候放在UOW实现,此时不需要ICapPublisher类,但是CAP需要,所以感觉调用起来多余了。还有一点,当我打开仪表盘的时候,发现仪表盘的定时统计会对数据库造成一点压力。由于本人对别人的开源产品不知道怎么更改,因为没有在生产环境中使用CAP,发现自己在guthub问的问题有点不清不楚的样子,也不好意思去向CAP的作者提意见,所以就自己模仿了一个,就这样NetSugar.Cap诞生了。

支持对比

  CAP NetSugar.Cap
数据库存储对比   测试时为了支持高并发,请把连接池配置大一点
SqlServer 支持 支持
Mysql 支持 支持
PostgreSql 支持 支持
MongoDB 支持 支持
消息中间件对比    
RabbitMQ 支持 支持
Kafka 支持 暂不支持(本人没使用过Kafka,代码已撸但未测试)
DiagnosticListener    
DiagnosticListener 支持 不支持
Dashboard 支持 支持
节点发现 支持 支持

Dashboard对比

  1、CAP当中Dashboard的代码与接收端、发送端都是在同一个代码里面,而NetSugar.Cap的Dashboard与逻辑代码是隔离的。在使用上CAP使用只需要引用一个包就足够了。但是NetSugar.Cap的Dashboard提供了多个数据源的管理,可以配置多个数据源,并且每个数据源可以单独的配置读连接和写连接,尽可能的减少了打开后台之后对业务上使用数据库的引用。

  2、对一些消息需要重新处理的处理,两个都有一个Requeue操作,但是CAP执行Requeue操作时必须引用客户端业务代码,但是NetSugar.Cap则不需要。因为NetSugar.Cap在Dashboard设计上,后台的一些操作只是产生指令往数据库插入的,然后等待业务端代码定时根据定义的ClientName去查找对应的需要处理的记录去处理。当然这里客户端代码上增加了定时查询需要执行的指令的开销。但是指令表与发送消息的表是分开的,所以消耗不大。

  3、CAP可以多个数据库节点通过consul进行统一查看,但是NetSugar.Cap在一个数据源里面只能查看当前数据源,没有整合多个数据源的节点,但是可以在多个数据源之间进行随意切换。

  4、CAP对当日发送和接收消息的统计,NetSugar.Cap不支持。

  5、CAP可以仪表盘地址进行动态配置,而NetSugar.Cap只能使用固定地址/CapDashboard/Home

业务代码使用对比

  CAP是利用扩展IDbConnection(IMongoClient或者其它的)的方法去实现。

  

  NetSugar.Cap是通过ITransactionCoordinator这个事务协调器,往里面扔对应的事务或者Connection或者自定义实现ITransaction的类。

  

订阅

  1、CAP同一个项目中,同一个路由只能被一个方法去执行,但是NetSugar.Cap可以被多个订阅者执行,但是同一个路由一个方法只能执行一次,能被多个方法执行。

  2、方法参数绑定:

    CAP只能有一个参数,但是NetSugar.Cap可以允许你有多个,两者参数反序列化都是根据Json来反序列化的。

  3、回调

    CAP执行发送事件中带回调方法,但是NetSugar.Cap不支持。NetSugar.Cap建议的是在订阅方法中发送一个执行完成的事件。

  4、监听绑定

    CAP支持Controller和继承ICapSubscribe的类,接口不行。NetSugar.Cap支持Controller和继承ICapSubscribe的类和接口。

  5、监听断线重连

    NetSugar.Cap Rabbitmq会在网络闪断之后会自动尝试重新开启监听。

缺陷

  NetSugar.Cap客户端会定时的向数据库中T_CapRequeue表查询数据。T_CapClientNode、T_CapSubscriber刷新心跳。

  不支持同一个项目中使用两个数据源。

写在最后

  以上对比如有哪些欠缺或者错误还麻烦帮忙指出一下。特别是本人对CAP认知还不够的地方,还请帮忙多指出,免得误导了各位。NetSugar.Cap是我在学习了CAP代码之后写的,没有CAP就没有NetSugar.Cap,非常感谢CAP的作者。想试试NetSugar.Cap的可以参考源码中的测试代码,NetSugar.Cap的Nuget也已经发布了。支持提意见,不支持吐槽。

NetSugar.Cap与CAP功能比对的更多相关文章

  1. 在分布式数据库中CAP原理CAP+BASE

    本篇博文的内容均来源于网络,本人只是整理,仅供学习! 一.关系型数据库 关系型数据库遵循ACID规则 事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1.A (At ...

  2. CAP原则(CAP定理)

    CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...

  3. 【分布式】1、CAP原则(CAP定理)、BASE理论

    CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...

  4. CAP原则(CAP定理)、BASE理论

    CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...

  5. 关于分布式存储系统中-CAP原则(CAP定理)与BASE理论比较

    CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...

  6. 【翻译】Brewer's CAP Theorem CAP定理

    Brewer's CAP Theorem 原文地址:http://www.julianbrowne.com/article/brewers-cap-theorem Brewer’s (CAP) The ...

  7. redis学习之——在分布式数据库中CAP原理CAP+BASE

    分布式系统 分布式系统(distributed system) 由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成.分布式系统是建立在网络之上的软件系统.正是因为软件的特性,所以分 ...

  8. 分布式系列文章——从ACID到CAP/BASE

    事务 事务的定义: 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元(Unit),狭义上的事务特指数据库事务. 事务的作用: 当多个应用程序并发访问 ...

  9. CAP定理与RDBMS的ACID

    一.分布式领域CAP理论 CAP定理指在设计分布式系统时,一致性(Consistent).可用性(Availability).可靠性(分区容忍性Partition Tolerance)三个属性不可能同 ...

随机推荐

  1. std::shared_ptr之deleter的巧妙应用

    本文由作者邹启文授权网易云社区发布. std::shared_ptr 一次创建,多处共享,通过引用计数控制生命周期. 实例 在邮箱大师PC版中,我们在实现搜索时,大致思路是这样的: 每一个账号都有一个 ...

  2. 【题解】 洛谷P2340 奶牛会展

    传送门 重新开始打代码Day1 第一眼看感觉不对啊,这道题目好像空间开不下,是不是不能dp... 后来想到了一个思路,他要求的是\(dp_{i,j,k}=j+k\),然后这样子不是很奇怪吗? 直接一维 ...

  3. 201621123023《Java程序设计》第11周学习总结

    一.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 二.书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallRun ...

  4. mysql遇到的问题:can't creat/write to file "/var/mysql/xxxx.MYI"

    这个问题困扰了我,可能有两个原因. 1.文件夹权限不够,至少也要给出 USERS 组的可读可写权限: 2.文件夹的磁盘满了,文件写不进去了: 如果是这个不能创建和写的问题,很大的概率就是文件的权限.没 ...

  5. String类的操作方法

    因String属于java核心包lang包的东西,所以不需要导包! /* * 字符串操作 * */ String name = "jck"; String name1 = &quo ...

  6. LOJ#2039. 「SHOI2015」激光发生器(计算几何)

    题面 传送门 题解 如果我初中科学老师知道我有一天计算的时候入射角不等于反射角不知道会不会把我抓起来打一顿-- 这题本质上就是个模拟,需要的芝士也就计蒜几盒的那点,不过注意细节很多,放到考场上只能看看 ...

  7. ZooKeeper学习2---ZooKeeper安装配置

    一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式. ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境:■ 伪集群模式:就是在一台物 ...

  8. [Objective-C语言教程]指针(15)

    Objective-C中的指针简单易学.使用指针可以更轻松地执行某些Objective-C编程任务,并且在不使用指针的情况下无法执行其他任务(如动态内存分配). 所以有必要学习指向成为一个完美的Obj ...

  9. 十招谷歌 Google 搜索

    十招谷歌搜索 一.或者 OR 二.网址 insite:example.com keyword 三.大约 1.类似查询(记得) ~keyword 2.模糊查询(记得) key*****word 3.模糊 ...

  10. QuantLib 金融计算——数学工具之插值

    目录 QuantLib 金融计算--数学工具之插值 概述 一维插值方法 二维插值方法 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--数学工具之插值 载入模块 ...