BLOG
インテリジェントなサービス設計

投稿:2022年1月28日   |    更新:2022年9月12日

共著者:PagerDutyデータサイエンティストVI、Chris Bonnell氏

EIアーキテクチャーシリーズの第4回目、「Intelligent Alert Grouping(インテリジェントアラートグルーピング)」についてご紹介します。前回は、インシデントのマージを使用してIntelligent Alert Grouping をトレーニングする方法(こちら)と、デフォルト マッチングを改善するためにアラートのタイトルを設定する方法について説明しました。今回は、サービスデザインがIntelligent Alert GroupingやPagerDutyアプリの使用感にどのような影響を与えるかについて説明します。

サービスについて

サービスを設計したり、再設計したりする前に、組織で機能するサービスの定義を持つことが重要です。この定義は、理解できるほどは具体的である必要がありますが、複数のチームがサービスとは何かを抽象的には同じように理解できるように広いものである必要があります。PagerDutyでは、次のような定義を使っています。

サービスとは、チームによって完全に所有される、価値を提供する機能の個別部分である。

担当チームは、サービスを構築し維持するチームであり、あらゆるインシデントに対応することも含まれるため、把握しておくことが重要です。サービスとオーナーシップについての概説は、サービスの定義に関する完全なサービスオーナーシップ運用ガイドを参照してください。

サービスやその所有者について考えるだけでなく、サービス_名_にも気を配る必要があります。Service Directoryに目を通すと、追加の制度的知識がなくても、それぞれのサービスが何であるか簡単に理解できるようになるはずです。簡単に言うと、「Payment Service」という名前のサービスがあったり、あらゆるトランザクションサービスがギリシャ神話の神々にちなんで名付けられているという社内文書を知っているか参照して、どのギリシャ神が支払いを処理するサービスに相当するかを調べるかの違いです。この点については、Full Service Ownership Ops Guideの「Naming Services」のセクションで詳しく説明しています。

PagerDutyアプリでは、サービスはビジネスサービスとは区別されます。ここまでは、全てサービスに関連する話です。また、ビジネスサービスとの混同を防ぐため、弊社のドキュメントでは技術サービスと表記している場合があります。ビジネスサービスは、技術サービスや他のビジネスサービスの集合体であり、通常、ビジネスロジックおよび/またはステークホルダーに従います。Intelligent Alert Groupingは技術サービスのみを利用し、ビジネスサービスは利用しないため、この記事でサービスと書いた場合、技術サービスのみを指します。

粒度

サービスをどう分けるか、そのバランスを考えてもすぐには分かりませんし、万能の解決策もありません。基本的には、粒度の高いものと低いもののバランスを取り、時には置き換えすることになります。例えば、PagerDutyのアプリケーションでは、1つの監視ツールで、その構成機能を全部別のサービスに分解しています。一方、より広範で粒度の低いサービスの使い方としては、iOSとAndroidの開発を別々のチームが担当している場合でも、あらゆるモバイルアプリケーションを1つのサービスとして提供することが挙げられます。後者の例では、サービスの構成方法について単一の推奨事項が存在しない理由は、組織にモバイルチームが1つしかないとか、モバイルチームがないとか、異なる基準で分割されたモバイルチームがあるためだとよく分かります。

では、どうすればよいのでしょうか。私たちは、サービス定義のナビゲートに役立ついくつかのアドバイスを抽き出せます。まず始めに、オーナーシップについて説明します。PagerDutyアプリケーションでサービスを定義する主な理由の1つは、インシデント対応のためです。つまり、サービスの問題に対処できるのは誰かを知ることは、サービスを所有しているのは誰かを知ることなので、組織内で誰がサービスを所有しているかによって、PagerDutyでサービスをどのように定義するかを決めることができます。これは、完全なサービスオーナーシップモデルではないものの、望ましいエスカレーションパスが分かっているサービス構造が既にある場合、その知識を活用できる点で重要です。この場合、Intelligent Alert Groupingがインシデントをグループ化すると、サービスが希望するエスカレーションパスに関連付けられるだけにしても、このコンテキストではそれが重要であり、達成する最終結果になるのです。

また、現在のプロジェクトを見直して、どれが事実上機能単位になっているかを確認し、それらをPagerDutyで1サービスとして定義する必要があります。こうすることで、エスカレーションパスが同じプロジェクトは正しくグループ化される一方で、エスカレーションパスの関係で複数のプロジェクトが単一のサービスとして定義され、可視性が損なわれるというシナリオを防ぐことができるはずです。もう少し踏み込んで、常にインシデントが同時に発生している2つ以上のサービスがある場合、それらを1つのサービスに集約する必要があるかもしれません。具体的な例として、メトリクス、ハートビート、ログなどの個別のコンポーネントを持つモニタリングマイクロサービスがあるとします。これらがそれぞれPagerDutyサービスを持っている場合、ほとんどの場合、インシデントがこれら全サービスに同時にまたがることになるので、モニタリングマイクロサービス自体として1つのサービスにまとめる必要があります。一方、同じ人が働いているからと言って、別々のプロジェクトが1つのサービスとして定義されている場合、そのサービスは十分に粒度が揃っていない可能性があります。このシナリオでは、PagerDutyアプリに関する限り、サービス内のエンティティーは全て1つの「もの」であるため、どのエンティティーが他のエンティティーよりも注意を払う必要があるかを判断するのが難しくなります。

次に何をするべきか

既存のサービス、あるいはこれから作成されるであろうサービスを見て、それらをチェックすることから始めましょう。

  • エスカレーションパス
  • 名称
  • 機能単位

そして、PagerDutyアプリケーションでサービスを定義する際の指針として使用します。Intelligent Alert Groupingは、関連するサービスの下にアラートをグループ化することで、そこからの作業を行います。サービスをゼロから設計したり、サービスの定義を見直したりする場合は、「フルサービス オーナーシップ運用ガイド」で、レスポンスの命名とオーナーシップに関するベストプラクティスを参照し、「(技術)サービス」と「ビジネスサービス」に関するドキュメントもご覧ください。次回は、このシリーズの最終回で、これまで取り上げた内容を全て再録する予定です。ei-architecture-seriesタグを使うと、このシリーズの記事をご覧いただけます。


この記事はPagerDuty社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。