我目前正在为我的新项目设计架构。这有ASP.Net MVC Web客户端和WCF Web服务,用于第三方集成作为前端。
目前,我们将在数据中心租用机架空间托管此应用程序,但将来我们可能会将其移至Microsoft Azure。
我是否必须在我的架构中对Azure进行具体规划?或者我目前的架构有IIS,MSMQ,SQL Server,Velocity等将在Azure中工作而没有太多问题?由于缺乏可用时间,我一直忽视Azure,但需要确保我能够获得适合未来需求的架构。
我需要注意哪些事项?
谢谢&的问候,
的Ajay
答案 0 :(得分:10)
这取决于您考虑转移到Azure的程度以及时间。如果你是,那我就说是。
不幸的是,能够在任何地方运行一次的想法是一个梦想。如果平台限制了您的架构选择 - 几乎每个平台都可以做到,那么抽象一切的概念就不起作用了。例如,即使您可以选择数据持久性技术,也几乎可以保证在某些时候遇到阻抗不匹配问题,这会影响您的设计。
因此,在Azure的情况下,您需要考虑许多问题。
首先,此阶段没有MSMQ或Velocity。 Azure有它自己的queueing component,它有更多的被动模型(轮询消息,没有路由等),所以你可以使用它,但它不像MSMQ那样是事务性的,而你我们需要确保所有消息都是幂等的。分布式缓存是我认为的方式,但它还没有(可能不是Velocity)。
其次,您可以为表格式持久性选择Azure's Table Storage或SQL Azure Database。您选择哪一个可能取决于您在哪里缩放疼痛点。最简单的选择是使用SQL路由,但是在数据库大小方面存在某些限制,并且您将无法使用SQL Server周围的许多服务,例如作业代理,依赖项(用于缓存回调),如果你遇到SQL Server没有扩展的问题,那么在云中运行不太可能有太多帮助,只是因为它仍然是一个RDBMS。如果您想要一个更具伸缩性的解决方案,那么Azure表存储就是您的人 - 但它是非关系型的,您需要修改您的体系结构以适应它支持的更有限的事务范围 - 以及它的固有局限性查询REST-HTTP架构的机制和延迟。想想BASE,而不是ACID。
第三,您需要以不同的方式考虑文件存储。由于每个实例都在VM中运行,因此当VM关闭时,任何本地存储都会消失,因此对于长期持久性,您需要使用Azure Blob Storage并设计应用程序,并牢记这一点。
第四,您可以选择两种类型的角色 - Web角色,运行IIS(您目前无法控制,在调整IIS参数方面)和工作角色,这更像是Windows服务。并且没有机制让您的角色彼此了解 - 因此从Web到工作人员的通信通过队列或表/ blob存储进行。因此,您也需要牢记这一点。
总而言之,如果您想迁移到Azure,需要做出很多设计决策 - 这个平台本质上限制了您可以使用的技术,因此可以使用哪些设计选项。如果您考虑使用Azure进行设计,那么您最终将拥有一个更具固有性的可扩展系统,但是在此过程中需要做出某些决策 - 有些可能是交易破坏者。
[编辑:我应该补充一点,这个答案更多的是考虑将整个应用程序移动到Azure。当然,这不是唯一的选择 - 您可能只想将某些组件移动到云端,并将其余组件保留在本地,使用Azure .NET Service Bus之类的东西进行交互]
答案 1 :(得分:2)
我会说不。
设计当前平台,并仅在实际使用时修改Azure。你很可能不需要它,所以不要浪费你的时间。
应用程序的体面设计应该导致从底层架构中进行大量抽象,因此,如果切换平台,则默认情况下应进行本地化更改。
答案 2 :(得分:1)
我对Azure平台的当前产品知之甚少,但我会说,一般来说,我的设计与您现在的要求不符。猜测未来需求如何变化是非常困难的,并且会影响整个项目的成功。