肉丸。liveã混音您的社交新闻经验与Redis Stack + Hacker Newsâ€第2部分
#typescript #bigdata #redis #redishackathon

您好,谢谢您检查我的DEV x Redis Hackathon提交!

如果您没有机会,请查看本系列的Part 1以获取其他上下文。

我提交的概述

Redis Stack + Hacker News

为了提交我的提交,我制作了meatballs.live,这是一个自动推荐网络和Web应用程序,用于在Redis StackHacker News的社交新闻中发现有趣的对话。

meatballs Frontpage and Live Comments

在社交新闻方面,我发现了评论中深处的最佳见解。但是,这非常耗时,有时我会回归到漫不经心的滚动。

我构建了meatballs.live从社交新闻平台API中生成和存档的每日消化(称为收藏)。这些日常收藏是对最吸引人的评论和相关故事的建议。

meatballs.live collections page

像印刷的报纸或照相带一样,这些收藏是静态的且不可变的。回到不断滚动不在上下文和看不见的时代,这很友善。

meatballs.live collection page

但是,社交新闻中的所有事情并非一次发生。如果没有长期观察和建立关系,这是一种时间的时间体验。

(我是否提到了现场评论流,它显示了黑客新闻的评论,还提供了与其他肉丸聊天的地方。活着的读者?!)


Redis StackHacker News API非常适合这一挑战。

我有三个主要的设计目标:

  1. 尽可能多地学习和利用Redis堆栈的多模型功能
  2. 利用Redis堆栈消费,过程,筛选并生成大数据的见解
  3. 组合1和2,为桌面和移动设备创建快速而引人注目的用户体验

要应对挑战,meatballs.live是三个连接的开源项目:

  • app / ui
    • API和使用Typescript和Next.js制造的活泼的Web应用程序,仅消耗基于缓存和套接字的实时数据(此项目)
  • 作业服务器
    • 节点服务器称为 notballs.live-jobs(casper)负责对 app 的Ingest Service APIS进行预定的加权调用
  • 流服务器
    • 名为肉丸的节点服务器。Live-stream(Kodama)负责通过Web插座处理Redis Pub/Sub Events

建筑学

meatballs.live architecture diagram

Jobs Server (Casper)将 App services APIs to ingest,过程和路由源数据从Hacker News(Official | Algolia)称为主云REDIS数据库。

摄入数据保存到JSONgraphtime series和Cache(请参见以下各节中的详细信息)。

App 的前端UI通过Web插座(Socket.io)连接到流服务器(Kodama)。 流服务器 subscribes to Redis channels用于存在,新的评论和前页面统计信息,并发出已连接的事件 app 客户端。 流服务器也会在客户端连接和断开连接时发布到存在频道。

在新的故事活动中, jobs服务器 publishes更新前页统计频道,该频道是从 stream server 发送到连接应用程序的事件客户。在 App 用户的新评论中, App 前端致电受保护的koude0 API发布到新评论频道。

App 必须签名用户发送新的评论。为了进行身份验证, app 使用了NextAuthGitHubUpstash的组合。是的,即使在后端上的Auth也可以持续到Redis数据库!

至少24小时的摄入数据后, app 的服务可以调用API for generating collectionsgenerate processor结合了时间序列,图形和JSON查询和搜索来创建一天的JSON->字符串缓存(9个故事)和每个单独的故事集。

这是一个现场示例:

访问集合或收集页面时, app 利用koude1检索和解析相应的缓存数据,然后将其发送给用户。

Redis CloudVercel主持,故事收藏和收集页渲染介于1-5毫秒之间!


有关完整的详细信息(数据模型,命令示例,本地安装指南),我建议您查看冗长的项目README

这是图模型的偷偷摸摸的峰!

meatballs.live graph model


提交类别

古怪的通配符

使用的语言

ts/node.js

链接到代码

meatballs.live是3个开源(MIT)项目。 README包括一个本地安装指南,以配置和连接这些项目。

肉丸。live app/ui

GitHub logo ritsuke / meatballs.live

用Redis Stack + Hacker News将您的社交新闻经历重新混合

meatballs.live

meatballs is an automated recommendation network and web app for discovering interesting conversations across social news.

Live deployment: https://www.meatballs.live

当前网络支持Hacker News,并计划了更多集成。

通过摄入,连接和分析大量结构化,时间数据,肉丸(及相关服务)能够加权和每天产生高层故事的收集,并对评论部分有偏见。

Screenshot of meatballs Frontpage and Comment Stream

Screenshot of meatballs Collections Grid

Screenshot of meatballs Collection Modal

Screenshot of meatballs Collection Modal on iPad

概述视频

这是一个简短的视频,解释了该项目及其使用方式:

meatballs Video Introduction

它如何工作

DEV.to x Redis Hackathon创建了肉丸,具有三个主要的设计目标:

  1. 尽可能多地学习和利用Redis堆栈的多模型功能
  2. 利用Redis堆栈消费,过程,筛选并生成大数据的见解
  3. 组合1和2,为桌面和移动设备创建快速而引人注目的用户体验

要应对挑战,肉丸是三个开源项目:

  • * -

肉丸。Live Jobs Server(Casper)

meatballs.live-jobs (JOBS SERVER; casper)

How to run it locally

Prerequisites

假设您已经从meatballs.live (APP) local installation guide到达这里...

本地安装

  1. 克隆这个仓库
  2. 在项目文件夹中运行yarn以安装依赖项
  3. .env.sample复制到.env并填写您的唯一值,遵循以下步骤:

INGEST_API_KEY

  1. Generate API键,然后将并粘贴到您的.env文件中;这可以是任何东西,但应该保持私密

接下来,将剩余的复制并替换为以下(请随时调整):

肉丸。Live流服务器(Kodama)

meatballs.live-stream (STREAM SERVER; kodama)

How to run it locally

Prerequisites

假设您已经从meatballs.live (APP) local installation guide到达这里...

本地安装

  1. 克隆这个仓库
  2. 在项目文件夹中运行yarn以安装依赖项
  3. .env.sample复制到.env并填写您的唯一值,遵循以下步骤:

PORT

  1. 输入您希望流服务器在开发过程中使用的端口

REDIS_DB_URL

  1. 这应该反映肉丸所用的价值。Live(App)开发环境

继续Meatballs.live(APP)安装

运行yarn dev以启动开发服务器,尽管它会很安静,直到应用程序和作业服务器运行为止。

从您的.env文件复制PORT值,然后继续使用APP's local installation guide

部署

尽管肉丸使用Railway自动部署流服务器(KODAMA),但您可以在node.js-capabile的任何主机上运行服务器。




其他资源 /信息

没有开源社区的基本努力,

meatballs.live是不可能的。

依赖项:

托管:

  • 该项目使用2 redis 数据库:
    • 主要和多模型;由Redis Cloud托管(JSON,GRAPH,时间序列,Pub/sub,Cache)
    • auth;由Upstash主持
  • app / ui < / strong>由Vercel托管
  • 作业服务器流服务器服务器由Railway托管


Part 1一样,我想分享一些我一直在听灵感的音乐。

Ex:Re - "Ex:Re"

Magdalena Bay - "Mercurial World"

Memory Tapes - "Grace/Confusion"

Beach House - "Once Twice Melody"

感谢您的阅读!