Logux接続が倱われ、デヌタが同期されたした-Andrei SitnikEvil Martiansのむンタビュヌ

むンタヌネットがクラむアント䞊で突然消えるずどうなりたすか おそらく䞀瞬ですか、それずもより具䜓的な期間でしょうか ナヌザヌずしおの私たち党員は、䞍安定な信号、フロヌティング通信品質に盎面しおいたす。 面癜いビデオを芋たいので、それは重芁ではないかもしれたせん。時には倚くの人がそれに頌るこずができたす-列車の切笊を買うか、同じむンタヌネットの料金を支払う必芁があるず想像しおください。



メディアなどの゚ンドナヌザヌが非垞に重芁な領域では、理由を理解せずにサむトを4秒以䞊開いた堎合、すでに13のナヌザヌが去っおいたす。 ここで、ただコメントを送信しようずしおいるナヌザヌが、通信の問題のために垞に「脱萜」しおいるず想像しおみたしょう。



撀退ず倱敗の割合は明らかに倧きくなりたす。 これを避ける方法は デヌタがクラむアントずサヌバヌの䞡方から送信されるこずを保蚌する必芁がある状況で䜕ができたすか



PostCSSの䜜成者でありAnd Evil Martiansの䞻芁なフロント゚ンドであるAutoPrefixerのAndrey Sitnikは、この質問やその他の質問に答えたす。



















-なぜコミュニケヌションの問題に぀いお話しおいるのですか これは、単に物理的/ネットワヌク機胜に関連した質問ではありたせんか



-OSIはあたり話題ではありたせん。 LoguxはRESTずAJAXを眮き換えたす。 ぀たり、玔粋に適甚されるレベルです。 Loguxは次の問題を解決したす。



  1. 単玔なク゚リには倚くのコヌドが必芁になりたした。
  2. サヌバヌからのデヌタのラむブ曎新は、曞くのがはるかに困難です。
  3. 優れたオフラむンサポヌトは䞀般に地獄を曞いおいたす。 ただし、「500 msオフラむン」が垞に存圚するため、オフラむンが垞に必芁です。これらはボタン䞊の䞀定のボタンです。


このため、Loguxはクラむアントずサヌバヌの間に特別な仮想むベントチャネルを䜜成したす。



クラむアントはこのチャネルにむベントを入れるこずができたす-Loguxは可胜であればそれらを送信したす。 サヌバヌにも同じこずが蚀えたす。 技術レベルで段階的に芋おいきたしょう。



デブリヌフィング



1.クラむアントでは、Redux APIを備えた1察1のラむブラリになりたすReactには接続されおいたせん。䞋䜍レベルのAPIがありたす。 同じ方法でアクションを䜜成したす。 ただし、䞀郚のアクションでは、同期キヌを蚭定できたす。true-Loguxはそれらをサヌバヌ自䜓に配信したす。 このラむブラリはWeb゜ケットを保持し、pingを送信しお、接続があるこずを確認したす。



「しかし、このラむブラリがReactに結び付けられおいないのは䜕が良いのでしょうか」



すべおの人がReactで開発するわけではありたせんこれはさたざたな環境に非垞に適しおいたす。 誰かがVue.js、Angularを䜿甚できたす。 たたは、HTMLがないJSアプリケヌションがあるだけなので、Reactはそれほど必芁ありたせん。 どうぞ



2.远加のラむブラリ。接続が倱われた堎合にスペシャルを衚瀺したす。 ペヌゞ䞊郚の「接続なし」バッゞはファビコンを倉曎したす。 送信チャネルにむベントがあり、接続がない堎合は、すべおのデヌタが保存されおいないこずもナヌザヌに通知したす。



-なぜナヌザヌはこれを知っおいる必芁がありたすか これはどのような圢匏の盞互䜜甚にずっお重芁ですか



-ナヌザヌからデヌタが提䟛された堎合、それらが保存されおいないこずをナヌザヌに通知する必芁がありたす。 この振る舞いがデフォルトであるべきだず思いたす。 ラむブラリは、このような通知自䜓を蚘述し、それを蚭蚈により適切に統合するために、倚くの点でオプションです。 ただし、Loguxを䜿甚しお分析のためのナヌザヌアクションを収集する堎合など、通信の問題を衚瀺できない堎合もありたす。



次のステップ。



3.接続が衚瀺されるず、Loguxクラむアントずサヌバヌは、通信がないずきに远加されたむベントを互いに送信したす。



-それは明らかです、それは論理的です、いく぀のアクションがキュヌに入れるこずができたすか



-通垞、むベント10〜20。 ただし、厳密な制限はありたせん。クラむアントずサヌバヌのメモリにどれだけ収たるかです。



-これらのむベントの順序は



-むベントの順序は非垞に厳密に制埡されおいたす。 ここでの問題は、1人のナヌザヌのむベントの順序だけではありたせん。 ただし、耇数のナヌザヌが䜜業しおいる堎合でも、すべおのシステムですべおのむベントの順序が同じである必芁がありたす最終状態が同じになるように。 そのため、Loguxでは、各むベントに䜜成時間が割り圓おられたす。 非垞に泚意が必芁です。たずえば、クラむアントずサヌバヌの時間差も考慮されたす。



-䞀郚のむベントを実行する必芁がなくなるほどで​​はないでしょうか 盞互アクションの䟝存関係チェック



-クラむアントは、䞍芁なむベントからログを消去できたす。 これはすでにビゞネスロゞックによっお決定されおいたす。



次のステップナヌザヌはブラりザを閉じるこずができたす-未送信のむベントはlocalStorageに保存されたす。 ただし、未送信のデヌタがあるため、閉じる前にラむブラリはナヌザヌに最初にオンラむンにするよう芁求したす。



-再び容量ず重芁性の問題に戻りたすが、ナヌザヌがブラりザを匷制的に閉じるずどうなりたすか



-倧䞈倫です。 ナヌザヌが再びサむトに戻るずすぐに、デヌタが送信されたす。



残りのすべおの手順



5. Loguxサヌバヌを䜜成するための特別なサヌバヌフレヌムワヌクがありたす。 ぀たり、express.jsのようなものです。 あなたは、サヌバヌがクラむアントからの特定のむベントにどのように応答するかを自分で説明したす。 同時に、ロゞックは少し耇雑です-むベントが到着したずいう事実は、それが今䜜成されたこずを意味したせん。 したがっお、各むベントには䜜成時間がありたす。 接続時に、クラむアントずサヌバヌは時差を決定し、クロックおよび叀いむベントの䜜成時間を同期したす。



6. node.jsのこれたでのサヌバヌフレヌムワヌク。 その埌、Elixir and Goでそれを行いたす。 ただし、Ruby、Python、PHPを䜿甚できたす。node.jsサヌバヌをプロキシずしお配眮するだけで、゜ケットを保持できたす。 そしお、すでにこのプロキシサヌバヌは叀いREST芁求をrubyサヌバヌに送信したす。



7.このむベントログず正確な時間があるため、Swarm.jsのようにその䞊にCRDTを䜜成し、倚くの単玔なケヌスで競合を自動的に解決できたす。



8.䞀般に、ほずんどの堎合、ひねりを描画しないこずが可胜です-クラむアントは、むベントが既に完了したたずえば、コメントが送信されたようにすぐに描画できたす。Loguxは、デヌタがサヌバヌに保存されおいないこずをナヌザヌに衚瀺したす。 もちろん、これがうたくいかない堎合もありたす-䟋えば、支払い。 そこで、叀いロゞックをひねりながら実行できたす。



Loguxず代替



-ありがずうございたす。それから、Loguxは既存の゜リュヌションよりも優れおいたすか



-Relay / GraphQLがありたす-デヌタを照䌚するずきのコヌドの量を枛らしたす。 ただし、デヌタ自䜓の倉曎も非垞に簡単ではありたせん。 ラむブアップデヌトの解決方法は䞍十分です。 オフラむンもうたくいきたせん。



同型のデヌタベヌスがありたす-それらはクラむアントずサヌバヌで動䜜し、盞互にデヌタを同期したす。 たずえば、CouchDBおよびFirebase。 十分に決定されたラむブデヌタの曎新がありたす。 珟圚、CRDTの準備が敎っおいる人はほずんどいたせんが、䞀般的には実装できたす。 しかし、拡匵は非垞に難しく、倚くの開発者はこのような奇劙な同期方法を恐れおいるため、このようなデヌタベヌスは業界暙準にはなりたせんでした。



CRDTラむブラリもありたす-たずえば、Swarm.js。 LoguxはSwarm.jsから倚くのアむデアをコピヌしたす。 しかし、Swarm.jsはReactやEditorsず友達になりにくいです。 非CRDT操䜜を転送するこずも困難です。



-長所ず短所は䜕ですか



-少ないコヌド、すぐに䜿えるデヌタのラむブ曎新、アプリケヌションをオフラむンで簡単に動䜜させるこずができたす。 そしお、これらすべおは、おなじみの線集䞊のセマンティクスを備えおいたす。



䞻な匱点は、远加のサヌバヌを実行する必芁があるこずです。 しかし、そのような決定にはすべおそれがありたす。 さらに、このサヌバヌをプロキシサヌバヌにしお、すべおのロゞックをPHPたたはRuby on Railsに栌玍し続けるこずができたす。



-この匷調された決定の必芁性はどこから来たのですか



-Ampliferでは、パブリケヌションのラむブ統蚈を衚瀺し、問題が発生したずきにすぐに゚ラヌでペヌゞを曎新する必芁がありたした。 そしお、良い解決策が芋぀からないこずに気付きたした。 Swarm.jsを実装しようずしたしたが、簡単にデプロむできたせんでした。 だから私はSwarm.jsず線集者を友達にする方法を考え始めたした。 圓時、ダンアブラモフはサンクトペテルブルクにいたしたが、圌ずの䌚話の䞭で、別の図曞通ずいうアむデアが生たれたした。



-これは業界暙準になる可胜性がありたすか



-LoguxをすべおのWebアプリケヌションのナニバヌサル゜リュヌションずしお䜜成しようずしおいたす。 しかし、私には、2017幎にはAJAX / RESTを䜜り盎すための倚くの詊みが芋られるようです-今、これはWeb開発の䞻な問題です、私の意芋では。 この戊いに勝぀のは2018幎だけです。



人生の䟋



-1-2の興味深い実甚的なケヌスはありたすか



-はい、TODO MVCでも-接続がなくおも、タスクのリストを匕き続き䜿甚したいず思いたす。 たたは、コンピュヌタヌにタスクを远加した堎合は、ペヌゞをリロヌドせずに、電話ですぐにタスクを衚瀺したいでしょう。



たたはコメント-FacebookやVKのようなラむブアップデヌトは、人々を匕き付けるのに圹立ちたす。



Loguxには、どのWebサむトにももう1぀の利点がありたす-それは「楜芳的なむンタヌフェむス」です 別のHolyJSスピヌカヌはそれに぀いお話しおいたした。 珟圚、すべおのアクションで、ナヌザヌに「ねじれ」を瀺しおいたす。 保存するたびにむンタヌフェむスがブロックされ、ナヌザヌフロヌが䞭断されたす。 Loguxを䜿甚するず、バックグラりンドで保存が行われる楜芳的なむンタヌフェむスを簡単に䜜成でき、゚ラヌが実際に発生した堎合にのみナヌザヌの泚意をそらすこずができたす。 たずえば、これがGoogle Inboxの仕組みです。 ナヌザヌは垞に高速なむンタヌフェヌスを奜むため、どのWebアプリケヌションでも楜芳的なむンタヌフェヌスの恩恵を受けるでしょう。



-むンタビュヌしおくれおありがずう、そしお䌚議で䌚いたしょう。






もちろん、むンタビュヌでは、ラむブラリずその哲孊の䞀般的な芋解のみを議論するこずができたした; HolyJS Andreiでは、 Loguxの開発ず䜜業に関する詳现な1時間ごずのレポヌトを提䟛したす。 さらに、議論されおいる他のテクノロゞヌに関するレポヌトをすぐに芋るこずができたす。




All Articles