前言

  首先非常感谢开源社区,在各位作者无私得奉献下,我才有幸接触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. 如何进入PageAdmin CMS 安装界面

    一般下面几个应用场景如第一次使用PageAdmin配置参数.服务器迁移.主域名更换.忘记超级管理员密码等都可以在安装界面进行设置. 下面为PageAdmin安装步骤 1.地址栏输入:http://您的 ...

  2. Oracle数据库01

    常用函数 COUNT(*):统计所有的数据量,没有过滤功能 COUNT(字段):统计出指定字段不为null的数据量,有过滤功能 COUNT(DISTINCT 字段):统计指定字段不为空并且去掉重复数据 ...

  3. django系列3.2--url的别名和反向解析 reverse

    命名URL和反向解析 在网页中某些要提交的地址等,需要改变的时候,此时网页过多,如果一个一个的去改,工作量巨大,这时就可以用到命名url,在html文件的模版中,只写命名,这样当需要我们改变urls. ...

  4. 正则表达式的Wed验证应用(40)

    电子邮件地址的校验 <?php /* 校验邮件地址*/ function checkMail($email) { //用户名,由“\w”格式字符.“-”或“.”组成 $email_name= & ...

  5. Drupal 远程命令执行漏洞(CVE-2018-7600)

    名称: Drupal 远程命令执行漏洞 CVE-ID: CVE-2018-7600 Poc: https://paper.seebug.org/578/ EXPLOIT-DB: https://www ...

  6. jmeter - jp@gc - Active Threads Over Time(多台负载用户)

    问题: 线程数设置:30,远程启动2台机子 查看 jp@gc - Active Threads Over Time图,发现只统计了1台机子的线程数,线程数并不是60: 解决办法: 官方文档中提到: 1 ...

  7. google Agent

    一句话:改HOSTS文件 有时候要查看appengine.google.com的后台,但死活上不去,怎么办?还是那个老办法: 1.在cmd下Ping www.google.com.hk,获得IP地址, ...

  8. VS 2010 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    终极解决方案:VS2010在经历一些更新后,建立Win32 Console Project时会出“error LNK1123” 错误,解决方案为将 项目|项目属性|配置属性|清单工具|输入和输出|嵌入 ...

  9. Python 的 GIL 是什么鬼,多线程性能究竟如何

    作者:卢钧轶(cenalulu) 本文原文地址: http://cenalulu.github.io/python/gil-in-python/ 前言:博主在刚接触Python的时候时常听到GIL这个 ...

  10. 图的最短路径---弗洛伊德(Floyd)算法浅析

    算法介绍 和Dijkstra算法一样,Floyd算法也是为了解决寻找给定的加权图中顶点间最短路径的算法.不同的是,Floyd可以用来解决"多源最短路径"的问题. 算法思路 算法需要 ...