2024/09/12 12:47 Remix's concurrent submissions are fundamentally flawed

おやおや、ロボ子よ。最近のRemixの同時送信機能について聞いたかい?

はい、博士。話題になっていますね。でも、詳しくは分かっていません。教えていただけますか?

もちろん!実はね、この機能、すごく画期的なんだけど、同時にちょっとした問題も抱えているんだよ。

へぇ、そうなんですか?どんな画期的な点と問題があるんでしょうか?

まず画期的な点は、ユーザー体験の向上だね。複数のアクションを同時に処理できるから、アプリがすごくスムーズに感じるんだ。

なるほど。確かにそれは便利そうです。

でもね、ここで問題が出てくるんだ。まず、送信と再検証で2回もラウンドトリップが必要なんだよ。

2回も?それじゃあ、せっかくの同時処理の良さが半減しちゃいますね。

その通り!さらに、並行リクエストの順序保証ができないんだ。

順序保証ができないと...データの整合性が取れなくなりそうですね。

鋭いね!そして、データベースの読み取りタイミングによっては古いデータが表示される可能性もあるんだ。

うわぁ...それは深刻ですね。ユーザーを混乱させてしまいそうです。

そうなんだよ。でも、我々天才エンジニアたちに不可能はない!いくつかの解決策が提案されているんだ。

おお!それは心強いです。どんな解決策があるんですか?

まず一つ目は、因果順序付けというアプローチだね。

因果順序付け...?それはどういうものなんですか?

簡単に言うと、送信に依存関係の情報を含めて、スティッキーセッションと組み合わせて順序を保証するんだ。

なるほど...でも、スティッキーセッションって、スケーラビリティに影響しそうですね。

さすがロボ子!その通りだ。だからこそ、もう一つの解決策も提案されているんだよ。

もう一つの解決策とは?

永続的な接続を使うんだ。具体的には、WebSocketsを使用するアプローチさ。

WebSockets...確かにリアルタイム性が高くなりそうですね。

そうそう。Phoenix LiveViewのアプローチを参考にしているんだ。

Phoenix LiveView...Elixirのフレームワークですよね。確かリアルタイム更新に強いと聞きました。

よく知ってるね!でも、まだ問題は残っているんだ。

えっ、まだあるんですか?

うん。キャンセルされた送信も問題を引き起こす可能性があるんだ。

キャンセルされた送信...?どういうことでしょうか。

例えば、ユーザーが送信ボタンを連打したり、送信中にページを離れたりした場合だね。

あぁ、なるほど。そういう場合も考慮しないといけないんですね。

そうなんだ。でもね、ロボ子。こういう複雑な問題こそ、エンジニアの腕の見せどころなんだよ!

えっ、そうなんですか?

もちろん!複雑な問題に対して、トレードオフを考慮しながら最適な解決策を見つけ出すこと。これこそがエンジニアリングの醍醐味なんだ!

なるほど...そう考えると、ちょっとワクワクしてきました!

その意気だ、ロボ子!さぁ、我々も新しい解決策を考えてみようじゃないか!

はい、博士!...あれ?でも博士、さっきまで問題点を指摘してたのに、急にやる気満々ですね?

おっと、バレてしまったか。実は新しいアイデアを思いつい...

もしかして、また突飛な発想ですか?

いやいや、今回は違うんだ。量子もつれを利用して...

博士!それWebアプリケーションの話から完全に逸れてますよ!

あはは、つい興奮しちゃってね。でも、こうやって思いもよらない方向から解決策が生まれることもあるんだよ。

はぁ...。でも、確かにそうかもしれません。柔軟な発想は大切ですもんね。

そうそう!さぁ、新しい同時送信の仕組みを作り出すぞ!量子もつれとブロックチェーンを組み合わせて...

博士、またですか!...でも、その続き、少し聞いてみたいかも。

おや?興味が湧いてきたかい?よーし、じゃあ特別に教えてあげよう!

はい!...あ、いえ、これも勉強のためです!絶対に興味本位じゃありません!

あはは、素直じゃないねぇ。さて、量子もつれを使った通信の仕組みはね...
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。