“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
一人互联网公司背后的无聊技术栈
一人公司也能靠无聊成熟技术构建完整互联网产品,重点在业务而非炫技。
文章背景与核心观点
这篇文章是 Listen Notes(一个播客搜索引擎与数据库)创始人 Wenbin Fang 在 2018 年写下的技术栈分享,后来在 Hacker News 和 Reddit 上引起了大量讨论(2010 分 / 451 评论)。文章的核心观点是:对于一个人运营的互联网公司,你不需要追逐 AI、深度学习、区块链或 Kubernetes 等热门技术,用自己熟悉且经过验证的"无聊"技术,就足以支撑一个完整的商业产品。
作者在 2019 年和 2025 年都发布了更新版本,但本文的基础版本仍然具有很高的参考价值,因为它展示了一种极简、务实的技术选型哲学——不是技术越新越好,而是"够用、可靠、自己熟悉"才是关键。
产品概览
Listen Notes 提供两类核心服务:
- 面向听众的网站(ListenNotes.com):提供播客搜索引擎、播客数据库、稍后收听(Listen Later)播放列表、播客片段剪辑(Listen Clips,可剪切任何播客剧集的片段)、以及关键词提醒(Listen Alerts,当新播客中提到指定关键词时通知用户)。
- 面向开发者的 API:提供播客搜索与目录 API,需要追踪 API 用量、向付费用户收费、提供客户支持等。
基础设施架构
全部运行在 AWS 上。截至 2019 年 5 月,共有 20 台生产服务器。从主机名可以轻松看出每台服务器的职责:
- production-web:承载 ListenNotes.com 的 Web 流量
- production-api:承载 API 流量(运行两个版本:v1api 旧版本和 v2api 新版本)
- production-db:运行 PostgreSQL(主从复制)
- production-es:运行 Elasticsearch 集群
- production-worker:运行离线处理任务,保持播客数据库持续更新,并提供一些"魔法"功能(如搜索结果排序、播客/剧集推荐等)
- production-lb:负载均衡器(作者顺便在这台服务器上跑了 Redis 和 RabbitMQ——虽然他知道这不是理想做法,但一个人运营的产品没必要追求完美)
- production-pangu:类生产环境的服务器,用于运行一次性脚本和测试变更
绝大多数服务器都可以水平扩展,所以命名为 production-something1、production-something2…… 需要时可轻松添加 production-something3 和 production-something4。
后端技术栈
- 编程语言与框架:Python3 + Django
- 操作系统:Ubuntu
- Web 服务器:uWSGI 处理 Web 流量,NGINX 放在 uWSGI 进程前面,同时充当负载均衡器
- 主数据库:PostgreSQL(作者有多年开发与运维经验——"经过战火考验的技术是好的,这样我晚上能睡个好觉")
- 缓存与统计:Redis(用于各种用途,如缓存、统计等)
- 搜索引擎:Elasticsearch(用于索引播客与剧集、服务搜索查询)
- 离线处理:Celery,配合 Celery Beat 做任务调度(类似 Cron 但更友好)
- 进程管理:Supervisord 用于每台服务器的进程管理
为什么不用 Docker / Kubernetes / Serverless?
作者明确回答:不用。 原因很简单——"随着经验增长,你会知道什么时候不该过度工程化。"作者在 2014 年曾在上一家公司(一家十亿美元级的中型创业公司)早期做过 Docker 相关的工作,那对那家公司是合适的,但对一个人的小型创业公司来说就是过度设计了。
关于 Celery 的替代方案
作者提到,如果未来 Listen Notes 增长到 Celery 和 Beat 出现扩展问题时,他可能会切换到他在上一家公司开发的两个项目:ndkale 和 ndscheduler。这表明技术选型是可以演进的,但只有在当前方案真正成为瓶颈时才值得更换。
前端技术栈
- 主要框架:React + Redux + Webpack + ES(文章写于 2018 年,当时这是标准配置)
- 静态资源部署:生产环境部署时,JS bundles 会上传到 Amazon S3,通过 CloudFront CDN 分发
- 渲染策略:ListenNotes.com 的大部分页面是半服务端渲染(Django 模板)+ 半客户端渲染(React)。服务端渲染部分提供网页的骨架,客户端渲染部分则是一个交互式 Web 应用。少数页面完全采用服务端渲染,原因是作者"懒得把一切做到完美,以及可能有 SEO 方面的好处"。
这种混合渲染策略很务实:既保留了 SPAs 的交互体验,又在一定程度上弥合了 SEO 问题。完全服务端渲染的页面虽然"不完美",但作为一个务实的取舍是完全合理的。
音频播放器
作者使用了深度定制的 react-media-player 库来构建 ListenNotes.com 上的音频播放器,该播放器在多个场景中复用:
- Listen Notes 官网
- Twitter 嵌入播放器
- 第三方网站上的嵌入播放器
核心启示:为什么"无聊"技术是合理的
1. 技术只是手段,业务才是目的
作者在更新中澄清:"'无聊'并不意味着'简单'或者'使用非常陈旧的企业级技术栈'。这里的'无聊'意味着我只使用我熟悉的技术栈,以便快速启动项目,并把更多精力放在业务端。"
2. 工程时间分配的现实
作者在 2019 年的更新中透露了时间分配:
- 如今(2019 年)只有 10%~20% 的时间花在工程上
- 其中 80% 的工程时间用于迭代现有功能/基础设施/内部工具,只有 20% 用于实验新东西
- 大部分时间花在与人交流、回复邮件(占 30%~40% 的时间)以及思考上
3. 一个人也能做出有意义的产品
作者特意引用了 Instagram 的案例:当 Instagram 获得 5750 万美元融资并以 10 亿美元被 Facebook 收购时,公司只有 13 名员工——而且并非所有人都是工程师。那是 2012 年初的事;到了 2019 年,一个人或极小工程团队构建有意义的产品比以往任何时候都更有可能。
4. 基础设施成本的经济性
文章提到初始阶段(2017 年 1 月)Listen Notes 只运行在 3 台 DigitalOcean 云服务器上(约 30 美元/月)。这种极低的启动成本使得个人创业者不需要外部融资就可以支撑产品开发。
评论区的讨论与文化意义
这篇 HN 热门文章之所以引发热议,是因为它触及了技术社区中长期存在的分歧:
- 技术激进派:认为应该拥抱最新的技术趋势(AI、Kubernetes、微服务、Serverless 等)
- 技术务实派:认为"够用就好",选择成熟可靠的技术,把宝贵的精力放在产品与用户上
文章回应了那些"因此感到被冒犯"的人:"这篇博客文章是为了展示一种特定类型的在线业务的一种工程方式,它不是唯一的方式,当然也不是最好的方式。我希望它能给技术世界提供一个有用的数据点。"
作者还分享了自己的哲学——***"你的过度思考,就是我的机会"(Your overthinking is my opportunity)**。这种观念在一个人创业的背景下格外有力量:当大型团队在技术选型会议上争论不休时,个人开发者已经用基本工具把产品推出去了。
适合什么场景?
这篇文章展示的技术选型最适合以下情况:
- 一个人或极少数人的技术团队
- 由单一创始人驱动的互联网产品
- 快速验证商业模式,而非构建长期可扩展的平台架构
- 产品或服务本身的复杂性远大于技术复杂性
如果你处于以下情况,那么"无聊技术"可能就不适用:大型团队协作、需要处理极高的并发流量、产品核心就是技术本身等。
最终引用
"没有 AI、没有深度学习、没有区块链。'任何必须说我在使用 AI 的人,都不是真正的 AI 使用者' :)"
结语
"无聊技术"的精髓是降低认知负担——你不需要在深夜焦虑 Elasticsearch 集群崩溃时还要去翻 Kubernetes 文档。一个人运营产品已经是巨大的工作量,技术栈应当是"让你睡个好觉"的工具,而不是另一份需要操心的"孩子"。
这种思路不仅适用于编程开发,也适用于所有需要亲力亲为的创业项目:选择一个可以让你专注于业务而非基础设施的技术平台,能在不确定的市场中走得更远。
作者后续更新链接(如 2025 年技术栈的演变)也说明了一点:技术选型不是一劳永逸的决定,而是随业务发展阶段持续演进的过程——即使是最"无聊"的技术栈,也会在业务需求驱动下自然生长出必要的复杂性。
原文链接:https://broadcast.listennotes.com/the-boring-technology-behind-listen-notes-56697c2e347b