🫰Clickvote:开源任何语境下的点赞、点赞和评论🔥
TL;DR
TL;DR
我开发了一个开源应用,可以在任何地方添加点赞、点赞和评论。
虽然听起来很简单,但我在它的架构上却绞尽了脑汁。
我们来聊聊吧。
你到底在建什么?🤯
在过去的十年中,我有机会在多个地方开发“评论”、“赞同”和“喜欢”,并且我也在许多领域看到它们,例如:
- Upwork
- 美食应用
- 项目管理工具
- 客户反馈工具
- 路线图工具
并且这个名单还在继续。
到目前为止,我已经意识到在内部构建它非常简单 - 直到它变得不再简单。
您需要注意以下事项:
- 显示客户之间的点赞、赞成和评论的实时更新
- 通过深度分析了解您的会员
- 每秒处理无限量的点击(取决于您的规模)
- 实际上管理这个
梦想😴
嗯,这并不牵强......
如果您可以放置一个超级简单的组件,它可以在 5 分钟内立即(就像字面意思一样)为您添加此功能,那会怎样?
以下是代码片段:
您可以用 包装您的应用程序ClickVoteProvider
,并提供当前用户的 ID。
然后,ClickVoteComponent
使用您想要投票的事物的动态 ID 在您的应用程序周围分发不同的事物。
一旦您与投票(LikeStyle
)进行互动,它将使用新值更新所有其他关注同一组件的用户。
因此我们可以在 Novu 中使用简单的仪表板
然后在一分钟内将其更改为如下内容:
好了,现在我们都明白了要构建什么了。
让我们看看它到底是什么样子的。
图表!(我添加了颜色)
对于简单来说它看起来有点复杂🤔
但让我尝试解释一下。
分析委员会:
与其他所有系统一样,您也拥有仪表板。
它由 NextJS(用于前端)和 NestJS(用于后端)组成,并包含 MongoDB。
-
添加您想要监控的新投票类型。
-
观察谁点击了/点击了多少/哪天点击了/哪个区域最好等等的分析。
-
为客户提供一种方式来附加他们想要在发生交互时获知的数据源(他们可能想要改变他们的系统)。
用户应用程序:
这就是事情变得棘手的地方。
-
我们创建了一个 WebSocket 服务器,所有客户端都可以连接它,以便即时接收新的点赞和点赞更新。(我检查了服务器发送事件 - SSE,但浏览器的硬性限制是 6 个,所以决定不检查。)
-
WebSocket 服务器需要在处理大量点击时质疑和更新投票数;为此,我们使用 Redis,它为我们提供了
WATCH
和等选项MULTI
来添加交易并防止竞争条件,在这种情况下计数器的数字与您预期的数字不同。 -
接下来是 Apache Kafka - 如果你计划每秒获得数千个赞,你不能直接将其插入数据库(它会崩溃)。此外,你还需要一些东西来确保信息进入数据库并且不会发生故障。我选择 Kafka 是因为它很受欢迎,但你也可以轻松选择其他服务,例如 Apache Pulsar。所以我们将所有数据都发送到 Kafka。
-
NestJS 微服务组消费者将监听 Kafka 主题,提取信息并将其添加到数据库。
-
我选择使用 Timescale 作为时间序列数据库。我可以使用 Clickhouse 或 Redshift 之类的工具。我喜欢 Timescale 是因为它是基于 Postgres 的,并且附带一些“插件”。这意味着开源社区可以直接使用 Postgres 来代替时间序列数据库。(适用于规模较小的情况)
-
另一个 NestJS 微服务组消费者将根据用户的偏好(API、直接 DB 插入、另一个 Kafka)将信息发送给用户应用程序,无论他们选择什么。
托管这个堆栈要花多少钱?🤣
如果便宜的话:
- Vercel 前端 (NextJS) $20
- 时间表 31 美元
- Upstash 无服务器 Kafka / Redis 约 70 美元
- Digital Ocean Websockets 服务器 25 美元
- 数字海洋后端 25 美元
- Digital Ocean 1 名员工(消费者)25 美元
- MongoDB Atlas 20 美元
我相信不会少于 216 美元。
它显然可以与 docker-compose 一起位于一台服务器上,但不会持续很长时间。
稍后我相信后端/工作者/websockets 应该被 Dockerized、Kuberneterized 并位于 AWS 上的某个地方。
会到达那里🤞
肯定缺少的东西
- 未经身份验证的用户查看结果的选项。
- 通过指纹进行匿名投票。
- 样式按钮的更多变体(我还没有想到)
- 同步来自不同应用程序的投票(双向)
- 动力——能帮帮我吗?😅
它的采用方面是什么
到目前为止,它看起来主要适合以下 B2B2C 公司:
- 社交媒体
- 求职网站
- 文档?(如果有匿名功能,很可能与Fingerprint.com之类的网站合作)
- 评论网站(Glassdoors?)
- 地图网站
让 B2B 企业采用这种方法需要对市场进行一些教育。(有些企业已经这样做了)
给我看代码👀
嗯,目前还没有文档。
这项工作仍在进行中。
你可以在那里找到:
- Nx Monorepo 架构。
- NestJS 后端。
- NestJS Kafka 微服务。
- NestJS Websockets。
- NextJS - 我知道,看起来很糟糕🤣
但请用星星⭐️表示您的支持,
这将帮助我知道是否有需要。
https://github.com/clickvote/clickvote
抱歉设计得不太好看😛
(Logo 由 MidJourney 制作)
在 Twitter 上关注我!一起聊聊吧🙇🏻♂️
您认为这样的产品还有市场空间吗?
文章来源:https://dev.to/github20k/clickvote-open-source-upvotes-likes-and-reviews-to-any-context-3ef9