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 を追加してディスカッション グループに参加できます。 |
<<: マルチメディア シングス プレーヤーが、より適切なオーディオおよびビデオ プレーヤーの選び方について語ります
今月はたくさんお金を使ったのに効果がなかったと友人からよく聞かれます。それで、広告費はどこへ行ったの...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスウェブサイトが降格される...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスインターネットとスマート...
IT企業ユニシスの調査によると、組織の大部分はまだクラウド移行から大きな利益を得ていない。クラウドへ...
2021年2月25日、JD Cloudが先陣を切って「新年ショッピングシーズン」プロモーションを開始...
今日は、営業を必要とする仕事であるエンタープライズ SEO についてお話します。私たち SEO 担当...
BigRock は、優れた資格を持つ ICANN 認定のドメイン名登録機関です。Directi (h...
DT という言葉はデータ テクノロジーを意味します。これは新しい用語ではないと言えますが、私が本当に...
Baidu Kステーション事件は終わってからかなり経っているが、多くのウェブマスターは事件のことを考...
検索エンジン業界における Google の地位は明らかです。中国のような特殊な環境でも、ウェブマスタ...
「不明瞭なセンシティブワード」の出現は、ウェブサイトにとって珍しいことではないと思います。多くのウェ...
アメリカ技術評議会 (ATC) の最近の IT 近代化レポートでは、米国の機関や組織の IT チーム...
今日は、どのような外部リンクが効果的か、またスパムリンクを避ける方法について議論する記事を皆さんと共...
アプリケーションを本番環境にリリースする場合は、現在のシステムやそれを使用しているユーザーを考慮する...
2012年10月26日夜22時15分、老狗の目の前で百度がKされ、私はそれを現場で捕まえた。「天津s...