GitLab.com 上の Advanced Global Search ロールアウト
ステップと強化
2019-11-05: Search セキュリティ rapid action 開始。
- Advanced Global Search は、オンライン化の数時間後に HackerOne によって発見された3つのセキュリティ Issue により、直前2か月間で3回の有効化・無効化を経験しました。12.3.3、12.3.5、12.4.1/12.3.6 を参照してください。
- チームは Issue の発見と修正に体系的なアプローチを取ることを決定しました。
- Rapid action 週次アジェンダ。
- すべてのエンジニアリングの注意(エンジニア2名)がセキュリティ rapid action に集まりました。
2019-12-09: セキュリティ rapid action 完了。
- 既知のセキュリティ Issue はすべて修正されました。
- AppSec チームによって 包括的なテストマトリクスのセット が実行されました。
2019-12-16:
- Advanced Global Search が GitLab.com 上の gitlab-org グループに対して再有効化されました。。
- GitLab 自身の gitlab-org のみが有効化され、セキュリティ rapid action 前の状態に戻りました。
- CFO からマージン分析が要求され、コスト見積もり Issue が作成されました。
- Advanced Global Search が GitLab.com 上の gitlab-org グループに対して再有効化されました。。
2020-01-15: コスト分析完了。
- 休暇のため、初期見積もり とマージン分析の完了に約1か月かかりました。
2020-01-17: 財務承認 が完了しました。
2020-01-24: 最初の2社の顧客 が Advanced Global Search の有効化を予定されました。
- 初期インデキシング中にメモリ不足によって Elasticsearch クラスターノードがクラッシュ しました。
- 有効化プロセスは停止され、Elasticsearch クラスターはオフラインになりました。
- Advanced Global Search サービスは完全にオフラインになりました。
2020-01-27: このインシデントのレトロスペクティブ が開催されました。
- インフラストラクチャチームと共にトラブルシューティングを継続しました。
- Elastic サポートエンジニアとのエンゲージメントを開始しました。
2020-01-30: Elastic サポートの助けを借りて 問題の根本原因を発見。
- メモリ不足は、取り込み待ちのかなり大きなバルクリクエストと小さなヒープの組み合わせによって引き起こされました。
- Elasticsearch Bulk Import API と Redis sorted set を活用 して、インデキシングジョブをスケールさせる作業を開始しました。
2020-02-04:
2020-02-09 〜 2020-03-05:
- 新しいグループを1つずつインデキシングして本番環境を監視しながら、新しい顧客を有効化することを反復的に学びました。同時に、バッチインデキシング用のツールとプレイブックを開発しました。
2020-02-29: Add a bulk processor for elasticsearch incremental updates をマージ。
- インクリメンタルデータベース更新をバッチで処理します。より効率的で、Elasticsearch がビジー状態のときの負荷を下げられます。
- Redis sorted set を使用し、インデキシングジョブの重複を排除できます。Elasticsearch クラスターの負荷を下げるのにも役立ちます。
2020-03-06:
- Use less expensive index_options をマージし、インデックスサイズを 36.6% 削減。
- Bulk API 関連の Elasticsearch バージョン互換性修正 をマージ。
2020-03-11: 新しいグループのバッチ追加の最初の試みが成功。さらに30グループが有効化されました。GitLab 自身のグループを含め、有効化されたグループの合計は39でした。
2020-03-12: GitLab.com で Routing 機能がオンになり、結果として 5x-6x のレイテンシー改善 が見られました。
2020-03-26: Use prefix search instead of ngrams for sha fields をマージし、インデックスサイズをさらに 12.3% 削減、総インデックスサイズの削減は 44.4%。
2020-04-07: 再インデキシング プロセスを最適化し ゼロダウンタイム を達成。
- GitLab.com で Elasticsearch インデックスエイリアス を使用して、再インデキシング操作をより柔軟、効率的、堅牢にしました。
- GitLab.com 上で再インデキシングはダウンタイムを必要としなくなりました。
- ゼロダウンタイム再インデキシング関連作業を開始。
2020-04-08: さらに多くのグループが有効化され、有効化されたグループの合計は約 3%。
2020-04-09:
- さらに多くのグループが有効化され、有効化されたグループの合計は約 6%。
- グループの初期インデキシングを高速化する方法の調査 を開始
- Sidekiq ワーカー数の増加について議論しました。
- GitLab.com の他の部分への影響も評価しました。
2020-04-27: さらに多くのグループが有効化され、有効化されたグループの合計は約 9%。
2020-04-28: GitLab.com 上で Advanced Global Search のロールアウトから学んだ教訓を共有する ブログ記事 が公開されました。
2020-04-30: さらに多くのグループが有効化され、有効化されたグループの合計は約 12%。
2020-05-08: リポジトリインデキシングジョブを Redis sorted set に移行する作業 を開始。これにより以下が支援されます:
- インデキシングのパフォーマンス向上。
- インクリメンタルインデックス更新と初期インデキシングを別々のジョブキューに分離し、両方のインデキシングジョブタイプを高速化。
2020-05-20: さらに多くのグループが有効化され、有効化されたグループの合計は約 16%。
2020-05-24: さらに多くのグループが有効化され、有効化されたグループの合計は約 17%。
2020-05-27: remove partial word matching from code search をマージ。これによりストレージサイズの大幅な削減が見込まれます。
2020-06-04: GitLab.com で もう1回の再インデキシング を実施。最後のストレージ最適化変更が適用されました。これにより以前の最適化からさらに 75% のストレージを節約し、結果として インデックスサイズの合計 86.1% 削減 になりました。
2020-06-09: さらに多くのグループが有効化され、有効化されたグループの合計は約 20%。
2020-06-10: さらに多くのグループが有効化され、有効化されたグループの合計は約 21%。
2020-06-14: さらに多くのグループが有効化され、有効化されたグループの合計は約 22%。Sidekiq ワーカーが追加され、このロールアウト中の GitLab.com 全体への影響が密接にモニターされました。Elasticsearch ジョブの Sidekiq ワーカー数を倍増することは安全であるという結論に達しました。
2020-06-15: さらに多くのグループが有効化され、有効化されたグループの合計は約 25%。
2020-06-15: さらに多くのグループが有効化され、有効化されたグループの合計は約 26%。Sidekiq ワーカー数が再度倍増 され、モニタリングデータからこのロールアウトで使用されている Sidekiq ワーカー数を維持しても安全であることが示されました。処理能力の増加により、はるかに高速なロールアウトが可能になります。
2020-06-16: さらに多くのグループが有効化され、有効化されたグループの合計は約 27%。
2020-06-16: さらに多くのグループが有効化され、有効化されたグループの合計は約 39%。
2020-06-17: さらに多くのグループが有効化され、有効化されたグループの合計は約 64%。
2020-06-23: さらに多くのグループが有効化され、有効化されたグループの合計は約 75%。しかし、このバッチ有効化中に Elasticsearch クラスターで 高 CPU 使用率 Issue が発生しました。コードアナライザーの問題のある正規表現が原因と考えられました。
2020-06-24: 問題のある正規表現が修正されました
2020-06-29: コードアナライザー正規表現の修正に続いて、Elasticsearch クラスターの再インデキシングがもう1回成功裏に行われました。
2020-07-02: 新しく作成された有料グループがインデックスされる ようにする新機能が追加されました。
2020-07-06: さらに多くのグループが有効化され、有効化されたグループの合計は約 87%。
2020-07-08: さらに多くのグループが有効化され、有効化されたグループの合計は約 93%。
2020-07-09: さらに多くのグループが有効化され、有効化されたグループの合計は約 98%。
2020-07-10: GitLab.com 上のすべての有料グループが有効化されました!
