Skip to main content

Azure开发指南

分类:  Azure指南 标签:  #Azure #基础 #Azure入门 #Azure Cloud Architecting 发布于: 2023-05-28 9:37:24

我想认认真真的从Azure的基础开始学习,作为一个Azure开发者需要了解和掌握哪些不一样的知识以及工具才能更好的适应云计算环境的开发,特别是针对于Azure环境的开发和Azure提供的工具,最大限度的利用Azure提供的资源和算力。这是第一篇Azure开发者指南,本指南概括了Azure开发者需要注意的方方面面,以及Azure提供的工具。后期我们根据这个指南一步一步的对相应的专题进行介绍和入门学习,希望能够帮助到大家。

什么是Azure

Azure是由微软提供的云计算平台,您可以在Azure上托管你的应用或者是利用它开发和部署新的应用,同时需要注意到Azure不仅仅对你的基于云平台的应用有帮助,它还可以利用云服务对部署在本地的应用进行增强。Azure平台集成了云服务,你可以利用这些服务进行应用的开发,测试,部署和管理。

当你把应用托管到Azure之后,你可以开始根据你的应用流量进行小规模的扩展,这个在Azure是非常方便做到的,同时Azure也提供高可用的方案,更厉害的是还可以做到不同区域的failover。你可以利用Azure Portal方便的进行资源和服务的管理,你也可以子动手使用相应的api和模板自行编程管理自己的资源和服务。

本指南是针对Azure应用开发者的一个介绍性的指南,为Azure开发者提供一个方向指导,帮助azure开发者掌握开发一个新的基于Azure的应用或者迁移一个应用到Azure需要了解和学习哪些必要的知识。

从哪里开始

想要从Azure提供的服务里找到哪些适合自己应用的服务,对于初学者来说是一件非常恐怖的事情,因为Azure提供了太多的服务,初看上去完全没有头绪,即便是有其他云计算环境的开发者,初次接触Azure也会因为工具,使用方法等等不同,觉得有些压力,因此我们本节旨在给开发者介绍开发者通常使用的一些服务,如果你想了解Azure提供的所有服务以及工具列表,你可以直接参考Azure的官方文档:https://docs.microsoft.com/en-us/azure/

首先第一件事就是你需要考虑你的应用如何托管到Azure上,对于托管应用的方式,Azure提供了太多可以选择的选项,例如最直接的虚拟机(VM), 不过VM需要自己管理基础的IT架构,如果不想这么麻烦,也可以现在Azure提供的PaaS服务,无需过多关注基础的IT设施。另外也要考虑是否要使用由Azure提供的各种管理,监控工具等等,还可以选择Azure提供的云存储,企业认证等等工具。

接下来我们介绍一下Azure用户选择较多的用于托管应用的服务,当然这也是官方的推荐。

应用托管服务

Azure提供了几种云计算产品让用户很方便的托管自己的应用,从用户需要完全自己管控的IaaS服务, 到将大部分的基础IT设施委托给Azure的PaaS服务,除了这两种服务之外,Azure还提供serverless的代码托管服务。大致的产品线如下图所示:


这个图可以看到,最左边需要用户管理的资源(Customer-Managed), 到中间由Azure管理的资源,到最右边仅仅只需要托管代码的Serverless平台。

Azure App Service

如果你计划快速的发布基于Web的应用,那么可以考虑Azure App Service。 Azure App Service是Azure提供的支持基于Web的PaaS服务,可以很方便的扩展你的web应用支持移动客户端,Rest API服务,同时Azure App Service支持众多的三方认证,特别是可以集成Azure AAD的标识平台,如果企业自己有通过Windows AAD创建自己的本地域和本地标识,完全可以很方便的集成进来,另外也支持更多的特性,例如根据负载自动缩放,支持持续开发持续部署等等。可以通过Azure App Service平台创建Web应用,移动客户端的支持平台,基于Rest API的API应用等等。

App Service已经集成了DevOps的概念,支持的工具也很多,包括:GitHub Webhooks, Jenkins, Azure DevOps, TeamCity等等。特别要提一下Azure DevOps,实在是太好用了。

通过迁移工具可以很方便的将现有的应用迁移到Azure App Service上,关于迁移工具的介绍,可以参考:https://azure.microsoft.com/en-us/services/app-service/migration-assistant/, 后期也会介绍迁移的一些注意事项和方法。

Azure App Service几乎支持所有的主流开发语言,包括.NetJavaPythonPHPNode.js etc.

Tips

Azure虚拟机

作为基础设施服务的提供者,Azure提供基于Windows和基于Linux虚拟机给用户,帮助用户迁移应用到虚拟机上。结合Azure虚拟网络,用户可以很容易将本地的系统迁移到云平台上,不过选择虚拟机和虚拟网络,用户必须自己负责软件安装,配置,维护以及操作系统的更新等等繁复的工作。

因为用户对于虚拟机有很大的控制权限,因为你可以在虚拟机上运行大多数的服务,包括数据库,Windows AAD, SharePoint, ERP软件等等,关于虚拟机的详细信息,可以参考文档:https://docs.microsoft.com/en-us/azure/virtual-machines/, Windows虚拟机, Linux虚拟机请参考: https://docs.microsoft.com/en-us/azure/virtual-machines/

Tips

Azure Function(Serverless)

Azure Function是一种server-less的服务,使用这个服务,用户不需要关心IT的基础架构,也不需要关心维护,只需要将写好的代码托管到该服务就可以了。当然不是所有的应用场景都适合Serverless类型的应用,关于什么是Serverless的概念,大家可以自行研究一下。如果你需要一个通过web hook, 事件触发,定时计划运行这样的应用场景,那么选择Azure function就没错。当前Azure Function服务支持多种语言工具,包括Java.Netnode.jsPythonPHP等,基本上包括了所有主流的开发语言和工具。同时还支持按需付费的模式,可以尽量节省成本。

Tips

Azure Service Fabric

Azure提供的Azure Service Fabric是最大的黑科技之一了,Azure系统处处都不开Azure Service Fabric, 基本上可以认为Azure核心很多都是架构在Azure Service Fabric上,从这里就可以看到这个服务的强大了。 不过Azure Service Fabric不仅仅是一个服务那么简单,它还是一个微服务开发框架,是一个分布式开发平台,可以非常方便的帮助用户开发,部署,管理缩放,高可用的微服务平台。它不仅仅支持Docker部署,也支持进程部署,而且可以跨平台支持,非常强悍,非常稳定。

Tips

AKS (Azure Kubernate Service)

K8S是什么就不解释了,现在的开发者没有人不知道K8S的,如果你本地的应用是运行在K8S上,那么久可以选择Azure Kubernate Service服务了。

Azure Spring Clound

Azure Spring Cloud是每个基于SpringBoot应用的最好的托管平台,用户可以很方便的将本地基于SpringBoot开发的serverless的微服务应用方便的迁移到这个平台上,(注意: 如果仅仅是基于SpringBoot的应用,可以选择App Service或者虚拟机,Azure Spring Cloud主要是基于SpringBoot的微服务平台), 该平台的主要特性:

  • 将Spring Cloud的自动发现和自动配置服务整合为平台管理服务,用户无需管理和接触,只需要直接使用。
  • 用户只需要将精力放在业务逻辑的创建就好了,平台的runtime升级和更新由Azure完成。
  • 使用AKS管理应用的生命周期。
  • 及其方便的连接其他Azure服务。
  • 提供监控和troubleshooting的工具。

Tips

使用Azure服务增加您的应用

前面我们学习了如何在Azure上选择什么服务来托管你的服务,除了服务托管之外,Azure还提供了很多其他的服务用于加强和改善你的应用,下面我们也来一一介绍一下。

托管数据存储和数据存取

大多数应用都需要数据,Azure提供了很多和数据相关的服务,根据您的应用场景选择需要合适的数据服务非常重要:

  • Azure Cosmos DB: 是一个非常强大的基于全球分区的分布式数据库,支持多种模式:sql, mongodb, Gremlin, Table等等模式。而且是该服务微软提供唯一的一个有服务吞吐量以及性能保证的服务。如果您的应用需要文档类型的数据库,有以前基于MongoDB的应用,大表,或者基于图形的数据库,那么可与i考虑选择这个服务。
  • Azure Storage: Azure提供的存储服务,所有虚拟机上的存储都是由Storage服务提供的,也是Azure存储服务的基石, 提供基于Blob, Queue, Table, File等类型的服务,如果您有基于文件存放,非关系型数据, 消息等等可以考虑使用该服务。
  • Azure SQL Database: 关系型数据库,除了微软自己的SQL Server, 微软还提供MySQL, PostgreSQL数据库的支持,关系型数据库没什么好说的,有需要就选择。

Docker支持

Azure提供如下几种服务支持Docker技术:

认证

Azure提供了强大的认证和标识服务,用户可以将认证和标识完全委托给Azure, 同时Azure也提供了其他的关于认证的服务:

您也可以参考安全和认证的最佳实践: https://docs.microsoft.com/en-us/azure/security/fundamentals/best-practices-and-patterns

监控

如果需要对自己的系统进行全方位的监控,那么必须要考虑使用Azure提供的监控工具:

  • Azure Application Insights: Azure提供用于应用系统的分析服务,非常强大,不仅仅支持托管在Azure上的服务,也支持非托管的服务,而且该服务直接和Visual Studio集成,可以用于产线监控,performance分析,可用性分析等等场景。详细请参考文档:https://docs.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview
  • Azure Monitor: 只能用在托管在Azure上的资源,帮助用户可视化,查询,监控各种指标(CPU, 内存,访问量等等,不同的服务提供不同的指标), 并且可以基于指标创建alert, 还提供各种数据视图,详细介绍可以参考文档:https://docs.microsoft.com/en-us/azure/azure-monitor/overview

DevOps集成

Azure服务可以和多种DevOps工具集成,详细列表:

  • Jenkins
  • GitHub
  • Puppet
  • Chef
  • TeamCity
  • Ansible
  • Azure DevOps

详细的集成和使用,请参考:https://azure.microsoft.com/try/devops/, 入门文章:https://docs.microsoft.com/en-us/azure/app-service/deploy-continuous-deployment

Azure区域(Azure Region)

Azure是一个全球的平台,但是同时Azure也包括几个不同的环境,主要是包括Azure Global, Azure China, Azure Germany等等。同时每个环境中有不同的区域,每个区域基本都是一个或者几个DataCenter在一起,因此根据需要选择合适的区域非常重要(想象一下以前的南方电信,北方网通的尴尬境地?有过互联网的经历都有应该了解这段历史,所以选择合适的区域非常重要)。最好是选择距离你的客户比较近的区域,这样可以为目标客户群提供更好的访问体验。

跨区域应用

对于大型的应用,跨区域用户访问时非常常见的一个场景,为了给跨区域用户更好的访问体验,引导跨区域用户就近访问非常重要,这里就必须推荐Azure Traffice Manager服务了,关于这个服务可以参考:https://docs.microsoft.com/en-us/azure/traffic-manager/traffic-manager-overview, 同时对于跨区域部署的应用,也可以参考文档:https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/app-service-web-app/multi-region

应用和资源管理工具

Azure提供了非常多管理工具,这包括了Azure本身的Portal - 基于Web的可视化管理工具,也包括各种命令行工具、可编程工具等等:

还有其他一些服务还会单独提供SDK, 例如: https://docs.microsoft.com/en-us/previous-versions/azure/app-service-mobile/app-service-mobile-dotnet-how-to-use-client-libraryMoble Apps, 还有例如: https://docs.microsoft.com/en-us/azure/media-services/previous/media-services-dotnet-how-to-use, Azure Media Service, 这个直播就很不错。

Azure资源管理器(Azure Resource Manager, ARM)

如果你托管在Azure上的应用,需要使用到多种Azure服务,并且这些服务都有基本相同的生命周期,并且都是你应用系统中的逻辑单元,你就可以使用逻辑组来统一管理他们,你可以将他们放到同一个组(Group, 逻辑组), 例如一个Web应用,需要用Azure App Servie, 数据库(SQL DB), Azure Cache for Redis等等,为了管理方便就可以将这些服务放入到同一个组中来管理,同时Azure也提供了Azure资源管理器来帮助你管理这些资源。你可以用ARM将这些需要用到的资源部署到同一个组,在不需要的时候你可以使用ARM删除或者是完全清楚这些资源,Azure资源管理器就是用来管理你在Azure上的资源最为主要的工具。

Azure资源管理器可以使用模板来帮助你部署和管理资源,资源管理器模板也很简单,就是一个json文件,编写好这个文件之后,你完全可以将它放入到版本管理系统中,例如GitHub, 然后只需要在Github上添加一个按钮就可以完整一键部署了。

关于这个部分,您可以参考文档:https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/syntax,当然你可以使用Azure Portal一步一步的手工创建和管理所需的资源。

理解账号(Account), 订阅(Subscription), 以及计费(billing)

对于Azure开发者,我们当然希望每一位开发者能够利用Azure提供的资源,并且将所有的精力都放在应用开发和部署上,因此Azure提供免费账号,用于测试和学习,您可以参考:https://azure.microsoft.com/free/, 甚至我们有些服务,直接添加了免费使用的功能,例如Azure App Service, 就可以直接开始试用:https://tryappservice.azure.com/, 这些都不需要开发者拥有一个账号,或者订阅,不过我们还是希望开发者能够了解Azure最基本的几个概念: 账号(Account), 订阅(Subscripiton), 账单(Billing)。

什么是Azure账号

Azure账号(Account), 以前也叫Tenant, 逻辑上理解,一个账号(Tenant)实际上就代表一个组织,例如一个公司,一所学习,一个大型企业等等,本质上是一个注册在Azure Active Directory的一个实例。在这个活动目录里可以创建用户,用户组,各种角色,以及应用,同时可以分配权限,并且提供认证服务等等。对于Azure来说,这个账号本身就有机器强大的功能,完全是一个企业级的标识管理平台。

可以参考文档:https://docs.microsoft.com/zh-cn/azure/active-directory/fundamentals/active-directory-whatis

什么是订阅(Subscription)

订阅是对一个账户里有的资源进行一个逻辑分组,同时计费是按照订阅来计费的,每一个订阅只能属于一个账号,但是一个账号可以有很多个订阅,关于订阅,您可以参考:https://docs.microsoft.com/zh-cn/azure/cost-management-billing/manage/add-change-subscription-administrator

资源组(Resource Group)

这个之前我们已经描述过了,是对于订阅内的资源进行的逻辑分组,请参考文档:https://docs.microsoft.com/zh-cn/rest/api/

标记(Tag)

过 Azure 资源管理器,你可以将自定义标记分配给单个资源。 标记为键值对,在出于计费或监视目的而需要组织资源时,标记可能会十分有用。 标记提供了一种跨多个资源组跟踪的资源方法。 可以通过以下方式来分配标记:

  • 在门户中
  • 在 Azure 资源管理器模板中
  • 使用 REST API
  • 使用 Azure CLI
  • 使用 PowerShell

你可以对每个资源分配多个标记。 若要了解详细信息,请参阅: https://docs.microsoft.com/zh-cn/azure/azure-resource-manager/management/tag-resources

计费

在从本地计算移动到云托管服务的过程中,对服务使用情况以及相关的成本进行跟踪和估计都是非常重要的问题。 对每月运行的新资源成本进行估算至关重要。 还可以根据当前的支出情况来规划某个给定月份的计费情况。

获取资源使用情况数据

Azure 提供了一组允许访问资源消耗和 Azure 订阅的元数据信息的计费 REST API。 使用这些计费 API,可让你能够更好地预测和管理 Azure 费用。 可以按小时增量跟踪和分析支出,并创建支出警报。 还可以根据当前使用情况趋势预测将来的计费。

开始使用:如果要详细了解如何使用计费 API,请参阅 https://docs.microsoft.com/zh-cn/azure/cost-management-billing/manage/consumption-api-overview

预测未来成本

尽管提前估算成本非常困难,但 Azure 提供了可以帮助估算的工具。 它有一个定价计算器https://azure.microsoft.com/pricing/calculator/,可帮助估算部署的资源的成本。 此外,用户也可以使用门户中的计费资源和计费 REST API,根据当前消耗情况来估计未来成本。

开始使用:请参阅 https://docs.microsoft.com/zh-cn/azure/cost-management-billing/manage/consumption-api-overview