对于不认识的人, Winds (流行的开源RSS和Podcast应用程序)由Stream提供支持-一种SaaS产品,专门用于为新闻和活动提要提供支持。 如果您想快速了解Feed的知识,我们有一个很棒的5分钟教程 ,概述了如何使用Stream。 如果您已经熟悉Stream和/或Feed技术的奇迹,请继续阅读!
流允许Winds具有以下功能 :
- 能够跟踪RSS提要或播客。
- 关于提要更改的实时通知,使Winds可以在可用时立即浮出新内容。
- 有关新的RSS提要和播客的建议。
建立既可扩展又相关的活动提要很困难。 传统上,公司依靠Cassandra或Redis构建其提要。 在内部建立饲料非常耗时,昂贵且难以维护。 Stream使构建可伸缩的相关Feed变得极其简单且具有成本效益。 提要通常在11毫秒内加载,并有300+百万最终用户 ,Stream已在其中经受了考验,并经受了一些最恶劣的条件。
在这篇简短的文章中,我们将深入探讨如何使用Stream增强Winds中的跟踪关系,实时功能和内容发现,以及它如何使我们的团队自信地无缝扩展应用程序并提供最新的内容。 ,我们的用户就可以在眨眼之间找到相关内容。 请享用! ????
什么是提要? ????
“提要”描述了您在当今许多流行的社交媒体应用程序上看到的结构; 供稿可让用户在观看内容时滚动浏览内容并与之互动。 从技术上讲,提要是Activity Stream规范的一部分; 对于活动流,有一个正式规范(也称为“活动供稿”)。 官方文档可以在这里找到。
在较高的层次上,该规范概述了如何以适合构建活动供稿的表示形式正确发送JSON。 在Stream,我们严格遵循规范,并提供了应发送的必需参数,还提供了发送自定义数据的功能。
Stream提供以下“ Feed类型” :
- 扁平 -最常见的Feed样式。 此提要类型允许您写入特定的提要(例如时间线,并按时间顺序显示内容)。 平面提要之后还可以跟随其他提要以及表面实时通知(这是通过直接嵌入到我们的JavaScript SDK中的websocket连接来完成的)。
- 汇总 -这种类型的摘要是高级摘要,允许使用“汇总格式”对活动进行分组和显示。
- 通知 -将此提要类型视为具有扩展功能的“汇总提要”。 可以对其进行修改,以便可以将提要中的项目标记为可见或已读(请考虑Facebook的通知提要)。
举一个真实的例子,Facebook的整个应用程序几乎是一个巨大的新闻提要,它使用自定义算法来显示您最可能与之交互的内容(Stream也可以使用内部自定义个性化来做到这一点)。
通知提要(带有更新的下拉菜单)使用户与内容保持联系,并根据与内容的交互来自动将项目标记为可见或已读。 Facebook是一个示例,但是Twitter和Pinterest是使用Feed技术的流行应用程序的其他示例。
在“风中”向流提要中添加活动????
Winds拥有一个相当强大的后端,可以支持您在应用程序客户端看到的所有功能。 例如,除了前端代码外,我们还有一个API和一组几个经常通过内容浏览的工作者。
话虽如此,我们的员工每次解析RSS或Podcast内容时,都会在MongoDB中创建一条记录。 一旦返回了来自MongoDB插入的回调,工作人员便开始浏览所有文章(用于RSS提要)或情节(用于播客提要),将它们存储在MongoDB中,最后将它们存储在Stream中。 与上面类似,数据库返回一个唯一的_id值,我们将其用作Stream中的“ foreign_id”。
幸运的是,Stream使添加活动到我们的提要非常简单。 可以使用REST API或通过Stream可用的任何SDK来完成。 使用JavaScript SDK,将文章活动添加到我们的RSS feed看起来像这样:
让我们分解这个例子 :
- 参与者是执行活动的用户(或系统)
- 动词是用户(或系统)采取的动作
- 对象是对活动对象的引用(在我们的示例中,是唯一ID)
- 时间是必需的值,并且是活动的时间(创建活动时)—该值可确保唯一性,并提供以后必要时修改活动的能力
- foreign_id :是应用程序数据库中活动的唯一标识符(如果以后需要进行更改,则用于查找)
注意:术语“提要”在本节中使用很多,看起来好像可以互换。 请不要混淆-RSS或Podcast提要是给定提要URL(例如 https://somewebsite.com/rss.xml)上 可用的内容 , 而活动提要特定于Stream。
如果您有兴趣阅读更详尽的明细,请在Stream网站上找到完整列表及其说明。
关注提要????
跟踪关系是社交网络和许多其他使用提要的应用程序中最重要的部分,即使不是最重要的部分。 关注关系允许一个提要链接到另一提要,从而使活动在受关注关系约束的所有提要中可见。 例如,将活动添加到提要时,该活动会自动添加到父提要之后的任何其他提要中。
在风中,我们有很多关系。 最重要和最容易理解的关系是用户与他们遵循的RSS和Podcast“提要”之间的关系。
注意:从这个意义上讲,提要是在Stream中引用提要组,而不是提要URL。
在提要组“ user_article”和“ user_episode”中,这些组具有追随关系。 以下是一个简单的示例脚本,该脚本向您展示如何通过JavaScript SDK中的“ followMany”命令在多个项目之间建立对父RSS源的关注关系:
注意:只能使用“扁平”进纸类型。 此外,提要不能跟随其自身。
Winds必须提供的很酷的功能之一是“ .OPML”文件导入。 OPML是导入和导出RSS feed的标准。 它是用XML编写的,因此我们进行所有解析,如上所述创建提要,然后执行所谓的批量跟踪。
如果您对批量跟踪感兴趣,请查看以下代码段示例:
有关后续提要的更多信息,请参阅我们的文档 。
风流进料结构????
如果您有机会检查Winds 代码库或使用该应用程序,那么您会知道这是一个复杂的过程。 为了促进Winds中的各种功能,我们严重依赖Stream来处理我们的提要。 您可以将单个提要组视为数据库中的表-其中每一行都是活动。
这是Winds提要组结构的简要介绍 :
- 播客 (平面)
- user_article (平面)
- user_episode (平面)
- rss (单位)
如建议的那样,每个提要都保留相关数据。 例如,当我们解析RSS提要或播客提要时,我们会将新的活动插入到相应的提要中。 所有后面的文章和剧集都存储在user_article或user_episode中-两者都通过Stream中的“关注关系”连接到RSS和播客feed。 关注关系使我们能够在用户与其选择消费的内容之间建立关联。
现在我们已经具备了跟踪关系,就如同向Stream API发出GET请求以接收以下内容一样容易。 收到以下信息后,我们将对Winds(MongoDB)的数据库发出API调用,并使用响应“丰富”数据。 内容丰富后,我们可以在Winds中向用户显示所有新闻提要数据。
注意:富集是获取一小部分数据(例如,一个具有ID的对象的播客的对象)并使用我们数据库中数据进行扩展的过程。 这是一个重要的过程,因为它使我们能够将有效负载保持在可管理的大小,从而减少了网络I / O并提高了传输速度。 另外,要知道不要在Stream内部存储个人身份信息(PII),这一点很重要。
我们如何在风中使用饲料????
饲料在Winds中使用率很高。 实际上,我们使用提要来显示Winds中的几乎所有内容。 在下面的屏幕中,我们使用以下供稿:
- RSS(最新文章)
- 播客(最新剧集)
- Discover是由Stream Personalization支持的RSS和Podcast提要的组合。
Winds指出的一个有趣的片段是“发现”部分显示了推荐的RSS和Podcast提要的混搭; RSS和Podcast提要建议由Stream提供的两个个性化端点提供支持。 通过使用个性化设置,我们可以基于用户在Winds应用程序中的先前单击 , 读取 , 收听和整体内容 , 显示用户最可能与之交互的内容 。
实时和网络套接字
最重要的是,当我们的一名抓取工作人员进行更新时,我们会从Stream收到实时通知,并让用户知道他们应该刷新应用程序以获取更新的内容。
从信息流中检索建议
通过Stream,可以轻松地向您的应用程序添加个性化的提要。 当您的用户与您的应用程序进行交互时,Stream开始了解他们感兴趣的内容。有了洞察力,可能性就无穷无尽。 这只是我们在野外看到的一些用例:
- 个性化提要
- 创建关注建议
- 优化电子邮件
- 产品推荐
- 内容推荐
注意:Stream的个性化功能特定于每个应用程序。 因此,在使用此功能之前,您需要首先与我们的数据科学和销售团队联系,以便我们可以更好地了解您的应用程序需求,并更好地为您的应用程序提供个性化功能。
个性化在Winds中扮演着重要角色。 它为我们的内容发现提供了全部动力。
发现部分基于您在创建帐户,点击,阅读和收听期间设置的兴趣。 有了所有这些数据,Stream便开始工作,并通过几种复杂的算法来推荐内容。
为了将内容加载到视图中,我们点击了通过API代理的唯一端点,然后合并了数据客户端。 请注意,这还经历了“充实”过程,在此过程中,我们采用了提要的建议唯一标识符,并针对我们的数据库执行查找。
谢谢! ????
感谢您抽出时间来阅读。 我希望本示例演练可以使您更好地了解Feed的工作方式。
如果您对Stream感到好奇,并且想尝试一下我们的API,我们有一个5分钟的教程 ,它将引导您完成上述各种提要类型的所有步骤。 我强烈建议您试一试。 此外,如果您对为Stream提供动力的体系结构感兴趣,那么Stream如何使用RocksDB,Raft和Go来为3亿多用户提供提要 。
如果您尚未下载或注册Winds,则可以在Web,macOS,Linux和Windows上使用它们-您可以在此处开始使用Winds。
与往常一样,如果您有任何问题或意见,请在下面的评论中将其删除!
From: https://hackernoon.com/the-engine-that-powers-winds-81ae655926cb