2011-12-19 81 views
1

我开始将几个应用程序迁移到Azure。看起来非常简单,我所要做的就是将一个附加的Azure项目添加到我的解决方案中,并将其指向我的Web项目。如何设计我的应用程序以利用Azure,但防止被锁定?

但是,我担心的是,团队开始用Azure特定功能污染我的应用程序并依赖它。例如,文件上传将用于Azure存储,Azure缓存等。如果我们保持Azure并且所有客户都乐于使用Azure,那么这一切都很好。如果我们发现某个客户对Azure不满意,我不希望进行大量删除Azure功能的工作。

只是想知道是否有人遇到类似的问题。理想情况下,我希望能够将项目发布到Azure,并且它使用Azure功能,Azure Code等,第二次发布允许我使用具有非Azure功能的IIS。

我假设我只需要小心使用接口正确和DI等FileUpload与AzureFileUpload。对于像CSS /脚本等的Azure存储资源而不是本地资源那样的问题呢?我应该看看使用Azure Cloud Drive来模拟标准NTFS环境吗?

是否有任何建议/模式/实践?有没有人有类似的经验?如何分离项目和项目结构等?我想很多是标准设计。只是想知道其他人如何接近避免与Azure锁定。

回答

3

有几件事情,如果你担心,你可以这样做:

  1. 坚持以核心技术像asp.net,ado.net,SQL也存在天青之外。
  2. 摘要使用Azure特定服务的代码。

对于第一个,只需扫描您的代码以确保运行时服务不包含Azure名称空间。

但是,要成为一个云服务并获得它的好处,你应该考虑采用天蓝色的服务。

对于第二个,您可以创建一个由接口提取的云服务层。只有该层与天蓝色的特定服务进行通信。如果您需要在天蓝色之外工作,则只需要该层的插件。

0

我会设计一个您的应用程序可以使用的云接口(作为实际云/网络的抽象),以及该接口的Azure实现。

然后,在需要时,您可以使用相同的界面制作您的应用可以使用的其他云实施。

在设计接口时,挑战只包括与每种云/网络相关的通用方法。因此,这将阻止您的应用程序直接使用任何Azure特定功能,但这正是目的。

2

如果您希望应用程序能够在IIS或Azure上运行,并且这些是您唯一的两个目标,我唯一的建议就是不要过分抽象/界面。在web.config和WebRole.OnStart()中可以处理一些差异,例如将缓存用作会话提供程序或将诊断记录到表存储。

有些事情会帮助创建接口,然后根据您的部署目标(Web配置转换是我们使用的)在配置中注入这些接口。例如,在IIS中,您可能希望在单独的线程中发送电子邮件,而在Azure中,您可能会使用辅助角色和队列。您可以为IIS设置1个ISendEmails实现,并为Azure设置不同的web.config转换。

你可以做的另一件事,取决于你有多少文件数据,将文件存储为数据库中的blob列。我敢肯定有人会告诉我这对性能不利,并且可能会在sql服务器中使用GB文件数据而变得昂贵,并且他们有一点意义。尽管IIS/Azure的灵活性高度关注,但值得考虑。

相关问题