作者:周蕾 (ArcBlock 团队后端开发工程师)
为帮助大家深入了解 ArcBlock 的开放链访问协议的实现和技术细节,我们工程团队将定期接受采访或撰写技术博客来“解密” OCAP 背后的设计思路和实现细节,欢迎大家的批评指正,在讨论中进一步完善我们的设计和产品。
今天发表的“深入理解 OCAP 实现”系列之四是后端工程师周蕾为大家介绍 ArcBlock OCAP 服务如何利用工程技术实现从主要的交易所收集和提供实时的币价信息。
后天,ArcBlock 北京黑客松即将于北京酒仙桥优客工场举行,60位报名参赛的黑客们将开发出什么样的DApp呢?敬请期待~~
今年 5 月,借由一个幸运的机会,加入了 ArcBlock 团队成为了一名后端工程师。 能够参与 OCAP 服务的项目是一个让人兴奋的经历。OCAP 服务在成长初期一直迭代发布新的版本,旨在让我们的 OCAP 服务更加的有效,功能更加强大。7月 OCAP 和 Playground 发布了实时币价的新功能支持,通过 Exchange服务从主要的交易所收集和提供实时的币价。今天,让我们一起来回顾一下 Exchange 服务的成长历程和工作流程。
Exchange 服务框架
Exchange 服务是一个用 Elxir 语言开发的应用程序,通过收集,分析和保存加密货币的价格数据。同时,Elixir 在 ArcBlock 成立初期就成为了我们后端产品开发的首要语言。整个 Exchange 服务分成了四个部分,交易所 API 模块,规划者,发布者和文件系统。
交易所 API 模块
目前,我们收集币价从主要的 6 家交易所,这些不同的交易所有着不同的接口和不同返回值的数据结构。对于这种情况,我们会有 6 个交易所的 API 模块去收集和统一 API 返回的币价信息的格式,每个模块负责一个交易所。在被这些模块处理之后,被分析的数据保持了格式的一致性。
规划者
目前,我们从交易所收集 BTC 和 ETH 的实时币价。这些不同的支流汇集在一起作为 Exchange 服务的输入数据。在这里会有一个规划者去定时触发发布者,让其周期性的从交易所收集数据。如果你想做一些周期性的工作,有很多的 Elixir 的库可以使用,他们本质上也是基于 GenServer,比如 Quantum。 在 Exchange 服务里面我们是用 Quantum,一个 Elixr 非常不错的定期规划处理 cron-like job 的库。
发布者
我们选择用 Phoenix PubSub 去广播消息,使用 GenServer 去处理事件。GenServer 作为 OTP 的重要组成部分,简化了重复的任务操作,让程序员集中于应用程序本身逻辑。GenServer 在 Elixir 和 Erlang 的世界里面应用广泛,从业务逻辑里面拆分了接口逻辑(比如 webserver,一个终端的读写或者一个 GUI)。
在其背后的发布和订阅的想法也是很简单的,开始于不同的进程(在这里是指Exchange 的 API 的模块), 等待从这些模块里面被分析处理的数据返回, 然后集中组合这些模块返回的数据,再广播数据到文件系统和 Amazon 的 kinesis。
我们选择 Amazon Kinesis 去加载和分析流数据,让我们即刻对收到的数据进行处理和分析,服务于 Exchange 服务,无需等到收集完全部数据后才开始进行处理数据。
文件系统和 LKG 机制
发布者广播数据到文件系统,同步到 Amazon 的 S3 上。Amazon S3 在这里扮演文件的存储, 帮助我们备份,保存和恢复的角色。
当比如有 API 请求错误发生时候,Last know good 作为一个备份,保存了每个交易所,每个币种的最新的一条数据。
为什么要监控和分析服务?
我们现在使用 Datadog 去建立实时互动的监控板, 发送度量指标和事件,用于操控服务和图形化服务的运行状态。
在服务层面上,监控和评估是为了系统地追踪服务的工作情况, 去度量服务的有效性。帮助我们决定当一个新的版本部署之后,我们还需要做哪些改变。监控和评估给我们做任何服务的变动提供了信息基础,也是帮助我们更明智的做决定。
对于度量指标,使用Statix去收集数据和一些我们更关心的指标,之后通过 StatsD 发送到 Datadog,进行图像化的展示。
如何在 OCAP 服务里面集成?
因为我们的 OCAP 服务使用的是 GraphQL,因此就没有版本化的需要,我们可以简单的添加上新的域和类型在我们的 API 里面,不会影响到现有的查询语句。在这里,我添加了一个定时任务,从 Amazon Kinesis 周期性的获得最新的币价数据,通过一个 resolver 去给相应的域提供实时的币价。
了解更多的 ArcBlock Exchange 服务
希望读者愉快的了解我们 Exchange 服务整体的架构和工作流程,以及如何结合到 OCAP 服务的过程。在未来,在我们的服务里面,会提供更多的币价支持。
最后,如果您想要加入高质量高效率的团队,请加入 ArcBlock 吧!
相关阅读
ArcBlock 博客 | OCAP超简易集成攻略(Android 篇)
ArcBlock 博客 | OCAP 超简易集成攻略( iOS 版篇)
ArcBlock 博客 | 浅析数据对区块链行业发展的重要性
ArcBlock 博客 | 开放链访问协议为何采用 GraphQL
ArcBlock 博客 | 如何解析 BITCOIN 的数据
ArcBlock 博客 | 30 天 21 个版本 OCAP Playground 都经历了哪些变化?
ArcBlock 博客 | 如何在几十个 Repo 中游刃有余?
ArcBlock 博客 | OCAP Playground 入门指南
更多ArcBlock区块基石信息,柯林斯关注以下渠道了解:
Twitter | https://twitter.com/ArcBlock_io
Instagram | https://www.instagram.com/arcblock/
Facebook | https://www.facebook.com/arcblock.io/
T elegram | https://t.me/ArcBlock
LinkedIn | https://www.linkedin.com/company/18355951/
Reddit | https://www.reddit.com/r/arcblock/
中 | https://medium.com/arcblock
博微 | https://weibo.com/realArcBlock
信微群 | 加拉群小助手:Ddchain
电报群| 电报组:
电报(英文): https: //t.me/ArcBlock
电报(繁体中文): https: //t.me/ArcblockAsian
↙ArcBlock 官网 点击登录