惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
Netflix TechBlog - Medium
Engineering at Meta
Engineering at Meta
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
F
Fortinet All Blogs
P
Privacy & Cybersecurity Law Blog
The Hacker News
The Hacker News
博客园 - 司徒正美
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
I
Intezer
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Scott Helme
Scott Helme
T
Threat Research - Cisco Blogs
T
Tailwind CSS Blog
月光博客
月光博客
Recent Announcements
Recent Announcements
博客园 - 叶小钗
J
Java Code Geeks
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
N
News and Events Feed by Topic
A
Arctic Wolf
B
Blog RSS Feed
Recorded Future
Recorded Future
D
DataBreaches.Net
有赞技术团队
有赞技术团队
Project Zero
Project Zero
U
Unit 42
T
Tor Project blog
The GitHub Blog
The GitHub Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
CERT Recently Published Vulnerability Notes
博客园 - Franky
博客园 - 【当耐特】
Microsoft Security Blog
Microsoft Security Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Security Latest
Security Latest
C
Cisco Blogs
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Blog — PlanetScale
Blog — PlanetScale
H
Heimdal Security Blog
Vercel News
Vercel News
Stack Overflow Blog
Stack Overflow Blog
S
Securelist

Surmon.me

一人有限集团 你就是不敢 创造力是温柔的谎言 人类正在退出人类 AI 代替不了这样的你 脉冲点火背后的架构设计 基于 Cloudflare 生态的 AI Agent 实现 NodePress 支持用户登录了 从统计学习到通用智能 2025 投资报告:走慢的路 无依之地 会杀人的菩萨 无我不是共识 文化的积重与偏见 当下即安 科学的尽头是态度 无我不是 Egoless 信仰不因恐惧而存在 世间无解的矛与盾 先别急着做些什么 佛不需要你的皈依 真理的幻觉 两扇大门 造心里的浮屠 自胜者强 逻辑与智慧 真的相 快乐的秘密 只需愿意 是名体验 最深沉的梦 森林里倒下的树 现象与相 庸人自扰 React 与 Vue 的完美融合 开心就好吗 与原生家庭和解 两支毒箭 怎么自净其意 一尘不染 一片白云 让风穿膛而过 喝下去,然后闭嘴 活在当下 当纠结发生时 唯「我」独尊 一场把戏(时间) 一场把戏(二元对立) “我” 和 “我” 谁是众生? 船里没有人 玫瑰不需要说话 没有人能渡任何人 你我为轮,使之不再 当我们在谈论独立时 自我约束就是最好的自我接纳 从善与恶的表象出发 佛法不是心理学 别人眼中的你并不是你 高高山上走 祝你心想事成 祝你的噩梦早日发生 道是无情却有情 裙子只为自己而穿 不要盲目地评估自己 先别急着 “爱自己” 让生命欣然舞动 你无法复制乔布斯 符号不是目的 如果一件事发生了 每当我起心动念时 爱出者爱返 理解不是尊重的基础 在没有解决自己的问题之前 “知足常乐” 不是比较 逻辑是无法成为信仰的 买不到的自由 成为诵经者 伤口听不懂大道理 是立场让你不自由 - Unfreedom 天雨大不润无根之草 做自己的神 当心诱惑本身 牛洞冥思录 修罗启示录 让大脑自举 我更喜欢叫它无梦寺 存在主义也许不是解药 出南洋记 2022 的所有答复 没意义的表达 思考的记录 故宫暂行之幻想 极端的比较 解构的终极 舍利子是如何炼成的 心要野 佛教的偏见 文艺青年 我是动物
小物件儿们
Surmon · 2022-02-21 · via Surmon.me

小物件儿们

最近一个月的几个小物件。

1. mongodb-data-api

这个项目是大概在新年初二左右发布的,主页在 mongodb-data-api

正如之前提到的 README.md 项目,项目初期,我在基于 MongoDB Cloud Atlas 的免费云数据库实现了 counter 访问计数能力 之后,很快遇到了瓶颈:

  • Vercel Serverless 的冷启动大概需要 2~4s 左右的时间
  • Vercel 的免费机器只限于美东区域,且并未暴露状态持久连接的能力,连接位于 HK 的 MongoDB 大概又需要 2s
  • counter 业务需进行两次必要的 GitHub GraphQL API 写操作
  • Vercel Serverless 的免费机器只有 10s 的超时时间

综上原因,导致一个 counter 请求挂掉的概率超过了 50%,更别说高 QPS 可用性了。

并没找到好办法,研究了 MongoDB Cloud 的访问策略控制能力之后,我决定将集群从 HK 迁到美东。 在迁移的过程我发现 MongoDB Atlas 已经推出了 Data API 的 Beta 版,是 2021 年 11 月才对外开放的。 简单研究了下,发现这玩意简直就是完全为 Serverless 打造的;将数据资源 HTTPS 化,所有的数据操作完全变成了 HTTP 请求,虽然还有点小缺陷,无法支持细粒度的权限控制,一个 API KEY 可以访问整个集群所有库的所有数据,不过没关系,后面肯定会迭代和升级。 如此便很完美了,去 GitHub 看了看,相关信息寥寥无几,直接调用的话,TS 类型方面非常不友好,于是我决定,那就自己动手再造一个轮子吧。

所以调研成果大概是:

  1. Vercel 官方并没有给出什么好的解决方案,与 MongoDB 官方提供的 Serverless 解决方案 一致,都很拉胯
  2. Vercel 官方正在与 MongoDB Cloud 合作开发基于 Serverless 的插件,但目前未开放,并不可用
  3. Mongodb Cloud Atlas 官方提供了 基于 HTTPS 的 Data API
  4. Mongodb Cloud Atlas 的免费集群同样有美东区域可用

于是我做了这几件事:

  1. 迁移原 HK 的 Mongodb 免费集群至美东区域(离 Vercel Serverless 最近的机房)希望能尽可能 “快” 一些(事实证明确实快了很多,大概只需要 800ms 之内就能完成连接响应)
  2. 我基于 MongoDB Atlas Data API 包装了一个 Node.js 版本的 SDK mongodb-data-api 并发布在 NPM,并 应用在 README.md 项目中

最终,效果很不错! counter 接口有求必应!

如果你有在 Serverless 访问 MongoDB 的需求,可一定要来试试!

其实 MongoDB Atlas 的 HTTP Data API 可以看做专为 Serverless 设计的一种数据消费能力,我想 Vercel 官方正在开发的插件应该也是差不了太多的。

2. NodePress

重构,重构,还是重构。

之前的 queryparams.decorator 的设计实在是太拉胯了,职责不明,不同作用域的上下文逻辑互相耦合,于是用基于 class-validatorclass-transformer 将原有的 Schema Validate、Permission Validate、Guest default value,能力分别抽象为了 Pipe 流的实现。

以及 NodePress 做了非常多的细节的优化和改动,当然这些都一一更新至 设计文档 了。

3. Surmon.me

1. 流媒体

调研了一些资料,期待将播放器从网易云迁到 Spotify,但是 Spotify 好牛逼啊,各种黑科技限制你 “无登录用户 Token 在哪听啥都是 30 秒”,算了,放弃了,也就是 BGM 听个响,如果你对歌单有兴趣可以关注 这里这里

但是播放器的 UI 和交互我还是重新设计了的!

播放器开关
播放器开关
播放器面板
播放器面板

2. 聚合日历

之前的 GitHub contributions calendar 怎么看都不顺眼,很难调教。

于是:

  1. 我用基于 aggregate 的能力实现了查询 NodePress 文章日历的 API,可以以日期的形式统计每个当日的内容发布量。
        
        

1234567891011

public getCalendar(publicOnly: boolean, timezone = 'GMT') { return this.articleModel .aggregate<{ _id: string; count: number }>([ { $match: publicOnly ? ARTICLE_LIST_QUERY_GUEST_FILTER : {} }, { $project: { day: { $dateToString: { date: '$create_at', format: '%Y-%m-%d', timezone } } } }, { $group: { _id: '$day', count: { $sum: 1 } } }, { $sort: { _id: 1 } }, ]) .then((calendar) => calendar.map(({ _id, ...r }) => ({ ...r, date: _id }))) .catch(() => Promise.reject(`Invalid timezone identifier: '${timezone}'`)) }

  1. 在 Surmon.me 的 BFF 层分别借助 Twitter、Instagram 的 OpenAPI,和 GitHub 的 contributions API 分别实现了:推文、Instagram 发帖、GitHub 编码提交量的日历查询。

于是最终,是这样一个聚合日历,你可以在 PC 端访问 About 页面查看。


就这么多,接下来我要做别的事了。

完。