Slack bot的零宕机时间部署

沃万

我们使用BotKit开发了bot,现在我们尝试以最小的部署停机时间解决问题。

该服务器上运行着服务器和Docker容器。在容器内部运行与RTM服务器(Slack)连接的bot-app实例。当我开始部署bot-app的新版本(v2)时,我希望停机时间为零,用户不应看到“机器人已脱机”。

时间线

Deploy脚本使用新版本的bot-app运行第二个Docker容器。并且bot-app也连接到RTM服务器。这样,当两个应用程序都运行并连接到RTM服务器并响应用户命令时,会有几秒钟的时间(用户将看到对其命令的两个答案)。

如果一方面我们希望获得零停机时间,另一方面又希望防止用户同时与两个实例进行交互,那么我可以得到什么样的最佳决策呢?

决策1:当两个实例都将响应用户命令时,为了尽可能减少发生碰撞的可能性。

决策2:放弃零停机时间部署。在这种情况下,deploy脚本首先停止第一个docker-container,然后再启动另一个。该应用程序将不响应在停止当前版本的应用程序与完全启动新版本的应用程序之间发送的用户命令。

决策3:通过并行运行当前和新版本的应用程序或互斥锁进行交互。总体示意图:1)当前版本的应用程序正在运行2)部署脚本启动新版本的应用程序3)我正在等待新版本的应用程序几乎运行并准备连接到RTM服务器时,它会发送至当前版本的app命令以关闭RTM连接。4)应用程序的当前版本关闭RTM连接5)应用程序的新版本打开RTM连接

我认为还有其他好的解决方案。

您将如何在应用程序中解决此问题?

用户名

(很抱歉第二个答复;还有其他想法。)

我前面介绍的方法将对您现有的代码造成很大的破坏,因为您可能需要停止使用botkit(或者至少不使用它来进行RTM API通信)。一种破坏性较小的方法是使用某种外部方式来发出给定消息已被处理的信号。

例如,使用Redis,让机器人在收到消息时执行以下命令:

SET message:<message timestamp> 1 NX PX 30000

NX选项表示仅当密钥不存在时,此命令才会成功。因此,能够执行此操作的bot的第一个实例将成功,而另一个实例将失败。机器人仅应处理该消息,并在此命令成功后做出响应。

(这PX 30000设置了30秒的到期时间,因此Redis不会充满这些密钥。)

这应该让您通过重叠正在运行的机器人实例来进行零宕机时间升级,而不必担心消息会被处理两次。

请注意,如果以非正常方式关闭漫游器,则在此方案中仍然有可能完全丢弃一条消息。(它可能在调用该SET命令之后但实际上未处理该消息之前就消失了。)带有两个阶段的“获取/删除”的真实队列会更好,但是您又回到了我的其他答案。:-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Slack bot的Python asyncio

来自分类Dev

Slack Bot-Python Slack发送降价消息

来自分类Dev

Angular App的零停机时间部署

来自分类Dev

通过直接消息触发Slack Bot

来自分类Dev

java slack bot集成加入频道标签

来自分类Dev

用于Bot提及的Slack事件API

来自分类Dev

Slack Bot 查看所有私信频道

来自分类Dev

如何使用用 nodejs 编写的 slack bot 获取可共享的 slack 消息链接?

来自分类Dev

使用Docker部署到生产中:零停机时间

来自分类Dev

零停机时间部署node.js

来自分类Dev

Dokku零停机时间部署CHECKS失败

来自分类Dev

使用Docker部署到生产环境:零停机时间

来自分类Dev

Kubernetes 零停机时间重新部署探针

来自分类Dev

Elasticsearch-没有第二次重新索引的零宕机时间重新索引?

来自分类Dev

如何从Slack Bot发送定期的临时消息(“隐藏”)

来自分类Dev

如何将MS Bot添加到Slack?

来自分类Dev

将 Bot 连接到 Slack Clarification 的提交凭据步骤

来自分类Dev

Slack的chat.scheduleMessageMessage API不断抛出纪元时间错误

来自分类Dev

如何从Hubot脚本获取Slack消息的ID /时间戳?

来自分类Dev

当主服务器宕机时,Redis群集恢复停机时间

来自分类Dev

我希望在CloudBees上部署零停机时间-但我的应用需要预热

来自分类Dev

当热部署时,dust.js使nodejs的零停机时间成为可能吗?

来自分类Dev

Microsoft Bot Framework和Slack-始终返回禁止状态

来自分类Dev

仅在一名Unicorn工作者上为Slack bot运行Ruby线程

来自分类Dev

无法在Slack Bot中打印用户发短信的用户名

来自分类Dev

Bot Framework v3.0上带有Slack连接器的ReplyToActivityAsync引发异常

来自分类Dev

Node.js:如何使用MS Bot Framework在Slack中发送直接消息?

来自分类Dev

如何使用 ms bot builder 在 Slack 频道中设置“imBack”类型的按钮

来自分类Dev

是否有可能获得允许 slack bot 写入的所有频道?

Related 相关文章

  1. 1

    使用Slack bot的Python asyncio

  2. 2

    Slack Bot-Python Slack发送降价消息

  3. 3

    Angular App的零停机时间部署

  4. 4

    通过直接消息触发Slack Bot

  5. 5

    java slack bot集成加入频道标签

  6. 6

    用于Bot提及的Slack事件API

  7. 7

    Slack Bot 查看所有私信频道

  8. 8

    如何使用用 nodejs 编写的 slack bot 获取可共享的 slack 消息链接?

  9. 9

    使用Docker部署到生产中:零停机时间

  10. 10

    零停机时间部署node.js

  11. 11

    Dokku零停机时间部署CHECKS失败

  12. 12

    使用Docker部署到生产环境:零停机时间

  13. 13

    Kubernetes 零停机时间重新部署探针

  14. 14

    Elasticsearch-没有第二次重新索引的零宕机时间重新索引?

  15. 15

    如何从Slack Bot发送定期的临时消息(“隐藏”)

  16. 16

    如何将MS Bot添加到Slack?

  17. 17

    将 Bot 连接到 Slack Clarification 的提交凭据步骤

  18. 18

    Slack的chat.scheduleMessageMessage API不断抛出纪元时间错误

  19. 19

    如何从Hubot脚本获取Slack消息的ID /时间戳?

  20. 20

    当主服务器宕机时,Redis群集恢复停机时间

  21. 21

    我希望在CloudBees上部署零停机时间-但我的应用需要预热

  22. 22

    当热部署时,dust.js使nodejs的零停机时间成为可能吗?

  23. 23

    Microsoft Bot Framework和Slack-始终返回禁止状态

  24. 24

    仅在一名Unicorn工作者上为Slack bot运行Ruby线程

  25. 25

    无法在Slack Bot中打印用户发短信的用户名

  26. 26

    Bot Framework v3.0上带有Slack连接器的ReplyToActivityAsync引发异常

  27. 27

    Node.js:如何使用MS Bot Framework在Slack中发送直接消息?

  28. 28

    如何使用 ms bot builder 在 Slack 频道中设置“imBack”类型的按钮

  29. 29

    是否有可能获得允许 slack bot 写入的所有频道?

热门标签

归档