Bitbucket Data Center のサンプル デプロイメントおよび監視戦略

このページの内容

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

At Atlassian, we use several enterprise-scale development tools. Among them is a Bitbucket Data Center instance deployed specifically to meet the global source code management needs of around 6,500 users, and support up to 900,000 monthly builds. During peak load times, the instance can process up to 300 builds per minute. 


Bitbucket の使用の背景

この Bitbucket Data Center インスタンスは多くのアトラシアン アプリケーションを一か所にまとめるため、多数のユーザーがソース管理の要件を他のチームと統合しやすくなります。 2018 年 2 月の時点で、このインスタンスは 2,500 プロジェクトで約 6,500 リポジトリをホストしています。


負荷とスケールの詳細はこちらをクリック

これらの情報は 2018 年 2 月 28 日に収集されました。


規模

統計情報
ユーザー アカウント 6,500
グループ 8,500
プルリクエスト 231,500
コメント 981,000
すべてのリポジトリの合計サイズ 141GB
ElasticSearch インデックスのサイズ 130GB

ロード

統計情報
ミラー経由での平均トラフィック 0.5 GB/秒
仮想トラフィック マネージャー トラフィック 平均 1 GB/秒
ピーク 8 GB/秒
各ユーザー操作の平均回数 (1 日あたり) プッシュ 5,000
クローン 35,000
フェッチ 50,000
ref advertisements1 450,000
オープンなプル リクエスト 400
コメント 1,500
継続的インテグレーション サービスからのビルド操作数

平均 900,000 ビルド/月
ピーク 300 ビルド/分


1 ref advertisement は、リポジトリを確認してしてフェッチ リクエストが必要かどうかを判断するクライアント リクエストです。


非常に多くのユーザーが各拠点からこのインスタンスに依存しているため、このインスタンスで監視する優先的な項目に高可用性が挙げられます。同時に、インスタンスは継続的に健全な状態で動作する必要があります。健全性が失われると、他の連携アプリケーションにおける Git 関連の操作に影響し始める可能性があります。これは組織全体の生産性に影響を及ぼします。さらに、ここでの速度低下は連携された Bamboo ビルド サーバーのパフォーマンスに影響するため、ソフトウェアの予定通りの出荷にも影響します。

インフラストラクチャとセットアップ

Atlassian の Bitbucket Data Center インスタンスは、次のノードで構成される、Amazon Web Services (AWS) 上の EC2 クラウドでホストされます。

機能 インスタンス タイプ Number (番号)
Bitbucket Data Center アプリケーション

m5.4xlarge

3
専用 NFS サーバー m5.12xlarge 1
専用データベース (Amazon RDS Postgresql) m4.2xlarge 1
仮想トラフィック マネージャー r4.8xlarge 2
Elasticsearch インスタンス m4.large.elasticsearch 3

Atlassian では AWS EC2 discovery plugin for Hazelcast を使用して、EC2 Cloud 内のノードを検出しています。3 つのミラーが、大部分のユーザーがいるリージョン全体でのトラフィック管理をサポートします。

Instead of an actual load balancer, we use a proprietary Virtual Traffic Manager, hosted on two instances suitable for handling the bandwidth we need. We use a dedicated NFS server to provide plenty of RAM for page caching. 

各ノード タイプの詳細については、「インスタンス タイプに関する AWS ドキュメント (特に「汎用インスタンス」、および「メモリ最適化インスタンス」) をご参照ください。

インスタンスの Elasticsearchの詳細については、「Amazon Elasticsearch Service」 をお読みください。

連携サービス 

Bitbucket Data Center インスタンスでは Crowd を使用してユーザー ディレクトリを管理しており、これは他のいくつかの Atlassian 製品とも連携されています。これには、次のパブリック Jira インスタンスが含まれます。

Bitbucket Data Center インスタンスは次のようにさまざまなアプリケーションへリンクされています。

  • 21 個の Bamboo リンク

  • 10 個の Jira リンク

  • 3 個の Confluence リンク

  • 2 個の FishEye / Crucible

また、このインスタンスには 30 個のアプリがインストールされ、有効化されています。


監視戦略

ここで説明している戦略は、Atlassian のビジネス要件や利用可能なリソースに適用されるものです。ニーズやイベントは企業環境ごとに異なり、それに応じて別の戦略が必要になる可能性があります。Atlassian のテクニカル アカウント マネージャーにご相談ください。

アトラシアンの監視戦略は、インスタンスが負荷の処理に十分なリソースを持っていることを確認することに焦点を当てています。これにより、ノード リソースの追加、ローリング スタートの実施、またはその他の適切な修正などを行うことで、多くの場合 Git 関連の操作のボトルネックを素早く解決できます。これはインスタンス全体でソース コントロールを堅牢に保つだけでなく、ソース コントロールに依存する統合サービスの速度の低下を防ぎます。

ほとんどの場合、これによってインスタンスのパフォーマンス レートが健全に保たれます。このレベルのパフォーマンスを保持できる場合、インスタンスに重大な障害が発生することは少なくなります。我々の経験では、これらの障害の原因のほとんどは、自身をホスティング チケット キューとして明示することです。したがって、これにアラートを設定しています (「一般的な負荷」を参照)。 

また、アトラシアンでは、スプリット ブレイン シナリオの兆候となるイベントも監視しています。特に、Hazelcast リモート オペレーションの数と、過去の重大なレベルに対するアラートを監視しています (詳細は「ノード」を参照してください。

次の表は、インスタンスの各サブシステムの監視方法、アラート レベル (ある場合)、およびアラートがトリガーされたときにとるべき対応の詳細を示しています。これらの戦略は我々のセットアップ、スケール、およびユース ケースに固有のものです。 

一般的な負荷

追跡するメトリック アラート レベル アラートがトリガーされたときの対応

ホスティング チケット。Bitbucket ではチケットを使用して、システムがリクエストで過負荷になるのを防ぎます。ホスティング チケットは、同時に実行される可能性がある ソース コントロール管理 (SCM) ホスティング オペレーションの数を制限します。SMC ホスティング オペレーションは、HTTP または SSH を介した Git プッシュまたはプルで構成されます。

ホスティング チケットが 5 分間キューに残っているホスティング チケット キューに 5 分間チケットがあった場合、アラートがトリガーされます。これは通常、負荷が高すぎるか、インスタンスが十分にチケットを処理していないことを意味します。

負荷の高さとインスタンスの速度低下のどちらが原因でキューが発生しているかをチェックします。後者の場合、インスタンスで利用可能なリソースを増やします (関連する詳細は、「Bitbucket がリソースの制限に達しつつある」を参照してください)。

インスタンスの速度が遅い場合、他のサブシステム (JVMノード、Git プロセス、またはデータベース) を調査して根本原因を判断します。

アクティブなデータベース接続の数。このメトリックは、サービスにボトルネックがあるかどうかを示すのに役立ちます。 5 分間に 50 以上のアクティブ データベース接続 (ノードあたり) がある。過去のパフォーマンス データを使用して、このアラートが、インスタンスが問題なく回復できる上限であると判断しました。ほとんどの障害は、5 分のマークを超えたところで発生しはじめます。

アラートが表示されたら、他のメトリックを調査して差し迫った課題がないかどうかを確認します。ほとんどの場合、インスタンスは時間とともに単純に自己回復します。まれに、ローリング リスタートが必要になることがある、他のサブシステムの課題が見つかります。

ポリシー上、できるだけ早く最新バージョンにアップグレードします。これにより、各リリースでの安定性の改善を活用できるようになり、停止や不安定性のリスクは時間の経過とともに減少します。

スレッド プールの長さ: 特に、IoPumpThreadPool、ScheduledThreadPool、および EventThreadPool などの Bitbucket サーバー スレッドプールの長さを監視します。

Bitbucket インスタンスで誤動作しているアプリがスレッドプール上で長時間かかるタスクを実行し、これによってサービスに影響する場合があります。

5 分間でキューの長さが 40を超える。関連するカスタマー ケースのキューの長さを調査し、それに基づいてこのアラートを作成しました。

このアラートがトリガーされた場合、まず最初に、トラブルの兆候がないかすべてのアプリをチェックします。問題が見られない場合、他のメトリックをチェックして、アラートがトリガーされていないかどうか (またはもうすぐでトリガーされるような状態になっていないか) を確認します。現時点では、我々のインスタンスでこのアラートがトリガーされたことはありません。

アプリによって生成されたアラートの表示および分析方法の詳細については、「サードパーティ アプリの診断」を参照してください。

ノード

追跡するメトリック アラート レベル アラートがトリガーされたときの対応
CPU および RAM 利用状況。Git はリソース集約型であり、特に CPU や RAM を大量に消費する場合があるため、これらのメトリックを監視します。 このメトリックに自動アラートはありません。代わりに、インスタンスの速度低下を評価できるよう、ホスティング チケットとまとめて監視しています。 ホスティング チケットのアラートが高い CPU および RAM 使用量とともにトリガーされた場合は、インスタンスに利用可能なリソースを増やします (関連する詳細は、「Bitbucket がリソースの制限に達しつつある」を参照してください)。
ディスクのレイテンシ。Git のパフォーマンスは、レイテンシに非常に影響されやすい場合があります。 このメトリックに自動アラートはありません。代わりに、インスタンスの速度低下を評価できるよう、ホスティング チケットとまとめて監視しています。 ディスク レイテンシの高さによってホスティング チケット アラートがトリガーされたら、ストレージ ハードウェアと接続をチェックします。また、パフォーマンス低下の原因となったインシデントを調査する際には、根本原因を判断するためにディスク レイテンシ データも確認します。
Hazelcast: リモート オペレーションの数。これらのリクエスト数が多い場合、スプリット ブレイン シナリオの原因となるクラスター ネットワークの問題を示している可能性があります (「Data Center クラスターのスプリット ブレインからの回復」を参照)。

>1000/秒 が 5 分以上続く。この値は一般的に、クラスター ネットワークの問題、または特定のイベント キューがバックアップされていることを示します。また、クラスターが、スプリット ブレイン シナリオから回復する際に問題が発生している可能性も示しています。

このアラートがトリップされたら、Hazelcast クラスター ノードのローリング リスタートを直ちに実行します。なお、回復力や信頼性を向上させるため、Hazelnut プロジェクトに寄与しています。

アラートしないメトリック

以下のメトリックに関するアラートは設定されていませんが、異常なスパイクやディップは定期的に監視しています。


追跡するメトリック 監視プラクティス
HTTP リクエストのレイテンシ。レイテンシの一般的な指標として、平均 HTTP 応答時間を監視します。

これをパフォーマンス テスト サイクルの一部として監視しており、アラートの自動化は設定していません。重大なパフォーマンス レベルは別のアラート (特にホスティング チケット) をトリガーしますが、このメトリックはインスタンスのパフォーマンス レベルを素早くチェックするのに役立ちます。

重大な停止が発生した場合、根本原因を調査するためにこのメトリックで収集されたデータを調べます。

1 秒あたりの Git プッシュ/プル。プッシュとプルは Git オペレーションの大部分を占め、インスタンスが受けている負荷の量を大まかに把握するのに役立ちます。

Git プル (フェッチまたはクローン) は大量の CPU および RAM を消費するため、このメトリックを高い水準で監視しています。このメトリックの急増は、何かによってスループットが抑制されているか、システムに異常な負荷がかかっていることを意味します。

このメトリックに対するアラートは設定していません。これは、重大なレベルではホスティング チケットがキューに追加され始めますが、このアラートを既に設定しているためです。停止や類似のインシデントを調査する際には、このメトリックで収集されたデータを分析し、長期間にわたる一般的な利用状況/負荷と比較します。

アトラシアンでは、JMX カウンターを使用してこのデータを収集しています。詳細は、「パフォーマンス監視用に JMX カウンターを有効化する」を参照してください。

JVM ヒープ。このメトリックの値が正常であれば、Bitbucket に十分なメモリがあります。 これらのメトリックは、主に開発のフィードバックのために監視しています。また、このデータは Bitbucket にメモリ リークがあるかどうかをチェックするのにも役立ちます。
ガベージ コレクターによる CPU 使用率ガベージ コレクターが多くの CPU 時間をしているとき、多くの場合、パフォーマンスの速度低下が発生します。

Atlassian が提供するサービス

当社では、ニーズの変化、アプリケーションの改善、新しい知見などに基づいて、インスタンスや監視戦略を再構成する可能性があります。独自の Data Center インスタンスのデプロイや互換性のある監視戦略の構築に関してガイダンスが必要な場合、Atlassian のテクニカル アカウント マネージャーお問い合わせください

アトラシアンのプレミア サポート チームは、お客様のアプリケーションのデプロイメントがユーザーのニーズを完全に満たしていることを確認するためにヘルス チェックを実行し、アプリケーションとログを慎重に分析します。ヘルス チェックでパフォーマンスのギャップが判明した場合、プレミア サポートがお客様のデプロイメントで実施可能な変更を提案いたします。

最終更新日 2018 年 6 月 3 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.