自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何用Redis提升Mastodon服務(wù)器的性能?

譯文
數(shù)據(jù)庫(kù) Redis
安裝的默認(rèn)Mastodon系統(tǒng)對(duì)于小型服務(wù)器來說很好,但需要一番工作才能使其具有可擴(kuò)展性。本文介紹了您開始動(dòng)手之前須了解的一些知識(shí)。

譯者 | 布加迪

審校 | 孫淑娟

迅速增加的用戶和活動(dòng)已考驗(yàn)了許多Mastodon服務(wù)器的可擴(kuò)展性,也給廣大管理員帶來了壓力。據(jù)IT外媒TechCrunch采訪Mastodon創(chuàng)始人Eugen Rochko的文章介紹,在大批用戶離開Twitter之后,Mastodon在8600臺(tái)不同服務(wù)器上的月活躍用戶猛增到250萬。這些數(shù)字來自2022年12月,采用率在繼續(xù)提高。

這個(gè)增長(zhǎng)勢(shì)頭有多快?對(duì)服務(wù)器又有什么影響?下圖顯示了一個(gè)大型實(shí)例在一段時(shí)間內(nèi)的作業(yè)隊(duì)列,可以幫助您了解情況。上面那條線是所處理的作業(yè)數(shù)量,下面那條線是失敗的作業(yè)數(shù)量。

圖片

圖1. Twitter用戶外流對(duì)Mastodon作業(yè)隊(duì)列帶來的影響

Redis開源(Redis OSS)是Mastodon技術(shù)堆棧的一部分。任何想要實(shí)施Mastodon服務(wù)器或提高其性能的人都應(yīng)該學(xué)習(xí)如何最有效地配置Redis元素及其他設(shè)置。我們?cè)诒疚闹锌偨Y(jié)了Mastodon的架構(gòu),解釋了Redis適合的地方,并指出了潛在的瓶頸。我們將幫助您開始調(diào)優(yōu)自己的實(shí)例,并確定解決可擴(kuò)展性問題所需要采取的操作。

1、Mastodon簡(jiǎn)介

不妨先簡(jiǎn)單介紹一下技術(shù)。

Mastodon自稱是“一種基于ActivityPub的免費(fèi)開源社交網(wǎng)絡(luò)服務(wù)器,用戶可以關(guān)注好友、發(fā)現(xiàn)新朋友。用戶可以在Mastodon上發(fā)布想要發(fā)布的任何內(nèi)容:鏈接、圖片、文本、視頻。所有Mastodon服務(wù)器都可以作為一個(gè)聯(lián)合網(wǎng)絡(luò)實(shí)現(xiàn)互操作,即一臺(tái)服務(wù)器上的用戶可以與另一臺(tái)服務(wù)器上的用戶無縫聯(lián)系,包括實(shí)現(xiàn)ActivityPub的非Mastodon軟件。”

ActivityPub是W3C推薦的一種去中心化社交網(wǎng)絡(luò)協(xié)議,基于Activity Streams 2.0數(shù)據(jù)格式,這種模型用于使用JSON表示潛在和已完成的活動(dòng)。ActivityPub提供了用于創(chuàng)建、更新和刪除內(nèi)容的客戶端到服務(wù)器API,以及用于傳遞通知和內(nèi)容的聯(lián)合服務(wù)器到服務(wù)器API。

2、Mastodon和Fediverse

用ActivityPub、OStatus、Zot!和diaspora*等協(xié)議結(jié)合在一起的聯(lián)合服務(wù)器網(wǎng)絡(luò)稱為Fediverse。Fediverse上的服務(wù)器(名為“實(shí)例”)與其他實(shí)例聯(lián)合起來,這樣就獲得了如同集成社交網(wǎng)絡(luò)的用戶體驗(yàn)。每個(gè)實(shí)例管理各自的操作和安全。

Mastodon是實(shí)現(xiàn)ActivityPub的20多種服務(wù)器之一。據(jù)Fediverse Observer聲稱,截至去年12月,F(xiàn)ediverse中共有21501臺(tái)服務(wù)器。

圖片

圖2. Fediverse

3、Mastodon架構(gòu)

Mastodon是一種帶有React.js前端的Ruby on Rails(RoR)應(yīng)用軟件。它遵循這些框架的標(biāo)準(zhǔn)實(shí)踐。若要運(yùn)行Mastodon,您需要Ruby、Node.js、PostgreSQL、Redis和SMTP服務(wù)器。Sidekiq是RubyGems。添加另外幾項(xiàng)服務(wù),比如NGINX和Cloudflare,就能提升Mastodon的可擴(kuò)展性和抵御DDoS攻擊的能力。

下面的架構(gòu)圖有點(diǎn)過于簡(jiǎn)化了。PostgreSQL是存儲(chǔ)用戶和帖子等內(nèi)容的數(shù)據(jù)庫(kù)。Sidekiq是Ruby和Rails的后臺(tái)作業(yè)系統(tǒng)。Redis是內(nèi)存中數(shù)據(jù)庫(kù),用于充當(dāng)PostgreSQL(圖中省略)的緩存,并保存Sidekiq作業(yè)隊(duì)列(圖中附有)。文件存儲(chǔ)通常保存在Amazon S3存儲(chǔ)桶或同類存儲(chǔ)區(qū)中;由于多個(gè)原因,將外部文件存儲(chǔ)在本地磁盤上有問題,將它們存儲(chǔ)在NFS上更是一場(chǎng)早晚會(huì)降臨的災(zāi)難。

圖片

圖3. Mastodon架構(gòu)概況

4、Redis簡(jiǎn)介

Redis是一種NoSQL內(nèi)存中數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),可以將數(shù)據(jù)持久地存儲(chǔ)在磁盤上。它可以充當(dāng)數(shù)據(jù)庫(kù)、緩存和消息代理。Redis擁有內(nèi)置復(fù)制、Lua腳本、最近最少使用(LRU)清除、事務(wù)和不同級(jí)別的磁盤持久性。它通過Redis Sentinel提供了高可用性,結(jié)合Redis Cluster提供了自動(dòng)分區(qū)。

Redis數(shù)據(jù)模型是鍵值,但也支持多種類型的值:字符串、列表、集、有序集合、散列、流、HyperLogLogs和位圖。Redis還支持具有半徑查詢和流的地理空間索引。

Redis OSS功能強(qiáng)大,但除了增加云數(shù)據(jù)庫(kù)即服務(wù)外,Redis企業(yè)版還增加了提升速度、可靠性和靈活性的功能。Redis企業(yè)版可線性擴(kuò)展,以支持每秒數(shù)億次操作,具有本地延遲的雙活全球分布,提供了Redis on Flash,以基于磁盤的數(shù)據(jù)庫(kù)的基礎(chǔ)設(shè)施成本支持大型數(shù)據(jù)集,并基于內(nèi)置持久性和單位數(shù)秒級(jí)故障切換機(jī)制提供99.99%的正常運(yùn)行時(shí)間。這一切都是在將數(shù)據(jù)庫(kù)延遲保持在1毫秒以下的情況下提供的。

5、如何安裝Mastodon?

只要您有root權(quán)限,可以在Debian 11或Ubuntu 20.04系統(tǒng)上從源端安裝Mastodon,也可以從云實(shí)例安裝。這個(gè)過程很漫長(zhǎng),但手動(dòng)操作最終讓您對(duì)安裝的系統(tǒng)會(huì)有最大的控制和了解。

還可以從許多云提供商(包括DigitalOcean、Linode和AWS等)的應(yīng)用軟件市場(chǎng)安裝Mastodon,可以在Docker或Kubernetes上安裝Mastodon,包括云提供商自己的Kubernetes,或者向Mastodon托管提供商(比如Masto.host、Fedi.monster或Cloudplane)租用實(shí)例。撰寫本文時(shí),許多但并非所有的Mastdon托管提供商對(duì)新實(shí)例關(guān)閉,它們最終可能會(huì)再次開放。

許多人已經(jīng)發(fā)帖子介紹安裝和運(yùn)行自己的Mastodon實(shí)例方面的感悟和心得。只需搜索“我自己的Mastodon服務(wù)器”或“個(gè)人Mastodon實(shí)例”,就能找到許多這方面的內(nèi)容。

6、Mastodon性能瓶頸及應(yīng)對(duì)方法

Nora Tindall的敘述較為清晰。她的結(jié)論總結(jié)一下就是“默認(rèn)的Mastodon的配置很糟糕。對(duì)于小服務(wù)器上的小實(shí)例來說沒有問題,但一旦您開始發(fā)展壯大,就必須擴(kuò)展Mastodon的規(guī)模。”

瓶頸在哪里?據(jù)Tindall聲稱,最大的瓶頸是數(shù)據(jù)庫(kù)資源(需要為PostgreSQL分配一半的內(nèi)存)、Sidekiq隊(duì)列(分開它們)以及數(shù)據(jù)庫(kù)連接(確保有足夠的連接來處理Web服務(wù)器、Sidekiq隊(duì)列和流:Nora建議總共200個(gè)數(shù)據(jù)庫(kù)連接)。

另一組實(shí)用的調(diào)優(yōu)技巧來自Hazel Weakly:

  • 通過增加worker_rlimit_nofile和worker_connections的值,調(diào)優(yōu)NGINX。
  • 增加PostgreSQL的max_connections,但別太離譜??紤]512作為上限。
  • 考慮pgbouncer之類的數(shù)據(jù)庫(kù)池。這讓您可以避免PostgreSQL讀副本。
  • Hazel引用了Nora針對(duì)DB_POOL、MAX_THREADS、WEB_CONCURRENCY和STREAMING_CLUSTER_NUM的建議。
  • 針對(duì)對(duì)象存儲(chǔ),使用S3或類似的服務(wù),而不是本地磁盤,尤其不是網(wǎng)絡(luò)文件系統(tǒng)(NFS)。
  • 針對(duì)默認(rèn)(default)、推送(push)和拉?。╬ull)類型的Sidekiq隊(duì)列:將DB_POOL設(shè)置為10,并將-c設(shè)置為$DB_POOL的值。
  • 針對(duì)入站和調(diào)度器Sidekiq隊(duì)列:將DB_POOL設(shè)置為5,并將-c設(shè)置為$DB_POOL的值。
  • 針對(duì)mailer Sidekiq隊(duì)列:將DB_POOL設(shè)置為1,并將-c設(shè)置為$DB_POOL的值。
  • 入站隊(duì)列非常受CPU的限制,很少的線程占用整個(gè)CPU核心。準(zhǔn)備好為入站隊(duì)列啟動(dòng)多個(gè)進(jìn)程。將DB_POOL設(shè)置為10。
  • 考慮將Puma(Mastodon Web服務(wù)器)和Sidekiq移動(dòng)到它們各自的機(jī)器上;· 如果需要,在NGINX后面添加更多的這些系統(tǒng),以實(shí)現(xiàn)負(fù)載均衡。
  • 針對(duì)沒有被配置為緩存,而是被配置為持久存儲(chǔ)的Redis實(shí)例運(yùn)行Sidekiq,并使用Redis Sentinel(而不是使用Redis Cluster,因?yàn)镾idekiq隊(duì)列的鍵不斷變化)來擴(kuò)展它。
  • 運(yùn)行Redis實(shí)例前端PostgreSQL作為緩存,并使用Redis Cluster進(jìn)行擴(kuò)展。這意味著您至少需要兩個(gè)Redis實(shí)例(如果您使用Redis OSS)。

7、初步結(jié)論

正如您所見,我們可以采取很多辦法來擴(kuò)展Mastodon以處理增加的流量。下次我們將探討如何以及何時(shí)進(jìn)一步擴(kuò)展Mastodon,使用更大的Redis內(nèi)存分配量和采用Redis企業(yè)版。

與此同時(shí),您可以自己嘗試Redis企業(yè)版,以便深入了解其強(qiáng)大功能。

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

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2009-01-23 21:33:00

2011-03-21 13:10:15

2009-10-19 10:26:39

2013-05-02 09:31:02

虛擬化服務(wù)器

2022-09-26 09:19:38

服務(wù)器優(yōu)化

2009-02-05 14:17:37

FTP服務(wù)器Java

2010-09-16 13:29:06

Linux做PPPOE

2015-07-09 09:49:39

PHPSocket服務(wù)器

2011-08-01 10:49:12

服務(wù)器

2009-02-09 18:02:00

2012-02-07 10:25:50

2012-05-21 10:16:53

2011-09-20 09:15:11

2009-02-11 00:09:00

2022-06-14 23:34:10

Linux安全服務(wù)器

2016-08-04 16:17:48

虛擬化服務(wù)器性能鑒定

2009-09-08 16:31:07

2009-04-09 19:43:52

Nehalem服務(wù)器蘋果

2019-09-11 10:23:58

Redis性能存儲(chǔ)

2012-11-22 09:47:34

服務(wù)器虛擬化性能評(píng)估IOPS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)