月亮链 月亮链
Ctrl+D收藏月亮链

BLO:ArcBlock 课堂 ⑦ | Intro to CQRS and Commanded(全程视频 + 文字)_blockchain是什么行业

作者:

时间:1900/1/1 0:00:00

昨天上午8:00,ArcBlockTechnicalLearningSeries第六期“IntrotoCQRSandCommanded”,由ArcBlock后端工程师周蕾讲授。

#讲座全程视频

#讲座全程文字:浅谈查询职责分离(CQRS)模式

最近几年,在DDD的领域,我们经常会看到CQRS架构的概念,CQRS是查询职责分离模式(CommandQueryResponsibilitySegregation)的缩写。正好这些日子Arcblock的后端的服务有考虑使用CQRS的架构,所以今天和大家一起分享一下最近的研读收获。今天会从EventSourcing出发介绍CQRS,以及通过Commanded,一起看一看如何遵循ES/CQRS的概念开发应用程序。

什么是EventSourcing(事件溯源)?

EventSourcing本质来说是保存了发生事件的本身,而不是当前的事物的状态。在EventSourcing的概念里,Event作为既定的发生之后的事情,也是最小的单位。比如:

EventSourcing的工作模式:在下面这条数据流里面,由4个发生的事件(event)组成,进而每一次改变当前的状态,同时事件们的相对顺序也是我们需要保证的。

我们会得到这样的总结:

Sn=apply(Sn-1,En)或者Sn=reduce(E,S0,apply)

其中:(S:state,E:Event)

现在我们可以发现EventSourcing的优点:

NFT公司Mintify宣布完成160万美元的融资,Arca领投:金色财经报道,NFT交易工具公司Mintify宣布完成160万美元的融资,Arca领投。具体估值没有披露。Endeavour Fund、Alchemy Ventures、Psalion 以及 GSR 和 Fasanara等公司参投。[2022/10/20 16:32:51]

每个状态发生的改变都有完备的日志记录,可追溯

优化了的写的操作,提高了性能

我们身边的EventSourcing

每个程序员的每天都离不开的Github。在Git的世界里,Events(事件)是Commits,State(状态)是文件系统。

WAL:也就是Write-aheadlogging,在数据写入到数据库之前,先写入到日志,再将日志记录变更到存储器中。Events(事件)是每一个操作,State(状态)是数据库。

对于EventSourcing来说,想做查询(query)怎么办?

试想一下,在一个银行系统里面,如果我们想要查询账户余额在1000块以上的用户,那我们难道需要把每个账户的按照Sn=reduce(E,S0,apply)这个公式在重新计算一遍吗?如果我们考虑用一个DB来保存Event,再用另外一个DB去专门为Query提供数据,同时两个DB通过发送消息进行信息同步,如何?CQRS某种程度上就解决了这样的问题。

CQRS是什么?

CQRS全称是CommandQueryRsponsibilitySegregation,将应用程序分为两部分:命令端(Command)和查询端(Query)。命令端处理程序创建,更新和删除请求,并在数据更改时发出事件。查询端通过执行查询来处理查询,并且通过订阅数据更改时发出的事件流而保持最新。CQRS使用分离的接口将数据查询操作(Queries)和数据修改操作(Commands)分离开来,这也意味着在查询和更新过程中使用的数据模型也是不一样的。这样读和写逻辑就隔离开来了。

Alameda Research成为波场联合储备的第一位成员和白名单机构:据官方消息,Alameda Research正式成为波场联合储备的第一位成员和白名单机构。

波场联合储备(TRON DAO Reserve)由波场网络牵头成立,主要目的为保护区块链行业与市场,缓解极端与长期下行行情,解决金融危机来所带来的恐慌性问题。同时,波场联合储备也将作为初期托管人来维护波场去中心化稳定币 Decentralized USD (USDD) 的权限管理并以其储备金融资产担保,保证 USDD 汇率稳定。[2022/5/6 2:54:13]

CQRS里面的一些概念:

Command(命令):不返回任何结果,被校验成功后但会改变对象的状态。

Query(查询):有返回结果,但是不会改变对象的状态。

Aggregate(聚合):保存状态,处理command,和改变状态。

EventStore:存储Events。

怎么遵循CQRS模式建立应用程序?

首先我们会基于一个Commanded,一个Elixir遵循CQRS/ES模式实现Commandside的库。

1.Commands

Commands是用户发送给应用程序的指令,表示用户的一种请求,当然请求是有可能失败的,如果想在余额有10的账户里面取出1000块这样的操作。每一个指令对应是一个module,然后使用defstruct定义域,命名方式是MineCoin,动名结构。

搜索引擎Presearch集成CoinMarketCap加密价格数据:10月5日消息,加密数据提供商CoinMarketCap已与Presearch达成合作,将向该搜索引擎提供数据馈送,允许用户直接在Presearch上查看CoinMarketCap的价格数据。通过此次合作,Presearch的240万注册用户将可以即时看到CoinMarketCap提供的任何加密相关术语的概述,包括价格、日销量、市值、流通供应量和总供应量等。(Cointelegraph)[2021/10/5 20:07:19]

defmoduleMineCoindo

defstruct[

:account_id,

:nonce

]

end

2.Events

Events是由Command产生,最终导致状态改变。会最终在eventstore里面序列化存储,可以用于日后想要恢复状态。命名方式相比于Command来说发生了变化,CoinMined,过去式表达一种过去发生的事实。

defmoduleCoinMineddo

defstruct[

:account_id,

:nonce

]

end

3.Aggregates

Aggregates作为接受处理Command,产生或者引起对应事件的发生,以及一些改变状态的处理器。

曾获V神捐助的非盈利数字图书馆Internet Archive遭违反版权法起诉:非盈利数字图书馆Internet Archive因Open Library计划正面临纽约南区几家主流出版社的法律诉讼,起诉理由是该项目违反了版权法。Open Library发起于今年3月,发起理由是为了响应新冠疫情大流行时期的隔离措施。包括Hachette、HarperCollins、Penguin Random House和Wiley在内的所有美国出版商协会的成员认为,Internet Archive提供的服务代表了故意侵犯版权的行为,因为Open Library的资料包括扫描和上传的书籍版本,这些书籍未获得出版商和作者的许可,也未进行支付。

此前消息,以太坊联合创始人Vitalik Buterin曾向非盈利数字图书馆互联网档案库Internet Archive捐赠100枚ETH。(The Block)[2020/6/2]

里面包含两个函数:execute方法使用来添加我们的校验Command的一些逻辑,输入时状态和command,如果成功输出就是Event。apply函数用来更改状态,注意这里的对象是已经是生成出来的event。

|{:error,term(。

@specapply(state,event)::state

现在我们有了Command,Event,Aggregates...

那我们还需要一个派遣的角色帮助我们把Command走向对应的Aggregates。Commanded库提供了Router:

独家 | OKEx Research首席研究员:全球市场恐慌加剧导致比特币暴跌:OKEx Research首席研究员William在接受金色财经独家采访时表示,比特币从来不是避险资产,至少目前为止,它仍然是一个高波动的风险资产,其波动幅度冠绝全球。从宏观的角度来看,在过去的十年间,受美联储量化宽松政策影响,美国联邦基金利率在很长一段时间内处于接近零利率的位置,而欧洲甚至出现负利率的局面,全球流动性泛滥,这造成大量资金开始寻找高风险资产以获取更高的收益。比特币也因此受益,大量资金涌入其中,推高了比特币价格。?

一般而言,传统资本市场的涨跌不会影响数字货币市场,一是因为数字货币市场太小,更重要的是数字货币尚未纳入全球机构投资者的资产配置池中。然而在今年,受疫情等黑天鹅冲击,资本市场出现暴跌,随着世界卫生组织宣布新冠“大流行”,美国政府宣布禁飞欧洲,市场恐慌加剧,投资者都变成了风险厌恶者,信奉现金为王,开始将手中的风险资产置换为短期流动性资产,市场流动性出现不足。流动性极具紧缺,即使在3月13日凌晨纽约联储释放5000亿美元的流动性,依然未能阻止市场杀跌。

在流动性紧缺异常严重的当下,比特币作为波动率冠绝全球的高风险另类投资资产,资金自然会从中抽走以寻求更安全、流动性更好的资产,价格即出现暴跌。[2020/3/13]

defmoduleCoins.Routerdo

useCommanded.Commands.Router

aliasCoins.Account

aliasCoins.Commands,as:C

dispatch(

[

C.MineCoin

],

to:Account

)

end

最后我们使用Commanded推荐的EventStore,它是基于PostgreSQL作为存储引擎,来保存Events。

现在我们可以说是齐活了,可以发现我们构建了如下的整个流程:这样我们就可以愉快发布Commands和生成对应的Events。

最后怎么进行数据同步到读取的DB里呢?

在这里Commaned库推荐了CommandedEctoprojections来做Eventhandler,或者也可以采用Kafka同步信息,在这里就基于不同的应用场景选择适合的Eventhandler。

主讲

周蕾

ArcBlock后端工程师

●美国东北大学毕业

●信息系统计算机专业硕士

●区块链技术爱好者

●编程语言:ElixirJavaScriptPython

下周三上午8:00,同一时间,ArcBlock区块链技术培训系列讲座第7期,现在开放报名!

点击文末左下角“阅读原文”登陆注册:

https://hack.arcblock.io/learning/

或登陆掘金注册:

https://juejin.im/events/all

ArcBlock课堂①|IntrotoGraphQLandAbsinthe

ArcBlock课堂②|IntrotoEthereumSmartContract

ArcBlock课堂③|IntrotoAWSDataPipelineServices

ArcBlock课堂④|IntrotoAWSAthena

ArcBlock课堂⑤|WhatisAWSKinesis

ArcBlock课堂⑥|多步验证那些事

ArcBlock课堂预告|是的,我们将开放大部分技术讲座

相关阅读:

ArcBlock课堂预告|是的,我们将开放大部分技术讲座

ArcBlock课堂①|IntrotoGraphQLandAbsinthe

ArcBlock课堂②|IntrotoEthereumSmartContract

ArcBlock课堂③|IntrotoAWSDataPipelineServices

ArcBlock课堂④|IntrotoAWSAthena

ArcBlock课堂⑤|WhatisAWSKinesis

ArcBlock课堂⑥|多步验证那些事

ArcBlock博客|北京黑客马拉松小记

ArcBlock黑客松③|360分钟11个DApp北京黑客创意令人大开眼界

ArcBlock北京黑客松,你来不来?

ArcBlock黑客松②|新SDK亮相黑客应用质量更高

ArcBlock活动|首场内测版黑客马拉松成功举行

ArcBlock博客|Exchange服务的工作流程以及如何集成到OCAP服务

ArcBlock博客|OCAP超简易集成攻略

ArcBlock博客|OCAP超简易集成攻略

ArcBlock博客|浅析数据对区块链行业发展的重要性

ArcBlock博客|开放链访问协议为何采用GraphQL

ArcBlock博客|如何解析BITCOIN的数据

ArcBlock博客|30天21个版本OCAPPlayground都经历了哪些变化?

ArcBlock博客|如何在几十个Repo中游刃有余?

ArcBlock博客|OCAPPlayground入门指南

ArcBlock分享|冒志鸿:公链性能焦虑是被EOS忽悠了

ArcBlock分享|冒志鸿:从互联网、移动互联网到区块链,20年方法论总结

ArcBlock分享|从OCAP到Blocklet,为传统开发者打开迈向区块链的大门

ArcBlock分享|OCAPPlayground让区块链开发变得更友好

更多ArcBlock区块基石信息,可关注以下渠道了解:

Twitter|https://twitter.com/ArcBlock_io

Instagram|https://www.instagram.com/arcblock/

Facebook|https://www.facebook.com/arcblock.io/

Telegram|https://t.me/ArcBlock

LinkedIn|https://www.linkedin.com/company/18355951/

Reddit|https://www.reddit.com/r/arcblock/

Medium|https://medium.com/arcblock

微博|https://weibo.com/realArcBlock

微信群|加拉群小助手:Ddchain

电报群|Telegramgroups:

Telegram(English):https://t.me/ArcBlock

Telegram(繁体中文):https://t.me/ArcblockAsian

↙点击登陆报名听课

标签:BLOLOCLOCKBLOCKBLOCK-EANY Blocknetblockchain是什么行业blockchain翻译中文

火必交易所热门资讯
AGO:DragonEx关于万圣节活动奖励发放公告_digifinex面试

DragonEx关于万圣节活动奖励发放公告2018-11-09亲爱的用户:DragonEx《你捣蛋,我给糖!》万圣节活动已结束,感谢大家踊跃参与!活动奖励万圣节糖果已发放至参与者个人账户.

1900/1/1 0:00:00
MIN:NBAI挖矿说明(中文版)_PINE

智云链Orion云平台Orion云平台基于云计算的理念,利用全网闲置资源形成去中心化的分布式云计算基础网络,集结全球矿工,激活全球闲散的AI算力资源.

1900/1/1 0:00:00
KKC:KKCOIN维护公告(2018-07-04)_cckkchain

亲爱的用户:<\/p>为了更好的提升用户体验,KKCOIN计划于新加坡时间2018-07-0510:00:00进行日常维护,持续时间预计60分钟.

1900/1/1 0:00:00
区块链:金庸与中本聪:大闹一场,悄然离去_闪电比特币还在吗

你不一定要点蓝字关注我的当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放沧海一声笑黄沾-华纳群星难忘您许冠杰正文:3000字预计阅读时间:8分钟这天下,功夫最高的,终究是时间.

1900/1/1 0:00:00
ZUNA:KIZ(Kizunacoin)_COI

关于KIZ(Kizunacoin)KIZUNACOIN致力于传播。采用DAG技术,交易费用低廉,交易顺畅。我们将建立加密货币平台,每天可以用于多种目的.

1900/1/1 0:00:00
CEO:CEO交易所关于BST/象链切换主网公告_HTT

尊敬的用户:CEO交易所BST/象链将切换主网,我们将支持BST/象链主网映射,您无需任何操作,即可获得BST/象链主网资产.

1900/1/1 0:00:00