我用一个 Postgres 实现一整套后端架构!
作为一名开发者,你是不是也陷入过这样的循环?
功能还没上线,已经设计了微服务、消息队列和 NoSQL;
用户还不到百人,架构却能抗百万并发;
想省事,结果变得事更多、系统更脆。
我曾经也是。Redis 缓存、RabbitMQ 队列、Elasticsearch 搜索、MongoDB 存储……
你真的需要它们全部吗?我决定反其道而行之:只用 Postgres 一个数据库完成所有功能。
-01-
Postgres 能做的,远超你的想象
许多人还以为 Postgres 只是个“传统关系数据库”。但实际上,它:
功能 | 传统技术 | Postgres 功能 |
---|---|---|
队列 | Redis + RabbitMQ | LISTEN/NOTIFY + SKIP LOCKED |
缓存 | Redis | JSONB + GIN Index |
搜索 | Elasticsearch | 内置全文搜索 + ts_rank |
实时 | WebSocket 服务 | pg_notify + Trigger |
KV 存储 | MongoDB/Redis | JSONB + SQL 查询 |
Instagram 、Discord 、Notion 、Airbnb,都是 Postgres 的激情用户。
-02-
Postgres 中是怎么实现这些功能的?
1. 作业队列:一个事务,搞定所有后台任务
BEGIN;
UPDATE job_queue
SET status = 'processing', processed_at = NOW()
WHERE id = (
SELECT id FROM job_queue
WHERE status = 'pending'
ORDER BY created_at
FOR UPDATE SKIP LOCKED
LIMIT 1
)
RETURNING *;
COMMIT;
不需要 Kafka、不需要 Redis,一条 SQL 保证 Exactly-Once 语义。
2. 缓存 & KV 存储:Postgres 内建 JSONB
SELECT * FROM kv_store
WHERE value @> '{"user_id": 12345}';
这个 @>
操作符快得离谱。别再烧钱买 Redis了。
3. 全文搜索:无需 Elasticsearch 的轻量方案
SELECT title, ts_rank(search_vector, query) AS rank
FROM posts, to_tsquery('startup & postgres') query
WHERE search_vector @@ query
ORDER BY rank DESC;
模糊匹配、词根提取、权重排序。中小体量系统,用 Postgres 就够。
4. 实时通知:LISTEN/NOTIFY 完爆 pub/sub
PERFORM pg_notify('table_changes', json_build_object(
'table', TG_TABLE_NAME,
'action', TG_OP,
'data', row_to_json(NEW)
)::text);
用它实现了 WebSocket 推送,无需引入额外的服务。
-03-
技术的成本
引入太多服务,表面上看灵活,其实成本极高:
部署复杂:每个服务一套配置、一套监控
测试混乱:数据一致性难以维护
故障难排查:凌晨 3 点排 Redis 内存爆炸
Redis: $20/月、RabbitMQ: $25/月、Elasticsearch: $50/月
监控、备份、安全、调试:最低 $30/月
而 Postgres,一套系统 All in One,既省钱又省心:
实时通知
全文搜索
任务处理
设置存储
用户状态缓存
它让我交付更快,运维更简单,性能还稳如老狗。
-04-
总结
下一次写后端,先问自己三个问题
我能不能只用 Postgres 搞定?
我是为了问题本身设计系统,还是为了“万一”的问题?
我的用户真的在乎架构吗,还是只关心产品好不好用?
技术不是越复杂越好,而是越合适越好。
如果你还没用 Postgres 试过构建一个完整产品,那你可能从未真正认识它。
让系统更简单,让交付更迅速,让你专注做真正重要的事
别再为“技术栈”而技术栈。从 Postgres 开始,专注于用户,架构自然水到渠成。
下一次有人说:“我们是不是该上 Redis/Mongo/ES?”
你只需反问一句:“你确定 Postgres 做不到?”
然后静静地看对方沉默 🤫
Postgres 真的扩展不加好嗎?你没真正用过
Instagram 在一个实例上有 1400 万用户
Discord 每日数亿消息
GitLab 全部基于 Postgres
它能做分区,能做副本,能做高并发连接池,而太多初创老哥还正在把自己的服务分片漂亮地固定在处理器头顶。
我用一个 Postgres,做完了一个全栈项目。说:你也能。
-05-
粉丝福利
点点关注,送你 Spring Cloud 微服务实战,如果你正在做项目,又或者刚准备做。可以仔细阅读一下,或许对你有所帮助!