切换为云服务提供动力的生产 Azure 表

Posted

技术标签:

【中文标题】切换为云服务提供动力的生产 Azure 表【英文标题】:Switching production azure tables powering cloud service 【发布时间】:2015-01-23 10:11:40 【问题描述】:

想知道处理以下情况的最佳方法是什么。

我有一个 azure 云服务,它使用 Azure 存储表根据请求查找数据。表中的数据是定期离线生成的(每周一次)。

当离线生成新数据时,我需要将其上传到单独的表中并对服务进行配置更改(更改表名)以从新表中获取数据并重新部署服务强>。 (每次数据更改时,我都会更改表名 - 在我的代码中存储为常量 - 并重新部署)

另一种方法是为我的 azure Web 角色保留一个配置参数,该角色指定保存当前生产数据的表的名称。然后,在服务中,我为每个请求读取配置变量 - 获取对表的引用并从那里获取数据。

上面的第二种方法可以吗 - 或者它会因为我阅读配置而对性能造成影响,在每个到达服务的请求上创建一个表客户端。 (我的服务的 SLA 不到 2 秒)

【问题讨论】:

在设计方面,这是征求意见,很可能会被关闭。话虽如此:您应该认真考虑这一点,因为这是与 Azure 设计无关的基本内容。问问自己:您是否真的需要在每次请求时读取配置文件,或者是否有办法将设置保存在内存中直到下一次更改(同时仍将设置保存到配置文件) ?如果有一种方法可以将该设置保存在内存中:这就开辟了许多解决问题的方法。 【参考方案1】:

要回答您的问题,第二种方法肯定比第一种方法好。我认为您不会受到性能影响,因为配置设置在第一次读取时被缓存(我在这里的一个线程中读取它)并且创建表客户端不会产生网络开销,因为除非您在表上执行某些方法客户端,这个对象只是位于内存中。一种可能性是从配置文件中读取并将其放入静态变量中。当您更改配置设置时,捕获角色环境更改事件并将静态变量更新为配置文件中的新值。

第三种选择可能是将表名软编码到另一个表中,并让您的应用程序从那里读取表名。您可以在上传过程中更新表格名称,方法是先上传数据,然后使用已上传数据的新表格名称更新此表格。

【讨论】:

我同意。我将配置变量用于各种事情,并没有注意到任何性能问题。 @Lukos - 所以你说你使用 CloudConfigurationManager.GetSettings 函数来获取每个请求的配置参数,并且没有看到任何关于性能的问题。这听起来令人鼓舞。 是的。我只是使用 RoleEnvironment.GetConfigurationSettingValue(key) 并且它并不明显慢。

以上是关于切换为云服务提供动力的生产 Azure 表的主要内容,如果未能解决你的问题,请参考以下文章

分布式存储为云平台(OpenStack)提供服务时,该如何设计?

如何在 Azure API 管理上分离开发和生产环境?

微软增加了Azure专用主机选项 用于在单租户服务器上运行vm

在 Azure 中运行相同 cron 的生产服务器和登台服务器

Azure 应用服务预生产槽应使用哪些设置?

Mesos支持GPU:为云操作系统加入核动力