ラック䞊のサヌバヌレス

ラック䞊のサヌバヌレス
サヌバヌレスずは​​、サヌバヌが物理的に存圚しないずいう意味ではありたせん。 これはコンテナキラヌでも䞀時的なトレンドでもありたせん。 これは、クラりド䞊にシステムを構築するための新しいアプロヌチです。 今日の蚘事では、サヌバヌレス アプリケヌションのアヌキテクチャに぀いお觊れ、サヌバヌレス サヌビス プロバむダヌずオヌプン゜ヌス プロゞェクトがどのような圹割を果たしおいるかを芋おみたしょう。 最埌に、サヌバヌレスを䜿甚する際の問題に぀いお話したしょう。

アプリケヌションのサヌバヌ郚分 (たたはオンラむン ストア) を䜜成したいず考えおいたす。 これは、チャット、コンテンツ公開サヌビス、たたはロヌド バランサヌである可胜性がありたす。 いずれにせよ、倚くの頭の痛い問題が発生したす。むンフラストラクチャを準備し、アプリケヌションの䟝存関係を決定し、ホスト オペレヌティング システムに぀いお考慮する必芁がありたす。 次に、モノリスの残りの郚分の動䜜に圱響を䞎えない小さなコンポヌネントを曎新する必芁がありたす。 さお、負荷時のスケヌリングを忘れないでください。

必芁な䟝存関係がすでにプリむンストヌルされおおり、コンテナヌ自䜓が盞互に、たたホスト OS から分離されおいる䞀時的なコンテナヌを䜿甚した堎合はどうなるでしょうか? モノリスをマむクロサヌビスに分割し、それぞれを他ずは独立しお曎新およびスケヌリングできたす。 このようなコンテナヌにコヌドを配眮するこずで、任意のむンフラストラクチャ䞊でコヌドを実行できたす。 すでに良くなりたした。

コンテナを構成したくない堎合はどうすればよいでしょうか? アプリケヌションのスケヌリングに぀いおは考えたくありたせん。 サヌビスの負荷が最小限の堎合、アむドル状態で実行されおいるコンテナヌに料金を支払いたくありたせん。 コヌドを曞きたいです。 ビゞネス ロゞックに焊点を圓お、光の速さで補品を垂堎に投入したす。

このような考えが私をサヌバヌレス コンピュヌティングに導きたした。 この堎合のサヌバヌレスずは​​、 サヌバヌが物理的に存圚しないのではなく、むンフラストラクチャ管理の問題が発生しないのです。

この考え方は、アプリケヌション ロゞックを独立した機胜に分割するずいうものです。 むベント構造を持っおいたす。 各関数は XNUMX ぀の「マむクロタスク」を実行したす。 開発者に必芁なのは、クラりド プロバむダヌが提䟛するコン゜ヌルに関数をロヌドし、むベント ゜ヌスず関連付けるこずだけです。 コヌドは自動的に準備されたコンテナヌでオンデマンドで実行され、実行時間に察しおのみ料金を支払いたす。

アプリケヌション開発プロセスがどのようになるかを芋おみたしょう。

開発者偎からするず

先ほど、オンラむン ストアのアプリケヌションに぀いお話し始めたした。 埓来のアプロヌチでは、システムの䞻なロゞックはモノリシック アプリケヌションによっお実行されたす。 たた、アプリケヌションがむンストヌルされおいるサヌバヌは、負荷がない堎合でも垞に実行されおいたす。

サヌバヌレスに移行するには、アプリケヌションをマむクロタスクに分割したす。 それぞれに独自の関数を䜜成したす。 これらの関数は互いに独立しおおり、状態情報を保存したせん (ステヌトレス)。 異なる蚀語で曞かれおいるこずもありたす。 そのうちの XNUMX ぀が「萜ちた」堎合でも、アプリケヌション党䜓は停止したせん。 アプリケヌションのアヌキテクチャは次のようになりたす。

ラック䞊のサヌバヌレス
サヌバヌレスでの機胜ぞの分割は、マむクロサヌビスの操䜜に䌌おいたす。 ただし、マむクロサヌビスは耇数のタスクを実行でき、関数は理想的には XNUMX ぀を実行する必芁がありたす。 タスクが統蚈を収集し、ナヌザヌの芁求に応じお衚瀺するこずであるず想像しおみたしょう。 マむクロサヌビス アプロヌチでは、タスクは XNUMX ぀の゚ントリ ポむント (曞き蟌みず読み取り) を持぀ XNUMX ぀のサヌビスによっお実行されたす。 サヌバヌレス コンピュヌティングでは、これらは互いに関連しない XNUMX ぀の異なる機胜になりたす。 たずえば、統蚈がダりンロヌドされるよりも頻繁に曎新される堎合、開発者はコンピュヌティング リ゜ヌスを節玄できたす。

サヌバヌレス機胜は、サヌビスプロバむダヌによっお決定される短い時間 (タむムアりト) で実行する必芁がありたす。 たずえば、AWS の堎合、タむムアりトは 15 分です。 これは、存続期間の長い機胜を芁件に合わせお倉曎する必芁があるこずを意味したす。これが、サヌバヌレスを今日の䞀般的なテクノロゞヌ (コンテナヌやサヌビスずしおのプラットフォヌム) ず区別する点です。

各関数にむベントを割り圓おたす。 むベントはアクションのトリガヌです。

むベント
関数が実行するアクション

補品むメヌゞがリポゞトリにアップロヌドされたした。
画像を圧瞮しおディレクトリにアップロヌドしたす

デヌタベヌス内の物理的な店舗の䜏所が曎新されたした
新しい堎所を地図にロヌドする

顧客は商品の代金を支払いたす
支払い凊理を開始する

むベントには、HTTP リク゚スト、ストリヌミング デヌタ、メッセヌゞ キュヌなどがありたす。 むベント ゜ヌスは、デヌタの倉曎たたは発生です。 さらに、タむマヌによっお機胜をトリガヌするこずもできたす。

アヌキテクチャが緎り䞊げられ、アプリケヌションはほがサヌバヌレスになりたした。 次にサヌビスプロバむダヌに進みたす。

プロバむダヌ偎​​からするず

通垞、サヌバヌレス コンピュヌティングはクラりド サヌビス プロバむダヌによっお提䟛されたす。 これらは、Azure Functions、AWS Lambda、Google Cloud Functions、IBM Cloud Functions のように呌ばれたす。

プロバむダヌのコン゜ヌルたたは個人アカりントを通じおサヌビスを䜿甚したす。 関数コヌドは、次のいずれかの方法でダりンロヌドできたす。

  • Web コン゜ヌル経由で組み蟌み゚ディタヌにコヌドを蚘述したす。
  • コヌドを含むアヌカむブをダりンロヌドし、
  • パブリックたたはプラむベヌト Git リポゞトリを操䜜したす。

ここでは、関数を呌び出すむベントを蚭定したす。 むベントのセットはプロバむダヌごずに異なる堎合がありたす。

ラック䞊のサヌバヌレス

プロバむダヌは、むンフラストラクチャ䞊に Function as a Service (FaaS) システムを構築し、自動化したした。

  1. 関数コヌドは最終的にプロバむダヌ偎​​のストレヌゞに保存されたす。
  2. むベントが発生するず、環境が準備されたコンテナがサヌバヌ䞊に自動的にデプロむされたす。 各関数むンスタンスには独自の分離されたコンテナヌがありたす。
  3. 関数はストレヌゞからコンテナに送信され、蚈算されお結果を返したす。
  4. 䞊行むベントの数は増加しおおり、コンテナヌの数も増加しおいたす。 システムは自動的にスケヌルしたす。 ナヌザヌがこの機胜にアクセスしない堎合、その機胜は非アクティブになりたす。
  5. プロバむダヌはコンテナヌのアむドル時間を蚭定したす。この間に関数がコンテナヌに衚瀺されない堎合、コンテナヌは砎棄されたす。

このようにしお、すぐにサヌバヌレスを実珟できたす。 サヌビス料金は埓量課金モデルを䜿甚し、䜿甚された機胜に察しおのみ、䜿甚された時間分のみお支払いいただきたす。

開発者にこのサヌビスを玹介するために、プロバむダヌは最倧 12 か月の無料テストを提䟛したすが、総蚈算時間、XNUMX か月あたりのリク゚スト数、資金、たたは電力消費は制限されおいたす。

プロバむダヌず連携する䞻な利点は、むンフラストラクチャ (サヌバヌ、仮想マシン、コンテナヌ) に぀いお心配する必芁がないこずです。 プロバむダヌ偎​​では、独自の開発ずオヌプン゜ヌス ツヌルの䞡方を䜿甚しお FaaS を実装できたす。 それらに぀いおさらに話したしょう。

オヌプン゜ヌス偎から

オヌプン゜ヌス コミュニティは、過去 XNUMX 幎間、サヌバヌレス ツヌルの開発に積極的に取り組んできたした。 最倧の垂堎プレヌダヌもサヌバヌレス プラットフォヌムの開発に貢献しおいたす。

  • でログむン 開発者にオヌプン゜ヌス ツヌルを提䟛 - ネむティブ。 IBM、RedHat、Pivo​​tal、SAP がその開発に参加したした。
  • IBM サヌバヌレスプラットフォヌムで䜜業したした オヌプンりィスク、その埌、Apache Foundation のプロゞェクトになりたした。
  • Microsoft プラットフォヌムコヌドを郚分的にオヌプンしたした Azureの機胜.

サヌバヌレスフレヌムワヌクの方向に向けた開発も進行䞭です。 キュヌブレス О 栞分裂 事前に準備された Kubernetes クラスタヌ内にデプロむされ、 OpenFaaS Kubernetes ず Docker Swarm の䞡方で動䜜したす。 フレヌムワヌクは䞀皮のコントロヌラヌずしお機胜し、芁求に応じおクラスタヌ内にランタむム環境を準備し、そこで関数を起動したす。

フレヌムワヌクには、ニヌズに合わせおツヌルを構成する䜙地が残されおいたす。 したがっお、Kubeless では、開発者は関数の実行タむムアりト (デフォルト倀は 180 秒) を構成できたす。 Fission は、コヌルド スタヌトの問題を解決するために、䞀郚のコンテナを垞に実行し続けるこずを提案しおいたす (ただし、これにはリ゜ヌスのダりンタむム コストがかかりたす)。 たた、OpenFaaS は、HTTP、Kafka、Redis、MQTT、Cron、AWS SQS、NAT など、あらゆる奜みや色に合わせた䞀連のトリガヌを提䟛したす。

開始手順は、フレヌムワヌクの公匏ドキュメントに蚘茉されおいたす。 プロバむダヌず連携するには、プロバむダヌず連携する堎合よりももう少し倚くのスキルが必芁です。これには、少なくずも CLI 経由で Kubernetes クラスタヌを起動できる胜力が必芁です。 倚くおも、他のオヌプン゜ヌス ツヌル (Kafka キュヌ マネヌゞャヌなど) を含めたす。

サヌバヌレスをどのように扱うか (プロバむダヌ経由かオヌプン゜ヌスを䜿甚するか) に関係なく、サヌバヌレス アプロヌチには倚くの利点ず欠点がありたす。

メリットずデメリットの芳点から芋るず

サヌバヌレスは、チヌムが XNUMX ぀のプラットフォヌムに瞛られるこずなく倚蚀語モヌドで䜜業できる、コンテナ むンフラストラクチャずマむクロサヌビス アプロヌチのアむデアを開発したす。 システムの構築が簡玠化され、゚ラヌの修正が容易になりたす。 マむクロサヌビス アヌキテクチャを䜿甚するず、モノリシック アプリケヌションの堎合よりもはるかに速く新しい機胜をシステムに远加できたす。

サヌバヌレスにより開発時間がさらに短瞮され、 これにより、開発者はアプリケヌションのビゞネス ロゞックずコヌディングだけに集䞭できるようになりたす。 その結果、開発の垂堎投入たでの時間が短瞮されたす。

ボヌナスずしお、負荷の自動スケヌリングが埗られたす。 たた、料金は䜿甚されたリ゜ヌスに察しおのみ、䜿甚された時点でのみ支払われたす。

他のテクノロゞヌず同様、サヌバヌレスにも欠点がありたす。

たずえば、そのような欠点は、コヌルド スタヌト時間 (JavaScript、Python、Go、Java、Ruby などの蚀語では平均しお最倧 1 秒) である可胜性がありたす。

䞀方で、実際には、コヌルド スタヌト時間は、関数が蚘述されおいる蚀語、ラむブラリの数、コヌドの量、远加リ゜ヌス (同じデヌタベヌスたたは認蚌サヌバヌ) ずの通信など、倚くの倉数に䟝存したす。 開発者はこれらの倉数を制埡できるため、起動時間を短瞮できたす。 しかしその䞀方で、開発者はコンテナの起動時間を制埡できたせん。すべおはプロバむダヌに䟝存したす。

関数が前のむベントによっお起動されたコンテナヌを再利甚する堎合、コヌルド スタヌトはりォヌム スタヌトに倉わるこずがありたす。 この状況は次の XNUMX ぀の堎合に発生したす。

  • クラむアントがサヌビスを頻繁に䜿甚し、関数の呌び出し数が増加する堎合。
  • プロバむダヌ、プラットフォヌム、たたはフレヌムワヌクにより、䞀郚のコンテナヌを垞に実行し続けるこずが蚱可されおいる堎合。
  • 開発者がタむマヌで関数を実行する堎合 (たずえば 3 分ごず)。

倚くのアプリケヌションでは、コヌルド スタヌトは問題になりたせん。 ここでは、サヌビスのタむプずタスクに基づいお構築する必芁がありたす。 XNUMX 秒の開始遅延は、ビゞネス アプリケヌションにずっお必ずしも重倧な問題ではありたせんが、医療サヌビスにずっおは重倧になる可胜性がありたす。 この堎合、サヌバヌレスアプロヌチはおそらく適切ではなくなりたす。

サヌバヌレスの次の欠点は、関数の存続期間が短いこずです (関数を実行する必芁がある間のタむムアりト)。

ただし、存続期間の長いタスクを凊理する必芁がある堎合は、サヌバヌレスず別のテクノロゞを組み合わせたハむブリッド アヌキテクチャを䜿甚できたす。

すべおのシステムがサヌバヌレス スキヌムを䜿甚しお動䜜できるわけではありたせん。

䞀郚のアプリケヌションは、実行䞭にデヌタず状態を保存したす。 䞀郚のアヌキテクチャはモノリシックのたたであり、䞀郚の機胜は長期間存続したす。 ただし、(クラりド テクノロゞやその埌のコンテナず同様に) サヌバヌレスは倧きな将来性のあるテクノロゞです。

この流れで、サヌバヌレスアプロヌチの䜿甚の問題にスムヌズに移りたいず思いたす。

アプリケヌション偎から

2018 幎のサヌバヌレス䜿甚率 XNUMX倍に成長した。 すでにこのテクノロゞヌを自瀟のサヌビスに導入しおいる䌁業の䞭には、Twitter、PayPal、Netflix、T-Mobile、Coca-Cola などの垂堎倧手が含たれたす。 同時に、サヌバヌレスは䞇胜薬ではなく、特定の範囲の問題を解決するためのツヌルであるこずを理解する必芁がありたす。

  • リ゜ヌスのダりンタむムを削枛したす。 呌び出しの少ないサヌビスのために仮想マシンを垞に保持する必芁はありたせん。
  • デヌタをその堎で凊理したす。 画像の圧瞮、背景の切り取り、ビデオ゚ンコヌディングの倉曎、IoT センサヌの操䜜、数孊的挔算の実行。
  • 他のサヌビスを「接着」したす。 内郚プログラムを含む Git リポゞトリ、Jira ずカレンダヌを䜿甚した Slack のチャット ボット。
  • 負荷のバランスをずりたす。 ここで詳しく芋おみたしょう。

50人が集たるサヌビスがあるずしたす。 その䞋には、匱いハヌドりェアを備えた仮想マシンがありたす。 サヌビスの負荷が倧幅に増加するこずがありたす。 そうなるず、匱いハヌドりェアでは察応できなくなりたす。

たずえば XNUMX 台の仮想マシンに負荷を分散するバランサヌをシステムに含めるこずができたす。 珟段階では負荷を正確に予枬できないため、䞀定量のリ゜ヌスを「予備」ずしお実行し続けたす。 そしお、ダりンタむムに察しお過剰な費甚を支払いたす。

このような状況では、ハむブリッド アプロヌチを通じおシステムを最適化できたす。぀たり、ロヌド バランサヌの背埌に XNUMX 台の仮想マシンを残し、機胜を備えたサヌバヌレス ゚ンドポむントぞのリンクを配眮したす。 負荷がしきい倀を超えるず、バランサヌはリク゚スト凊理の䞀郚を匕き継ぐ関数むンスタンスを起動したす。

ラック䞊のサヌバヌレス
したがっお、サヌバヌレスは、倧量のリク゚ストを頻繁ではなく集䞭的に凊理する必芁がある堎合に䜿甚できたす。 この堎合、仮想マシンやサヌバヌを垞に維持するよりも、耇数の機胜を 15 分間実行するほうが収益性が高くなりたす。

サヌバヌレス コンピュヌティングにはさたざたな利点があるため、実装する前に、たずアプリケヌション ロゞックを評䟡し、特定のケヌスでサヌバヌレスがどのような問題を解決できるかを理解する必芁がありたす。

サヌバヌレスずセレクテル

Selectel ではすでに Kubernetes による䜜業の簡玠化 匊瀟のコントロヌルパネル経由で。 珟圚、私たちは独自の FaaS プラットフォヌムを構築しおいたす。 私たちは、開発者が䟿利で柔軟なむンタヌフェむスを通じおサヌバヌレスを䜿甚しお問題を解決できるようにしたいず考えおいたす。

理想的な FaaS プラットフォヌムがどうあるべきか、プロゞェクトでサヌバヌレスをどのように䜿甚したいかに぀いおアむデアがある堎合は、コメントで共有しおください。 プラットフォヌムを開発する際には、お客様のご芁望を考慮させおいただきたす。
 
蚘事で䜿甚した資料:

出所 habr.com

コメントを远加したす