小编Pau*_*aul的帖子

原子更新以递增Postgresql中的整数

我试图找出下面的查询是否可以安全地用于以下情况:

我需要生成序号,没有间隔。由于需要跟踪许多记录,因此我有一个表,其中包含序列记录和序列整数列。

为了获得下一个序列,我将触发下面的SQL语句。

WITH updated AS (
  UPDATE sequences SET sequence = sequence + ? 
  WHERE sequence_id = ? RETURNING sequence
)
SELECT * FROM updated;
Run Code Online (Sandbox Code Playgroud)

我的问题是:当多个用户在不显式启动事务的情况下同时在数据库中触发此查询时,下面的查询是否安全?

注意:第一个参数通常为1,但也可以为10,例如,以获取10个新序列号的块

postgresql concurrency multithreading race-condition transaction-isolation

5
推荐指数
1
解决办法
4424
查看次数

如何使用容器为具有(长期)粘性会话的应用程序进行零停机滚动更新

我试图弄清楚如何基于 JSESSIONID cookie 为具有长期交互式用户会话的 web 应用程序提供零停机滚动更新,这些会话应该是粘性的。

出于这个(和其他)原因,我正在研究容器技术,比如 Docker Swarm 或 Kubernetes。

我很难找到关于如何的好答案:

  1. 确保新会话转到最新版本的应用程序
  2. 虽然现有会话仍由它们启动的任何版本的应用程序提供服务
  3. 关闭所有会话后,正确清理旧版本

更多信息:

  • 请求链接到基于 JSESSIONID cookie 的会话
  • 会话可能会持续数天,但可以在 24 小时内从应用程序内终止它们(向用户发送通知“注销/再次登录,因为有新版本,否则会在下午 12 点自动注销” “ 例如)
  • 当然,对于应用程序的每个版本,已经有多个容器以负载平衡的方式运行
  • 我不介意容器总数的增长,例如,如果每个旧版本的容器都仍在运行,因为它们仍然会托管 1 个会话,而大多数用户已经在使用新版本的应用程序

所以,我对所需流程的想法是这样的:

  1. 安装新版本的应用程序
  2. 让所有新连接(没有 JSESSIONID cookie 集的连接)转到应用程序的新版本一次
  3. 旧版本应用程序的容器不再提供会话服务,请删除容器/....

正如我提到的,我正在研究 Kubernetes 和 Docker Swarm,但对其他建议持开放态度,但最终解决方案应该能够在云平台上运行(目前使用 Azure,但未来可能会使用谷歌或亚马逊云)

任何指示/提示/建议或想法表示赞赏

保罗

编辑:回答@Tarun 问题和一般说明:是的,我不想停机。我设想的方式是托管旧版本的容器将继续运行以服务所有现有会话。一旦旧服务器上的所有会话结束,旧服务器就会被移除。

新容器只会为在新版本开始推出后启动应用程序的用户提供新会话。

因此,举个例子: - 我在上午 9 点启动旧版本应用程序的新会话 A - 上午 10 点推出新版本。- 我继续使用会话 A,并保留托管在运行旧版本的容器上。- 中午我去吃午饭并注销 - 因为我是连接到运行旧版本的容器的最后一个会话,容器现在将被销毁 - 下午 1 点我回来,重新登录并获得新版本的应用程序

说得通?

updating jsessionid kubernetes docker-swarm sticky-session

5
推荐指数
1
解决办法
1098
查看次数