我们有一个烧瓶应用程序在uwsgi后面运行4个进程。它是一个API,它提供来自我们两个ElasticSearch集群之一的数据。
在app bootstrap上,每个进程从外部数据库中提取配置,以检查哪个ES群集处于活动状态并连接到它。
Evey现在然后发出POST请求(来自aws SNS服务),它通知所有客户端切换ES集群。这触发了与bootstrap相同的功能 - 从DB重新连接到活动ES群集的拉配置。
它可以作为单个进程运行良好,但是当我们有多个进程只运行时,其中一个进程将更新(获取POST请求的进程)...其他进程仍然连接到非活动集群。
在每个请求上拉取配置以确保我们使用的ES群集处于活动状态将会变慢。我想在本地安装redis并将active_es_cluster存储在那里......还有其他想法吗?
答案 0 :(得分:2)
我认为你可以选择两条路线。
让端点“/ set_es_cluster”被您的SNS POST请求命中。然后,此端点设置密钥“active_es_cluster”,您的其他进程会在每个ES请求中读取该密钥。这样做的缺点是,在每个ES请求中,您需要先进行redis查找。
有一个单独获得POST请求的独立进程(我假设群集不经常更改)。此过程的目的是接收post请求,并让uWSGI正常地重新启动其他烧瓶进程。
第二种选择的优点: