Serverless は、新たに登場したサーバーレス アーキテクチャです。これにより、開発者は操作、リソースの配信、デプロイメントについて心配することなく、コードに集中できるようになります。 この記事では、Python アプリケーションを変換して、アプリケーションがサーバーレス アーキテクチャの利点を継承できるようにすることで、コードの観点からサーバーレスを理解できるようにします。
既存のリソース:
遺伝子検査サービス 上記のリソースを使用して、2人の遺伝子サンプルを比較し、比較結果(直接の血縁関係の確率など)を出力します。 ディレクトリ構造は次のように構築します。
relationships.py コードは次のとおりです。
使い方は次のとおりです:
プロセスは比較的簡単です。遺伝子配列を表す 2 つのファイルがローカル ディスクから読み取られ、アルゴリズムが計算された後に結果が返されます。 私たちは以下のビジネス要件を受け取りました 2,000 人が子供を探していて、20 人が父親を探しているとします。 まず、唾液サンプルを採取し、専門機器で分析します。次にサンプル ファイルを生成し、ホストにアップロードします。サンプルファイルは全部で2020個あります。 ***上記のアルゴリズムを実行する必要があります
要件を完了するには、費やした合計時間を計算しましょう。
一連の計算を完了するには 22 時間かかり、これは遅すぎます。ただし、マシンには 8 つのコアがあるため、8 つのプロセスを実行して一緒に計算することができます。
完了するまでに 3 時間かかりますが、それでもまだ遅すぎます。 8 コアの計算能力が限界に達したと仮定した場合、どのように最適化できるでしょうか? 1.1.1 サーバーレス製品の紹介: UGC UCloud 一般的なコンピューティング AWS Lambda とは異なり、UGC では計算集約型のアルゴリズムを Docker イメージ (以下、「アルゴリズム イメージ」と呼びます) としてカプセル化できます。指定されたアルゴリズム リポジトリにアルゴリズム イメージをプッシュするだけで、UGC はアルゴリズム イメージをコンピューティング ノードの一部に事前にプルします。次の 2 つの形式を使用する場合:
特別に構築された HTTP リクエストが UGC API サービスに送信されると、「タスク スケジューラ」が、アルゴリズム イメージを正常に取得できたノードを選択し、そのノードへのリクエストをスケジュールするのに役立ちます。次に、アルゴリズム イメージ「コンテナ」を起動し、リクエストの HTTP 本文を標準入力 stdin の形式でコンテナに渡します。アルゴリズムが計算された後、アルゴリズムの標準出力 stdout と標準エラー stderr が tar パッケージにパッケージ化され、HTTP 本文の形式で返されます。このアルゴリズムの実行結果を取得するには、返された本体を tar パッケージとして解凍するだけです。 とはいえ、この製品を使用すると、数万個のコアを備えた小型の 8 コア マシンではなく、数万個のコンピューティング ノードに集中的な計算を実行できます。では、このような大量のコンピューティング リソースをどのように使用すればよいのでしょうか?プログラムには少し修正が必要です。 1.1.2 サーバーレスアーキテクチャの変換 2つの部分:
1. 変換アルゴリズムの入力と出力 ① 入力をstdinに変換する
これは、コンテンツを relationship.py の stdin にパイプし、次のように relationship.py で取得します。
②アルゴリズムの出力データをstdoutに書き込む
変換が完了しました。それは早いでしょう。 2. クライアントと同時実行 アルゴリズムミラー(タスク実行)のロジックを変更しました。それでは、タスクの送信を見てみましょう。 HTTPリクエストを構築し、返された結果を読み取る
非同期リクエストもサポートしています 前述したように、この Serverless 製品はアルゴリズムの標準出力を tarball にパッケージ化し、それを HTTP 本文に入れてクライアントに返すので、次の解凍関数を用意します。
tarballを解凍し、結果をresult.txtファイルに書き込みます。 2200個のサンプルファイルの絶対パスリストはget_sample_listメソッドで取得できると仮定します。 sample_2000_list、sample_20_list = get_sample_list() 2000サンプルと20サンプルの直積を計算するには、itertools.productを直接使用できます。
上記のコード スニペットを組み合わせて、メソッドをカプセル化します。
HTTP リクエスト送信の構築は計算集約的ではなく I/O 集約的であるため、コルーチン プールを使用して非常に効率的に処理します。
タスク200を送信するだけで、同時に実行するのは簡単です すべての変換が完了したので、簡単に分析してみましょう。 以前は、8 つのプロセスが計算集約型のアルゴリズムを実行していました。現在、私たちは計算集約型のアルゴリズムをサーバーレス製品に組み込んでいます。クライアントは I/O を集中的に行うため、コルーチンを使用して単一のマシンで非常に高い同時実行性を実現できます。欲張らず、200 の同時実行に基づいて計算します。 詳細な読み物:上記の場合、帯域幅がボトルネックになる可能性があります。 gzip を使用して HTTP 本文を圧縮できます。これは計算集約的な操作です。 8 つのコアの計算能力を効率的に活用するために、サンプル データを 8 つの部分に分割し、8 つのプロセスを開始し、コルーチンを使用してプロセス内でタスクを送信します。
つまり 一連のテストにはわずか 400 秒しかかかりません。これは、前の 7 日間と比べて改善された結果です。結果は驚くべきもので、グラフはより直感的になりました。 さらに、コンピューティング能力のボトルネックにはまだ達していません。同時実行タスクの数を増やすことができます。タスクを送信するマシンをもう 1 台追加すると、時間は 200 秒に短縮され、マシンが 4 台の場合は 100 秒、マシンが 8 台の場合は 50 秒になります... 最も重要なことは、変換されたアーキテクチャがサーバーレス アーキテクチャの利点も継承していることです。
1. サーバーがないので、運用・保守が無料です。 2. 高可用性- サーバーレス サービスは通常、クラウド コンピューティングの強力なインフラストラクチャに依存します。どのモジュールにも単一のポイントはなく、すべてのモジュールは可能な限りクロスアベイラビリティゾーンまたはクロススイッチの災害復旧です。また、今回使用したサービスには、一度同じタスクを送信すると、複数のノードでそのタスクが実行されるという興味深い仕組みがあります。コンピューティング ノードに障害が発生した場合でも、他のノードは正常に復帰できます。先に終わった人が先に戻ります。 3. 従量課金制 - 記事によると、各アルゴリズムの実行にはコアごとに 2 秒の CPU 時間がかかります。コストを直接計算してみましょう。
4. 公開が簡単- Docker をキャリアとして使用するため、言語に依存せず、迅速に公開できます。コードが記述されたら、画像をアップロードするだけです。グレースケールの場合、クライアントの imageName は異なるコードを区別するために異なるバージョンを指定します。 サーバーレス製品によって変換方法が異なる場合があります。エンジニアとしては、変換コストが低く柔軟性が高いため、この方法を好みます。どう思いますか?サーバーレス アーキテクチャや UGC に興味がある場合は、u_nknow WeChat を追加してディスカッション グループに参加できます。 |
<<: マルチメディア シングス プレーヤーが、より適切なオーディオおよびビデオ プレーヤーの選び方について語ります
[コアヒント] ユーザーは、テキスト ラベルがなくても、虫眼鏡アイコンが「検索」を意味することを認識...
月給5,000~50,000のこれらのプロジェクトはあなたの将来です著者丨ルーティン編集部出典: O...
【概要】「オタクの魔法の道具」として知られるKuaiBoは、数年間順調に稼働していましたが、2014...
ソフトウェア定義データセンターの分野では、VMware は近年最大のソフトウェア サプライヤーとなっ...
onehosting は、2009 年に設立されたシンガポール企業 Shana Web Servic...
最近、次世代ネットワーク ソリューションの世界的リーダーである Aruba が、モバイル ファースト...
親愛なるみんな、ホスティング業界で一年で最も待ち望まれている日がやってきました。海外のホスティングベ...
外部リンクの良し悪しは、一般的に、そのリンクがユーザーによって誠実に推奨されているかどうかによって決...
VMware が Horizon VDI 製品の最初のバージョンをリリースして以来、この製品は ...
IT ブログ界の伝説である Moonlight Blog は、単なるシンプルなブログです。どのように...
[[382171]]この記事はWeChatの公開アカウント「JAVA Daily Knowledg...
著者 |ヤン・ジェン制作 | 51CTO テクノロジースタック (WeChat ID: blog) ...
[はじめに] 昨日はSEOとは何かについてお話ししました。BaiduはBaidu Web Searc...
スタートアップ企業は市場で競争する準備ができています。そして、定着した業界を改善する驚くべき方法を思...
今日の企業は、インフラストラクチャ (ネットワーク、ストレージ、データベース)、サービス、またはソフ...