作者:周蕾  (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 北京黑客松,你来不来?

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/

  • 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 官网 点击登录

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

  1. 实习生娜娜(含视频) | ArcBlock 博客

    作者: 陈天(ArcBlock 研发副总裁) 来源: 程序人生 (ID:programmer_life) 我对实习生的要求,除去学习能力外,便是足够长的实习时间.所谓「足够长」,我的定义是至少两三个月 ...

  2. 在 ABT 节点上启动 Solid 服务器 | ArcBlock 博客

    作者: Matt McKinney 译者: 陈俊 为了把数据合法所有权归还给每个网络用户以破除当今互联网越来越集中垄断的格局,万维网之父蒂姆·伯纳斯-李从 2015 年开始研发 Solid,并于 20 ...

  3. 使用 Play with Docker 部署 ABT 节点 | ArcBlock 博客

    作者: Matt McKinney 译者: 陈俊 使用 Play with Docker 部署 ABT 节点 作为循序渐进的快速指南,本文为你介绍如何使用 Play with Docker (PWD) ...

  4. ArcBlock 博客 | OCAP超简易集成攻略(Android 篇)

    作者: Nate Robinson(ArcBlock 团队移动开发工程师) 5 天后,ArcBlock 第三场.中国的第一场内测版黑客马拉松即将在北京举行,截至本文推送之际,已有 56 人报名,剩余名 ...

  5. 如何轻松通过 ArcBlock 的招聘流程 | ArcBlock 博客

    作者: 冒志鸿(ArcBlock 首席执行官.首席架构师) ArcBlock 成立发展这几年来,我们一直没有停止过招聘,不同阶段的区别可能只是空缺职位的多少和节奏的快慢.我们的团队建设原则是" ...

  6. ABT 链节点五步速成法 | ArcBlock 博客

    舒适 读完需要 7 分钟 速读仅需3分钟 作者: 舒适(ArcBlock 数据工程师) 上周 ArcBlock 发布了 Forge SDK,旨在为开发者提供业内最佳区块链应用开发工具.从此为 ABT ...

  7. 从 TikTok 危机看去中心化应用未来曙光 | ArcBlock 博客

    作者: 陈俊(ArcBlock 副总裁) 45 天之后,抖音海外版 TikTok 不是被美国公司收购,就是被勒令退出美国市场--这款风靡海外青少年用户的短视频分享应用最近极具戏剧性的遭遇无疑牵扯了许多 ...

  8. MyData 白皮书:一种以人为本的个人数据管理北欧模式 | ArcBlock 博客

    写作: Poikola.Kuikkaniemi.Honko(芬兰开放知识的 MyData 工作组) 翻译: 陈俊 校对: 冒志鸿 日前,ArcBlock 区块基石加入[1]了总部位于芬兰赫尔辛基.致力 ...

  9. 用户自主身份的成长因素 | ArcBlock 博客

    作者: Adrian Doerk 翻译: 陈俊 ArcBlock 区块基石去年加入去中心化身份基金会[1],今年加入 MyData[2],与全球各界技术商业学术伙伴一起努力把用户在数字世界的身份和数据 ...

最新文章

  1. 2021China SAFe Day中国规模化敏捷会
  2. java 轮询请求接口_Android RxJava 实际应用讲解:(无条件)网络请求轮询
  3. 醒醒!Python已经支持中文变量名啦!
  4. java整合flex
  5. #{} 跟${}的区别
  6. 03-06 APP-UI自动化测试-等待方式
  7. ArcGIS中,一个点集里的点两两连线,比如有4个点,就连6条线
  8. JavaSE复习_6 枚举类
  9. .NET 3.5 Socket APM
  10. BigDecimal的精度舍入模式详解
  11. 04【副词】(Adverb)位置,形态,时间/频度副词,强调?
  12. org.springframework.core.styler包解读
  13. u盘提示需要格式化?怎么实现数据恢复?
  14. 测试体质的软件有哪些,有哪些APP可以测体脂?测体脂率APP分享
  15. Java编程答题游戏
  16. YOYO 软件下载及8个使用技巧
  17. confluence 配置
  18. Excel函数之countifs函数(统计给定的多个条件下的数据)
  19. 想跳槽涨薪的必看!企业java开发用什么软件
  20. 微信小程序 — wx:for和wx:if

热门文章

  1. 杭电 Problem 2187 悼念512汶川大地震遇难同胞——老人是真饿了【贪心】
  2. 怎么让手机变电脑模式?装酷神器使用教程详解
  3. MySQL获取表行数
  4. Windows下安装EISeg交互式分割标注软件
  5. CSS Design: Going to Print
  6. 基于Qt和ffmpeg的抓屏rtsp服务(一)
  7. Unix C学习笔记10 进程的概念,相关命令,父子孤尸,进程标识,创建子进程
  8. mysql连接池永驻_【学习笔记】Oracle连接池 数据库常驻连接池(Database Resident Connection Pool)案例介绍...
  9. 企业内部岗位晋升简历PPT模板
  10. 基于物联网技术的智慧病房管理系统(一)—— 系统配置