后端即时通讯【免费下载链接】dendriteDendrite is a second-generation Matrix homeserver written in Go!项目地址https://gitcode.com/gh_mirrors/de/dendrite点击查看免费下载导读本文以仓库根目录的 CHANGES.md 为主线系统梳理 Dendrite 从 0.1.0 到 0.13.x 的功能演进、架构变迁、关键修复与升级注意事项。你将理解为什么这个用 Go 编写的 Matrix 第二代 homeserver 选择了 NATS JetStream 取代 Kafka、为何最终砍掉 polylith 模式、以及各版本中值得关注的配置项如federation_api.enable_relays、room_server.default_room_version、global.well_known_sliding_sync_proxy与源码实现的对应关系。读完本文你能基于版本差异制定自己的升级与运维策略。一、版本时间线与主线脉络Dendrite 的首个版本化发布是0.1.02020-10-08此后以约每月一个版本的节奏迭代至0.13.72024-04-09进入当前稳定区间仓库 CHANGES.md 完整记录了整个过程。纵观全部分发说明可以提炼出三条持续演进的主线消息总线换代0.6.0 从 Kafka/Naffka 全面切换为 NATS JetStream之后持续升级内置 NATS Server 版本2.7.4 → 2.8.0 → 2.8.2 → 2.9.0 → 2.9.3 → 2.9.4 → 2.9.8 → 2.9.15 → 2.9.19 → 2.9.23。部署模式收敛0.12.0 正式移除 polylith/HTTP API 模式Dendrite 从多组件可拆分收敛为 monolith-only。规范合规与稳定性并重多个版本标注强烈建议升级其中 0.9.3 与 0.9.8 为安全修复版本。二、最新版本0.13.x 的稳定性重点2.1 0.13.72024-04-09应用服务现代化这是 CHANGES.md 中记录的最后一个正式版本重点如下修复被邀请用户资料被覆盖的问题此前被邀请用户的 displayname/头像可能被替换为邀请者的信息现已修复。启动性能优化通过避免不必要的房间 ACL 查询来加快服务启动ACL 正则模式改为只缓存一次而非每个房间缓存一份显著降低内存占用ACL 相关实现在 roomserver/acls/acls.go。中继Relay行为变更移除了不必要的 Relay 相关查询。注意要使用中继功能现在必须显式在配置中开启federation_api.enable_relays。该配置项定义于 setup/config/config_federationapi.go源码注释明确提醒启用中继会引入巨大的启动延迟如果未使用中继却有大量服务器需要恢复请勿开启。修复联邦空间摘要Space Summary。优化外部 NATS JetStream 连接复用避免反复新建连接。功能应用服务Appservice现代化改造由 tulir 贡献新增事件举报event reporting能力并配套 Synapse Admin 兼容的查询端点。2.2 0.13.62024-01-26QoL 改进集中发布官方明确强烈建议升级的版本之一JetStream 消费者改用AckExplicitPolicy防止消息在 NATS 中堆积。修复两个罕见 panic分配 state key NID 时、检查 powerlevels 时。Notary keys 全量请求现在正确工作。规范合规修复查询房间别名返回M_INVALID_PARAM/messages处理空from参数媒体端点增加 CORP 头/publicRooms响应移除aliases允许 MXID 中包含字符。修复knock_restricted房间中从knock到join的成员状态转换。增量同步改为批量查询事件recht 贡献。/joined_members移回 clientAPI/roomserver让桥接程序更稳定。联邦回填限制为最多 100 个事件避免此前可能一次性拉取数千个事件的问题。2.3 0.13.52023-12-12CanonicalJSON 长期缺陷修复修复 gomatrixserverlib 中 CanonicalJSON 实现的多个长期 bugunicode 转义转小写、UTF-16 代理对检测逻辑、负数零与指数数字的验证处理。修复设备列表更新器device list updater的 worker 可用性问题。修复/hierarchyspace 用端点 panicclient-server 与 server-server API 两侧。修复数据库事务处理含潜在连接泄漏。ACL 现在作为 outlier 收到时也会被更新。修复 SyncAPI 与 Appservice 之间的竞态条件——该竞态曾导致桥接程序加入房间后立即离开。功能支持Appservice login允许用户踢出自己部分桥接程序依赖此能力。2.4 0.13.42023-10-25状态解析算法修复设备列表更新器启动时对需要抓取设备列表的服务器去重同时避免关闭时刷屏日志。修复状态解析算法中的 bug该 bug 会因计算错误状态导致用户被重置出房间、缺失状态事件。通过实现 MSC3987 修复 Element Android 设置通知时的 bug。内置 NATS Server 从 v2.9.19 升级到 v2.9.23。2.5 0.13.32023-09-28房间版本 11 与 Sliding Sync认证时正确使用user_id查询参数tulir 贡献。邀请现在能正确推送到设备。修复m.direct账号数据损坏的 bug。Sliding Sync proxy可配置进/.well-known/matrix/client响应——对应配置项为 setup/config/config_global.go 中的well_known_sliding_sync_proxy源码注释要求必须同时配置well_known_client_name。支持房间版本 11客户端请求创建过滤器时可指定federation的event_format。为 MSC4014假名身份做大量底层改进。从源码构建的最低 Go 版本提升到 1.20。2.6 0.13.22023-08-23运维细节打磨SQLite 迁移现在在正确的 context事务或数据库上准备。InputRoomEvent流设置 24 小时最大保留期帮助加快 NATS JetStream 慢启动。事件大小检查更贴近 Synapse 行为。优化/messages请求减少数据库往返。重新加入源码构建时的版本号需要安装 git。获取本地成员通知的路径优化显著减少内存分配与缓存占用。查询用户资料不存在时返回 HTTP 404。修复后台联邦加入超时问题数据库连接正确复用。/purgeRoom管理端点恢复旧行为purge 前不疏散房间。新功能新增dendrite_upPrometheus 指标含 Dendrite 版本号MSC2946Space Summary从 MSC 状态转为原生支持应用服务日志现在包含 appservice ID新增room_server.default_room_version配置项可配置创建房间时使用的默认房间版本。room_server.default_room_version的源码定义在 setup/config/config_roomserver.go其Defaults()将默认值设为gomatrixserverlib.RoomVersionV10Verify()会校验版本是否已知若为不稳定版本则输出警告。Dendrite 支持的房间版本可通过 roomserver/version/version.go 中的RoomVersions()/SupportedRoomVersions()查看实际委托给 gomatrixserverlib。2.7 0.13.12023-07-06off-by-one 状态重置修复该版本修复了一个长期存在的off-by-one 错误去重状态事件时如果某事件已在先前状态快照中代码会将其从待存储列表移除但同时错误地跳过了下一个待检查事件导致事件被错误存入状态快照最终引发意外状态重置与缺失状态事件的报告。官方明确建议升级并说明已发生状态重置的房间会随时间逐步自愈。三、架构分水岭0.12.0 与 0.11.x3.1 0.12.02023-03-13polylith 谢幕userapi 与 keyserver 合并数据库无需任何操作。内置 NATS JetStream 使用 logrus 记录日志dvob 贡献。roomserver 数据库重构为房间/事件分离接口并增加缓存使用以减少数据库往返数据库 schema 不变。pinecone demo 关闭流程更干净Helm chart 支持同时部署 Grafanagenofire 贡献。支持监听 unix socketcyberb 贡献内置 NATS 升级至 v2.9.15。引入runtime/trace初始支持用于追踪长耗时任务。修复SQLite 下session_id正确设置设备 ID 复用时设备密钥被误删的问题与 relations 相关的潜在 DoS 问题sleroq 报告回填时即使部分失败也尽量保留已获取事件。⚠️ DEPRECATIONpolylith/HTTP API 模式被移除。3.2 0.11.12023-02-10monolith-only 的预告⚠️ 弃用警告这是最后一个包含 polylith 与 HTTP API 模式的版本未来版本仅保留 monolith 模式。可基于 Go 1.20 编译初步支持 store-and-forward新增运行中落地页LukasLJL 贡献。/sync在 PostgreSQL 下显著减少数据库往返加快首次同步速度让大账号能重新登录。3.3 0.11.02023-01-20联邦 API 100% 对齐修复最后三个联邦 API Sytest实现 server-server 100% Synapse 对等client-server 对等率约 93%。新增/_dendrite/admin/purgeRoom/{roomID}清理数据库默认房间版本更新为 10FSG-Cat 贡献。四、消息总线革命NATS JetStream 取代 Kafka0.6.02022-01-28是架构层面的重大转折NATS JetStream 取代 Kafka 与 Naffkamonolith 部署内置 NATS Server也可选用独立 NATS Serverpolylith 部署则必须使用独立 NATS Server。要求使用 v2 格式配置文件即新的dendrite-config.yaml示例。Kafka 与 Naffka 从该版本起不再受支持。roomserver 接管了原本由 federation API 负责的缺失事件/状态抓取消除两组件间的竞态、减少重复工作并降低 CPU 占用。roomserver 输入 API 严格有序且支持异步请求平滑化联邦入站流量。federation API、federation sender、签名密钥服务器合并为单一组件多数据库部署需将相应表合并进 federation API 数据库表名不变。设备列表同步改为数据库驱动。JetStream 相关配置定义于 setup/config/config_jetstream.gostorage_path流持久化目录、addressesNATS 地址列表monolith 下为空则使用内置服务器、topic_prefix同一 NATS 部署上运行多个 Dendrite 时隔离流名默认Dendrite、in_memory测试用。五、安全版本必须升级的两个版本版本类型内容0.9.82022-09-12安全发布修复从其他服务器获取的缺失事件未在所有情况下验证签名的问题影响 0.9.8 之前所有版本GHSA-pfw4-xjgm-267c0.9.32022-08-15安全发布修复事件认证event auth中的漏洞影响 0.9.3 之前所有版本GHSA-grvv-h2f9-7v9cgomatrixserverlib0.9.3 的具体修复点是事件认证时正确解析events_default权限值。事件认证实现位于 roomserver/auth/auth.go相关测试见 roomserver/auth/auth_test.go。六、功能演进全景从基础到 E2EE 与 Spaces6.1 早期基础能力0.1.0 – 0.6.x0.1.0 附带的功能清单见 CHANGES.md 末尾反映了起点注册/登录仅支持密码、无 OpenID、无跨签名、无搜索、无推送通知、无 presence。此后各版本逐步补齐0.2.0polylith 改用多身份二进制./dendrite-polylith-multi roomserver数据库迁移在启动时执行完全读标记实现。0.3.0读回执inbound/outbound忘记房间-version命令行参数。0.4.0roomserver 全新状态存储状态块去重最高15x、快照引用最高2x缩减首次升级会自动迁移耗时取决于状态规模appservice 支持大幅改进共享密钥注册正确实现user_api.bcrypt_cost配置项新增dendrite-upgrade-test数据库 schema 升级测试工具源码见 cmd/dendrite-upgrade-tests/main.goSentry 支持。0.5.0服务端密钥备份key backup跨签名实验支持syslog logger 类型。0.6.4客户端 API 全部迁至/v3/context端点账号类型字段可创建管理员账号Server Notices 支持client_api.guests_disabled配置。6.2 同步与通知体系0.8.x – 0.10.x0.8.0presence 支持默认关闭global.presence.enable_inbound/enable_outbound分别控制房间升级端点/room/{roomID}/upgrade忽略用户EDU server 组件移除。0.8.2/sync懒加载lazy-loading/messages过滤room summary heroes最多 5 个用户可作为 Windows 服务运行。0.8.8状态解析性能大幅提升限流改为按会话而非按 IP且不适用于管理员与 appservice 用户新增exempt_user_ids限流豁免配置。0.9.0引入Ristretto内存缓存默认 1GB可通过cache.max_size_estimated与cache.max_age配置防止无界增长定义见 setup/config/config_global.go直接提供/.well-known/matrix/client数据库迁移重构摆脱 goose 升级问题。0.9.2/sync、/messages、/context支持历史可见性默认房间版本 9新增/_dendrite/admin/resetPassword/{userID}create-account改用共享密钥注册走 HTTP。0.10.0高性能全文搜索需在sync_api配置的search段开启索引存文件系统而非数据库/_dendrite/admin/refreshDevices/{userID}/_dendrite/admin/fulltext/reindex。全文检索实现见 internal/fulltext/bleve.go。6.3 加密与 E2EE 生态0.10.x0.10.3事件关系追踪与/room/{roomID}/relations/...端点私有读回执。0.10.4用户 API 表统一userapi_前缀注意升级后不可回退旧版本数据库变更不会自动回滚联邦退避重试重构交易 ID 按端点隔离。0.10.5hCaptcha 支持注册保护auto_join_rooms配置/_dendrite/admin/downloadState/{serverName}/{roomID}从联邦对端下载状态快照修复损坏房间。6.4 举报、鉴权与 admin 能力0.13.x0.13.7 引入的**事件举报event reporting**是一套完整闭环上报入口客户端调用/rooms/{roomID}/report/{eventID}实现为 clientapi/routing/report_event.go 中的ReportEvent请求体会校验用户必须是房间成员、事件必须存在且未被 redact然后调用 roomserver 的InsertReportedEvent。存储层PostgreSQL 实现在 roomserver/storage/postgres/reported_events_table.go表roomserver_reported_events字段含 reason、score、received_ts 等SQLite 有对应实现表接口定义见 roomserver/storage/tables/interface.go。管理查询路由在 clientapi/routing/routing.go 中注册了 Synapse Admin 兼容端点/admin/v1/event_reports列表、/admin/v1/event_reports/{reportID}详情与删除端点处理函数为 clientapi/routing/admin.go 中的GetEventReports/GetEventReport/DeleteEventReport底层调用 roomserver 的QueryAdminEventReports/QueryAdminEventReport/QueryAdminDeleteEventReport数据库实现见 roomserver/storage/shared/storage.go。七、配置项演进速查结合源码以下配置项在版本演进中反复出现均可在对应源码文件中找到定义与默认值配置项引入版本说明与源码global.disable_federation0.3.2禁用联邦见 setup/config/config_global.gosync_api.real_ip_header0.3.1反向代理后指定真实客户端 IP 头user_api.bcrypt_cost0.4.0密码存储 bcrypt 成本client_api.guests_disabled0.6.4单独禁用访客注册global.presence.enable_inbound/enable_outbound0.8.0分别控制入站/出站 presencerate_limiting.exempt_user_ids0.8.8限流豁免用户global.report_stats.enabled0.8.3可选 phone-home 统计上报默认关闭endpoint 默认https://panopticon.matrix.org/push见 setup/config/config_global.gocache.max_size_estimated/cache.max_age0.9.0Ristretto 缓存上限默认 1GB / 1 小时federation_api.disable_http_keepalives0.9.9禁用联邦 HTTP 连接复用sync_api.search0.10.0全文搜索配置索引路径、search.languageroom_server.default_room_version0.13.2默认房间版本源码默认 V10见 setup/config/config_roomserver.goglobal.well_known_sliding_sync_proxy0.13.3在 well-known 中声明 Sliding Sync proxyfederation_api.enable_relays0.13.7 起必选P2P 中继开关默认 false见 setup/config/config_federationapi.gofederation_api还提供send_max_retries默认 16退避 2^n 秒约 18 小时、p2p_retries_until_assumed_offline默认 1、disable_tls_validation、key_perspectives等选项见 setup/config/config_federationapi.go。八、升级与运维注意事项汇总根据 CHANGES.md 的明确标注以下是升级时必须注意的破坏性与行为变更0.6.0 起必须使用 v2 配置文件Kafka/Naffka 不再支持联邦 sender/签名密钥表需合并进 federation API 数据库。0.6.4 起用户 API 账号/设备数据库合并分离部署可能被强制登出可手动迁移device_devices表避免。0.10.4 起用户 API 表加userapi_前缀升级后不可回退旧版本。0.11.1 / 0.12.0polylith/HTTP API 模式移除仅保留 monolith。0.13.7 起使用 Relay 必须显式开启federation_api.enable_relays否则相关查询被移除。安全提醒0.9.3 与 0.9.8 之前的所有版本存在漏洞务必升级。构建版本要求Go 版本要求逐步提升——1.150.5.0→ 1.160.6.1→ 1.200.13.3→ 1.21当前未发布版本的Dendrite 0.xx.x条目。状态重置自愈0.13.1 修复 off-by-one 后已发生状态重置的房间会随时间逐步恢复正常。九、结语通过 CHANGES.md 这份版本档案可以清晰看到 Dendrite 的技术取舍坚定拥抱 NATS JetStream 作为事件总线、从可拆分部署收敛为 monolith、在 E2EE/全文搜索/Spaces/事件举报等 Matrix 生态关键能力上持续对齐规范并逐步补齐 Synapse 功能。对运维者而言版本说明中反复出现的强烈建议升级与安全修复条目本身就是一份不可忽视的升级时间表对开发者而言这些条目背后都能在 roomserver、syncapi、clientapi/routing、setup/config 等目录中找到对应的源码实现为深入理解与二次开发提供了清晰的索引。赞分享后端即时通讯【免费下载链接】dendriteDendrite is a second-generation Matrix homeserver written in Go!项目地址https://gitcode.com/gh_mirrors/de/dendrite点击查看免费下载相关推荐Brakeman 版本演进全解析从 CHANGES.md 看 Rails 静态安全扫描器的技术发展脉络Brakeman 版本演进全解析从 CHANGES.md 看 Rails 静态安全扫描器的技术发展脉络 导读 Brakeman 是一款面向 Ruby on RSAST应用安全开发工具Spotless 4.x 版本演进与技术解析从 CHANGES.md 读懂代码格式化引擎的迭代脉络Spotless 4.x 版本演进与技术解析从 CHANGES.md 读懂代码格式化引擎的迭代脉络 Spotless 是一款以Keep your code开发工具代码质量格式化Dendrite下一代Matrix homeserver的革新之作Dendrite下一代Matrix homeserver的革新之作 项目介绍 Dendrite 是一个用 Go 语言编写的第二代 Matrix homeser上一篇如何用Translumo实现游戏实时翻译终极免费屏幕翻译器完整指南下一篇Test Table Slide创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考