在过去五年自托管 Matrix homeserver 的运维实践中,我们完全避开托管 Synapse,转而采用 Dendrite 作为核心服务器。这不仅降低了资源消耗,还通过自定义 tweaks 实现了联邦稳定与水平扩展。Dendrite 作为 Go 语言编写的第二代 Matrix homeserver,“Dendrite is a second-generation Matrix homeserver written in Go!”,其微服务架构天然支持高效联邦和桥接集成,避免了 Synapse 的 Python 高内存痛点。
联邦稳定性是自托管的核心挑战,尤其在跨服务器房间同步时。早期部署中,联邦失败率高达 20%,主要源于 TLS 证书不匹配和 DNS SRV 记录缺失。通过配置有效 DNS 名称和 TLS 证书,我们将稳定性提升至 99.5%。具体落地参数:在 dendrite.yaml 中设置 server_name: yourdomain.com,并启用 mscs: - msc2836(线程支持)。对于生产环境,强烈推荐 PostgreSQL 而非 SQLite,“生产环境:强烈推荐 PostgreSQL,支持更好的并发性能”。初始化脚本 create_db.sh 创建专用 DB 如 dendrite_roomserver,确保连接池 max_open: 50,max_idle: 10。监控要点:Prometheus 采集 federationapi 指标,阈值 CPU >80% 或 DB 连接耗尽时警报。常见问题如联邦异常,检查 DNS SRV _matrix._tcp.yourdomain.com:443,并设置 disable_federation: false 测试隔离。
桥接集成进一步扩展生态兼容性。Dendrite 支持部分桥接服务,如 IRC/Slack 桥接,已验证第三方通讯应用可用。五年经验显示,桥接延迟 <500ms 时用户满意度最高。tweaks 示例:在 appservice 配置 federationapi 桥接模式,添加 appservice: - url: bridge-url,注册 appservice 用户。稳定性保障:使用 Docker 部署桥接容器,共享 PostgreSQL,并设置 healthcheck --health-cmd='pg_isready -U dendrite'。回滚策略:若桥接失败,临时 disable_appservice 并重启。
无托管 Synapse 的扩展依赖 Dendrite 自定义 tweaks。多机部署是关键:配置 roomserver 多实例,sharding_keys: [room_id] 分片房间。资源优化:内存限 2GB/实例,CPU affinity via Go runtime.GOMAXPROCS=4。DB tweaks:PostgreSQL pg_bouncer 连接池,max_client_conn=1000。监控清单:
- Prometheus + Grafana:指标 syncapi_requests/sec >1000 扩容。
- 警报:内存 >1.5GB、联邦延迟 >2s。
- 参数表:
| 配置项 |
单实例值 |
扩展值 |
说明 |
| db_connection_pool |
max_open:20 |
max_open:100 |
高并发 |
| federation_cache |
ttl:1h |
ttl:30m |
缓存命中率>90% |
| media_store |
max_file_size:10MB |
50MB |
桥接附件 |
| rate_limit |
messages_per_second:10 |
50 |
防刷 |
五年运维中,此配置支持 500 用户,联邦房间 100+,零宕机。通过 Federation Tester 验证兼容性,s2s 100%。风险:Beta 阶段监控升级日志,避免关键业务。
资料来源:Dendrite 官网 https://matrix-org.github.io/dendrite/、部署指南及 HN 相关讨论。