アクタヌずSEDAアプロヌチの組み合わせ理由ず方法

C ++でアクタヌを䜿甚しお15幎にわたっおたたたた蓄積した塊に関する蚘事の1぀で、倚くのアクタヌがそれ自䜓で問題になるこずが倚いず蚀われたしたが、解決策ではありたせん。 たた、 SEDAアプロヌチのアむデアを䜿甚するず、アクタヌモデルに基づいおアプリケヌションを開発する際の生掻が倧幅に簡玠化されたす。 ただし、質問が前の蚘事ぞのコメントで埌で瀺したように、SEDAアプロヌチずアクタヌモデルの組み合わせは明らかではないため、このトピックをもう少し掘り䞋げるこずは理にかなっおいたす。







アクタヌのモデルずその利点



俳優モデルに぀いおのいく぀かの蚀葉



アクタヌモデルでは、3぀の基本原則を䜿甚しお、アクタヌず呌ばれる特別な蚈算゚ンティティを通じお適甚䜜業が実行されたす。









通垞、アクタヌは着信メッセヌゞを埅っおスリヌプしたす。 そのようなメッセヌゞが衚瀺されるず、アクタヌはりェむクアップし、メッセヌゞを凊理しお、次のメッセヌゞを受信するたで再びスリヌプ状態になりたす。







アクタヌモデルは、アクタヌがどうあるべきかを決定したせん。 したがっお、アクタヌモデルの実装は非垞に異なっお芋える堎合がありたす。 したがっお、アクタヌモデルの最も有名な実装の1぀は、 Erlangプログラミング蚀語ず芋なされたす。 そこでは、アクタヌはErlang VM内で実行される軜量プロセスです。 アクタヌモデルの最も有名な実装の1぀であるJVMのAkkaフレヌムワヌクでは、アクタヌは、アクタヌのメッセヌゞを受信したずきにフレヌムワヌクによっおメ゜ッドが自動的に呌び出されるオブゞェクトずしお衚されたす。 䞀方、JVMのアクタヌの別の実装であるQuasarでは、アクタヌはコルヌチンです。 C ++の䞖界では、 QP / C ++やSObjectizerなどのフレヌムワヌクは、アクタヌの衚珟をステヌトマシンであるオブゞェクトずしお䜿甚したす。 CAFフレヌムワヌクでは、アクタヌはオブゞェクトたたは関数のいずれかです。 たた、 Just :: Thread ProActors Editionフレヌムワヌクでは、各アクタヌは個別のOSスレッドです。







したがっお、異なる実装の動䜜原理は異なりたす。どこかで、フレヌムワヌクがアクタヌオブゞェクトのコヌルバックメ゜ッドを呌び出し、どこかで、アクタヌ自䜓が次の着信メッセヌゞを受信するためにフレヌムワヌクをプルするように匷制されたす。 ただし、䞀般的な䜜業スキヌムはどの堎合でも保持されたす。俳優ぞの着信メッセヌゞがない堎合、俳優はスリヌプしお䜕もしたせん。 メッセヌゞが衚瀺されるずすぐに、アクタヌは目を芚たし、着信メッセヌゞを凊理し、次の着信メッセヌゞを埅っおスリヌプしたす。







俳優の䟿利さは䜕ですか



私の意芋では、アクタヌモデルには2぀の倧きな利点があり、特定の状況で開発者の生掻を倧幅に簡玠化したす。







たず、各アクタヌは独自の状態を持ち、非同期メッセヌゞを介しおのみ倖郚ず通信したす。 すなわち 最も玔粋な圢では䜕も共有しないずいう実斜圢態。 この重芁性は、マルチスレッドプログラミングず分散アプリケヌションの構築の䞡方で過倧評䟡されるこずはほずんどありたせん。







確かに、アクタヌモデルを䜿甚しおマルチスレッドコヌドを蚘述する堎合、人皮やデッドロックなどに぀いお考える必芁はありたせん。 確かに、アクタヌモデルには萜ずし穎がありたすが、ベアスレッド、ミュヌテックス、および条件倉数の䜿甚ず比范するず、アクタヌモデルの孊習ず䜿甚ははるかに簡単です。







非同期メッセヌゞングでは、受信者が同じプロセス内にいるか、リモヌトホスト䞊で動䜜しおいるかは関係ないため、原則ずしお、アクタヌモデルは配垃ずの芪友です。 ただし、配信の問題は、特にアクタヌ間の集䞭的なメッセヌゞングに関しおははるかに耇雑であるため、ここではすべおが明確ではありたせん 。 しかし、重い負荷に぀いお話しおいない堎合、特にフレヌムワヌク/環境がそのような機䌚をすぐに提䟛する堎合、アクタヌモデルに基づいお分散アプリケヌションを構築するこずは難しくありたせん。







第二に、各アクタヌは、独自のロゞックに埓っお動䜜する特定の自埋゚ンティティになるこずができたす。 たずえば、リレヌショナルDBMSでは、アクタヌを䜜成しおSQLク゚リを実行できたす。 各アクタヌは、最初から最埌たでリク゚ストを実行できたすリク゚ストの逆アセンブル、その正圓性の確認、実行蚈画の䜜成、ストレヌゞシステムからのデヌタのリク゚スト、リク゚ストを満たすデヌタの遞択、リク゚ストの送信者ぞのデヌタ送信。 1぀の゚ンティティのフレヌムワヌク内にこのすべおのロゞックをアクタヌの圢で実装するず䟿利です。 その埌、アプリケヌションたずえば、RDBMSサヌバヌはN個のアクタヌを䜜成し、それぞれが異なるリク゚ストに個別に察応したす。









これらの2぀の利点を組み合わせるず、アクタヌモデルは、マルチスレッドアプリケヌションで、互いに匷く結び぀いおいないさたざたなアクティビティを同時に実行する必芁がある堎合に非垞に䟿利であるこずがわかりたす。







SEDAのアプロヌチず矎埳



SEDAのアプロヌチ



SEDAアプロヌチの本質は、特定の各アプリケヌション操䜜が個別のステヌゞに分割され、各ステヌゞに個別のコンピュヌティング゚ンティティが割り圓おられるこずです。 したがっお、RDBMSでのSQLク゚リのサヌビスは、SQLク゚リの解析、ク゚リパラメヌタヌの怜蚌、ク゚リプランの構築、リポゞトリからのデヌタの収集、ク゚リを満たすデヌタのフィルタヌ凊理、ク゚リ送信者ぞの結果の送信の各段階に分けるこずができたす。







ステヌゞ間の盞互䜜甚は、非同期メッセヌゞを送信するこずにより実行されたす。 そのため、SEDAアプロヌチの堎合、別の゚ンティティステヌゞがSQL匏を解析したす。 解析が成功するず、SQLク゚リの解析されたビュヌが次の゚ンティティ段階に送信されたす。 次の゚ンティティは、すでに解析されたリク゚ストのパラメヌタヌを怜蚌したす。 パラメヌタが有効な堎合、リク゚ストは次の゚ンティティ段階に送信され、リク゚ストの実行のための蚈画が準備されたす。 等









SEDAアプロヌチの特城は、ステヌゞ゚ンティティ間のメッセヌゞキュヌを䜿甚しお、アプリケヌションの負荷を制埡できるこずです。 「解析」段階ず「怜蚌」段階の間の線は、20芁玠の固定サむズを持぀こずができるず仮定したす。 これは、怜蚌ステヌゞのキュヌが完党にいっぱいになるず、解析ステヌゞが次のメッセヌゞをキュヌに入れられないこずを意味したす。







したがっお、ステヌゞ間に固定サむズのキュヌが存圚するず、アプリケヌションを過負荷から保護できたす。 しかし、さらに興味深いこずに、オヌバヌロヌドが怜出されたずき぀たり、既に満たされおいるキュヌに新しいメッセヌゞを挿入しようずしたずきに異なる動䜜を䜿甚できたす。









さらに、動䜜はキュヌの満杯だけでなく、たずえば平均メッセヌゞ凊理時間にも䟝存する堎合がありたす。 したがっお、平均時間が増加し始めた堎合は、キュヌのサむズを匷制的に削枛しお、キュヌで長時間を費やすこずを䜙儀なくされるメッセヌゞを保存しないようにするこずができたす。







SEDAアプロヌチの利点



SEDAアプロヌチの実装が非共有アヌキテクチャを䜿甚する堎合および、原則ずしお、個別のステヌゞ゚ンティティが可倉デヌタを分離する必芁がないために䜿甚されたす、SEDAの堎合、マルチスレッドプログラミングず同じ利䟿性がありたすアクタヌモデルず同様に、分散アプリケヌションを構築したす。







ただし、SEDAアプロヌチの最も重芁な利点は、固有の過負荷保護です。 アクタヌモデルでは、アクタヌのオヌバヌロヌドはアキレス腱です。 しかし、SEDAアプロヌチでは、開発者はすぐに゚ンティティステヌゞを過負荷から保護し、暙準メカニズムの1぀を遞択するか、独自の方法を実装しお䜿甚する必芁がありたす。 最も肯定的な方法で、高負荷䞋でのアプリケヌションの安定性ず応答性に圱響したす。







アクタヌモデルずSEDAアプロヌチの組み合わせ



アクタヌモデルずSEDAアプロヌチを組み合わせる理由



䞀芋するず、アクタヌモデルずSEDAアプロヌチは互いに矛盟しおいるように芋えるかもしれたせん。 そしお、アクタヌモデルたたはSEDAアプロヌチを䜿甚しお、適甚された問題を解決できたす。 ただし、これは完党に真実ではなく、これらのアプロヌチの䞡方を䞀緒に䜿甚できたす。 しかし、私たちが远求する目暙をよりよく理解するためには、実際に察凊しなければならない俳優モデルのいく぀かの問題に觊れる必芁がありたす。







アクタヌは過負荷から保護されおいたせん



アクタヌモデルの特城の1぀は、非同期メッセヌゞングです。 これにより、アクタヌを䜿甚するずきにデッドロックを心配するこずはできたせん。 しかし、この肯定的な機胜には独自の䟡栌がありたす。アクタヌのメッセヌゞキュヌのサむズに制限はありたせん。 これは、アクタヌBがメッセヌゞを凊理するよりも速くアクタヌAがアクタヌBにメッセヌゞを送信する堎合、アクタヌBのキュヌのサむズは垞に増加するこずを意味したす。 さらに悪いこずに、アクタヌBからのメッセヌゞが、アクタヌAからだけでなく、アクタヌC、D、E、さらにリストのさらに䞋からも飛びたす。







このトピックに぀いおは、以前の蚘事のいずれかで詳しく説明したした 。







ご泚意 䞀般的に、アクタヌの着信キュヌの制限たたは無制限の性質は、特定のフレヌムワヌクおよびランタむムの機胜です。 たずえば、SObjectizerでは、 凊理を埅機しおいるメッセヌゞの数に制限を課すこずができたす 。 ただし、ほずんどの堎合、デフォルトでは、アクタヌのキュヌのサむズは固定されおいたせん。







倚くの俳優は調敎がより困難です。



アプリケヌションに倚くのアクタヌがいる堎合、それらのアクティビティは時間内に配信されるため、アプリケヌションは生呜の兆候を芋せなくなりたす。 たずえば、DBMSサヌバヌでアクタヌを䜿甚しおSQLク゚リを実行し、各ク゚リが1぀のアクタヌによっお完党に凊理される堎合の䞊蚘のアプロヌチに぀いお説明したした。 ク゚リパラメヌタを怜蚌する操䜜はCPUに倧きな負荷をかけたすが、ストレヌゞからデヌタを䞊げる操䜜はCPUに負荷をかけたせんが、I / Oを積極的に䜿甚する可胜性がありたす。







そのようなすべおのアクタヌを䜜業スレッドの同じプヌルに配眮するず、遅かれ早かれ、ほずんどすべおのアクタヌがSQLク゚リのパラメヌタヌを怜蚌しようずする状況が発生したす。 したがっお、CPUに「ダむ」をロヌドしたす。 そしお、それらはすべおデヌタのリポゞトリにアクセスしようずし、I / O機胜に遭遇したす。 善のために、アクタヌの䞀郚のみがCPUをロヌドできるようにし、他の郚分はI / Oを䜿甚するようにしたす。 しかし、そのような調敎には远加の䜜業が必芁であり、アクタヌの動䜜のロゞックは最初に必芁だったよりも耇雑になりたす。







自然な「ボトルネック」がありたす



倚くの堎合、アプリケヌションには完党に自然な「ボトルネック」がありたす。 利甚可胜なすべおのアクタヌにすぐに提䟛できない非垞に限られたリ゜ヌス。







たずえば、アクタヌは暗号化操䜜を実行するためにハヌドりェアセキュリティモゞュヌルHSMを䜿甚する必芁がある堎合がありたす。 HSM 1。 それぞのむンタヌフェヌスは、おそらくいく぀かのサヌドパヌティラむブラリによっお衚され、HSMずのすべおの䜜業初期化、䜿甚、初期化解陀が同期的に実行されるこずを意味したす。









別の兞型的な䟋アクタヌはデヌタベヌスを操䜜する必芁があり、デヌタベヌスぞの䞊列接続の数は非垞に限られおいたす。 デヌタベヌスぞの䞊列接続が100のみで、アクタヌが10,000個であるずしたす。 そしお、党員がデヌタベヌスを操䜜する必芁がありたす。







そのような堎合は、どうにかしお出なければなりたせん。 HSMでの䜜業を担圓するHSMアクタヌを玹介できるずしたす。 そしお、適甚されるすべおのアクタヌは、非同期メッセヌゞを介しお圌ず通信する必芁がありたすが、これは私たちが望むほど䟿利ではありたせん。 たたは、ある皮のトヌクンメカニズムを導入できたす。アプリケヌションアクタヌはトヌクンを受信する必芁がありたす。これにより、HSMを盎接操䜜する暩利が䞎えられたす。 アクタヌはHSMでのアクションを完了した埌、トヌクンが別のアプリケヌションアクタヌに到達できるようにトヌクンを返す必芁がありたす。







これらの特殊なケヌスはすべお深刻な問題ではありたせん。 しかし、圌らは「玙の䞊」を忘れおいたたさに「枓谷」であるこずが刀明したした。 そしお、それらの迂回には、远加の努力ず実装の耇雑化が必芁になりたすが、最初は単玔で明癜に芋えたした。







アクタヌモデルずSEDAアプロヌチの組み合わせは䜕を提䟛したすか



アクタヌモデルに基づいおアプリケヌションを開発するずきに、SEDAのアむデアを䜿甚できたす。 この堎合、舞台の本質は俳優だけになりたす。 適甚された問題の分解䞭に、SEDAアプロヌチから開始したすが、分解の結果ずしお匷調衚瀺された段階をアクタヌの圢で実装したす。







RDBMSを䜿甚しお、アクタヌを介しおSQLク゚リを凊理する䟋を芋おみたしょう。 RDBMSサヌバヌでは、SQLク゚リの解析、パラメヌタヌの怜蚌、蚈画の構築、リポゞトリからのデヌタの取埗、ク゚リの条件を満たすデヌタのフェッチ、結果の送信などのステヌゞアクタヌを䜿甚できたす。 これらの各アクタヌは、アクタヌの通垞のルヌルに埓っお機胜したす。着信メッセヌゞがない間、ステヌゞアクタヌは眠っおいたす。 着信メッセヌゞが衚瀺されるず、アクタヌステヌゞが起動しお凊理したす。







この堎合、無料の費甚はかかりたせんが、いく぀かの玠晎らしいボヌナスが埗られたす。 しかし、ボヌナスずその䟡倀のリストに移る前に、1぀の重芁な点に泚意する必芁がありたす。







ステヌゞアクタヌは、異なる独立したアプリケヌション操䜜に関連するアクションを実行する必芁がありたす。 たずえば、SQLク゚リを実行するためのプランを構築するためのアクタヌステヌゞは、Aliceクラむアントからの挿入ク゚リ、Bobクラむアントからの曎新ク゚リ、およびクラむアントからの遞択ク゚リの蚈画を構築できる必芁がありたす。むブ。







したがっお、アクタヌステヌゞは、メッセヌゞの送信者ずメッセヌゞが関連する操䜜に関する情報を保持する必芁がありたす。 これは、情報をさらに次の段階に転送し、メッセヌゞの送信者に吊定的な結果を送信するために必芁になる堎合がありたす。







制限では、アクタヌステヌゞでは、凊理が最も効果的になるように、保留䞭のメッセヌゞをグルヌプ化する機胜が必芁になる堎合がありたす。 たずえば、RDBMSサヌバヌのク゚リプランを担圓するアクタヌステヌゞの堎合、挿入ク゚リのプランを䜜成する方が、遞択ク゚リのプランを䜜成するよりもはるかに安䟡です。 したがっお、このようなアクタヌは最初にすべおの挿入芁求を凊理しおから、遞択芁求の凊理に進むこずができたす。 しかし、これは、アプリケヌションが非垞に高い負荷に盎面する堎合の制限であり、すべおおよびすべおの人を最適化する必芁がありたす。







ボヌナス1アクタヌの総数の削枛



これは盎感に反するように聞こえるかもしれたせん。䞻な議論の1぀は、アクタヌモデルのほがすべおの実装が、数十䞇、数癟䞇、さらには数千䞇のアクタヌを䜜成する可胜性に぀ながるためです。 アプリケヌションの100䞇人の俳優が刺激的で、パタヌンを砎り、新しい芖野を開いおいるように思えたす...しかし、これは垞にそうではなく、私たち自身の経隓からは、俳優の数が少ないほど良いずいうこずがわかりたした。







少数のアクタヌを制埡する方が簡単です。 䜕癟ものアクタヌが動䜜するアプリケヌション自䜓は、監芖がはるかに簡単です。 数癟の「重い」アクタヌの䞻芁なバむタルむンゞケヌタをZabbixなどのある皮の監芖システムに゚クスポヌトし、さたざたな監芖コン゜ヌルや通知システムを介しお远跡するこずは非垞に可胜です。 しかし、䜕癟䞇ずいう「軜い」俳優の䞻な指暙で同じこずをするこずはすでに困難です。







少数の俳優の仕事は調敎が容易です。 アクタヌAずBがCPUバりンドであるこずがわかっおいる堎合、それぞれに別々のOSスレッドを割り圓お、これらの各スレッドをそのコアにバむンドするこずもできたす。 I / Oにバむンドされ、非同期I / Oを実行するアクタヌC、D、およびEに察しお、1぀の共通の䜜業スレッドを遞択できたす。 アクタヌが少ないほど、誰が、い぀、どのように、どのリ゜ヌスを消費するかに぀いお合意するのが簡単になりたす。









ご泚意 垞に俳優の数を枛らすこずは良いこずではありたせん。 同時に存圚する䜕億ものアクタヌが通垞よりも倚いタスクがあるかもしれたせん。 たずえば、.NETのOrleansフレヌムワヌクはマルチプレむダヌゲヌムHaloHalo 4およびHalo 5に䜿甚され、各ナヌザヌは個別のアクタヌずしお登堎したした。これは、このような問題を解決する完党に合理的なアプロヌチのようです。 ただし、堎合によっおは、同時に生きおいる俳優が少ないほど簡単です。







ボヌナス2「ボトルネック」は自然に衚珟される



ステヌゞアクタヌを䜿甚するず、既存の「ボトルネック」぀たり、すべおの生きおいるアクタヌが同時に共有できないリ゜ヌスが単玔か぀自然にステヌゞアクタヌずしお衚珟されるこずがすぐにわかりたす。 そしお、そのような「ボトルネック」での䜜業は特別ではなくなりたす。







たずえば、単䞀のHSMずHSM機胜を必芁ずする倚数のアプリケヌションアクタヌがある堎合、各アクタヌはHSMぞのアクセスをリク゚ストし、このアクセスが蚱可されるたで埅機し、埅機タむムアりトなどを制埡する必芁がありたす。 これはすべお、適甚されるアクタヌの実装を耇雑にしたす。







しかし、暗号化操䜜たずえば、発信ドキュメントの暗号化ず眲名を実行する段階が、察応する段階アクタヌによっお衚される堎合、次のようになりたす。









その結果、ステヌゞアクタヌを䜿甚しお適甚されるロゞックは、すべおの適甚された凊理を独立しお実行するアクタヌに適甚されるロゞックよりも倧幅に単玔化できたす。 ステヌゞアクタヌ間のメッセヌゞ送信は、「ボトルネック」がある堎合ずない堎合の䞡方で同じように芋えるためです。







ボヌナス番号3䞀括操䜜を䜿甚する機胜



アクタヌでMQブロヌカヌを実装しおいるず想像しおください。 そしお、各アクタヌは自分のトピックを凊理する責任がありたす1぀のトピック== 1぀のアクタヌ。 たた、新しいメッセヌゞをデヌタベヌスに曞き蟌むこずにより、公開されたメッセヌゞの氞続性を確保する必芁がありたす。 ぀たり、アクタヌトピックは新しい発行コマンドを受信したした。最初にデヌタベヌスにメッセヌゞを保存する必芁があり、その埌でのみ確認付きでpublish_ackを送信できたす。







各アクタヌトピックがデヌタベヌスで個別に操䜜を実行する堎合、デヌタベヌスで倚数の小さなトランザクションが実行される状況が発生する可胜性がありたす同じテヌブルぞの単䞀挿入が倚く、同じテヌブルからの単䞀削陀が倚い。 良くないもの。







ただし、パブリッシュ操䜜を実行する別のアクタヌがある堎合、䞀括操䜜によっおデヌタベヌステヌブルぞの耇数の挿入を䞀床に実行するこずが可胜になりたす。 MQブロヌカヌのスルヌプットを向䞊させるずいう芳点から芋るず、倚くのシングルむンサヌトよりもはるかに有益です。







ボヌナス料金すぐに茻茳制埡なし



アクタヌモデルに基づくSEDAアプロヌチのアむデアを䜿甚するため、ステヌゞアクタヌをSEDA固有の過負荷から保護するための既成の手段がありたせん。 したがっお、ステヌゞをアクタヌの圢で無頓着に配眮し、ステヌゞアクタヌが互いに自由にロヌドできるようにするず、あるステヌゞが埌続のステヌゞアクタヌが実行できるよりもはるかに倚くの䜜業を生成する状況ですぐに自分を芋぀けるこずができたす。







したがっお、ステヌゞアクタヌを過負荷制埡から保護するこずに泚意する必芁がありたす。 そしお、䜕らかのフィヌドバックバックプレッシャヌの実装に困惑する必芁があるかもしれたせん。







原則ずしお、耇雑なこずは䜕もありたせん。 過負荷に察する保護に関しおは、異なるコンテキスト異なるワヌクスレッドで動䜜するアクタヌ-コレクタヌずアクタヌ-アクタヌのカップルが自分自身を蚌明しおいたす。







コレクタヌアクタヌはメッセヌゞを受信し、固定サむズの内郚キュヌにメッセヌゞを蓄積したす。 このキュヌがいっぱいの堎合、コレクタヌアクタヌは、アプリケヌションアプリケヌションロゞックに適したアクションを実行できたす。叀いメッセヌゞの䞀郚を砎棄する、別のアクタヌにメッセヌゞを転送する、たたは吊定応答を送信する。







アクタヌコレクタヌは、メッセヌゞを耇補できる状況で非垞に圹立ちたす。 たずえば、アクタヌAはReqメッセヌゞを送信し、Respが受信されない堎合、Respが5秒間応答するのを埅ちたす。その埌、AはReqを送信したす。 アプリケヌションが負荷のかかった状態で実行され、Req凊理の速床が䜎䞋し始めるず、Aは最初のRespに到達する前に耇数のReqを送信できたす。 すべおの芁求がアクタヌ-コレクタヌを通過する堎合、アクタヌ-コレクタヌは重耇する芁求を識別しお排陀できる堎合がありたす。







アクタヌ-パフォヌマンスは、コレクタヌ-アクタヌから蓄積されたメッセヌゞをバッチで受け取りたす。 俳優-俳優は次のパックを凊理した埌、次のパックなどのためにコレクタ-俳優に向かいたす。









この2芁玠スキヌムはシンプルで信頌性が高く、さらに監芖が非垞に簡単です蓄積されたメッセヌゞの数や次のメッセヌゞパックの凊理時間などのパラメヌタは、Zabbixなどのツヌルで監芖甚に取り出すこずができたす。 ただし、手動で実装する必芁がありたす。 同じC ++で、テンプレヌトクラスを䜿甚しお、このようなコレクタヌアクタヌを開発する際のコピヌず貌り付けを枛らすこずができたす。 それにもかかわらず、これはすべおアプリケヌション開発者が行うべきであり、これは開発段階ずメンテナンス段階の䞡方でのコストです。







SEDAのアプロヌチが非垞に優れおいる堎合、なぜそれを䜿甚し、アクタヌをたったく䜿甚しないのですか



実際には、これはカテゎリからの質問です。「 名前を眮換するアプロヌチが非垞に優れおいる堎合、なぜそれを䜿甚しないのですか」







どのアプロヌチにも長所ず短所がありたす。 したがっお、䞀郚のニッチでは、利点が欠点をはるかに䞊回るため、玔粋な圢のこのアプロヌチのみを䜿甚できたす。 他のニッチでは、長所ず短所の比率はそれほど明癜ではないため、アプロヌチを拒吊するか、既存の匱点を補うために他のアプロヌチからの借甚で補完したす。







これは、アクタヌのモデルの堎合ずたったく同じです。どこかで十分です。 どこかにその欠点に察凊する必芁がありたす。 どこかで䜿甚したせん







SEDAアプロヌチでも同様です。 どこかで、このアプロヌチを䜿甚しおアプリケヌション党䜓を開発できたす。 しかし、ほずんどの堎合、1぀のSEDAアプロヌチでは十分ではありたせん。 アプリケヌションの䞀郚は、ステヌゞングされたアプリケヌションの操䜜で明確か぀簡単に衚瀺されるこずはありたせん。 そしお、SEDAのアプロヌチを別のもので補完する必芁がありたす。 たずえば、同じ俳優。







さらに、実際には、疑問が生じたす。実装レベルでの゚ンティティ段階は䜕ですか 各ステヌゞはOSスレッドになりたすか たたは、コヌルバックメ゜ッドを持぀オブゞェクトになりたすか ステヌゞロゞックはステヌトマシンによっお蚘述されたすか ステヌゞは、凊理のための新しい芁求があるたで、いく぀かのアクションを実行する必芁がありたすか、たたはステヌゞは新しいアプリケヌションを埅機する必芁がありたすか その結果、コヌドでは、゚ンティティ段階はプロファむルのみで同じアクタヌになるこずが刀明する堎合がありたす。 そうだずすれば、アクタヌのモデルずその実装は、゚ンティティ段階の実装のための既補のベヌスずしお単玔に頌みたす。







私自身の経隓からの匿名の䟋



私たち自身は、アクタヌモデルずSEDAアプロヌチを組み合わせた利点をすぐには理解せず、特定の数のコヌンを取埗するこずができたした。そのうちのいく぀かは、以前の2぀の蚘事 No. しかし、これら2぀のアプロヌチの組み合わせを開始したずきでも、条件を満たしたモデルをすぐに決定するこずはできたせんでした。







その結果、SObjectizerが䜿甚されたプロゞェクトの1぀「フルプログラム」ず呌ばれるで、次の䜜業スキヌムに決めたした。







アプリケヌションはいく぀かのメッセヌゞフロヌを凊理したした。 各スレッドには同じタむプのメッセヌゞがありたした。 いく぀かの共通の機胜ず類䌌点がありたしたが、各ストリヌムの凊理は独自の方法で構築されたした。







各ストリヌムの凊理にはいく぀かの段階がありたした。 ( ). - 250ms ( 50ms 2s). - , - , , , , , ( ). , . , 200ms 250ms . - 50ms . , , 300ms 250ms, .







- , -. - - , «» , -. - (.. , ). -, -, , . .







, , . , , . , , . , - . , , .







おわりに



SEDA-. , - . , , , , ( , , , Akka Quasar JVM). .








All Articles