DevOps なチームが支える Git ホスティングの裏側

こんにちは。Backlog のソフトウェアエンジニアの中村です。
とくに Backlog の Git 機能の開発と運用を担当しています。

……そう聞いても、「具体的にどんなことをしているの?」とピンとこない方も多いのではないでしょうか。課題管理やECサイトならイメージしやすいかもしれませんが、SaaSとしてGitを提供しているサービスはあまり多くないですよね。

Git チームは、DevOps なチームとしてGit機能の開発と運用の両方を担っています。この記事では、私たちが日々どのようなシステムや課題に取り組んでいるのか、その裏側をご紹介します。

Git 機能のアーキテクチャの全体像

まずは、Backlog の Git 機能がどのような構成で動いているのか、ざっくりと説明します。

Git 機能のアーキテクチャ概要Git 機能のアーキテクチャ概要

ユーザーからのリクエストは、Web、API、HTTP、SSHといった様々な入り口から受け付けられます。

これらのリクエストはプロキシによって、物理リポジトリを持つ Primary/Replica 構成のEC2インスタンスに割り振られます。書き込みが完了すると Worker が起動し、通知などの後処理を実行します。また、Replication Worker が Primary と Replica のデータを常に同期することで、データの整合性を保ちます。

私たちは、このシステム全体の開発とメンテナンスをしているわけですね。

SaaS として Git を提供するために欠かせない機能

自宅サーバーでGitを運用している人なら git-daemon のようなシンプルなサービスを思い浮かべるかもしれません。しかし、SaaSとして多くのユーザーに利用してもらうためには、それだけでは不十分です。私たちは、以下のような機能を独自に開発しています。

認証・認可の動的制御

GitのHTTPはBasic認証、SSHは公開鍵によって認証を行います。
Backlogではユーザーが「個人設定」の画面で発行/登録した情報を使って認証します。
この情報の連携のために Git HTTP・Git SSH のサブシステムを自作し、ユーザー情報やリポジトリへのアクセス権などを動的にチェックする仕組みを実装しています。

リポジトリの管理機能

リポジトリの作成、リネーム、削除といった操作は、Web画面から行われます。Gitサーバーとは別のサーバーで動いているWebアプリケーションからのリクエストを受け取り、適切にリポジトリを操作する仕組みが必要です。

ストレージの冗長化

Backlogでは、負荷分散と可用性向上のためにGitのストレージを冗長化しています。これにより、負荷を分散できるだけでなく、サービスの停止を伴わずにミドルウェアのアップデートが可能になるなど、運用面でも大きなメリットがあります。

詳細な仕組みは BacklogのGitホスティングにおける冗長化と負荷分散の仕組み で紹介しています。

イベント連携機構

git push の後、Backlogへの通知、コミットメール、Webhookなど、様々なイベントを連携させる必要があります。これらの機能も、Gitの組み込み機能には含まれていません。

プルリクエスト機能

プルリクエストもGitの組み込み機能ではありません。プルリクエストのタイトルや詳細をデータベースに保存し、Gitリポジトリ内のrefsを操作するなど、Git側とデータベース側の両方を連携させて実現しています。

サービスを安定稼働させるための運用

私たちは開発だけでなく、サービスを安定して提供するための運用も重要な仕事と捉えています。

監視とアラート対応

Mackerel や Datadog を活用して監視を行っています。エージェントのセットアップや監視ルールの追加・更改もチームで行っています。

アラート対応や運用の自動化については 手作業をなくそう!Backlog Gitチームの運用改善 でも詳しく解説しています。

EC2やミドルウェアのメンテナンス

EC2のカーネルアップデートやサーバーで使用する Git のアップデート、EBSボリュームの拡張などを行います。
前述したようにEC2インスタンスは冗長化されているため、無停止でメンテナンスすることが可能となっています。

データのチェックとリカバリー

Primary と Replica のデータは常に同期されていますが、万が一に備えてその整合性が保たれているかをプログラムで定期的にチェックしています。
問題が見つかった際は迅速に修復を行います。

問い合わせ調査

カスタマーサポートと連携し、技術的に難しい問題や内部を知らないと回答が難しいものを調査します。技術的な詳細だけでなく、ユーザーの背景や状況を整理したうえで回答することで、問題の根本的な解決を目指しています。

まとめ

いかがでしたか? 普段はあまり意識することのないGitホスティングの裏側には、様々な技術と運用の工夫が詰まっています。

このブログを通じて、私たちの仕事に少しでも興味を持っていただけたら嬉しいです。私たちは一緒に改善していける仲間を募集しています!

開発メンバー募集中

より良いチームワークを生み出す

チームの創造力を高めるコラボレーションツール

製品をみる