再起動したり、状態を失ったりせずに自分自身を更新できる Web アプリを clojure で作成することを考えています。
Clojure アプリがいわゆるコードのホットスワップを実行できるという記事を見たことがあります。つまり、実行時に独自の関数を更新できます。これを Web サーバー上で安全に実行できますか?
再起動したり、状態を失ったりせずに自分自身を更新できる Web アプリを clojure で作成することを考えています。
Clojure アプリがいわゆるコードのホットスワップを実行できるという記事を見たことがあります。つまり、実行時に独自の関数を更新できます。これを Web サーバー上で安全に実行できますか?
コードのホットスワップを取得することは、可能であれば正しく行うのが難しいです。変更セットと実行中のアプリケーションにも依存します。
問題:
アプリケーションを再起動すると存在しない名前空間に古い変数が存在する可能性がありますが、一部の関数を再定義し、再起動せずにアプリを実行し続けると干渉します。
もう 1 つの問題はアトミック性です。複数の関数の再定義、つまり複数の変数の変更はアトミックではありません。他の名前空間のコードが依存する 1 つ以上の名前空間の関数を変更した場合、新しいコードで名前空間を再読み込みすることはアトミックではありません。
一般的に、あなたはどちらかの方が良いです
Erlang の OTP アプリケーションはこれをサポートしています。基本的に、アプリケーションの新しいバージョンを起動し、アプリケーションの新しいバージョンにリクエストを送信し始めます。リクエストの処理が完了するまで古いバージョンを維持し、その後シャットダウンします。