回復力があり、可用性の高い Python API バックエンド サービスを設計しようとしています。コア サービスは、継続的に実行されるように設計されています。サービスは、テナントごとに独立して実行する必要があります。コア サービスはブロッキング サービスであり、各テナントの実行は他のテナントのサービスから独立している必要があるため、これが必要です。
コア サービスは、プロビジョニング サービスによって開始されます。プロビジョナーも継続的に実行されるサービスであり、ハウスキーピング機能を実行する責任があります。つまり、テナントのサインアップ時にコア サービスを開始し、必要な環境と属性を確認し、コア サービスを停止するなどです。
現在、multiprocessing
モジュールを使用して、プロビジョナー サービスからコア サービスの子インスタンスを生成しています。テナントごとに 1 つのスレッドを持つマルチスレッド サービスを使用することもオプションですが、いずれかのスレッドがクラッシュすると、他のテナントのサービスが中断されるという欠点があります。理想的には、これらすべてをバックグラウンド プロセスとして実行したいと考えています。問題は
プロビジョナー サービスをデーモン化する
multiprocessing
と、そのデーモンが子プロセスを作成できなくなります。ここに書いてあるプロビジョナー サービスが停止すると、すべての子が孤児になります。この状況からどうやって立ち直るか。
multiprocessing
明らかに、私はこの使用モデルに従わないソリューションに対してオープンです。