どのようにしてDB同期のパフォ,マンスを改善したか| JFrog x射线

要約
私たは皆,すべてを超高速で開発したいと思っています。そのため”単純な”データベースの同期処理などに時間がかかる場合は既成概念にとらわれずに考え直す必要があります。ここではDBのパフォーマンスを向上し,同期時間を16時間から2時間に短縮するために,JFrog x光に実装したソリューションをご紹介します。
JFrog x射线とは
まず,課題とソリュ,ションをご説明する前に,JFrog x射线とは何かをおさらいしましょう。JFrog x光はDevSecOpsチームのためのツールでソフトウェア・アプリケーションのオープンソース・コンポーネントを得るために使用します。JFrog Artifactoryのリポジトリに保存されているアーティファクトを再帰的にスキャンすることで、Xrayはセキュリティの脆弱性を特定し,組織のために定義されたポリシ,に沿ったラ▪▪センスのコンプラ▪▪アンスを保証するのに役立ます。
現在のx射线の仕組み
脆弱性をスキャンし,ライセンスのコンプライアンスを確認するためにx光は多くの公開されているコンポーネント,脆弱性,ライセンスを含む大きなデータベースを使用しています。初めてx射线をx射线をx射线ンストx射线ルする際,最初にDBの同期が行われ,x光で知られているすべての公開データをダウンロードして保存しますが,これは公開情報の中心となるナレッジベースです。
現在,このデタベスの圧縮サズは約6gbで日々増え続けています。ダウンロードしたデータをx光のデータベースに保存した場合,45 gbのディスクスペースが必要です。このデータをPostgresデータベースに保存するために,x光は100 mbのzipファイルを展開し,zipファイルの中にあるjsonファイルの2000個のオブジェクトを分析します。この作業には最小のシステム要件では15時間近く要していました。
*图像信用
考えられるソリュ,ション
この課題に取り組むために,x光チームは似たような動作をするいくつかの異なるソリューションを検討しました。1つ目のソリューションはユーザー側でデータを再作成するのではなく,既にあるデータをデータベースのテーブルとして配布することでした。この場合,ソフトウェアの一部として配布するデ,タの数が多くなってしまいます。もう一つの方法はコンポーネントや脆弱性に関する情報を得るためにオンラインサーバーを使用することでしたが,これには多くの時間がかかりました。3つ目の選択肢はハイブリッドなもので,余り使用されていないコンポーネントの中央データベースを用意し,共通のコンポーネントを配布するというものでした。そこで私たは3のソリュションを組み合わせることにしました。
調査ステップからスタ,ト
現状を調査する為,pprofルを使用しました。pprofは谷歌が開発したマルチスレッドアプリケ,ションを分析するためのgperftoolsの一部であるcpuプロファescラです。pprofにはプログラムのコールグラフを可視化するgraphvizを生成する機能が備わっています。その結果、Xrayはデータベースの操作に多くの時間を費やしていることが分かりました。以下はpprofのグラフの例です:

pprofグラフの例
バッチではなく以下のようなシングルエントリのinsertステトメントが多数ありました:
INSERT INTO VALUES (a,b,c)
以下のように複数エントリ,を一度に実施可能にも関わらず:
插入表值(a, b, c), d, e, f, g, h,我)…
改善点1:大きな課題はこの改善点をコ,ドに集約することでした。そこで特定の期間やサ▪▪ズを処理するための小さなキュ▪▪を作成しました。
集約
去チャンネルのオブジェクトを内部で集約し,500ミリ秒毎または100オブジェクトを排除しました。
これは私たが行った主要な改善の一です。これまでの変更点と今回の変更点を合わせると,当初よりも約60%のパフォーマンス向上が計測されました。
初期db同期と日次db同期
初期db同期を改善することが重要でした。初期状態ではdbは空で,99%のオブジェクトが追加されても更新されないことが分かっています。
改善点2:オブジェクトを検索して処理するのではなく,単純にデ,タを挿入する楽観的アプロ,チを採用しました。これにより更に数時間短縮し,パフォ,マンスが少し向上しました。
しかし,日次同期は話が異なります。というのも,コンポーネントや脆弱性に関する情報を含むDBをすでに保持しており(初めて実行するわけではありません),新しい脆弱性があれば,このDBを自動または手動で更新されるようにしたいのです。
ワ,カ,を利用
現在,x射线では以下の異なる3ワ,カ,が実行されています:
- Zipファル·ワカ
- Jsonファル·ワカ
- コンポネント/脆弱性·ワカ(jsonファルのエンティティ)
改善点3:x光では1つのファイル上のコンポーネントを並行して読み取るのではなく,ワーカーを使って生ファイルを並行して読み取るようにしています。ZIPファaapl . exeルには2000個のエンティティをjsonで保持する100MBのファaapl . exeルです。
ンデックス化の削減
大量データの挿入に楽観的アプローチ(初期DB同期の為だけに追加)を採用しましたが最後に一番大きなテーブルに対して以下の方法を適用しました。
改良点4:最大のテーブルを作成するには,コピーを使ってテーブルのデータを一括で読み込んだ後,テーブルに必要なインデックスを作成します。ご存知かも知れませんが既存のデタにンデックスを作成する方が各行の読み込み毎に更新するよりも迅速です。

JFrog x射线パフォ,マンス改善の概要
サマリ
これらの改善により,お客様が経験されている同様の動作に役立ことを願っています。今後のx射线の改善にもご期待ください。
dbの改良点をもっと聞きたいですか?DevOpsユ,ザ,カンファレンスのswamppで私た,の講演をご覧ください。