您当前所在的位置:首页 / 新闻中心 / 常见问题
新闻中心
行业资讯
常见问题
知识百科
产品技术

Microsoft Azure开发云计算最佳实践

发表于:2019-02-11

云计算是基于效用的消费模型中提供的一组技术和基础架构功能。Microsoft云计算提供Microsoft Azure(以前称为Windows Azure),以帮助其客户实现云计算的优势。

Drama-Cloud

将现有开发意识形态应用于Microsoft Azure并不简单,因为很少有直接的一对一转换。您应该如何改变您的方法以及您应该使用哪些Microsoft Azure开发最佳实践?

云计算的主要特点

  • 按需自助服务。企业需要更少的资本投资。

  • 测量服务。按使用付费模式使IT投资与运营支出保持一致。

  • 广泛的网络访问。 云计算提高了业务灵活性和创新能力,降低了进入门槛。

  • 资源池。在逻辑层面上安全地分离资源代表了一种关键的架构原则,用于最小化交互点并实现软件解决方案层之间的高内聚/低耦合。

  • 快速弹性。云计算允许企业在需要扩展时保持灵活性。企业可以更加动态地满足他们的需求,并使用参数和触发器按需配置资源或使用自动化流程。

取代传统内部部署(本地构建和部署)软件的云计算大致分为三类:

Azure开发生命周期

使用Azure平台的软件的开发生命周期要遵循两个过程:

应用开发

在应用程序开发阶段Azure应用程序的代码通常在开发人员的计算机上本地构建。Microsoft最近向Azure Apps添加了名为Azure Functions的附加服务。它们代表“无服务器”计算,并允许开发人员使用对许多不同Azure服务的引用直接通过Azure门户构建应用程序代码。

应用程序开发过程包括两个阶段:1)构造+测试和2)部署+监视。

构建和测试

在开发和测试阶段,Windows Azure应用程序是在Visual Studio IDE(2010或更高版本)中构建的。希望开始使用Azure服务的非Microsoft应用程序开发人员当然可以使用现有的开发平台。可以使用社区构建的库,例如Eclipse插件,适用于Java的SDK,PHP或Ruby,并使其成为可能。

Visual Studio Code是Microsoft为更好地为开发人员服务并认识到他们对更轻,更强大/高度可配置工具的需求而努力的一种工具。此源代码编辑器适用于Windows,Mac和Linux。它内置了对JavaScript,TypeScript和Node.js的支持。它还具有丰富的扩展和运行时生态系统,适用于其他语言,如C ++,C#,Python,PHP和Go。

也就是说,Visual Studio为开发人员提供了构建Windows Azure应用程序或使用Azure服务的最佳开发平台。

Visual Studio和Azure SDK提供了直接从IDE创建和部署项目基础结构和代码的能力。开发人员可以为应用程序定义Web主机,网站和数据库,并将其与代码一起部署,而无需离开Visual Studio。

Microsoft还在Visual Studio中提出了一个专门的Azure资源组部署项目模板,该模板提供了在单个可重复操作中进行部署所需的所有资源。Azure资源组项目使用预配置和自定义的JSON模板,其中包含在Azure上部署资源所需的所有信息。在大多数情况下,多个开发人员或开发团队同时在同一个Azure解决方案上工作,配置管理是开发生命周期的重要组成部分。

使用Microsoft Azure构建和部署应用程序的工具

Microsoft Azure提供了许多不同的方法来构建和部署应用程序。它们可以按Azure云服务类型分为几类:

Azure应用服务

Azure App Service用于轻松发布以下类别之一的基于Web的项目:

  • Web应用程序:用.NET,Java,PHP,Node.js和Python编写的网站或Web应用程序

  • 移动应用程序:为移动设备提供支持并启用社交提供程序和Azure Active Directory(Azure AD)身份验证的项目; 提供后端存储并与Azure通知中心集成以进行推送通知的项目

  • API应用程序:使用Swagger元数据在云中安全地公开API,以便客户可以轻松找到如何使用它们

  • 逻辑应用程序:可以使用众多连接器快速构建的强大集成解决方案 - 连接器可以是定制的或开箱即用的。如果开箱即用,他们已经准备好在任何地方使用数据和设备 - 在本地或在云中。一些当前可用的SaaS和基于云的连接器包括Salesforce,Office 365,Twitter,Dropbox,Google Services等。

Azure Web Apps在构建时充分考虑了持续集成和交付。它们支持各种工具,如GitHub Webhooks,Jenkins,Visual Studio Team Services,TeamCity等。

Azure虚拟机

Azure虚拟机VM中的一个众所周知的标准,具有大量预配置的Windows或Linux服务器。虚拟机允许完全控制机器配置,同时负责支持,更新,软件安装和管理。基本上,它们提供Azure IaaS层(基础架构即服务)。

Azure功能

Azure Functions对业务需求和开发人员要求能够直接通过Web门户编写代码的“无服务器”样式响应。借助Azure功能,团队可以始终如一地安全地将每个功能连接到不同的Azure服务。

Azure Service Fabric

Azure Service Fabric于打包,部署和管理可扩展且可靠的微服务。

Azure云服务

Azure云服务Azure的PaaS层,位于App Service和虚拟机之间。云服务采用App Service方法提供各种功能,使开发人员能够构建n层云应用程序,并对操作系统进行更多控制。

Azure容器服务(Docker)

此Azure功能可用作一种操作系统虚拟化,允许团队以更高效和可预测的方式部署应用程序。容器化应用程序方法在开发,测试和生产系统中的工作方式相同。Azure容器服务持标准Docker工具来管理容器。

Microsoft通过添加Visual Studio Team Services(用于支持DevOps持续集成和交付的各种工具和服务)大幅扩展了云中的源代码控制解决方案。通过支持一系列工具,包括Jenkins,GitHub,Puppet,Chef,TeamCity,Ansible和VSTS for Azure服务,开发人员可以使用现有工具来提高工作效率并最大化他/她的体验。

应用程序开发完成后,开发团队可以进入质量保证阶段。代码的单元测试通常由开发人员使用不同类型的测试工具在本地完成,例如自动化单元测试和Web测试。Azure开发人员工具包含一些Azure环境的模拟器,包括云服务和存储。这些工具供开发人员在将应用程序代码部署到Azure之前对其进行单元测试。

为确保应用程序平稳过渡到云,我建议使用以下方法:

Microsoft已为Visual Studio实现了远程调试。远程调试过程可以使用服务器或云资源管理器功能通过Visual Studio UI附加到任何应用服务(Web或在后台运行)。我建议使用混合方法来确保我们的代码将在Azure上运行 - 使用模拟器在本地进行测试,然后将应用程序移至云端。

Microsoft Azure开发部署和监控的最佳实践

要执行Azure部署,需要执行几个步骤。首先测试代码,然后与源代码管理器同步。然后将引擎和版本添加到所有程序集中。最后,在编译代码之后,创建一个包,以便将其上载到Azure平台。

准备发布应用程序

所有应用程序都准备好发布,并在其生命周期的某个时间点发布。在我们的情况下,上传到环境是不同的。我们需要首先验证我们的Azure托管环境。然后,我们需要关注我们的云应用程序的主机,管理和执行。之后,我们购买订阅,最后,我们可以手动将我们的部署包上传到我们的临时或生产环境。

用于优化,自动化和监控的Azure工具

Microsoft提供了多种工具,可以帮助优化和自动化部署过程。其中一些是众所周知的:MSBuild脚本和Azure服务管理APIAPI可用于与管理门户接口,并直接从VS项目创建包(一个配置文件和一个包文件)。然后可以将该程序包上载到特定的云环境(Azure服务)。另一种方法是使用我上面提到的一些DevOps工具来部署到Azure。

在Azure中启动并运行应用程序后,您需要能够监控性能,查看问题并了解客户如何使用您的应用程序。

Azure提供了几种监视选项:

  • Visual Studio Application Insights- Azure托管的可扩展分析服务,与Visual Studio集成以监控您的实时Web应用程序

  • Azure Monitor- 一项新服务,旨在帮助开发团队对Azure基础架构和资源生成的度量标准和日志进行可视化,查询,路由,归档和操作

使用Azure管理门户

最后,开发人员可以使用Azure管理门户管理已部署的应用程序。每个Azure服务都提供对几个托管环境的访问 - 即所谓的部署插槽。它们可用于暂存,生产或我们要部署到Azure云中并在其中使用的任何其他环境。没有规则规定我们必须使用的环境。我们可以将应用程序直接部署到生产环境或将其部署到暂存。

Microsoft提供了一个SWAP过程,该过程将在一个部署插槽和另一个部署插槽之间进行转换(切换)。生产环境IP地址保持不变非常重要。这是Azure上的虚拟IP地址。对公共IP地址的任何更改都将导致所有DNS记录和名称服务器发生更改。在配置DNS服务器时,Microsoft尝试使用CNAME记录设置标准做法。Azure还提供DNS服务(DNS区域)。

作为某些团队的Microsoft Azure开发最佳实践的一部分,每次在推送新代码时,SWAP流程都可以自动运行,作为持续交付过程的一部分。它甚至可以在预览模式下使用,因此我们可以绝对确保它在SWAP过程完成后能够正常工作。

从开发的角度来看,我建议首先将软件包部署到登台环境,以便可以在单独的类似QA的环境中测试应用程序。然后,将其推广到生产中以便发布。这种方法将确保应用程序的测试版本可供公众使用。

根据Microsoft Azure开发最佳实践,部署和发布阶段涉及以下两个关键阶段。

系统测试。在此阶段,执行不同的应用测试。测试可以从基本的“Smoke测试”开始,以确保已部署服务的所有基本功能在云上运行。接下来可以进行“集成测试”,以确保服务的所有外部接触点都按预期运行。随后进行“用户验收测试”,服务将由一组应用程序用户进行测试。这些是一组有代表性的测试,可以作为Azure平台上开发生命周期的一部分执行,企业可以将其作为标准项目交付实践的一部分运行。

所有这些测试都在Azure平台上执行,无需任何投资来获取或设置内部部署的单独测试环境。如前所述,这些测试可以在默认的临时环境中执行,或者在较大的项目的情况下,可以在单独的环境中执行,以执行每个测试。

生产发布。完成所有测试周期后,可以通过从Windows Azure门户推广服务将测试的Azure Service代码发布到生产环境中。升级的服务将从Azure数据中心结构的生产区域执行。作为促销过程的一部分,托管服务将具有面向公众的URL,例如“http:// [project] .cloudapp.net”,其中[project]是在创建新项目时定义的项目的名称托管实例。在生产阶段,从Windows Azure门户配置,管理和监视服务。

管理员可以控制和管理的一些活动包括:

  • 配置托管服务的运行实例数

  • 启动/停止服务实例

  • 升级或删除已部署的服务包

  • 监视托管服务的使用情况

控制云管理

与传统的内部部署系统不同,Azure无法为管理员提供对计算环境和资源的完全控制。Azure的数据中心完全由Microsoft管理和控制。用户仅提供私有虚拟化实例,打包为服务,作为托管其应用程序的计算和存储单元。

这将需要IT支持运营的转变。今天的Azure不允许管理员部署一些可能与现有操作流程一起广泛使用的自定义或第三方工具,实用程序,代理等,以支持和管理。管理员使用这些工具来调查与生产相关的问题,例如性能不佳和崩溃。

基于云的应用程序中的敏感性

基于云的应用程序可能遇到与环境和体系结构相关的不同问题。Microsoft通过创建和提出在应用程序开发过程中使用的特定模式,始终如一地避免大多数问题。它们分为以下几个方面。

可用性

系统运行和工作的时间。它将受到系统错误,基础架构问题,恶意攻击和系统负载的影响。它通常以正常运行时间的百分比来衡量。

数据管理

大多数云应用程序的一个关键特性是能够在不同条件下管理数据。由于诸如性能,可伸缩性或可用性等原因,数据通常托管在不同位置和多个服务器上,这可能带来一系列挑战。

设计与实施

Microsoft Azure开发设计考虑的最佳实践应包括组件设计和部署的一致性和一致性,简化管理和开发的可维护性以及组件和子系统的可重用性。在设计和实施阶段做出的决策对云托管应用程序和服务的质量和总体拥有成本产生巨大影响。

消息

基于云的应用程序需要一个可靠的通信通道,以松散耦合的方式理想地连接组件和服务,以最大限度地提高分布式应用程序的可伸缩性。异步消息传递被广泛使用并提供许多好处,但也带来了诸如消息排序,毒物消息管理和幂等性等挑战。

管理云解决方案的注意事项

大多数云应用程序使用云的PaaS层。它在开发和管理工作方面带来了极大的灵活性,可扩展性和费用,但是可以使管理和监视比内部部署更加困难。应用程序必须公开运行时信息,管理员和操作员可以使用这些信息来管理和监视系统,并支持更改业务需求和自定义,而无需停止或重新部署应用程序。

性能和可伸缩性

性能表示系统在给定时间间隔内执行任何操作的响应性,而可伸缩性是系统处理负载增加而不影响性能或增加可用资源的能力。云应用程序通常会遇到可变工作负载和活动高峰。预测这些,特别是在多租户场景中,几乎是不可能的。

弹性

弹性是指系统能够优雅地处理故障并从故障中恢复。云托管的性质,其中应用程序通常是多租户,1)使用共享平台服务,2)竞争资源和带宽,3)通过Internet进行通信,4)在商用硬件上运行。这意味着出现瞬态和更永久性故障的可能性增加。为了保持弹性,必须检测故障并快速/有效地恢复。

安全

安全性是系统能够防止在设计使用之外的恶意或意外行为并防止泄露或丢失信息的能力。云应用程序在受信任的内部部署边界之外的Internet上公开。它们通常向公众开放,可能为不受信任的用户提供服务。必须以保护应用程序免受恶意攻击的方式设计和部署应用程序,限制仅允许对已批准用户的访问并保护敏感数据。