<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Muzz on Alex Collie's blog</title><link>https://www.collie.codes/jp/tags/muzz/</link><description>Recent content in Muzz on Alex Collie's blog</description><generator>Hugo</generator><language>ja-JP</language><copyright>Alex Collie</copyright><lastBuildDate>Sat, 13 Sep 2025 13:55:34 +0100</lastBuildDate><atom:link href="https://www.collie.codes/jp/tags/muzz/index.xml" rel="self" type="application/rss+xml"/><item><title>Muzz socialのための耐久性のあるリアルタイムインプレッションシステムの構築方法</title><link>https://www.collie.codes/jp/posts/impressions/</link><pubDate>Sat, 13 Sep 2025 13:55:34 +0100</pubDate><guid>https://www.collie.codes/jp/posts/impressions/</guid><description>&lt;p>Muzz socialは世界最大のムスリムソーシャルネットワークであり、ユーザーが投稿、コメント、そして体験を共有できるプラットフォームを提供しています。&lt;/p>
&lt;h2 id="背景" class="scroll-mt-8 group">
 背景
 
 &lt;a href="#%e8%83%8c%e6%99%af"
 class="no-underline hidden opacity-50 hover:opacity-100 !text-inherit group-hover:inline-block"
 aria-hidden="true" title="Link to this heading" tabindex="-1">
 &lt;svg
 xmlns="http://www.w3.org/2000/svg"
 width="16"
 height="16"
 fill="none"
 stroke="currentColor"
 stroke-linecap="round"
 stroke-linejoin="round"
 stroke-width="2"
 class="lucide lucide-link w-4 h-4 block"
 viewBox="0 0 24 24"
>
 &lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" />
 &lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />
&lt;/svg>

 &lt;/a>
 
&lt;/h2>
&lt;p>年初に、シンプルながら効果的なインプレッションシステムを追加しました。ユーザーがリクエストしたページをインプレッションとしてカウントし、その結果をElastiCache(Valkey)に保存しました。フィードがリクエされるたびに、コメント数が大幅に変更されない限り、投稿を除外するようにしました。この変更により、機能をロールアウトした後の2ヶ月間でフィードリクエストが22%増加するという、ユーザーにとって非常にポジティブな変化をもたらしました。しかし、この方法には本質的な問題がありました。ページ全体がリクエストされたからといって、それが実際に見られたとは限らないのです。そのため、このリリース直後に、モバイルインプレッションという名前の後継システムの開発を開始しました。このシステムはほぼリアルタイムであり、イベントをドロップしたくなかったため耐久性も必要でした。これは決して容易なことではありませんでした。私たちは1分間に約150,000のイベントを処理しており、これらすべてを可能な限り迅速に処理・対応する必要があったのです。Muzz socialはイベント駆動アーキテクチャを使用しており、特定のアクションが発生するとイベントが作成され、それを活用できるため、スケーラブルで制御可能な方法で既存の機能を拡張できます。&lt;/p>
&lt;h2 id="目標" class="scroll-mt-8 group">
 目標
 
 &lt;a href="#%e7%9b%ae%e6%a8%99"
 class="no-underline hidden opacity-50 hover:opacity-100 !text-inherit group-hover:inline-block"
 aria-hidden="true" title="Link to this heading" tabindex="-1">
 &lt;svg
 xmlns="http://www.w3.org/2000/svg"
 width="16"
 height="16"
 fill="none"
 stroke="currentColor"
 stroke-linecap="round"
 stroke-linejoin="round"
 stroke-width="2"
 class="lucide lucide-link w-4 h-4 block"
 viewBox="0 0 24 24"
>
 &lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" />
 &lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />
&lt;/svg>

 &lt;/a>
 
&lt;/h2>
&lt;p>このプロジェクトでの主な優先事項の一つは、耐久性とスループットでした。Muzzでは、ネットワーキングの問題やサービスが応答できない場合にリトライメカニズムを持つことができるため、キュー(SQS)を広範囲に活用しています。さらに、Kinesisリーダーのチェックポイントシステムにより、シャードの一部が失敗した場合、シャード全体が再試行されるため、システムへのイベントの耐久性が保証されます。&lt;/p></description></item></channel></rss>