让云端云项目在云端上下工作?

时间:2013-02-01 08:20:16

标签: entity-framework azure wcf-data-services

为云端(也)部署云端开发项目所需的步骤是什么,例如在Windows Server计算机上?我的项目有2个工人角色。一个基本上是数据挖掘者,另一个托管(自托管)WCF服务。它使用Azure表服务,队列和Blob服务。这些元素将如何从云端转化? SQL数据库还是NoSql方法?我如何添加抽象级别以允许它使用实际可用的资源,而无需修改底层实现(即我的DataServiceContext类基本保持不变)?

编辑1:

工作者角色< => Windows服务

Azure表服务< => EntityFramework + WCF数据服务?

2 个答案:

答案 0 :(得分:2)

不幸的是,如果没有太多的返工,你将无法将其拉下来。虽然您的Web / worker角色可能更容易移动,但您最大的问题是使用Azure存储。虽然您可以(或可能)抽象存储并注入任何适当的存储,但您可能(无论是否明确地)具有Azure存储特定的设计注意事项。这意味着您已实现的内容可能在Azure上运行良好,但在内部部署不是很好。例如,您使用了blob存储的许多功能,例如页面blob或冗余,这些功能在传统的基于磁盘的存储中是不可用的。

前段时间我向Scott Gu发送了一封电子邮件,专门询问缺乏与Azure存储API兼容的内部部署存储产品的情况。他回答说,API兼容性是他们正在努力的事情,并将在今年晚些时候出现(去年是2012年)。我认为这是指在内部运行的Azure网站(和其他IaaS) - 他们在去年的预览中宣布了这一点。至于存储和计算,还没有什么。

我建议您避免尝试使用相同的代码和基础架构为Azure和内部部署构建应用程序。由于您已经开始使用Azure,因此需要对内部部署进行质疑,并尝试并发现潜在需求。这是安全恐惧吗?所有权意识?成本?也许您可以了解实际需要的内容并解决Azure应用程序中的这些问题。也许有一些销售在Azure上运行的好处比重写更容易。毕竟,没有多少用例绝对必须在内部运行 - 否则我们根本不会成为这个云的东西。

答案 1 :(得分:2)

我参与了一个需要在云端和本地部署的项目,具有相同的代码库。也许我可以与我分享一些想法。

设计时需要关注的方面很多,主要关注云与本地之间的不同环境,并在我们的系统中构建一些虚拟化层。这样我们就可以切换thruogh配置。

  1. 文件系统:我们有一个虚拟文件操作界面,其中包含文件保存,删除和获取的方法。然后我们有两个本地和blob的实现类。

  2. 数据库:这可以通过支持SQL Server和SQL Azure的简单SQL帮助程序类轻松完成。只需要更改连接字符串。但是在使用SQL Server时,我们也遵循SQL Azure的限制,例如没有跨数据库查询。

  3. 配置:我们将一些配置移动到数据库,并在web.config中启用了缓存,尤其是在运行时可能会更改这些配置元素。这是因为在云上部署时,除非推送新包,否则我们无法更改web.config。

  4. 托管:由于我们的项目是WCF服务,因此我们为底层服务实现创建了多个托管项目。其中一些用于本地部署,如Windows服务托管,控制台应用程序托管和IIS托管。我们还有一个Web角色和wroker角色,可用于在云上托管我们的服务。托管项目非常简单,所有这些项目都使用相同的服务实现类。

  5. 日志:我们利用文件系统层,以便将日志保存在本地文件(本地部署)或表格服务(云部署)中。

  6. 缓存:我们从ServiceStack中学习了代码,并为Windows Server AppFabric Cache和Windows Azure Shared Cahce构建了缓存接口和一些实现。它可以切换thruogh配置。对于下一个版本,我们将实现Cloud Service Cache的antoher实现类。

  7. 无国籍:我们确保了我们的应用程序,特别是服务实现是无状态的。这不仅对于云部署而且对于本地也非常重要。

  8. 希望这有帮助。

相关问题