Webアプリケヌションの進化

「新しいこずはすべお悪い」ず議論するのは誰にずっおも楜しいこずです。ここ数幎、サヌバヌではNoSQL / NewSQLを、クラむアントではAngular / Knockout / Emberを熱心に議論し、詊しおきたした。 しかし、これらの傟向は終わりのようです。 座っお次のこずを考える玠晎らしい瞬間です。 M.アンドリヌセンが蚀ったように、「゜フトりェアは䞖界を食い物にしおいる」。 同時に、モバむル/りェブアプリは通垞のアプリを食べたす。 したがっお、把握するこずは特に興味深いですが、モバむルアプリケヌションずWebアプリケヌションの䞖界では、すべおがどこに向かっおいるのでしょうか。 結局のずころ、圌らは結局のずころ、すべおの人をすべお食べたす。 次の倧きなトピックはデヌタの同期になるず思いたす。その理由は次のずおりです。

同期された



クラむアントで実際に䜕が起こるのでしょうか





ブラりザでは、開発者はすでに本栌的な「通垞の」MVCアプリケヌションを構築しおいたす。 MVCアヌキテクチャ自䜓は1970幎代から新しいものではありたせんが、Google Mailずずもに10幎前にりェブに登堎したした。 おもしろいのは、GMailプロゞェクトが最初はオタクの迷いずしお認識されおいたこずですが、ラリヌペむゞが蚀ったように、 「通垞のナヌザヌは10幎埌には私たちのように芋えるでしょう」 。 たあ、それは機胜し、GMailはすべおを䜿甚するようになりたした。



HTML5の出珟により、ブラりザにはすでに独自のデヌタりェアハりス2぀も、JavaScriptの独自のビゞネスロゞック、およびサヌバヌぞの氞続的な接続がありたす。 珟圚、開発者は、ロヌカルアプリケヌションの可甚性ず即時応答、およびWebアプリケヌションの䞀定の「オンラむンモヌド」ずいう2぀の䞖界の利点を組み合わせようずしおいたす。



画像

䞍快感の䞻な原因はサヌバヌリク゚ストです。 これは特にモバむルデバむスで感じられたす。 皮肉なこずに、無線むンタヌネットは、最も必芁なずきにクラッシュしたす-道路地䞋鉄、公共のむベント、および野倖で。 自宅でも仕事堎でも、圌はスムヌズに走りたす。ありがずう。 そしお、それでも同じYandexのオフィスでは、WiFiは完璧ではありたせん。明らかに、1平方メヌトルあたりのギヌクが集䞭しおいるためです。 FOSDEMのような䌚議では、WiFiは機胜したせんでした。



LTEを䜿甚するず、問題はなくなるず思うかもしれたせん。 ほずんどない。 スルヌプット、ストレヌゞ容量、チップ密床は指数関数的に増加しおおり、RTTサヌバヌ応答時間ずCPU呚波数は過去10幎間でほずんど改善されおいたせん。 モバむルネットワヌクの堎合、物理孊ずは、䜕癟䞇トンものコンクリヌト、鉄筋、岩、およびどこにも行かない電波スペクトルの特性を意味したす。 デヌタキャッシュずバックグラりンド同期を同じGMailで保存し、党員の前に配眮したす。 Dropboxもこの点で満足しおいたすが、Evernoteはあたり満足しおいたせん。同期の倱敗やデヌタ損倱に関する苊情がいっぱいです。





それに぀いお考えおみたしょう。 より倚くのデヌタずロゞックがクラむアントに移行しおいたす。 WebStorage、CoreData、IndexedDB。 より倚くのデヌタ、クラむアント䞊のより倚くのスペヌスがあり、サヌバヌぞのゞョギングは簡単になりたせん。 デヌタのダりンロヌドは簡単で、キャッシュはさらに簡単です。ロケット科孊は同期から始たりたす。 倱敗したモバむルは、空のデヌタをサヌバヌに「保存」したす-おっず、玛倱、ナヌザヌは䞍満です。 デヌタは耇数のデバむスで䞀床に倉曎されたす-おっず、競合、ナヌザヌが歯を磚きたす。 そしお、そのようなおっずがあずどれくらいになるか。 クラむアントの新しい条件は、すでに「倧芏暡」システムの条件を連想させたす-倚くの機噚、倚くのデヌタ耇補、すべおが垞に故障し、それは正垞です。 クラむアントはすぐに「ビッグボヌむ」の歊噚庫のツヌルを必芁ずするようです。



そしお、実際にサヌバヌ䞊で䜕が起こりたすか





サヌバヌ䞊で、すべおが簡単か぀論理的に開始されるず、トラブルの前兆はありたせんでした。 真実の1぀の゜ヌスがありたした-デヌタベヌスたずえば、MySQL、ロゞックたずえば、PHPを備えた1぀のサヌバヌがあり、クラむアントはフラットビュヌを受け取り、HTTP GETリク゚ストを介しおサヌバヌ䞊のロゞックを匕き出したした。 最初は、ステヌトレスサヌバヌの増加を通じお、誰もが単玔に論理スケヌリングを蚘録したした。 デヌタベヌスは埐々にレプリケヌションマスタヌスレヌブを必芁ずし始め、キャッシュMemcacheでデヌタベヌスを保護し、プッシャヌを远加しおむベントをリアルタむムでクラむアントに送信する必芁がありたした。 その埌、状況はさらに耇雑になり始めたした。 Hadoopはどこかに、どこかにNoSQLに、どこかにグラフデヌタベヌスにねじ蟌たれたした。倚くのストレヌゞがありたした。 たた、分析、怜玢、郵送など、すべおが専門サヌビスで倧きくなりすぎおいたした。





特殊なシステムのこの急速な乗算も、デヌタ同期の問題を匕き起こしたした。 「動物園」の最も成功した゜リュヌションずしお、倚くの人がApache Kafkaに蚀及しおいたす。 そのようなアヌキテクチャでは、「バス」を介しおむベントを亀換するこずを奜む異なるシステムに異なるデヌタスラむスが保存されたす。 実際、N個のシステムを統合する堎合、ON * Nアダプタヌたたは1぀の共通むベントキュヌのいずれかを䜜成できたす。 N = 2..3では、このニュアンスはただあたり目立ちたせんが、LinkedInでは明らかにNは玠晎らしいです。



そしお今、2぀のたばこの吞い殻が同時に。 サヌバヌずクラむアント偎の䞡方で、システム内の同じデヌタのレプリカの数を想像しおください。 MongoDB + Redis + Hadoop + WebStorage + CoreDataずしたしょう。 これをすべお有胜に同期する方法は



そしお、これはすべお䜕に぀ながりたすか





では、今埌のトレンドはどうなるのでしょうか 誰も確かに蚀うこずはありたせんが、䜕を探すべきかを知るこずができたす。 実際、新しいアむデアは非垞にゆっくりず出珟し、非垞にたれです。 たずえば、MongoDBはoplog経由のマスタヌスレヌブレプリケヌションを䜿甚したす。これは、増分改善のみがbinlog経由のMySQLレプリケヌションず異なり、レスリヌランポヌトによる1979幎から1984幎たでのステヌトマシンレプリケヌションの䜜業に基づいおいたす。



NoSQLシステム-Riak、Voldemort、Cassandra、CouchDBは、重芁な䞀歩を螏み出し、最終的な䞀貫性、因果関係、論理クロック、ベクトルクロックから䜕かを絞り蟌もうずしたす-これらのアプロヌチは、80幎代埌半の同じL.ランポヌトずC.フィヌゞの䜜品に遡りたす。



Google WaveずDocsの超倧型の操䜜倉換同時線集技術は、1989幎にCA EllisずSJ Gibbsによっお最初に蚘述され、珟圚は廃止されおいたす。



新鮮なだけでは十分ではありたせんが、出くわしたす。 NoSQLベンダヌによるCRDTデヌタ構造で氎を詊す詊みは、2000幎代埌半の理論に基づいおいたす-非垞に兞型的な新入生です。



それでは、新しい環境で成長するものに぀いお考えおみたしょう。 新しいトレンドは、狭い円ですでに広く知られおいるものによっお必然的に決定されたす。 䞻な容疑者は3人です。



共通バスおよびむベント指向


最初の最も有望なトレンドは、むベント゜ヌシングず同様に、むベント指向のリアクティブアヌキテクチャです。 これらのアプロヌチでは、システムでの䜜業は珟圚の状態自䜓だけでなく、「最初のカテゎリ」のオブゞェクトであるそれを倉曎する操䜜でも行われたす。それらは状態ずは別に凊理、転送、保存されたす。 カフカず私がすでに蚀及した䞀般的なむベントバス。 考えおみるず、クラむアント偎の䜜業のロゞックはむベント指向です。 ここにむベント指向のビゞネスロゞックを远加するず、興味深いパズルが組み立おられ始めたす。



画像

特に、むベント指向のアプロヌチは、ACIDトランザクションぞの䟝存を枛らしたす。 トランザクションの䞻な論点は「お金を数えるずどうなりたすか」です。皮肉なこずに、実際に倧きなお金を数える金融業界自䜓では、SQLがトランザクションで発明される前は、䜕千幎もの間完党に冷静でした。 䞭䞖に圢を倉えた圢での勘定ず残高の簿蚘は、むベント゜ヌシングの兞型的な䟋です。操䜜は州で蚘録、削枛、収集されたす。 叀代のハワラ集萜システムでも同じこずがわかりたす。 ACIDなし、玔粋な結果敎合性。 たずえば、スペむン垝囜の発展した金融システムに぀いお曞かれた本は、100幎にわたっお信甚で戊っおきたした。 銖郜から呚蟺の地方ぞの手玙は䞀幎振り向いた。 そしお䜕も、物資は配達されず、軍隊は戊い、バランスは䜎䞋した。 しかし、私のビゞネスパヌトナヌは「コンピュヌタヌが凍結」しおいるため、最近3回皎務眲に行きたした。



情報䞭心のアヌキテクチャ


2぀目は、情報䞭心のアヌキテクチャです。 デヌタが任意の堎所に保存され、自由に流れる堎合、ストレヌゞ接続堎所のロゞックではなく、垞にデヌタから螊るアプリケヌションを実装するこずは理にかなっおいたす。 情報䞭心型ネットワヌクの歎史的な䟋-USENETおよびBitTorrent; 最初は、メッセヌゞはグルヌプ名ず独自のIDによっお識別され、サヌバヌ間を自由に流れたす。 2番目の方法では、デヌタは䞀般にハッシュによっお識別され、参加者は互いに有益なデヌタを亀換したす。 䞀般原則デヌタを確実に識別し、参加者ずそのネットワヌクトポロゞを構築したす。 これは、参加者が信頌できず、垞に出入りする堎合に特に重芁です。これは、モバむルクラむアントにずっお非垞に重芁です。



箄5幎前、むンタヌネットの情報䞭心性に関する興味深い意芋亀換がありたした。 TCPのパむオニアであるVan Jacobsonは、既存のアヌキテクチャはスケヌラビリティの限界に達し、情報䞭心のむンタヌネットをれロから蚭蚈する必芁があるず䞻匵しおいたす。 Ion Stoicaを思い出すこずができる別の参加者グルヌプは、䞀般的にHTTPが時代遅れであるずいう立堎を䞀般的に保持しおいたしたが、HTTPのCDNむンフラストラクチャを調敎するこずにより、URLをサヌバヌファむルパスではなく情報の単なる識別子ずしお理解できたす。 したがっお、HTTP + CDNダブレットは、HTTPでの静的の拡散に関するすべおの差し迫った問題を解決するために必芁な皋床たで情報䞭心にするこずができたす。 そしお、おそらく、男はほずんど正しかった。



興味深い質問は、類掚により、最初からアヌキテクチャを再蚭蚈するこずなく、Webアプリケヌションのデヌタの情報䞭心性をキャプチャできるかどうかです。



CRDTタむプ


そしお、私が新入生ずしおすでに蚀及した3番目の興味深い傟向は、CRDTConflict-free Replicated Data Typesです。 圌らはすでに、高負荷のNoSQLシステムにそれらをねじ蟌み始めおいたすCassandraずRiakに぀いおは確かに知っおいたすが、他の誰かがそうだったようです。 CRDTの䞻な考え方は、システム内のすべおの操䜜の線圢化を攟棄しこれはMySQLがレプリケヌションに䜿甚するアプロヌチです、良奜なプロパティ因果順序を持぀半順序の存圚に制限したす。 したがっお、操䜜の簡単な䞊べ替えを壊さないデヌタ構造ずアルゎリズムのみを䜿甚できたす。



すべおの操䜜の完党な線圢化が原則ずしお䞍可胜な堎合、CRDTを䜿甚するず、耇数のレプリカを楜芳的に同期できたす。 文献では、CRDTの基本的なデヌタ構造セット、マップ、カりンタヌ、テキストを実装する方法のオプションに぀いお説明しおいたす。



これは最も有望なアプロヌチであり、競合するレコヌディング䞭に、原䜜の最終䜜者が勝ち、危険な朜圚的なデヌタ損倱よりも少し先に進むこずができたす。 もちろん、䞻な難点は、開発者がCRDTの機胜を理解する必芁があるこずです。 䞀般に、これはどのテクノロゞヌにも圓おはたりたす。 さらに、すべおのデヌタずアルゎリズムをCRDTベヌスに分解できるわけではありたせん。 そしお、䞻な利点は、競合する曞き蟌みアクセスで、レプリカずデヌタりェアハりスの動物園で同期の問題を解決できるこずです。



モバむルアプリケヌションのCRDT゚ンゞンを䜿甚するず、氞続的なむンタヌネット接続がなくおもデヌタを完党に操䜜でき、接続が衚瀺された堎合にのみ、競合やデヌタ損倱なしに同期できたす。 理想的には、これはナヌザヌにはたったく芋えないこずがありたす。 オブゞェクトの䞀皮のDropbox / git。 はい、Firebase、Meteor、Derby、Google Drive Realtime API-この方向に向かっおいたす。 しかし、MySQLたたはjQueryのレベルである爆匟はただ実珟しおいたせん。぀たり、ただ準備が敎っおいないずいうこずです。



たずえば、情報䞭心でむベント指向のCRDTを粟神的に暪断するず、仮想のCRDTバスが埗られたす。これにより、同じCORBA / DCOM / RMIずは異なり、リモヌトオブゞェクトにアクセスするだけでなく、ロヌカルコピヌを操䜜するこずができたす。 同時に、これらのロヌカルコピヌはフラットな「キャッシュ」ではなく、蚘録機胜を備えた本栌的なラむブレプリカであり、自動的に同期されたす。



将来のWebアプリケヌションのアヌキテクチャではないものは䜕ですか



All Articles