砍掉Redis、Kafka和ES!全线重投PostgreSQL,1台服务器省下1.6万

在搞技术架构时,很多团队都陷入了一个怪圈:不管业务规模有多大,先得把主流的“大厂标配”堆上去。分布式缓存用Redis,消息队列挂Kafka,全文检索上Elasticsearch,核心数据存PostgreSQL。

然而,这种所谓的“标准架构”很快就让一个中型B2B SaaS团队尝到了苦头。他们一个月内触发了34次系统警报,服务器费用飙升,三名核心工程师每天唯一的任务就是照看这堆脆弱、复杂的分布式工具,根本没有精力去开发客户真正需要的新功能。

直到团队痛定思痛,做出了一个极其大胆的决定:将Redis、Kafka和Elasticsearch全部砍掉,把所有的业务全线退回到原有的主数据库。承载这一切的核心,正是被严重低估的开源关系型数据库神作——PostgreSQL。作为一个完全免费且开源的数据库项目,PostgreSQL在GitHub上拥有极高的热度和庞大的开发者社区,各大核心组件累计获得数万Star。它凭借极其严谨的事务支持和丰富的扩展生态,正在成为追求极简、高效架构团队的终极解法。


核心拆解:用PostgreSQL平替三大中间件的具体方案

为了彻底实现架构瘦身,团队花费两周时间审计了各项业务,并利用PostgreSQL的底层特性,实现了完美的平替。

1. 替代Redis(缓存与发布/订阅)

团队80%的Redis用途是查询缓存,这部分通过内存中的带有TTL的Go语言sync.Map配合数据库物化视图解决。而对于实时通知的发布/订阅(Pub/Sub)需求,则直接使用了数据库自带的LISTEN与NOTIFY机制。

在数据库端,通过触发器自动将新通知推送到指定通道:

SQL





CREATE OR REPLACE FUNCTION notify_user() RETURNS trigger AS $
BEGIN
    PERFORM pg_notify('user_' || NEW.user_id::text, row_to_json(NEW)::text);
    RETURN NEW;
END;
$ LANGUAGE plpgsql;

CREATE TRIGGER on_notification_insert
AFTER INSERT ON notifications
FOR EACH ROW
EXECUTE FUNCTION notify_user();

在应用端,通过异步监听器直接消费通道数据,成功摆脱了对Redis集群的依赖:

Go





conn, _ := pgx.Connect(ctx, dsn)
conn.Exec(ctx, "LISTEN user_" + userID)
for {
    n, err := conn.WaitForNotification(ctx)
    if err != nil {
        break
    }
    handleEvent(n.Payload)
}

2. 替代Kafka(异步任务队列)

在业务量并未达到百亿级时,Kafka的运维成本远超其收益。团队利用系统的SKIP LOCKED特性,构建了一个极其轻量的高并发任务队列。

首先创建一张标准的任务表,并在关键字段上建立部分索引:

SQL





CREATE TABLE job_queue (
    id          BIGSERIAL PRIMARY KEY,
    queue       TEXT NOT NULL,
    payload     JSONB NOT NULL,
    status      TEXT NOT NULL DEFAULT 'pending',
    created_at  TIMESTAMPTZ DEFAULT now(),
    run_at      TIMESTAMPTZ DEFAULT now(),
    locked_at   TIMESTAMPTZ,
    locked_by   TEXT
);

CREATE INDEX ON job_queue (queue, status, run_at) WHERE status = 'pending';

多个Worker节点在并发消费时,通过原子更新操作锁定任务,SKIP LOCKED能够让不同的进程自动跳过已被锁定的行,绝不产生阻塞:

SQL





UPDATE job_queue
SET status = 'running', locked_at = now(), locked_by = $1
WHERE id = (
    SELECT id FROM job_queue
    WHERE queue = $2 AND status = 'pending' AND run_at <= now()
    ORDER BY run_at
    FOR UPDATE SKIP LOCKED
    LIMIT 1
)
RETURNING *;

3. 替代Elasticsearch(全文检索与过滤)

针对40万行商品数据的模糊匹配和分类筛选,团队放弃了繁重的ES索引,转而采用原生的tsvector和三元组(Trigram)索引扩展pg_trgm。

SQL





-- 创建生成列自动维护检索向量
ALTER TABLE products ADD COLUMN search_vector tsvector
GENERATED ALWAYS AS (
    to_tsvector('english', coalesce(name, '') || ' ' || coalesce(description, ''))
) STORED;

-- 建立GIN索引大幅提升检索速度
CREATE INDEX ON products USING GIN(search_vector);
CREATE INDEX ON products USING GIN(name gin_trgm_ops);

-- 执行全文检索与相关性排序
SELECT id, name, ts_rank(search_vector, query) AS rank
FROM products, to_tsquery('english', $1) query
WHERE search_vector @@ query AND category = $2
ORDER BY rank DESC
LIMIT 20;

辩证分析:简化带来的红利与性能的微调

从技术角度看,这次大刀阔斧的“反向升级”无疑是成功的。在实际测试中,这套极简架构在单台数据库实例上轻松跑出了每分钟处理1200个任务的成绩,远超其业务峰值。这种将所有状态收拢到单一数据库的做法,彻底消除了分布式系统之间由于网络延迟、索引滞后导致的“数据不一致”暗病。

然而,天下没有免费的午餐。在承认极简架构带来高内聚优势的同时,必须理性地看到性能指标上的妥协。架构调整后,系统的p99检索延迟从22毫秒上升到了41毫秒,实时通知延迟也从1毫秒转变为6毫秒。尽管对于常规的B2B业务而言,几毫秒的差距在前端毫无感知,但这也表明,PostgreSQL在应对极端超高并发或需要极其复杂的自定义权重排序时,依然无法完全替代专用引擎。

不可否认,这种技术回撤为团队换来了难以估量的喘息机会。运维复杂度的大幅降低,让开发团队能够集中精力解决真正的业务痛点。这不禁引发每一位技术管理者的深思:在盲目追求所谓的“大厂高并发架构”之前,我们是否应该先审视一下自己真正的业务量,而不是用过度设计的架构去感动自己?


现实意义:解决中小团队的核心技术痛点

对于大多数中小型科技企业而言,生存的核心在于快速迭代业务,而不是维持一套臃肿的分布式基础设施。这套精简架构直接解决了一线工程师和技术负责人的三大核心痛点。

1. 击中痛点:大幅降低基础设施的运营开销

多维护一个分布式组件,就意味着要多支付一份服务器计算资源、存储空间和网络带宽的账单。团队完成架构简化后,月度基础设施费用直接从原先的近3万元人民币锐减至大约1.2万元人民币。

2. 挠中痒点:技术人员从无休止的“救火”中解脱

频繁的中间件版本升级、节点内存溢出、配置同步失效,常常让工程师疲于奔命。在将数据源统一收拢后,团队每月的寻呼机警报从34次断崖式下跌到仅有7次,工程师每周耗费在底层运维上的时间从18小时缩减到4小时。

3. 引爆爽点:研发效能爆发,搁置半年的功能快速交付

没有了分布式链路的牵绊,新员工的本地开发环境配置变成了一条简单的数据库连接命令。省下来的14个小时被直接投入到核心业务中,此前由于架构维护被搁置了整整八个月的重要功能,在迁移完成后仅用六周就成功交付上线。


互动话题:你的系统是否也在“过度架构”?

这次技术尝试并不是要彻底否定Redis、Kafka和Elasticsearch的行业价值。当面对百亿级数据流、亚毫秒级延迟以及超复杂的聚合分析时,这些专用中间件依然无可替代。但它的价值在于打破了“唯大厂工具论”的迷信,用铁一般的数据证明了:在业务规模没达到特定量级之前,盲目上马复杂的分布式系统,往往是灾难的开始。

各位技术同仁,你们的团队在日常开发中,是否也为了所谓的“简历好看”或者跟随大厂潮流,引入过许多其实用不到的中间件?在你们的实际业务中,单台关系型数据库的性能极限又曾帮你们扛过多少流量?欢迎在评论区分享你们的架构瘦身经历,或者聊聊你对这种“ALL in PostgreSQL”模式的看法!

展开阅读全文

更新时间:2026-06-06

标签:科技   全线   服务器   架构   团队   业务   分布式   数据库   核心   技术   索引   系统   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight All Rights Reserved.
Powered By 71396.com 闽ICP备11008920号
闽公网安备35020302034903号

Top