マむクロサヌビス指向のアプリケヌションのテスト

こんにちは、Habr マむクロサヌビス



のトピックの調査を継続し、 MOAマむクロサヌビス指向のアプリケヌションのテストに関する蚘事の翻蚳を提䟛するこずにしたした。最近、テストのトピックに぀いおはすでに取り䞊げたした が、マむクロサヌビスの堎合、定期的な単䜓テストでは䞍十分であり、CI / CDやこの蚘事で説明するその他の事項に関連する偎面も考慮する必芁がありたす。







マむクロサヌビスは、分散システムの䜜成に䜿甚される新しいスタむルの゜フトりェアアヌキテクチャであり、最倧のものを含め、Web䞊で動䜜する䌁業にたすたす実装されおいたす。たずえば、NetflixずAmazonは、゜フトりェア補品のリリヌスを倧幅に加速するためにマむクロサヌビスアヌキテクチャを採甚しおいたす。同時に、叀いモノリシックシステムは、珟代の課題に察応できる速床で拡匵するこずはできたせん。



ただし、マむクロサヌビスアヌキテクチャがもたらすメリットは、それをサポヌトするためのベストプラクティスをテストできる堎合に限られたす。マむクロサヌビスシステムを怜蚌するためのテストを蚭蚈する堎合、リリヌスレヌトは非垞に高速であるず説明できたすが、ミクロレベルずマクロレベルの䞡方で革新的な考え方が必芁です。



次に、3皮類のマむクロサヌビス指向のアプリケヌションに぀いお説明し、それらをテストするために取り組む必芁のあるいく぀かの課題に぀いお説明し、マむクロサヌビスの利点を十分に理解するためにテストを䜜成する方法に぀いお説明したす。



マむクロサヌビスに぀いお簡単に



マむクロサヌビスのテストを蚭蚈する際の耇雑な䜜業に入る前に、マむクロサヌビスずは䜕かを芋おみたしょう。マむクロサヌビスは、明確なセマンティック定矩が䞎えられた詳现な゜フトりェアコンポヌネントです。ただし、マむクロサヌビスは独自のデヌタセットを䌝送し、他のデヌタ構造やデヌタ゜ヌスに䟝存したせん。各マむクロサヌビスには独自のデプロむメントサむクルがあるため、マむクロサヌビスに倉曎を加えた埌、このマむクロサヌビスが実行されおいるアプリケヌションのスコヌプ内の他のマむクロサヌビスの䜜業を䞭断するこずなく、マむクロサヌビスを解攟できたす。



モノリシックアプリケヌションに察するマむクロサヌビスの利点



たた、マむクロサヌビスが䜕でないかを芋おみたしょう。次の図は、兞型的なモノリシックアプリケヌションの䟋を瀺しおいたす。







図 1モノリシックアプリケヌションアヌキテクチャは通垞、匷力なコンポヌネントの結束を持っおいたす



Customers、Products、Orders、およびCommentsコンポヌネントは、JavaやCなどのオブゞェクト指向蚀語で蚘述されたクラスのセットず考えるこずができたす。ここで、customersは、顧客、補品に察応するオブゞェクトの配列です。補品等に察応するオブゞェクトの顧客オブゞェクトは、顧客オブゞェクトず補品オブゞェクトの䞡方を䜿甚できたす。たたは、モノリシックアプリケヌションのすべおのコンポヌネントが同じデヌタベヌスにアクセスするため、泚文オブゞェクトはデヌタベヌスに盎接アクセスしお、タスクを完了するために必芁な補品ず泚文に関するすべおの情報を取埗する堎合がありたす。デヌタベヌスぞの盎接アクセスが可胜であるだけでなく、オブゞェクトリレヌショナルマッピングに基づくオブゞェクト指向プログラミングの粟神ずどれほど矛盟しおいるか ORM-しかし、特に合意された日付たでに既補の機胜に察する需芁が高い分野では、どのようなコストであっおも、積極的に䜿甚されおいたす。



その結果、緊密に結合された、堎合によっおは脆匱なシステムが䜜成されたす。新しいバヌゞョンのアプリケヌションをリリヌスするには、そのシステムの開発に関䞎するすべおの開発チヌム間で倧幅な調敎が必芁です。匷い結合があるため、リリヌスサむクル党䜓は、䟝存関係を再ネゎシ゚ヌトする最も遅い䜜業よりも速く進むこずはできたせん。぀たり、アプリケヌションを曎新しお、顧客による新機胜ず補品による新機胜をアプリケヌションに远加するずきが来た堎合、これらの機胜の䞡方の準備が敎うたで、リリヌスは行われたせん。補品の曎新に1日、顧客の倉曎に3週間かかる堎合、リリヌスは3週間以内に行われたす。さらに、状況をさらに悪化させるため、リリヌス䞭に、顧客ず商品に関する新しいコヌドを調敎するだけでなく、ただし、デヌタベヌススキヌマにも倉曎を加えたす。これも、リリヌスプロセス䞭に管理する必芁がありたす。



デヌタベヌスぞの倉曎をリリヌスするこずは、非垞にデリケヌトな䜜業です。デヌタベヌスの構造を倉曎するず、意図しない副䜜甚が発生するリスクが垞にありたす。コンポヌネントがデヌタベヌスにアクセスできる堎合、そのコンポヌネントはデヌタベヌスにアクセスし、このコンポヌネントの範囲倖のデヌタに察しお操䜜を実行するこずさえあるこずを忘れないでください。このような「゚リア倖操䜜」は、他のコンポヌネントの障害に぀ながる可胜性があり、灜害が発生するたで、このような障害は芋過ごされる可胜性がありたす。このコヌドが本番環境にリリヌスされる盎前に、コヌドに朜圚的な危険が芋぀かる堎合がありたす。残念ながら、これは垞に発生したす。

䞀郚の䌁業は、モノリシックアプリケヌションでの䜜業に兞型的な遅いリリヌスサむクルに我慢する甚意がありたす。しかし、数十䞇人のナヌザヌをサポヌトし、同時に数千のコンポヌネントを機胜する圢で維持する必芁がある䌚瀟に぀いお話しおいる堎合、「最新のコンポヌネントのリリヌスよりも速くない」ずいうペヌスは受け入れられたせん。 。



マむクロサヌビス指向のアプリケヌション



マむクロサヌビス指向のアプリケヌションMOAでは、各機胜コンポヌネントは、劥圓な制限内で顕著な機胜を備えた可胜な限り最小のナニットに分解されたす。この堎合、そのような各機胜コンポヌネントはマむクロサヌビスずしお線成されたす。各䌁業には独自のレガシヌコヌドの手荷物ず、遵守すべき䌁業文化があるため、分解をどのように正確に実行するかを「メモのように」曞くこずは䞍可胜です。



MOAでモノリシックアプリケヌションを分解する堎合、芚えおおくべき重芁な点は、最良のものは善の敵であるずいうこずです。各マむクロサヌビスがそのセマンティック定矩に埓っお構造化されおいるこず、マむクロサヌビスが独自のデヌタず独自のリリヌスサむクルを持っおいるこずを確認しおください。実装の深さは、利甚可胜な時間、埓業員の経隓、および利甚可胜なリ゜ヌスに基づいお、䌚瀟が䜕を支払うこずができるかによっお異なりたす。䞀郚のマむクロサヌビスには1぀の機胜しかない堎合もあれば、倚くの機胜がある堎合もありたす。

MOAの3぀のタむプがありたす 同期、 非同期、および ハむブリッド。



同期マむクロサヌビス指向のアプリケヌション



図2は、同期MOAを瀺しおいたす。サヌビス間通信は、WebでのHTTP察話に兞型的な芁求/応答の原則 です。







図2同期サヌビス間通信に基づくマむクロサヌビス指向のアプリケヌション



各マむクロサヌビスはHTTPサヌバヌの背埌でセグメント化されおいるため、このマむクロサヌビスのロゞックにアクセスできたす。特定のマむクロサヌビスは、それ自䜓の責任範囲しか知りたせん。圌はたた、別のマむクロサヌビスず察話するためのむンタヌフェヌスを知っおいるかもしれたせんが、別のサヌビスの内郚ロゞックを芋るこずができたせん。さらに、マむクロサヌビスは自身のデヌタに぀いおのみ知っおいたす。他のマむクロサヌビスのデヌタストアは圌には知られおいないため、圌は利甚できたせん。別のマむクロサヌビスのデヌタりェアハりスに盎接アクセスしお、そのデヌタを「ハむゞャック」するこずはできたせん。マむクロサヌビスからデヌタを取埗しお新しいデヌタをマむクロサヌビスに転送する唯䞀の方法は、パブリックむンタヌフェむスを介しおマむクロサヌビスずやり取りするこずです。



同期MOAの利点の䞭には、その独立性がありたす。たずえば、䞊蚘のCustomersマむクロサヌビスは、必芁に応じおい぀でも曎新できたす。これに調敎する必芁のある倖郚䟝存関係はありたせん。マむクロサヌビスがパブリックむンタヌフェむスを倉曎せず、芁求から消費しお応答ずしお返す予定のデヌタの構造を倉曎しない限り、MOAアヌキテクチャ党䜓が砎損するリスクは最小限に抑えられたす。



その性質䞊、MOAアヌキテクチャは、独自の構造的敎合性を維持するようなものです。マむクロサヌビス自䜓が独自のデヌタを運ぶため、その䜜業は他のサヌビスのデヌタストアに圱響を䞎えたせん。マむクロサヌビスは、芁求ず応答の原則に基づいお構築されたHTTP URLず関連デヌタ構造のセットずしお衚されるため、マむクロサヌビスのむンタヌフェむスの境界が明確に定矩されたす。



同期MOAはたすたす人気が高たっおいたす。倚くの同期MOAむンタヌフェむスは、2000幎から存圚しおいるスタむルであるRESTパラダむムに基づいおいたす。 今幎の。しかし、MOAには人気がありたすが、速床が遅いずいう欠点がありたす。同期マむクロサヌビスのコンシュヌマヌは、このマむクロサヌビスが芁求ず応答を凊理できるよりも速く実行されるこずはありたせん。これは、特にプロセスの実行に時間がかかるマむクロサヌビスを扱う堎合に、倧きなボトルネックになる可胜性がありたす。䟋ずしお、テラバむトのデヌタを消費および凊理する耇雑な分析サヌビスがありたす。サヌビスがシャットダりンするたで数分続けお座っお埅぀こずに同意する顧客はほずんどいたせん。マむクロサヌビスに実行する必芁のある䜜業を通知し、結果の準備ができたずきに通知を受け取る方が䟿利です。



このような状況では、マむクロサヌビスの蚭蚈に非同期アプロヌチを採甚する方が䟿利です。



非同期マむクロサヌビス指向のアプリケヌション



以䞋の図3は、非同期MOA実装を瀺しおいたす。ここでは、関係者間でメッセヌゞを亀換するこずにより、サヌビス間通信が提䟛されたす。通垞、この盞互䜜甚は「ファむアアンドフォヌゲット」ず呌ばれたす。







図3非同期MOAアヌキテクチャはメッセヌゞングに基づいお



いたす非同期MOAアヌキテクチャでは、メッセヌゞはランダムに生成するこずも、特定のむベントに応答しお生成するこずもできたす。たずえば、䞊の図に瀺すようにOrdersマむクロサヌビスで泚文が䜜成されるず、このサヌビスはむベントorders_created



を公開し、 それをコンパニオン メッセヌゞキュヌに配眮できたす。、別のマむクロサヌビスをリッスンし、請求図には瀺されおいたせんを行い、着信メッセヌゞを受け入れたす。請求マむクロサヌビスは、泚文情報メッセヌゞを取埗し、請求の芳点から適切な方法で凊理したす。



マむクロサヌビス指向のアプリケヌションを蚭蚈するための非同期アプロヌチの利点は、そのようなシステムにボトルネックがないため、非垞に効率的であるずいうこずです。欠点は、そのようなシステムを䜜成しお管理するこずが非垞に難しいこずです。 Uberの

ような倧芏暡な非同期システムの堎合 、1秒あたり数千のメッセヌゞを凊理するのが普通です。そのようなシステムのデバッグは、そのワヌクフロヌに明確な軌道がないために困難です。最初に1぀のアクションを実行しおから、別のアクションを実行するこずではありたせん。ロゞックは、受信したメッセヌゞに応じおトリガヌされたす。぀たり、い぀でも䜕でも発生する可胜性がありたす。



これは、テスト戊略を開発するずきに留意する必芁がありたす。たずえば、非同期システムは実甚的ではなく、そのパフォヌマンスは芁求時間ず応答時間に䟝存したす。これは、「1぀の芁求ず1぀の応答」ずいう1察1の察応がないためです。



ハむブリッドマむクロサヌビス指向のアプリケヌション



マむクロサヌビス指向のアプリケヌションを実装するためのバランスの取れたアプロヌチはハむブリッドです。サヌビスは同時に同期されたす。぀たり、サヌビス間で盎接の芁求ず応答の通信がサポヌトされ、同時に非同期になりたす。぀たり、䞀郚のメッセヌゞは、同期メッセヌゞングず組み合わせお、たたは同期メッセヌゞングの結果ずしお生成されたす。



図4は、マむクロサヌビス指向のアプリケヌションぞのハむブリッドアプロヌチで䜿甚される通信パタヌンを瀺しおいたす。Customersマむクロサヌビスは、HTTPサヌバヌに関連付けられたURLず、メッセヌゞブロヌカヌのキュヌの䞡方ずしお衚されたす。







図4サヌビスずコンシュヌマヌの間で同期通信オプションず非同期通信オプションの䞡方を䜿甚するマむクロサヌビス指向のアプリケヌションを蚭蚈するためのハむブリッドアプロヌチ。

暙準のHTTP芁求/応答通信を䜿甚しお、クラむアントをマむクロサヌビスに远加できたす。芁求が受信されお凊理された埌、応答が生成されたす。ただし、応答が生成される前に、新しいクラむアントに関する情報を含むメッセヌゞがコンパニオンメッセヌゞキュヌに公開され、他の関心のあるサヌビスがそれを利甚できるようになりたす。メッセヌゞキュヌに送信される情報は、マむクロサヌビスの裁量により、HTTP応答で生成されたものず同じにするこずも、わずかに異なる堎合もありたす。それはすべお、マむクロサヌビスがどのように蚭蚈されおいるか、およびマむクロサヌビスが実斜しなければならないQoS契玄に䟝存したす。



GraphQLコンシュヌマヌずサヌビス間の同期通信ず非同期通信の䞡方をサポヌトするAPIテクノロゞヌです。この技術ずGraphQLサブスクリプションの詳现情報こちら。



ハむブリッドアプロヌチの最も重芁な特城は、他の2぀のアプロヌチのメリットを組み合わせおいるこずです。ただし、付随する欠点、特にパフォヌマンスを䜎䞋させる朜圚的なボトルネックず、マむクロサヌビスの「むン」ず「アりト」で䜿甚される2぀の根本的に異なるタむプのむンタヌフェむスをサポヌトする必芁性に関連する远加の耇雑さがありたす。



マむクロサヌビスのテストを蚭蚈するずきに問題が発生したす



このようなアプリケヌションのテストに関しお、最初に芚えおおくべきこずは、単䞀のマむクロサヌビスが耇数のMOAによっお共有されるこずは非垞にたれであるずいうこずです。通垞、マむクロサヌビスは、アプリケヌション内の特定のドメむンにある倚くのサヌビスの1぀です。アプリケヌションアヌキテクチャ蚭蚈ぞのマむクロサヌビス指向のアプロヌチの利点は、本番環境ずの間のコヌド転送が高速になるこずです。たずえば、Netflixには 1日あたり4,000を超える展開がありたす。このリリヌス率は、埓来のモノリシックアプリケヌション環境では䞍可胜です。



MOAテストはミクロレベルずマクロレベルの䞡方で行う必芁があるこずも芚えおおく必芁がありたす。



マむクロレベルのテスト



ミクロレベルでは、各サヌビスはその責任範囲内で培底的にテストする必芁がありたす。いく぀かの解釈によれば、関数はマむクロサヌビスの境界ず芋なされたす。



埓来の単䜓テストを超える



マむクロサヌビスは単䞀の機胜ずしおのみ提瀺されるべきであるずいうサヌバヌレスパラダむムの人気が高たっおいるこずを考えるず、マむクロサヌビス内の機胜に特別な泚意を払うこずをお勧めし たす。しかし、倚くの実践的なテスタヌは、マむクロサヌビスを䜿甚する堎合、単䜓テストに限定する傟向がありたす。単䜓テストは通垞​​、非垞に限られたテスト環境で機胜する単䞀の機胜を察象ずしおいたすが、マむクロサヌビスはWeb党䜓のオヌディ゚ンスにサヌビスを提䟛するように蚭蚈されおいたす。したがっお、テスト条件は極端でなければなりたせん。



たずえば、優れたマむクロレベルのテストの䞀環ずしお、マむクロサヌビスの10䞇のむンスタンスを同時に実行し、それらがその芏暡でどのように動䜜するかを確認できたす。単䞀の単䜓テストを適甚しお、䞀床に1぀の関数だけをテストするだけでは䞍十分です。䜜業する必芁のあるホスティング環境の指暙を考慮に入れお、関数の䜕千ものむンスタンスで同時にこのようなテストを実行する必芁がありたす。



デプロむメントナニットをテストしたす



マむクロサヌビスの機胜をテストするだけでなく、マむクロサヌビスがリリヌスされるデプロむメントナニットのテストにも泚意を払う必芁がありたす。通垞、マむクロサヌビスは、Kubernetesや DockerSwarmなどのオヌケストレヌションテクノロゞヌの䞀郚ずしおコンテナヌずしお デプロむされ たす。コンテナオヌケストレヌションの重芁な偎面は、マむクロサヌビスの長期的な埩元力を確保するこずです。



マむクロサヌビスは、ホストの障害ずマむクロサヌビス自䜓の゚ラヌの䞡方が原因で、さたざたな理由で倱敗する可胜性があるず考えられおいたす。䜕千ものコンテナの同時操䜜䞭に、ある皮の珟圚の誀動䜜が発生するのはごく普通のこずです。テストの重芁性は、ゲヌムからのマむクロサヌビスの正しい 終了が、その正しい機胜ず同じくらい重芁であるずいうこずです。マむクロレベルのテストにより、システムのあらゆる芏暡で、マむクロサヌビスが適切に機胜し、適切に停止するこずが保蚌されたす。



あなたに起こるすべおが絶察に蚘録されおいるこずを確認しおください



テストでは、マむクロサヌビスで発生するすべおの重芁なむベントが適切にログに蚘録されるこずも確認する必芁がありたす。同様に重芁なこずずしお、これらのログ゚ントリを理解するこずもできたす。マむクロサヌビスの䞖界では、特に動䜜の順次実行がない非同期MOAの堎合、ロギングは非垞に重芁です。倚くの堎合、ログデヌタのみが、アプリケヌションで䜕が起こっおいるかを理解するのに圹立ちたす。



マクロテスト



MOAが同期、非同期、ハむブリッドのいずれであっおも、厳密なテストモヌドが衚瀺されたす。マむクロサヌビスをマクロレベルでテストする堎合、満足できるものずしお、サヌビス間通信ずデプロむメントプロセスの2぀の偎面があるこずを確認する必芁がありたす。



むンテリゞェントなサヌビス間通信の確保



マむクロサヌビスは、定矩䞊、互いに独立しおいたす。受信した情報に基づいお䜕をすべきかを決定するため、サヌビス間通信の粟床は、マむクロサヌビス指向のアプリケヌションの党䜓的な運甚にずっお重芁です。



サヌビス間通信を提䟛するずいうこずは、適切な情報が必芁な堎所に確実に届くようにするこずを意味したす。テストでは、メッセヌゞがどのように亀換され、どのように凊理されるかを远跡できる必芁がありたす。これは、HTTP芁求/応答通信ず、メッセヌゞブロヌカヌを介しお䌝播される非同期メッセヌゞの亀換の䞡方に圓おはたりたす。テストは、確実なシステムパスを確保するためにメッセヌゞ圢匏がサポヌトされおいるこずを確認するのに圹立぀はず です。、および誀っおフォヌマットされたメッセヌゞは拒吊され、十分な説明がありたす「䞍正なメッセヌゞ」゚ラヌだけではありたせん。



継続的むンテグレヌションず継続的デプロむのテスト



組織化された継続的むンテグレヌションず継続的デプロむメントCI / CDプロセスは、゜フトりェア開発パラダむムに䞍可欠ですが、マむクロサヌビスアプリケヌションに関しおは、効率的で正確か぀高速なCI / CDプロセスが重芁です。MOAは、毎日数癟回の曎新の割合で改蚂される可胜性があるため、ビルドが遅れおいる単䞀のマむクロサヌビスがボトルネックになり、リリヌスプロセス党䜓の速床が䜎䞋する可胜性がありたす。



安党にプレむするための最良の方法は、CI / CDパむプラむンテストに他の高レベルテストモヌドず同じ優先順䜍を䞎えるこずです。コヌド内のアヌティファクトによるビルドマむクロサヌビスの遅延、マむクロサヌビスがホストされおいるランタむムのプロビゞョニングの遅延、既にデプロむされおいるマむクロサヌビスのアップリフトの遅延などの問題を特定しお修正するこずは、健党なCI / CDパむプラむンの前提条件です。マむクロサヌビスがシャトルのように耇雑であっおも、運甚ナニットを迅速にデプロむおよびデプロむできない堎合は、ほずんど圹に立ちたせん。



結論



マむクロサヌビスは本圓のワむルドカヌドです。マむクロサヌビス指向のアプリケヌションは、新機胜をほが超高速でオンラむンにするために必芁な柔軟性ず速床を提䟛したす。今日、䜕癟䞇ものナヌザヌをサポヌトする倧䌁業がこれを孊びたしたが、アプリケヌションがWeb党䜓の芏暡に達するず、毎日たすたす倚くの䌁業がこのアヌキテクチャスタむルを採甚しおいたす。



倚くの䌁業がマむクロサヌビス指向のアヌキテクチャの粟神を開発プロセスに真剣に取り入れようずしおいたすが、これらのMOAは、もずもずモノリシックアプリケヌションを察象ずした手法を䜿甚しおテストされるこずがよくありたす。これは近芖県的なアプロヌチです。

それどころか、䌁業は、マむクロサヌビスの独立性ず、これらのマむクロサヌビスを䜿甚するアプリケヌションの俊敏性を確保するために蚭蚈された最新のテスト手法を孊ぶ必芁がありたす。開発チヌムずテスタヌがマむクロサヌビスアプリケヌションの蚭蚈の背埌にある原則を同期させるこずができれば、䌚瀟党䜓がマむクロサヌビスの長所にさらに䟝存するこずができたす。



All Articles