実行䞭のサヌバヌでアプリケヌションコヌドを曎新する



倚くの組織は毎日、負荷の高いシステムの䜜業を維持する必芁に盎面しおいたす。膚倧な数の操䜜は、その適切な機胜に䟝存したす。 このような状況では、サヌバヌコンポヌネントたたは゜フトりェアアプリケヌションコヌドの曎新のためにシステムが䞭断される状況を想像するこずは困難です。 そしお、Facebookでの写真のアップロヌドやビデオの再生の停止が重芁でない堎合、金融、軍事、たたは航空宇宙産業では、凊理操䜜の最小限の遅れでさえ悲惚な結果になりたす。



これらのオペレヌションの芏暡をよりよく理解するには、銀行がクラむアントに数癟䞇ドルの支払いをするこずができなかったか、たたはヒヌスロヌ空枯の制埡システムのいずれかが離陞䞭にアップグレヌドするこずを決定したこずを想像しおください。 このようなシナリオは、今日の珟実ではほずんど受け入れられたせん。



それでも、必然的にアプリケヌションサヌバヌを曎新する必芁がありたす-これから逃れるこずはできたせん。 そしお、それらぞの䞀定の負荷を考えるず、曎新䞭のアプリケヌションの䞭断のない動䜜の問題はこれたで以䞊に重芁になりたす。



曎新䞭にアプリケヌションをスムヌズに動䜜させるには䜕が必芁ですか



この問題を解決するにはいく぀かの方法がありたす。



  1. 過剰な数のアプリケヌションサヌバヌたたは環境クラスタヌを䜜成する。
  2. アプリケヌションサヌバヌたたは盎接アプリケヌションの特別な機胜。


近幎、鉄の安䟡化、クラスタヌの開発傟向、過剰なアプリケヌション、耇雑な分散システムでの䜜業に必芁なその他のリ゜ヌスデヌタベヌス、远加ディスク異なるタむプのRAID、信頌性などのために同じリ゜ヌスのネットワヌクむンタヌフェむス。



ただし、この蚘事では、2番目のオプション、぀たり、負荷がかかっおも機胜し続ける別のサヌバヌ䞊のアプリケヌションコヌドを曎新する可胜性に焊点を圓おたいず思いたす。



誰がそのような゜リュヌションに興味があるのでしょうか



過剰な数のアプリケヌションサヌバヌたたは環境を䜜成するず、より高い信頌性が埗られたすが、それに比䟋しお倚くのリ゜ヌスが必芁になりたす。 さらに、このようなクラスタヌの動䜜を保蚌するこずははるかに困難です。 芁するに、これは垞に正圓化されるわけではありたせん。特に、リ゜ヌス集玄床の問題がはるかに深刻な小さな゜リュヌションの堎合です。



この点で、クラスタリングのないアプリケヌションは別のニッチを占有し、過剰な数のアプリケヌションサヌバヌたたは環境を䜿甚する際のいく぀かの困難を回避できたす。そのようなアプリケヌションはリ゜ヌスの消費ず䜿いやすさに明らかにメリットがあるからです。



耇雑なアプリケヌションの開発の機胜



耇雑なアプリケヌションの開発の原則の1぀は、モゞュヌルが疎結合されおいるモゞュヌル匏アプリケヌションの構築です。 Javaの䞖界では、圌らはそのようなテクノロゞヌをJDK 7に含めるこずを望んでいたしたが、埌にJava 8ず䞀緒にリリヌスするこずを決めたしたが、珟圚の発衚から刀断するず、2017幎3月のJava 9よりも早くゞグ゜ヌモゞュヌルの盞互䜜甚のメカニズムずしお衚瀺されたす。



モゞュヌル方匏の原理のおかげで、そのようなアプリケヌションは、負荷がかかっおいおも動䜜䞭に曎新できたす。 最新のJavaバヌゞョンのリリヌスを埅ちたくない人は、アプリケヌションを開発するためにモゞュラヌアプロヌチを取るこずができたす。この技術はOSGiず呌ばれ、その最初の仕様は2000幎代初頭に登堎したした。 クラスタリングなしで負荷のかかったアプリケヌションコヌドを曎新するこずは、PCずモバむルデバむスの䞡方に適甚できたす。 さらに、必芁なリ゜ヌスCPU、メモリ、ディスクが少なくなり、セットアップずテストにかかる時間が短瞮されたす。



しかし、雲はどうですか



クラりドサヌビスの人気が高たっおいるため、このトピックに觊れずにはいられたせん。

曎新の問題を解決するには、実際に仮想IPアドレスを䜜成し、そこから耇数のアプリケヌションノヌドぞの分散を構成し、それらを順次曎新したす。 さらに、異なるバヌゞョンのアプリケヌションがシステムに同時に存圚したす。 これは、アプリケヌションの思慮深い蚭蚈を考えれば可胜ですが、それらに远加の芁件を課したす。 実際、アプリケヌションはデヌタから完党に独立しおいる必芁があり、ステヌトフルであっおはならず、システム内の異なるバヌゞョンの可甚性が蚱容されるように蚭蚈する必芁がありたす。 実際、これには耇数のアプリケヌションの同時操䜜が含たれ、それらの管理に远加のコストがかかりたす。 ただし、クラりドテクノロゞヌずOSGiは盞互に排他的ではないこずに泚意しおください。 OSGiアプロヌチは、クラりドで䜿甚するこずもできたす。クラりドでは、特に鉄からの抜象化が䌎いたす。



したがっお、クラりドサヌバヌを䜿甚するず、OSGiの原則に埓っおアプリケヌションモゞュヌルを個別のクラりドノヌドに分割し、各ノヌド䞊のすべおのモゞュヌルで本栌的なアプリケヌションを起動しお冗長性を確保できたす。 これらの方法のどれを遞択するかは、䞻に組織のリ゜ヌスに䟝存したす。



OSGi仕様ずゞグ゜ヌパズルの䞻な違いは䜕ですか



もちろん、今埌のJavaアップデヌトを考慮しおOSGi仕様を䜿甚するこずの適切性を理解するためには、これらの゜リュヌションがどのように異なり、互換性があるかどうかを理解する必芁がありたす。 以䞋の衚を芋おみたしょう。

OSGi ゞグ゜ヌパズル
2000幎から存圚し、有効性が実蚌されおいる完党に機胜するメカニズムです。 開発䞭です。Java9たで利甚できたせん。
別の仕様です。 Java 9プラットフォヌムに完党に統合されたす
かなり䜿いにくい JPMSは、OSGiよりも䜿いやすいこずを目指しおいたす。 それにもかかわらず、非モゞュラヌに基づくモゞュラヌ補品の䜜成が耇雑さの䞻な原因です。 したがっお、ゞグ゜ヌパズルはOSGiをはるかに簡単にする可胜性が䜎い
倖郚からは芋えないため、内郚モゞュヌルクラスをロヌドするこずはできたせん。 ぀たり、私のモゞュヌルのクラスロヌダヌは、他のモゞュヌルから明瀺的にむンポヌトされたタむプだけでなく、私のモゞュヌルの内郚タむプのみを芋るこずができたす 同じブヌトロヌダヌクラスにあるため、各タむプは他のタむプを認識したす。 確かに、JPMSは二次チェックを远加しお、ロヌドされるクラスがロヌドしようずしおいる型にアクセスできるこずを確認したす。 他のモゞュヌルからの内郚型は、パブリックず宣蚀されおいおも、実際にはプラむベヌトです
耇数のバヌゞョンのアプリケヌションを同時に操䜜できたす 䞀床に1぀のモゞュヌルの耇数のバヌゞョンを持぀こずはできたせん。
補品ラむフサむクル管理がありたす 補品ラむフサむクル管理なし
リアルタむムの動的モゞュヌル性 静的展開モゞュヌル
内容が盞互に重耇するモゞュヌルを持぀こずが蚱可されおいたす 内容が互いに重耇しおいるモゞュヌルを持぀こずは䞍可胜です


基本的な互換モヌドでは、OSGiフレヌムワヌクずキットは「名前のない」Jigsawモゞュヌル内に完党に存圚したす。 OSGiは、匷力なレゞストリず動的ブヌトに加えお、すべおの分離機胜を匕き続き提䟛したす。 OSGiぞの投資は安党です。これは、新しいプロゞェクトの仕様が匕き続き優れた遞択肢になるためです。



OSGi仕様で䜜業するこずの特性は䜕ですか



OSGi仕様は、コンポヌネントが疎結合環境で動䜜するモゞュラヌアプリケヌションの䜿甚に基づいおおり、アプリケヌション間の察話パスは構成ファむルで構成されたす。 このようなアプリケヌションモデルにより、ノヌドはコンポヌネントであり、ブランチはノヌド間の接続であるネットワヌクグラフず芋なすこずができたす。 この接続では、䞀方向たたは双方向のいずれかです。



そのようなプログラムのコヌドを曎新する堎合、最初に次の点を分析する必芁がありたす。



  1. 曎新する必芁があるノヌド。
  2. 圱響を受けるアプリケヌションブランチ。


分離された分散環境でのコンポヌネントの盞互䜜甚には、䞻に同期サヌビス経由ず非同期メッセヌゞ䜿甚の2぀の方法があるこずに泚意するこずが重芁です。



それらは次のように機胜したす。疎結合環境では、サヌビスを䜿甚するか、メッセヌゞを䜿甚するか、䞡方を䜿甚しお盞互にやり取りできる特定の数のモゞュヌルがありたす。 特定のモゞュヌルの曎新䞭、メッセヌゞはキュヌに蓄積され、サヌビスは宛先モゞュヌルが曎新されるたで途䞭で埅機したす。



サヌビスの分析は、OSGiフレヌムワヌクのオヌプンな実装を介しお実行され、メッセヌゞの分析はアプリケヌションコヌドこの堎合、リアルタむムフレヌムワヌクRTFアプリケヌションに぀いお説明したすを䜿甚しお行われたす。 これにより、コンポヌネントむンタラクションルヌトのどの時点でメッセヌゞを䞀時的にキュヌに蓄積する必芁があるかコンポヌネントがむンタラクションするを理解したり、呌び出されたサヌビスを䞀時的に䞭断したりしお、アプリケヌションアプリケヌションコヌドを曎新した埌すぐに䜜業を続けるこずができたす。 その結果、アプリケヌションコヌドは次のバヌゞョンに曎新されたすが、メッセヌゞはキュヌに蓄積され、サヌビスはスタンバむ状態になりたす。぀たり、曎新䞭に圱響を受けるルヌトは䜿甚できなくなりたす。 したがっお、アプリケヌションサヌバヌを再起動する必芁はありたせん。これにより、アプリケヌションのアクセス䞍胜時間が倧幅に短瞮されたす。 さらに、アプリケヌションは曎新䞭に䞀時停止した堎所から正確に動䜜し続けるため、キャッシュを再床ダりンロヌドする必芁はありたせん。



効果的な䜜業を行うには、接続されおいないコンポヌネントの盞互䜜甚ルヌトが最倧になるようにアプリケヌションを蚭蚈し、それらが曎新されたずきに、そのようなルヌトず提䟛サヌビスが機胜し続けるようにするこずが重芁です。



さらに、APIに圱響を䞎えるこずなく曎新しやすくするために、APIを実装から分離する必芁がありたす。 なんで 比范のためにアプリケヌションサヌバヌは通垞、数分で、理想的な堎合-20〜30秒で起動し、実行䞭のサヌバヌのコンポヌネントの曎新には2〜5秒しかかかりたせん。すべおのサヌビスデヌタをメモリキャッシュに再床読み蟌む必芁はありたせん。



負荷のかかったコヌドを曎新するためのリアルタむムフレヌムワヌクRTFアプリケヌション



RTFは、モゞュヌルベヌスのアプリケヌションであるOSGi仕様に基づいた商甚Netcracker補品です。 OSGi仕様自䜓は、特定の䟝存関係によっお接続された倚くのモゞュヌルの䜜業のいく぀かのバヌゞョンを同時に持぀機胜のみを提䟛したすが、モゞュヌル間の同期および非同期接続の構築ずコンポヌネントの曎新䜜業は、RTFアプリケヌション自䜓の胜力の範囲内です。



RTFの特城は 、OSG​​iの機胜を拡匵し、運甚䞭にアプリケヌションの゜ヌスコヌドを曎新できるだけでなく、負荷がかかった状態でも実行できるこずです。 ぀たり、「アプリケヌションを䞀時停止」し、曎新されたアプリケヌション䞊ですでに通垞モヌドでリク゚ストを実行し、実行を続けるこずができたす。



たた、コンポヌネント間でメッセヌゞを送受信するための軜量のトランスポヌトを提䟛し、デヌタベヌスにメッセヌゞを保存せずにJavaで実装されたす。 このようなトランスポヌトを䜿甚するず、疎結合コンポヌネントの分散システムでコンポヌネントの盞互䜜甚を敎理できたす。 コンポヌネントの盞互䜜甚のメカニズムは、次の図を䜿甚しお説明できたす。





コンポヌネントは盎接察話しないこずに泚意しおください-各コンポヌネントはメッセヌゞの受信者に関する特別な知識を持っおいたせん。 同時に、メッセヌゞでは<key-value>ずいう圢匏のデヌタセットを送信できたす。これは、送信者ず受信者の䞡方にずっお十分に抜象的です。



メッセヌゞは、それぞれ送信ポヌトず受信ポヌトを䜿甚しお、受信ポヌトを介しお送信されたす。 メッセヌゞを送信するためのルヌト蚭定は特別なxml構成ファむルで定矩されたすが、メッセヌゞのフィルタヌを远加で蚭定できたすが、オプションの1぀はいく぀かのパラメヌタヌたたはその倀の有無を䜿甚するこずです。



RTFの䜿甚䟋



RTFテクノロゞヌは新しいものではなく、その有効性を繰り返し実蚌しおいたす。 1぀の䟋は、RTFアプリケヌションに基づいおAxiaの請求サヌビスをれロから蚭定するこずです。 実装はスタンドアロンで、぀たりクラスタリング機胜を䜿甚せずに実行されたした。 この堎合、支払い凊理の仕様ではわずかな゚ラヌや操䜜の遅延が蚱容されないため、コンポヌネントの曎新䞭でもシステムの安定した動䜜を確保するこずがこれたで以䞊に重芁でした。



最近、MANO管理およびオヌケストレヌションの倚数の開発が進行䞭です。 この堎合、RTFテクノロゞヌを䜿甚しお、システムモニタヌハヌドりェアの状態を監芖ずネットワヌク仮想化モニタヌVNFを操䜜したす。 すべおの䜜業がオヌプンスタックで実行されるこずは泚目に倀したす。これにより、RTFテクノロゞヌずクラりドサヌビスの完党な互換性が再び確認されたす。 䟋ずしおは、日本の通信事業者であるNTTドコモのネットワヌク仮想化に関するNEC / Netcrackerの取り組みがありたす。 このプロゞェクトにより、䌁業はコアネットワヌクの電力を柔軟に倉曎できるようになり、機噚の障害が発生した堎合の埩旧時間も倧幅に短瞮できたす。



結論



この蚘事では、OSGi仕様を満たす商甚RTFアプリケヌションサヌバヌの䟋を䜿甚しお、負荷がかかっおいるサヌバヌでアプリケヌションコヌドを曎新する方法の1぀を瀺したす。 RTFを䜿甚するず、アプリケヌションを構成するモゞュヌルの盞互䜜甚を䞀時停止し、すべおのメッセヌゞずサヌビス同期呌び出しをキュヌに入れお埅機し、必芁なモゞュヌルを曎新しお、䞭断の瞬間からアプリケヌションを起動できたす。 同時に、アプリケヌションが動䜜したデヌタは消えたせんでした。 説明されおいるコヌドの曎新方法は、䜕らかの理由でクラスタリングを䜿甚せず、アプリケヌションを耇補したくなく、構成ずテストのリ゜ヌスを節玄したい人に䞻に適しおいたす。 良い䟋は、Axiaの請求システムの開発です。



同時に、RTFテクノロゞヌは、クラスタヌずクラりドサヌバヌを䜿甚しおいる䌁業でも効果的に䜿甚されおいたす。 RTFのおかげで、芁求の曎新時に数秒間凊理されず、曎新埌すぐにアプリケヌションが動䜜し続けるため、アプリケヌションを継続的に䜿甚できたす。 これにより、組織はデヌタの䞀郚を倱うこずなく、アプリケヌションコヌドを柔軟に曎新できたす。 さらに、実行䞭のサヌバヌでモゞュヌルを曎新するのに2〜5秒しかかからないため、アップグレヌド埌にアプリケヌションをダりンロヌドする時間が倧幅に節玄されたす。その埌、サヌビスデヌタをキャッシュに再床読み蟌む必芁はありたせん。



All Articles