通过一个使用Diffusion Cloud和Redis Pub-Sub服务器的简单应用,介绍Diffusion实时事件数据平台。
Redis是一个开源的内存数据结构存储,可作为数据库、缓存和消息代理使用。虽然在业界非常流行,但它也有一些基本的限制。
使用Diffusion Cloud,我们可以扩展Redis可以同时处理的客户端和连接数,消除Redis的pub-sub订阅限制。
这个JavaScript代码例子将帮助你从一个公共API实时发布数据到Redis,从中消费,并通过我们强大的Topic Views功能实时转换数据。你也可以使用我们SDK中的其他编程语言,包括iOS、Android、C、.NET等。
数据管道

Diffusion Cloud Credentials

我们首先设置我们的Diffusion Cloud凭证,你可以使用我们在本教程中提供的凭证,或者你可以在Diffusion Cloud中创建你自己的凭证。
1)数据源
在本教程中,我们将使用Coindesk API来检索比特币的当前价值,包括美元、欧元和英镑;尽管我们只打算为我们的图表提供美元。
https://api.coindesk.com/v1/bpi/currentprice.json


我们创建了一个名为DataFeeder.js的组件,它连接到Coinbase REST API,当它收到更新时,它会将数值发布到数据层的Redis服务中。
一旦Coinbase的数据进入Redis,我们就可以在应用程序中把它可视化。
2) 数据层。Redis Pub-Sub


我们有一个名为redis-server.js的NodeJS应用程序。这个应用程序作为数据馈送和Redis服务器之间的一个通道,并返回。
3) 应用层

后台应用
这个应用从Redis Topic中获取数据,然后使用Diffusion SDK将相同的内容发布到Diffusion云服务中。在这里,所有的业务逻辑都可以通过编程来实现。如果我们没有Diffusion的功能,通常会这样做,使事情变得更容易。
Diffusion云服务
这是神奇的地方,通过主题视图,接收到的数据可以被丰富和细化,允许客户只消费相关的数据,提高数据效率。

一旦数据流入Diffusion Cloud,任何客户端应用程序都可以非常容易地订阅它。
4) 客户端层。


这些客户端订阅了Redis和Diffusion主题,并在他们的图表中显示收到的数值。
检查Diffusion客户端中的接收数据。你会注意到,由于Diffusion Cloud的数据处理能力,数据消耗量比Redis客户端少得多。
行动中的代码
为了展示每个层的隔离性,我们特意重复了代码;只是为了本教程的目的。
它是如何工作的
Redis和Web服务器
我们使用docker来设置和运行一个Redis服务器和一个Web服务器来托管Web应用程序。
(1) 数据输入
我们从外部API轮询我们的数据,在这种情况下,Coindesk。并将其发布到Redis。
/**
(2) Redis NodeJS服务器(数据层
为了与Redis服务器连接,我们建立了一个NodeJS服务器。这个应用程序在Redis服务器旁边的服务器侧运行。
- NodeJS服务器将连接到Redis服务器,并创建和使用一个Topic,以通过数据流。为了执行这种互动,redisPublisher和redisConsumer客户端都被实例化了。
- 为了与Web应用程序(客户端)通信,它将打开一个连接到WebSocket。我们使用端口3000。
- 从 WebSocket 消耗的每个数据都由 redisPublisher 发布到 Redis 服务器的 Topic 上。
- 用redisConsumer对象从Redis服务器消费的每个数据反过来都被发布到WebSocket。
这是代表该互动的一段代码。
server.on('connection',
// Message received from Redis, and sent through Websocket to Webclients
(3) 后端应用程序(应用层
我们从Redis消费并发布到Diffusion。
/**
/**
我们在这里没有任何Diffusion云代码。这只是因为我们在这里有我们所需要的一切,可以在数据上实现我们的业务逻辑,而不需要写代码。
(4) Diffusion客户端(客户端层)
我们在这里只描述Diffusion客户端,因为Redis客户端的工作原理非常相似,但是从Redis中消费。
所以,Diffusion客户端只消费它需要的来自diffusion Topic的数据,并将其显示在图表中。
/**
/**
// This message came from Diffusion! Feed Diffusion's Chart
核心类
这些是用于与不同层的Diffusion Cloud交互的类。
扩散服务
该服务被应用层和客户端使用,通过其Javascript SDK客户端,作为与Diffusion Cloud的隔离层。
这就是连接功能。
/**
// Instantiate Diffusion's Client
// Set Diffusion config
// And connect to it
/**
这是服务如何使用SDK来发布消息。
/**
Diffusion SDK客户端
最后,我们有一段代码,负责直接与Diffusion Javascript SDK进行交互。这是Diffusion服务在应用层和客户端都使用的类。
这就是它如何使用SDK函数连接到Diffusion的。
/**
/**
/* If we setup a connected callback, let's call it */
这是它如何订阅主题,并处理该主题中收到的消息。
/**
/* And subscribe to the topic */
onReceiveMessage = (topic, specification, newValue, oldValue) => {
最后,这是它向主题发布消息的方式。
// Interface Functions
前提条件
- 下载我们的代码示例或将其克隆到你的本地环境。
git clone
运行它
- 要求。
- docker和docker-compose
- nodejs和nodemon
- 从项目的根目录下运行:docker-compose up -d -> 来启动Web服务器和Redis服务器。
- 从项目的根目录运行。
- nodemon js/data-tier/redis-server.js -> 来启动redis服务。
- 在你的浏览器中,转到:localhost:8008。
- 这就对了!
- 首先在顶部设置Diffusion凭证。
- 然后开始从外部API进行轮询。
- 你会看到两个图表都在更新。检查图表所接收的数据大小,并认识到使用Diffusion可以节省多少数据
用Diffusion扩展Redis Pub-Sub最初发表在Nerd For Tech的Medium上,人们通过强调和回应这个故事来继续对话。