【发布时间】:2017-03-15 15:42:24
【问题描述】:
我有一个多租户场景(每个租户都有自己的 Service Fabric 应用程序实例),租户可以激活/停用单个 Service Fabric 服务(我们将服务作为扩展概念在 UI 中向租户公开)。
示例:租户#1 激活电子邮件扩展,这将激活电子邮件 Service Fabric 服务。
要求:
- 当租户激活扩展时,他们应该能够提供配置(例如:smtpserver)
- 租户应该能够快速激活扩展(大约有 20 个不同的扩展)
- 扩展程序应该在几秒钟内就可以运行
当前实施
扩展程序的激活按以下方式处理(使用上面的电子邮件示例):
- 租户通过 UI 激活电子邮件扩展并向 smtpserver 提供地址
- 电子邮件服务是在租户的应用程序中创建的
- 应用程序升级被触发,将提供的 smtpserver 配置添加到应用程序参数列表中
- Service Fabric 开始滚动升级
- 时间飞逝(在我们的例子中是几分钟)
- 应用程序已升级,电子邮件服务已启动并运行
上述场景工作,服务启动并可以读取 smtpserver 配置。然而,租户的体验并不是最佳的。
问题
在升级过程中无法激活其他服务,因为在 Service Fabric 的持续升级过程中无法更改配置。
因此,租户必须等到应用程序升级(需要几分钟)才能再次激活/停用扩展。如果租户想要激活 10 个扩展,他们将不得不等待很长时间。
我尝试了以下方法来减少升级时间:
- 将 HealthCheckStableDurationInMilliseconds 设置为 0
- 将 HealthCheckWaitDurationInMilliseconds 设置为 0
升级过程仍然需要很长时间(大约一分钟)。
问题
由于我们只想更改 Service Fabric 应用程序参数,有没有其他方法可以加快升级过程或完全解决它?
注意:由于技术限制,我们无法批量激活扩展程序。每个扩展程序必须同时激活一个。
【问题讨论】: