如何用Redis提升Mastodon服务器的性能?

译者 | 布加迪

审校 | 孙淑娟

迅速增加的用户和活动已考验了许多Mastodon服务器的可扩展性,也给广大管理员带来了压力。据IT外媒TechCrunch采访Mastodon创始人Eugen Rochko的文章介绍,在大批用户离开Twitter之后,Mastodon在8600台不同服务器上的月活跃用户猛增到250万。这些数字来自2022年12月,采用率在继续提高。

这个增长势头有多快?对服务器又有什么影响?下图显示了一个大型实例在一段时间内的作业队列,可以帮助您了解情况。上面那条线是所处理的作业数量,下面那条线是失败的作业数量。

图1. Twitter用户外流对Mastodon作业队列带来的影响

Redis开源(Redis OSS)是Mastodon技术堆栈的一部分。任何想要实施Mastodon服务器或提高其性能的人都应该学习如何最有效地配置Redis元素及其他设置。我们在本文中总结了Mastodon的架构,解释了Redis适合的地方,并指出了潜在的瓶颈。我们将帮助您开始调优自己的实例,并确定解决可扩展性问题所需要采取的操作。

1、Mastodon简介

不妨先简单介绍一下技术。

Mastodon自称是“一种基于ActivityPub的免费开源社交网络服务器,用户可以关注好友、发现新朋友。用户可以在Mastodon上发布想要发布的任何内容:链接、图片、文本、视频。所有Mastodon服务器都可以作为一个联合网络实现互操作,即一台服务器上的用户可以与另一台服务器上的用户无缝联系,包括实现ActivityPub的非Mastodon软件。”

ActivityPub是W3C推荐的一种去中心化社交网络协议,基于Activity Streams 2.0数据格式,这种模型用于使用JSON表示潜在和已完成的活动。ActivityPub提供了用于创建、更新和删除内容的客户端到服务器API,以及用于传递通知和内容的联合服务器到服务器API。

2、Mastodon和Fediverse

用ActivityPub、OStatus、Zot!和diaspora*等协议结合在一起的联合服务器网络称为Fediverse。Fediverse上的服务器(名为“实例”)与其他实例联合起来,这样就获得了如同集成社交网络的用户体验。每个实例管理各自的操作和安全。

Mastodon是实现ActivityPub的20多种服务器之一。据Fediverse Observer声称,截至去年12月,Fediverse中共有21501台服务器。

图2. Fediverse

3、Mastodon架构

Mastodon是一种带有React.js前端的Ruby on Rails(RoR)应用软件。它遵循这些框架的标准实践。若要运行Mastodon,您需要Ruby、Node.js、PostgreSQL、Redis和SMTP服务器。Sidekiq是RubyGems。添加另外几项服务,比如NGINX和Cloudflare,就能提升Mastodon的可扩展性和抵御DDoS攻击的能力。

下面的架构图有点过于简化了。PostgreSQL是存储用户和帖子等内容的数据库。Sidekiq是Ruby和Rails的后台作业系统。Redis是内存中数据库,用于充当PostgreSQL(图中省略)的缓存,并保存Sidekiq作业队列(图中附有)。文件存储通常保存在Amazon S3存储桶或同类存储区中;由于多个原因,将外部文件存储在本地磁盘上有问题,将它们存储在NFS上更是一场早晚会降临的灾难。

图3. Mastodon架构概况

4、Redis简介

Redis是一种NoSQL内存中数据结构存储系统,可以将数据持久地存储在磁盘上。它可以充当数据库、缓存和消息代理。Redis拥有内置复制、Lua脚本、最近最少使用(LRU)清除、事务和不同级别的磁盘持久性。它通过Redis Sentinel提供了高可用性,结合Redis Cluster提供了自动分区。

Redis数据模型是键值,但也支持多种类型的值:字符串、列表、集、有序集合、散列、流、HyperLogLogs和位图。Redis还支持具有半径查询和流的地理空间索引。

Redis OSS功能强大,但除了增加云数据库即服务外,Redis企业版还增加了提升速度、可靠性和灵活性的功能。Redis企业版可线性扩展,以支持每秒数亿次操作,具有本地延迟的双活全球分布,提供了Redis on Flash,以基于磁盘的数据库的基础设施成本支持大型数据集,并基于内置持久性和单位数秒级故障切换机制提供99.99%的正常运行时间。这一切都是在将数据库延迟保持在1毫秒以下的情况下提供的。

5、如何安装Mastodon?

只要您有root权限,可以在Debian 11或Ubuntu 20.04系统上从源端安装Mastodon,也可以从云实例安装。这个过程很漫长,但手动操作最终让您对安装的系统会有最大的控制和了解。

还可以从许多云提供商(包括DigitalOcean、Linode和AWS等)的应用软件市场安装Mastodon,可以在Docker或Kubernetes上安装Mastodon,包括云提供商自己的Kubernetes,或者向Mastodon托管提供商(比如Masto.host、Fedi.monster或Cloudplane)租用实例。撰写本文时,许多但并非所有的Mastdon托管提供商对新实例关闭,它们最终可能会再次开放。

许多人已经发帖子介绍安装和运行自己的Mastodon实例方面的感悟和心得。只需搜索“我自己的Mastodon服务器”或“个人Mastodon实例”,就能找到许多这方面的内容。

6、Mastodon性能瓶颈及应对方法

Nora Tindall的叙述较为清晰。她的结论总结一下就是“默认的Mastodon的配置很糟糕。对于小服务器上的小实例来说没有问题,但一旦您开始发展壮大,就必须扩展Mastodon的规模。”

瓶颈在哪里?据Tindall声称,最大的瓶颈是数据库资源(需要为PostgreSQL分配一半的内存)、Sidekiq队列(分开它们)以及数据库连接(确保有足够的连接来处理Web服务器、Sidekiq队列和流:Nora建议总共200个数据库连接)。

另一组实用的调优技巧来自Hazel Weakly:

  • 通过增加worker_rlimit_nofile和worker_connections的值,调优NGINX。
  • 增加PostgreSQL的max_connections,但别太离谱。考虑512作为上限。
  • 考虑pgbouncer之类的数据库池。这让您可以避免PostgreSQL读副本。
  • Hazel引用了Nora针对DB_POOL、MAX_THREADS、WEB_CONCURRENCY和STREAMING_CLUSTER_NUM的建议。
  • 针对对象存储,使用S3或类似的服务,而不是本地磁盘,尤其不是网络文件系统(NFS)。
  • 针对默认(default)、推送(push)和拉取(pull)类型的Sidekiq队列:将DB_POOL设置为10,并将-c设置为$DB_POOL的值。
  • 针对入站和调度器Sidekiq队列:将DB_POOL设置为5,并将-c设置为$DB_POOL的值。
  • 针对mailer Sidekiq队列:将DB_POOL设置为1,并将-c设置为$DB_POOL的值。
  • 入站队列非常受CPU的限制,很少的线程占用整个CPU核心。准备好为入站队列启动多个进程。将DB_POOL设置为10。
  • 考虑将Puma(Mastodon Web服务器)和Sidekiq移动到它们各自的机器上;· 如果需要,在NGINX后面添加更多的这些系统,以实现负载均衡。
  • 针对没有被配置为缓存,而是被配置为持久存储的Redis实例运行Sidekiq,并使用Redis Sentinel(而不是使用Redis Cluster,因为Sidekiq队列的键不断变化)来扩展它。
  • 运行Redis实例前端PostgreSQL作为缓存,并使用Redis Cluster进行扩展。这意味着您至少需要两个Redis实例(如果您使用Redis OSS)。

7、初步结论

正如您所见,我们可以采取很多办法来扩展Mastodon以处理增加的流量。下次我们将探讨如何以及何时进一步扩展Mastodon,使用更大的Redis内存分配量和采用Redis企业版。

与此同时,您可以自己尝试Redis企业版,以便深入了解其强大功能。

原文链接:https://thenewstack.io/how-to-boost-mastodon-server-performance-with-redis/

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/303645.html<

赞 (0)
管理的头像管理
上一篇2025-05-25 08:45
下一篇 2025-05-25 08:47

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注