服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Redis - 如何用Redis提升Mastodon服务器的性能?

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

2023-05-07 05:06未知服务器之家 Redis

译者 | 布加迪 审校 | 孙淑娟 迅速增加的用户和活动已考验了许多Mastodon服务器的可扩展性,也给广大管理员带来了压力。据IT外媒TechCrunch采访Mastodon创始人Eugen Rochko的文章介绍,在大批用户离开Twitter之后,Mastodon在8600台不同服务器

译者 | 布加迪

审校 | 孙淑娟

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

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

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

图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台服务器。

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

图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上更是一场早晚会降临的灾难。

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

图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/

延伸 · 阅读

精彩推荐
  • RedisRedis 6.X Cluster 集群搭建

    Redis 6.X Cluster 集群搭建

    码哥带大家完成在 CentOS 7 中安装 Redis 6.x 教程。在学习 Redis Cluster 集群之前,我们需要先搭建一套集群环境。机器有限,实现目标是一台机器上搭建 6 个节...

    码哥字节15752021-04-07
  • Redis如何使用Redis锁处理并发问题详解

    如何使用Redis锁处理并发问题详解

    这篇文章主要给大家介绍了关于如何使用Redis锁处理并发问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习...

    haofly4522019-11-26
  • Redisredis缓存存储Session原理机制

    redis缓存存储Session原理机制

    这篇文章主要为大家介绍了redis缓存存储Session原理机制详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    程序媛张小妍9252021-11-25
  • RedisRedis集群的5种使用方式,各自优缺点分析

    Redis集群的5种使用方式,各自优缺点分析

    Redis 多副本,采用主从(replication)部署结构,相较于单副本而言最大的特点就是主从实例间数据实时同步,并且提供数据持久化和备份策略。...

    优知学院4082021-08-10
  • Redis详解三分钟快速搭建分布式高可用的Redis集群

    详解三分钟快速搭建分布式高可用的Redis集群

    这篇文章主要介绍了详解三分钟快速搭建分布式高可用的Redis集群,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    万猫学社4502021-07-25
  • Redis《面试八股文》之 Redis十六卷

    《面试八股文》之 Redis十六卷

    redis 作为我们最常用的内存数据库,很多地方你都能够发现它的身影,比如说登录信息的存储,分布式锁的使用,其经常被我们当做缓存去使用。...

    moon聊技术8182021-07-26
  • Redis关于Redis数据库入门详细介绍

    关于Redis数据库入门详细介绍

    大家好,本篇文章主要讲的是关于Redis数据库入门详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览...

    沃尔码6982022-01-24
  • RedisRedis Template实现分布式锁的实例代码

    Redis Template实现分布式锁的实例代码

    这篇文章主要介绍了Redis Template实现分布式锁,需要的朋友可以参考下 ...

    晴天小哥哥2592019-11-18