如何使用JavaScript制造现代RSS阅读器

10,286
13.
在几个小时而不是几个月内建立可扩展的馈送,活动流和聊天。

通过尼克帕森斯,SR. Developer倡导者,流


溪流的风2.0


风开始作为一个简单的示例应用程序,但由于我们的令人敬畏的社区的支持,我们决定将更多的时间和精力集中在项目上。Winds 2.0周围的初始反应超出了我们所有的期望。自5月中旬发射以来,申请在黑客新闻中排名第#1在一天多的黑客新闻中,有5,200颗星(并计数)GitHub.并成为产品寻找的趋势应用程亚博彩票怎么下序。

进入它,没有办法预测风2.0将如何变得如何 - 它是绝对的击中或史诗般的衰退和浪费时间?该团队喜欢构建示例应用程序,所以我知道它不会是一个完全损失,并且有助于看到这种新的迭代在发布后的第一个月中如此广泛使用。

风的技术堆栈与流完全不同。你可能已经看过staxshare写的博客亚博提现规则流如何为活动提供3亿用户使用RocksdB.。然而,风是基于的node.js.MongoDB Atlas.表现PM2公牛禁止禁忌反应

要使用Winds 2.0开始,您可以尝试Web版本或下载应用程序这里,或者如果你觉得更冒险的头脑GitHub.并在本地旋转它。接下来,让我们谈谈一下风2.0堆栈,为什么我们选择与我们所做的技术(以及为什么我们选择首先建造风!)。


RSS是一个破碎的经历

我们意识到许多RSS Power用户是开发人员,设计师和记者。我们与风的目标之一是回答我们自己问的问题:如果开发人员和设计师社区可以创造一个简单和抛光的RSS体验,那么怎么办?这可能会扭转较少用户的下行螺旋,利用技术和更多的出版物丢弃支持吗?

RSS的未来最不确定。我们与这个项目的希望是对#REvivers做出贡献。


为什么JavaScript / node ...?

风的另一个核心目标是使广泛的开发人员能够贡献。我们希望有人能够容易地注意到他们不喜欢他们的RSS / Podcast体验的东西,并轻松提出用修复或添加提出拉动请求。

如果您勇敢地探索CodeBase,您可能会注意到我们正在使用JavaScript for Metore - Front和后端。我们的大多数团队都经过Go和Python,因此节点对此示例应用程序不是一个明显的选择。关于Javascript有趣的是有多少人抱怨这是一种不充分的语言。当然,它有它的怪癖 - 单线程,回调地狱等 - 但我们认为可以以任何语言构建伟大的软件。

对于风,Javascript是促进项目周围社区的绝佳选择。更重要的是,JavaScript的成熟已经开始闪耀着额外的支持异步/等待句法。

当然......讨厌会有仇恨谁拒绝承认,关于JavaScript有什么可以远程积极的(甚至有咆哮黑客新闻关于node.js.);但是,如果没有在JavaScript中完全写作,我们就不会看到我们所做的结果。以下是我们选择JavaScript的原因的快速细分:

  • 几乎每个开发人员都知道或可以,至少读取JavaScript
  • ES6.和node.js v10.x.x,它成为一种非常有机的语言
  • 异步/等待功能强大且易于使用(异步/等待VS承诺
  • Babel允许我们尝试下一代JavaScript(尚未在官方JavaScript规范中的功能)
  • 纱线允许我们始终快速安装包装(并充满吨的新技巧)


devops️

很难听到公司如何部署和管理代码。当那个风2.0是开源的,我们希望分享我们使用的一些工具,以便在从我们的计算机上获取到服务器的代码时完成的工作。

Web版的风在静态托管S3冰球。总而言之,它每月花费几美元到主办。每个桌面版本的应用程序都已部署在内部电子,允许我们弥合Web和桌面之间的差距。

至于后端API,这是另一个故事。我们有一个相当体面的部署流程,以确保稳定性和可维护性。这是rundown:

  1. 所有代码都存储在GitHub.
  2. 我们使用组合手动开始在AWS上建立BOTO.
  3. CloudFormation.创造一个新的风环境EC2.实例,自动缩放组(ASG),应用程序负载均衡器(ELB)和Aredis.实例
  4. AWS CCM存储和检索引导时所需的各种配置(例如,当前版本等)
  5. dotenv&环境变量存储在木偶和ccm.
  6. 一旦所有EC2实例都有可用的,Puppet脚本就会运行并在所有实时实例上应用配置(在应用模式下)
  7. PM2靴子,自动启动我们需要保持我们的应用程序的各种Node.js流程(API和工人)

对于日志记录指标,我们使用组合统计数据+石墨+格拉纳纳


溪流的风2.0


了解电子⚡

我们想尝试建造电子除了网络之外,应用程序带有下载每个Linux发行版,麦克斯和Windows。从根本上说,这似乎很容易:我们写代码,将其包装在电子壳中,并释放到我们所需的操作系统......事实证明我们错了。

电子,虽然强大,结果表明是比我们预期的更大的野兽。建设到不同的发行版特别是艰难的,即使使用电子建筑商(批准,我们有需要补丁的运气不好电子建造者(并且那个错误已经固定),但只占我们击中的一些痛点)。MacOS菜单栏必须适用于接受我们的应用程序的麦克斯存储,并使用电子API执行小任务,例如在外部浏览器中打开链接,结果非常困难。尽管有困难,我们的团队向前迈进了一些定制的工具(所有可见和开放的开放GitHub.)我们不仅发布了我们所有的释放目标,而且还释放了网页也是。


在JavaScript️中测试

JavaScript仍然是狂野的西方到程度。这是一个相当不可用的,特别是如果您正在使用Express,所以我们不得不滚动自己的测试框架来完成工作。我们的API是用Express构建的,使用各种Node.js模块的组合。以下是我们用于测试的工具列表:

奖金:这是我们的实际示例测试赛跑者

测试模块的组合我们选择了我们的团队快速移动,多个开发人员同时在各种功能集上工作,而不会降低API。


前端️

React是一种惊人的框架,在我们看来,赢得了对抗其他框架(如角和Ember)的战斗。鉴于其更新麻省理工学院执照,它非常适合风2.0项目。

我们用于风的主堆叠2.0非常简单:

主堆栈

现在让我们来看看我们曾经制造过风的一些前端模块2.0现实:

有趣的模块


后端️

当您建立大型应用程序时,您通常依靠许多库和工具来提高代码质量,上市时间等。如此表示,风也依赖于许多库和工具。以下是几个,但不是全部,我们使用的:

饲料制造商

饲料制造商是一个相当复杂的node.js模块,我们认为是项目的骨干。它处理RSS源中的大多数不一致性,并占用“清洁”的饲料版本。没有这个模块,我们会写很多IF / else陈述......这并不乐趣。

弗朗西姆

弗朗西姆是我们利用用于确定馈送的语言的语言检测模块。这可能听起来像是一项小任务;但是,它实际上是我们个性化引擎的很大一部分。例如,我们只推荐用英语发言的用户以英语为食。与其他语言相同。

公牛

公牛有助于将风2.0队列在结构上的帮助下进行结构redis.。它配备了超级简易API并支持多个队列,这对于我们的用例非常适合。此外,它们还有几个开源监控工具GitHub.页面提供洞察幕后发生的事情。

ES6.

JavaScript W / ES6使我们的团队能够为广泛的人编写最低次数的代码。Winds 2.0中的所有代码是100%JavaScript(除了少数Bash脚本除以部署工作流程)。该团队目前正在迁移CodeBase中的大部分功能来利用异步/等待来减少代码行数。

纱线绝对是惊人的。这是一个专为JavaScript构建的令人难以置信的快包管理器。最重要的是,由于它的缓存机制,它是100%开源和几乎始终可用。我们过去使用了NPM,虽然它效果很好,但在溪流的团队更喜欢纱线。

是基于浏览器和Node.js的基于HTTP客户端。我们实际上在各种任务的前端和后端使用它。例如,所有前端HTTP请求通过包装器流到AXIOS。并且对于后端,我们利用AXIOS在通过解析过程发送时检查文件的大小,然后关闭到数据库以进行存储 - 这确保了大文件不会降低我们的工人流程。如果你没有检查过Axios,那么你肯定应该。

指挥官

指挥官这是另一个Node.js模块,这次为构建命令行接口提供完全支持。是的,这是对的,风有一个CLI,我们用于各种任务,如测试饲料,丢弃RSS源等等!

禁止禁忌

禁止禁忌“允许我们今天使用下一代JavaScript”。基本上,如果在特定的JavaScript(前端和/或后端)中不可用的功能(如导入),我们仍然可以通过利用Babel来使用它。

表现

表现用于为我们的API供电。与其他框架相比,它在压力下真正闪耀。诚实地说,我们的团队大多数,如果不是全部,那么javascript框架的经验,我们发现表达是最容易与之合作的。它经常维护,具有开源组件,它真棒。

哨兵

哨兵为我们的后端和前端允许实时崩溃报告。让我们吹走的是你可以用哨兵的粒子。他们的功能有助于我们识别和调试错误,并为我们提供何时修复或回滚的洞察力。谈到消防时,这个工具肯定会赢得市场。

阿尔索利亚

阿尔索利亚提供闪电快速(字面上)搜索我们的应用程序。在2MS以下,我们的用户可以发现RSS源和播客以读取或收听。它们甚至具有框架的组件,例如反应和角度,使集成更好。这是我们最喜欢的之一;但是,我们喜欢他们。

是Winds 2.0的关键资源,因为它为我们的用户提供了新闻源和活动流,甚至基于机器学习的个性化。如果没有流,我们将无法在我们目前做的情况下向我们的用户提供建议的内容。

MongoDB Atlas.

MongoDB Atlas.是一种现象,允许我们担心收购用户,而MongoDB担心正常运行时间。除了MongoDB为您提供仪表板和URI连接,它与托管您自己的群集相同。凭借MongoDB Atlas,没有更多地担心集群健康,监测等。

猫鼬

猫鼬是一个强大的ODM,允许我们在MongoDB环境中定义丰富的模型。一般来说,NoSQL数据库是概要的(意味着它们有或不需要任何形式);但是,使用MongoDB,指定架构总是一个好主意,因此您可以正确索引并组织数据。这允许轻松更新和高效查询。

PM2

PM2是node.js进程管理器。它允许我们确保正常运行时间和缩放过程。这个项目的CLI已经死了简单,这让我们的团队能够在飞行中捡起来。


最后的想法

要使用Winds 2.0开始,您可以尝试Web版本或下载应用程序这里。如果你感到冒险更令人冒险GitHub.并在本地旋转它。

RSS处于恶性循环。风是一个社区努力,以帮助改变潮流#revivers.。贡献总是很欣赏。讨论新功能检查官方松弛通道风

如果你好奇了解更多信息以及我们的API如何工作,我们很容易5分钟的API巡回赛将通过建造可扩展活动饲料的过程来走路。

在几个小时而不是几个月内建立可扩展的馈送,活动流和聊天。
经核实
业务经理
软件架构师
首席执行官
JavaScript开发人员
软件工程师,数据科学
软件工程师
开发商营销总监
您可能还喜欢
Pinterest Visual Signals基础设施:从Lambda到Kappa建筑的演变
如何将克隆时间减少99%
开发人员的SSO指南
功能标志:3用于平滑部署的用例