私は、Odooを複数の専用アプリケーションインスタンスに分割し、すべてが同じデータベースとファイルストアにリンクする新しいアーキテクチャ設計に取り組んでいます。 これにより、実際にイベントを介して配布することなく、Odooへのサービス指向のアプローチがいくらか提供されます。
このRFCを作成する前の少しの実験で、WebサイトアプリケーションインスタンスをDoSすることができましたが、Webインスタンスはチャンピオンのように動き回っていました。 これにより、アプリケーションレイヤー間に物理的な分離が作成され、潜在的なスラッシュドットを分離できます。
これは次のようになります(余分なものについては申し訳ありませんが、これはより大きなものを意味します-関連する部分は一番下のセクションです):
このアーキテクチャで私が予測する主な問題の1つは、分散インスタンス間でスケジュールされたタスクの実行について競合する競合を作成することです。 この観点から、環境変数を使用してスケジュールされたタスクを無効にするモジュールが必要です。これはすでに可能ではないと思います。
これを超えて-ほとんどの作業はロードバランサーによって処理されるため、モジュールは必ずしも必要ではありません。 すべてのインスタンスは技術的に任意のアクションを実行できるため、何かが誤った方向に進んでも問題はありません。
私はおそらくここでいくつかのことを見逃しているので、これはライブドキュメントになります。 他の誰かがこれに似た何かをしたかどうか聞いてみたいです。
アクションアイテム:
「スケジュールされたタスク」がir.cron
を意味する場合、Odooの構成ファイルmax_cron_threads = 0
、それらを無効にすることはすでに可能です(少なくともワーカーモードでは、スレッドモードではチェックしません
(編集:コードを見ると、ワーカーモードとスレッドモードの両方で機能しているようです)
AFAIK Odooアプリケーションサーバーは、ワーカーまたはアプリケーションサーバーを並べて追加することで拡張できるように設計されています。
制限は、それらが同じファイルサーバー(セッションおよび添付ファイルデータ用)とdbサーバーを共有する必要があることです。
また、負荷分散を設定して、アプリサーバーのグループへのウェブクライアントリクエストとアプリサーバーの別のグループへのウェブサイトリクエストを送信できます。
2つの要件、AFAICSに問題がない場合は、すべてすぐに使用できます。
ええ、私は@ sylvain-garancherと@dreisptがちょうど言ったことを正確に言うつもり
バックエンドインスタンスとフロントエンドインスタンス間で同じベースイメージを共有している場合は、フロントエンドインスタンスを起動するだけで、ブートコマンドに--max-cron-threads=0
を追加できます。
すぐにInfinitが1.0に
シルヴァンgarancher @万歳のおかげで、@dreispt、@Yajo -あなたが最も確かに正しいです-これはおかしくボックスでうまくいきます! 私は❤️Odoo
すぐにInfinitが1.0に到達し、ファイルストアの共有がはるかに簡単になることを願っています。
GlusterFSを調べましたか? これはRedHatが推奨するアプローチです
@lasley @dreisptまた、RedisベースのスケーラブルなOdooセッションモデルの周りにPRやその他のプロトタイプがあることを通知または思い出させます。
https://github.com/odoo/odoo/pull/12515
これが機能を維持し、OCAがどこかで維持されていることを非常に嬉しく思います...
ええ@lasley私はすでにGlusterFSを調べました。 確かに今日の時点で最高の本番ソリューションですが、Infinitはより優れたデザインであり、Dockerボリュームプラグイン(何らかの理由でDockerによって購入された...)があるため、私はまだInfinitに目を光らせています。
@Yajo Ohhhhhhそれはいいですね-私もInfinitに目を光らせなければなりません!
最も参考になるコメント
@lasley @dreisptまた、RedisベースのスケーラブルなOdooセッションモデルの周りにPRやその他のプロトタイプがあることを通知または思い出させます。
https://github.com/odoo/odoo/pull/12515
これが機能を維持し、OCAがどこかで維持されていることを非常に嬉しく思います...