Skip to main content Alex Collie's blog

Recent posts

  1. ゼロからリンターを作る

    概要

    リンターの有用性は過小評価されるべきではありません。リンターは軽量なPRレビューの形として機能します。
    実際、Google SREガイドでは、「nitpick」コメントはリンターに任せるべきだと提案しています。
    リンターは明白なバグを防ぎ、コード品質の守護者として機能します。

    レッスンの基礎

    リンターは通常、言語固有のものです。例えば、Go言語用のReviveなどがあります。
    リンターは、コンパイラが公開する抽象構文木(AST)に依存することが多いです。
    実際、GoコンパイラがGoコードをコンパイルするために使用するのと同じASTです(そうです、Goコンパイラ自体もGoで書かれています)。

  2. Muzz socialのための耐久性のあるリアルタイムインプレッションシステムの構築方法

    Muzz socialは世界最大のムスリムソーシャルネットワークであり、ユーザーが投稿、コメント、そして体験を共有できるプラットフォームを提供しています。

    背景

    年初に、シンプルながら効果的なインプレッションシステムを追加しました。ユーザーがリクエストしたページをインプレッションとしてカウントし、その結果をElastiCache(Valkey)に保存しました。フィードがリクエされるたびに、コメント数が大幅に変更されない限り、投稿を除外するようにしました。この変更により、機能をロールアウトした後の2ヶ月間でフィードリクエストが22%増加するという、ユーザーにとって非常にポジティブな変化をもたらしました。しかし、この方法には本質的な問題がありました。ページ全体がリクエストされたからといって、それが実際に見られたとは限らないのです。そのため、このリリース直後に、モバイルインプレッションという名前の後継システムの開発を開始しました。このシステムはほぼリアルタイムであり、イベントをドロップしたくなかったため耐久性も必要でした。これは決して容易なことではありませんでした。私たちは1分間に約150,000のイベントを処理しており、これらすべてを可能な限り迅速に処理・対応する必要があったのです。Muzz socialはイベント駆動アーキテクチャを使用しており、特定のアクションが発生するとイベントが作成され、それを活用できるため、スケーラブルで制御可能な方法で既存の機能を拡張できます。

    目標

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