CloudQuery の構築: Go での高性能データ統合フレームワーク |クラウドクエリ (2023)

  • ブログ
  • CloudQuery の構築: Go での高性能データ統合フレームワーク

2022年11月28日

CloudQuery の構築: Go での高性能データ統合フレームワーク |クラウドクエリ (1)

名前
エフゲニー・パット
ツイッター
@yevgenypats

データ統合は、API からデータを抽出し、それを正規化し、データベース、データ レイク、ファイルなどのさまざまな宛先にロードするという 30 年以上にわたる問題です。過去 20 年間、この問題は特にマーケティングとビジネス分析の分野で深刻になってきましたが、最近ではクラウド ベンダーとインフラストラクチャ サービスの爆発的な増加に伴い、インフラストラクチャの世界でも深刻になっています。

データ統合は古い問題であり、今後も解決されることはありませんが、完全に解決済みではありますが (少なくとも SaaS サービスは一貫した機械可読 API を備えているという点では改善されていませんが)、この問題に大規模に対処し、新たな局所的最適化を達成する大きなチャンスがあり、それは今すぐにでも実現できると私たちは考えています。

(Video) ZYXEL | Webinar: Tech Talk: Technology on the Sandboxing and Cloud Query (10-08-2019)

この問題に対処するには、大きな課題が伴います。この投稿では、これらの課題、それが難しい理由、そして CloudQuery の設計でたどり着いた解決策について説明します。

CloudQuery で行った技術的およびアーキテクチャ上の決定について説明する前に、ELT フレームワークの主な課題と要件について説明します。

  • API の対象範囲:対象となる API の数を効率的な方法で拡張およびサポートする (つまり、開発者を減らし、サポートする API を増やす) - コミュニティを活用することが重要です。
  • スケーリング先:ソースとは異なり、宛先は有限ですが、適切なアーキテクチャでは、ソースと宛先が正しく分離されていることを保証する必要があります。これにより、新しい宛先はすぐに機能し、ソースを変更する必要がなくなります(そうしないと、開発作業が増加します)ん*んどこnはソースプラグインの数であり、メートルは宛先プラグインの数です)。
  • パフォーマンス:ELT ワークロードの実行はコンピューティング集約的であり、抽出される API の数に応じて増加するため、コストが高くなる可能性があります。コストを削減し、ソースから宛先に情報をできるだけ早く転送するには、高性能の同時アーキテクチャを採用することが重要です。

このセクションでは、私たちがたどり着いた最も重要な決定と解決策について、上記の課題別に整理して説明します。

API の範囲

オープンソース

すべての統合を社内でサポートできるベンダーは存在しません。したがって、私たちが考える最良かつ唯一の方法は、ソフトウェアをオープンソース化し、ユーザーが単一のプラグインにブロックされることなく公式プラグインに貢献し、コミュニティ プラグインを開発できるようにすることです。ベンダー。この「無限の API 統合」問題に対処し、オープンソースの道をうまく進んだ最近の良い例は、Terraform と Pulumi です。

プラグイン可能なソース

プラグイン可能なソースは、開発と使いやすさの両方の観点から API カバレッジを拡大し、次の課題を解決するための鍵となります。

  • バイナリサイズ:ユーザーは、使用したいプラグインのみをダウンロードすることで、バイナリが無限に大きくなり、最終的にはバイナリ サイズの問題だけでなく、さまざまなサービスからのライブラリの衝突を引き起こすことなく、良好なパフォーマンスとユーザー エクスペリエンスを確保できます。
  • バージョン管理:プラグインがスタンドアロン gRPC バイナリとして開発されている場合、ユーザーはニーズに応じてさまざまなプラグインのさまざまなバージョンを使用できます。
  • 独立した開発:開発者は、PR のレビューをベンダー (この場合は当社) にブロックされることなく、独自のリポジトリで独自のプラグインを開発できます。

私たちのプラグイン可能なシステムgRPC に基づいており、プラグインがクロスプラットフォームで独立しており、パフォーマンスが高いことが保証されています。

(Video) データ ビューを使用して Salesforce Marketing Cloud でメジャーを再作成する

ソースプラグイン用のSDK

ELT コードの作成には、多くの定型コード、テスト コード、扱いにくいパフォーマンスの問題、並列化コードが含まれます。私たちが構築したのは、ゴーSDKこれにより、私たちも他の開発者も、CloudQuery SDK が並列化、変換、読み込み、テストを担当しながら、E(抽出) コードのみに集中できるようになります。

コード生成

大きな課題は、多数の API をスケーリングして継続的にサポートすることです。コード生成を利用して CloudQuery プラグインを生成する方法を説明する前に、複数言語のクライアント ライブラリの生成がどのように機能することが多いかを簡単に見てみましょう。

通常、gRPC/GraphQL/Smithy などの中間言語があり、多数の言語のクライアントを手動で維持してサーバー API に対応する代わりに、複数の言語のサーバー スタブとクライアントを自動的に生成します。

近年、クライアント ライブラリの生成に関していくつかの大きな進歩があり、私たちもそれを活用しました。

スキーマ定義を利用して、そこからソース プラグインを生成することもできますが、それをパイプラインのさらに 1 ステップ先、つまり Go コードから行うことにしました。

Go はコード分析に非常に適しているため、コード生成ライブラリGo 構造体から CloudQuery スキーマを生成します。これは、次のような多くのことを達成するのに役立ちます。

(Video) 初心者向け Power BI チュートリアル: データの取得。クエリ エディター (1.1.2)

  1. API を使用して CloudQuery スキーマを自動的に最新の状態に保つ
  2. 開発者向けに構築され、サービス API と通信する際の重要な機能が含まれる Go クライアントを開発者が使用できるようにします。
  3. 現在のプラグインのセットは 80% 以上が自動生成されています。

デスティネーションのスケーリング

プラグイン可能な宛先

もう 1 つの重要な要件は、複数の宛先をサポートすることです。実際には宛先の数は限られていますが、宛先がソースから切り離されない場合、新しい宛先が追加されるたびにソース プラグインを更新する必要があり、そのために必要となるプラグインの数は増加します。ん*ん(nソースプラグインの数とメートル宛先プラグインの数)コード変更の数が増加し、開発が持続不可能になります。

宛先プラグインは、gRPC サーバーとしてのソース プラグインと同様の方法で実装されます。

型システム

プラガブル ELT プラットフォームの役割は、次の 2 つを行うことです。

  1. API からのデータを変換および正規化する
  2. 変換されたフィールドごとに、型データを追加します。

CloudQuery は、すべてのフィールドを独自のリッチタイプ システムに変換します。17種類(IP アドレス、MAC アドレスなどを含む)。これにより、すべての検証が変換フェーズで確実に行われるようになります。宛先プラグインは、各宛先がサポートするタイプに応じて、これを変換するだけで済みます。これは、Singer や Airbyte の仕組みからの大きな変化です。これらのシステムは、JSON で利用可能なものを使用し、JSONスキーマエンコーディングと型システムを結合するためです。

これら 2 つの設計上の決定により、CloudQuery はすでに5つの目的地最初の活動からわずか2か月後V1 リリース

パフォーマンス

クラウド インフラストラクチャのハイパースケールは、ELT の世界に新たな課題をもたらしました。たとえば、一部の企業は 10,000 を超える GCP アカウントと AWS アカウントを持ち、合計で 1 億を超えるリソースを保有しています。これらのインベントリを最新の状態に保ち、毎日 (または 1 日に 2 回) 取得するにはどうすればよいでしょうか?これに対処するために、次の 2 つのアーキテクチャ上の決定を行いました。

(Video) 資産管理 - タグ付け

同時実行性とスケジューリング モデル

すべてのソース プラグインの同時実行モデルを提供する SDK の一部として、Go の優れた同時実行サポートを利用しました。 Go のゴルーチンを使用すると、少ない OS スレッドと低いメモリ オーバーヘッドで数万の API 呼び出しまで拡張できます。

ここで私たちが行った 2 番目のことは、優れたスケジューラーを作成することです。 API を並行して抽出するには、メモリの制限が伴います。これは、コンピュータ サイエンスの古典的なクロールの問題と似ており、各「深さ」のリンク数がわからない場合に Web を効率的にクロールする方法に似ています。 CQ SDK は、複数のスケジューリング アルゴリズムとメカニズムをサポートできる方法で構築されています。デフォルトのアルゴリズムは同時実行 DFS アルゴリズムであり、同時実行に利用可能なすべてのコンピューティング リソースを活用しながら、メモリ使用量が確実に所定の制限に保たれます。

水平方向のスケーリング

前述の同時実行性およびスケジューリング アルゴリズムにより、1 つの CQ プロセスのコンピューティングとメモリが適切に利用されます。これにより、垂直方向のスケーリングが簡単になりますが、水平方向のスケーリングはどうなるでしょうか?垂直方向と水平方向の両方に拡張できるように、CQ をステートレスとして設計しました。つまり、バックエンドがなく、適切な資格情報と構成ファイルだけで実行されます。これにより、ユーザーは構成 (アカウントごとの構成など) を分割し、オーケストレーションを必要とせずに必要な数のノードで CQ を実行できるようになります。

ここでは、CloudQuery で行った主な設計上の決定について簡単に説明します。特にご興味のある点がございましたら、お気軽にお問い合わせください。GitHubまた不和喜んでフォローアップのブログ投稿を書きたいと思います。

クロスアカウントの AWS EventBridge の使用状況を確認するCloudQuery Snowflake デスティネーション プラグインの発表

Videos

1. Salesforce Marketing Cloud で SQL クエリ アクティビティを作成する方法
(Datarati - Implementation Guru)
2. ZYXEL | Webinar: WiFi - Best Practices for Better Deployments and Satisfied Subscribers (09-27-2018)
(Zyxel America Service Provider)
3. Getting Started with Cloud SQL for PostgreSQL
(Google Cloud Tech)
4. Reporting with BigQuery
(Google Analytics)

References

Top Articles
Latest Posts
Article information

Author: Patricia Veum II

Last Updated: 07/20/2023

Views: 5233

Rating: 4.3 / 5 (44 voted)

Reviews: 83% of readers found this page helpful

Author information

Name: Patricia Veum II

Birthday: 1994-12-16

Address: 2064 Little Summit, Goldieton, MS 97651-0862

Phone: +6873952696715

Job: Principal Officer

Hobby: Rafting, Cabaret, Candle making, Jigsaw puzzles, Inline skating, Magic, Graffiti

Introduction: My name is Patricia Veum II, I am a vast, combative, smiling, famous, inexpensive, zealous, sparkling person who loves writing and wants to share my knowledge and understanding with you.