N层应用程序在这里理解为多个层次,前面我们简要的描述过在N层架构的应用中使用子网来划分依赖关系,在垂直的关系上我们我们可以将N层架构分为两层,物理层和逻辑层,这种应用架构基本是以AzureIaaS组件来划分应用的逻辑上的各层,例如使用AzureVirtailNetwork来规划物理虚拟机,使用AzureVM来运行和配置应用等等,各层之间存在调用关系,一般来讲是上层调用下层,但是下层不能调用上层。大致的关系图,可以使用下图来表示:
层在本架构中是非常重要的概念,我们这里用层来分离应用的职责以及管理依赖关系,每个层都在不同的计算机上运行,虽然每个层可能都运行在不同的机器上,但是也不是必须的,不同的层也可以运行在同一个计算机上,在物理机器上分层有利于提高整个应用的水平缩放能力和灾后恢复能里,但是垂直扩展就非常困难了。
传统的应用中,而且大部分的应用中传统的将应用分为表示层,中间层和数据库层,当然可以有更多的层,这里还有一个封闭层的概念,如果一个层只能调用下一个层,那么我们称之为封闭,如果可以上一个层可以调用它下面的任何一个层,我们称之为开放的结构。
什么时候使用N层应用架构主要用于如下几个场景:
简单的web应用
将本地应用迁移到Azure云的应用。
同时既要开发本地应用也要开发云应用。
主要优点本地和云,Azure云和其他云之间的可以方便的移植。
对开发者来说学习曲线低很多。
便于从传统应用向云应用移植。
对于异构环境有比较好的支持,例如同时支持windows平台和Linux平台。
需要尽量避免的点不要最后将中间层开发为仅仅是数据库增删查改的应用,多个层反而增加了各层之间的网络延迟。
独立部署非常困难,只需要部署很容易牵一发而动全身。
需要更多的精力和事件来管理物理资源,物理资源的可扩展性不方便。
大型的应用安全管理也会比较复杂。
微软推荐的最佳做法合理利用自动缩放的功能。需要注意采用的Azure组件的自动缩放功能,例如采用Azure的负载均衡,以及采用虚拟机规模集等等。
使用异步消息来分离逻辑层。
使用缓存,同时需要注意分布式缓存的设计避免缓存成为应用的单点。
使用数据库的高可用方案,例如SQLServer的alwayson等。
在前端和互联网之间放置Web应用防火墙。
将每个层放入到不同的子网中,并设计子网的安全规则,采用例如NSG来加强网络安全。
限制各层的访问请求,仅仅允许必须的访问。
举例:运行在虚拟机上的N层应用从这张图我们可以将上面的理论应用上去,使用虚拟机来组成各层,每一层都在一个虚拟网络里,数据的流动只能从左流向右边的层,即上一层留下下一层,各层之间都采用负载均衡处理请求,增加DMZ的隔离层。
这个实例是可以作为详细的参考。
注意事项N层体系结构不限于三层。对于更复杂的应用程序,通常会有更多层。在这种情况下,请考虑使用第7层路由将请求路由到特定的层。
层是可伸缩性、可靠性和安全性的边界。请考虑为这些区域中有不同需求的服务提供单独的层。
使用虚拟机规模集进行自动缩放。
在体系结构中寻找可以使用托管服务而无需进行大量重构的位置。具体来说,就是缓存、消息传递、存储和数据库。
为了提高安全性,请在应用程序前放置网络DMZ。DMZ包括防火墙和数据包检查等实现安全功能的网络虚拟设备(NVA)。有关详细信息,请参阅网络DMZ参考体系结构。
为实现高可用性,请在可用性集中放置两个或多个NVA,并使用外部负载均衡器在实例间分布Internet请求。有关详细信息,请参阅部署高可用性网络虚拟设备。
不允许将RDP或SSH访问定向到正在运行应用程序代码的VM。相反,运算符应登录到jumpbox,也称为壁垒主机。这是管理员在网络上用来连接其他VM的VM。Jumpbox有一个网络安全组,该安全组仅允许来自已批准的公共IP地址的RDP或SSH。
可使用站点到站点虚拟专用网络(VPN)或AzureExpressRoute,将Azure虚拟网络扩展到本地网络。有关详细信息,请参阅混合网络参考体系结构。
如果组织使用ActiveDirectory管理标识,建议将ActiveDirectory环境扩展到AzureVNet。有关详细信息,请参阅标识管理参考体系结构。
如果需要比VM提供的AzureSLA更高的可用性,可以跨两个区域复制应用程序,并使用Azure流量管理器进行故障转移。有关详细信息,请参阅在多个区域中运行WindowsVM或在多个区域中运行LinuxVM。
Azure云架构师入门修炼系列:
云计算时代对于应用架构提出了不一样的需求-Azure应用体系结构指南概述云架构师入门修炼的第一步:如何选择合适的架构
Azure认知服务文章列表:
Azure认知服务入门文章列表
AzureDeveloper,一个分享和学习Azure技术的好去处,欢迎