アーキテクチャ

スケールにおける複雑さ

GitLab が新機能の導入や既存機能の改善を通じて成長するにつれ、その 複雑さ も増しています。この影響は、小さな自己管理インスタンスから GitLab.com のような大規模インストールまで、幅広い実行環境をサポートする単一のコードベースのケアと運用によって複合されます。会社自体も組織的観点からこの複雑さに加わります。世界中の数百名の従業員が、何らかの形で製品と会社の両方に貢献し、日々の業務に GitLab.com を使用しています。エンジニアリングのチームメンバーは、コードベースとその運用、GitLab.com を支えるインフラストラクチャ、自己管理インスタンスを実行する顧客のサポートに直接責任を持ちます。同様に、プロダクト組織のチームメンバーは製品の将来を描きます。

私たちの価値観 は、強力なノウハウと比類なき献身と相まって、これらの複雑さを管理する上で重要なガイダンスを提供します。同時に、私たちは技術的・組織的な両面における スケールにおける複雑さ が大きな役割を果たしている閾値を越えつつあることを以前から認識しています。私たちは、価値観の提供を継続できるよう、技術的規律(組織全体に統合できるように)と組織的増幅(組織全体にまたがり、活用できるように)の両方を微調整する必要があることを知っています。この文脈で、私たちはこの面で支援となる アーキテクチャ または エンジニアリングプラクティス の採用を探求してきました。

アーキテクチャ

Martin Fowler の Software Architecture Guide は、アーキテクチャ の概念について優れた議論を提供しており、これや他のソースから多くを学ぶことができます。私たちの前にある問いは、それらの学びをどうコンテキスト化し、GitLab で適用するかです。

ソフトウェア界の他の多くと同様、私たちは アーキテクチャ が示唆するすべての否定的な含意、特にその一部が私たちの価値観に反するように思える点について慎重でした。これが、アーキテクチャ が私たちにとって何を意味するか、そして製品と会社の両方が要求するスケールで価値観に沿った形でどう実装するかを慎重に検討するために時間をかけた理由です。

GitLab では、アーキテクチャは専用の役割ではありません(つまり、社内にそのような肩書は存在しません)。私たちは アーキテクチャ を、すべての技術的役割の一構成要素であり、社内に分散する膨大な経験を活用するための プラクティス のセットであり、効率的にスケールし続けるための ワークフロー であると理解しています。

GitLab におけるアーキテクチャ

GitLab において アーキテクチャ はコラボラティブなプロセスです。同時に以下でもあります:

  • エンジニアが使用すべき承認された基盤技術とパターンを定義する 主要な抽象化 のカタログ。一貫性を確保し、組織全体の複雑さを軽減します。
  • 思考、設計、議論を 指示 するのではなく ガイドする 技術的フレームワークを提供する プラクティスのコレクション。これにより素早く イテレーション結果 を提供できます。これには Scalability Practice が含まれます。他のもの(Availability Practice など)も準備中です。
  • コラボラティブな ワークフロー (workflow/)包摂 を促進し、社内のあらゆる場所からアイデアと優先度を引き出すために必要な組織的ソリューションを提供します。
  • アーキテクチャ設計ワークフロー の結果として生まれる成果物である 設計ドキュメントロードマップ のコレクション。

このような定義は、権威ではなく コラボレーション に強く依存することで、効率的 かつ 透明性のある 形で意思決定を行い、ステークホルダーを巻き込み、組織全体の信頼を促進することを意味しています。

成果物: ロードマップと設計ドキュメント

私たちは 結果 と具体的な成果を目指します。これは ロードマップ設計ドキュメント を伴います。ロードマップ は多くの 設計ドキュメント を集約するドキュメントです。

プラクティスとしてのアーキテクチャは全員の責任

GitLab におけるアーキテクチャは専用の役割ではありませんが、シニアテクニカルリーダーシップの役割に顕著に組み込まれており、その役割のレベルと影響範囲が、プラクティス内での責任を決定します。

アーキテクチャ設計ワークフロー

アーキテクチャ設計ワークフロー は、複数のイテレーションにわたってチームメンバーを整合させるために使用される設計ドキュメントを作成するために使用されます。

ロードマップ

私たちの 透明性 の価値観に従い、アーキテクチャロードマップ設計ドキュメント は公開されています。


アーキテクチャデザインワークフロー
GitLab のエンジニアとして、私たちはソフトウェアの進化を主導し、プロアクティブな作業、リアクティブな作業、イノベーションの適切なバランスを常に模索しています。GitLab について最もよく知る人 …
アーキテクチャ設計ドキュメント
設計ドキュメントは、アーキテクチャ設計ワークフロー を中心に展開する主要な成果物です。設計ドキュメントは、私たちが前進していくにあたり、機能の実装を導く技術的なビジョンと一連の原則を記述します。チーム …
ガイドライン
テクノロジーロードマップ
GitLab が成長・成熟し続けるにつれて、複数の大規模サイトでのより速い成長とエンタープライズへの注力が今後12ヶ月の主要課題となる重要な転換点に近づいています。これらはすべて、セキュリティ、可用 …
プラクティス
可用性 スケーラビリティ セキュリティアーキテクチャ原則
主要抽象化
概要 主要抽象化(Key Abstractions、別名 Key Primitives)は、GitLab のエンジニアリング組織全体で使用が承認された基盤技術、パターン、コンポーネントです。主要抽象化 …