从CRUD编程切换到事件溯源和区块链编程(微服务)


xinwang_m@163.com
2020-07-22 02:45:54 (4年前)
CRUD;区块链编程

CRUD是增删改查的简称,其中增删改都属于一种变动操作,而新增和删改分别属于两种不同类型的变动,如果以记账来类比,新增等同于多了一笔金额,而删改等同于减少了一笔金额。

CRUD是增删改查的简称,其中增删改都属于一种变动操作,而新增和删改分别属于两种不同类型的变动,如果以记账来类比,新增等同于多了一笔金额,而删改等同于减少了一笔金额。

下面以文档的增删改查从记账角度看看如何理解。























文档 记账
新增文档 +100
修改文档 -50
删除文档 -50

文档的当前状态就是这些变动动作的累计,新增文档以后修改了这篇文档,最后又删除了这个文档,那么这个文档当前状态是没有了。而记账如果假设期初余额为零,存入了一笔100元,后来取出50,当再取出50时,这个账户当前余额就是0了。

事件溯源EventSourcing与CRUD的区别就在于:

ES中记录的是这三个变动,将这三个变动作为事件记录保存下来;而CRUD则是将这三个动作通过服务的增删改查方法调用SQL的insert/update/delete语句实现。

CRUD实现方式:



























文档 记账 SQL实现
新增文档 +100 insert/update
修改文档 -50 update
删除文档 -50 delete/update

事件溯源EventSourcing实现方式:



























文档 记账 SQL实现
新增文档 +100 Event1
修改文档 -50 Event2
删除文档 -50 Event3

ES实际记录的是包含Event1 Event2 Event3的集合,当需要获得当前状态时,通过播放这些事件获得,比如账户当前余额是:100 -50 -50=0,文档当前状态通过遍历事件集合:apply(event1) –> apply(event2) —>apply(event3) 计算以后的结果。

区块链实际是将ES的这些事件集合复制到每个机器上,同时将这些事件严格通过事件编号链接起来,事件之间就无法随意插入其他事件,保证事件链在分散式环境中的完整。

区块链就是把Event1 <— Event2 <— Event3事件通过编号串联起来,每台机器上不但有一个完整的事件集合,而且这些事件通过编号串联起来如同一个链条,当有新的事件进来,首先找出事件链中最后的事件编号,然后靠算力算出新的事件编号:

Event1编号Hash <— Event2编号Hash —>Event3编号Hash

区块链其实是一种分布式的事件溯源ES。

总之,基于事件驱动的事件溯源ES是一种与传统CRUD完全不同的编程范式,更是一种新的区块链编程范式。通过这种事件驱动编程方式不但可以解决传统分布式事务的难题,而且可以提升了系统的扩展性和弹性。传统的CRUD方式虽然简单易用,但是非常依赖关系数据库技术,相信随着区块链技术的发展,传统CRUD编程将慢慢会淘汰,变成培训课堂上的练习入门技术。,CRUD是增删改查的简称,其中增删改都属于一种变动操作,而新增和删改分别属于两种不同类型的变动,如果以记账来类比,新增等同于多了一笔金额,而删改等同于减少了一笔金额。

下面以文档的增删改查从记账角度看看如何理解。























文档 记账
新增文档 +100
修改文档 -50
删除文档 -50

文档的当前状态就是这些变动动作的累计,新增文档以后修改了这篇文档,最后又删除了这个文档,那么这个文档当前状态是没有了。而记账如果假设期初余额为零,存入了一笔100元,后来取出50,当再取出50时,这个账户当前余额就是0了。

事件溯源EventSourcing与CRUD的区别就在于:

ES中记录的是这三个变动,将这三个变动作为事件记录保存下来;而CRUD则是将这三个动作通过服务的增删改查方法调用SQL的insert/update/delete语句实现。

CRUD实现方式:



























文档 记账 SQL实现
新增文档 +100 insert/update
修改文档 -50 update
删除文档 -50 delete/update

事件溯源EventSourcing实现方式:



























文档 记账 SQL实现
新增文档 +100 Event1
修改文档 -50 Event2
删除文档 -50 Event3

ES实际记录的是包含Event1 Event2 Event3的集合,当需要获得当前状态时,通过播放这些事件获得,比如账户当前余额是:100 -50 -50=0,文档当前状态通过遍历事件集合:apply(event1) –> apply(event2) —>apply(event3) 计算以后的结果。

区块链实际是将ES的这些事件集合复制到每个机器上,同时将这些事件严格通过事件编号链接起来,事件之间就无法随意插入其他事件,保证事件链在分散式环境中的完整。

区块链就是把Event1 <— Event2 <— Event3事件通过编号串联起来,每台机器上不但有一个完整的事件集合,而且这些事件通过编号串联起来如同一个链条,当有新的事件进来,首先找出事件链中最后的事件编号,然后靠算力算出新的事件编号:

Event1编号Hash <— Event2编号Hash —>Event3编号Hash

区块链其实是一种分布式的事件溯源ES。

总之,基于事件驱动的事件溯源ES是一种与传统CRUD完全不同的编程范式,更是一种新的区块链编程范式。通过这种事件驱动编程方式不但可以解决传统分布式事务的难题,而且可以提升了系统的扩展性和弹性。传统的CRUD方式虽然简单易用,但是非常依赖关系数据库技术,相信随着区块链技术的发展,传统CRUD编程将慢慢会淘汰,变成培训课堂上的练习入门技术。

0 条回复
  1. 动动手指,沙发就是你的了!
登录 后才能参与评论