构建可扩展的 Azure 应用程序 | 原创,AI翻译

Home 2023.07

本博客文章是在ChatGPT-4o的协助下撰写的。


目录

介绍

在云计算领域,Microsoft Azure以其强大的平台脱颖而出,用于构建、部署和管理应用程序。在我们最近的项目中,我们利用了多种Azure服务,包括Azure订阅、Azure Kubernetes服务(AKS)、应用程序见解、虚拟机(VM)、事件中心、API管理服务和SQL数据库,以创建可扩展且可监控的应用程序基础架构。本博客文章概述了我们的方法、使用的工具、最佳实践以及管理集群、获取日志和查询日志的详细步骤。

开始使用Azure订阅

Azure订阅是您访问Azure服务的入口。它作为一个容器,包含所有您的资源,例如虚拟机、数据库和Kubernetes集群。

  1. 设置Azure订阅:
    • 注册:如果您没有Azure账户,请从Azure门户开始注册。
    • 创建订阅:导航到“订阅”部分并创建新订阅。这将成为您的计费和管理容器。
  2. 资源组织:
    • 资源组:根据其生命周期和管理标准将资源组织到资源组中。
    • 标签:使用标签进行额外的元数据和更轻松的资源管理和计费。

使用Azure Kubernetes服务(AKS)部署应用程序

Azure Kubernetes服务(AKS)是一个托管的Kubernetes服务,简化了部署、管理和扩展容器化应用程序。

创建和管理AKS集群

  1. 在Azure门户中创建AKS集群:
    • 设置:在Azure门户中搜索AKS并创建新的Kubernetes集群。
    • 配置:选择集群大小,配置节点池并设置网络。
    • 身份验证:使用Azure Active Directory(AAD)进行安全访问控制。
    • 监控:在设置过程中启用监控和日志记录。
  2. 使用Azure CLI创建AKS集群:
    az aks create \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --node-count 3 \
      --enable-addons monitoring \
      --generate-ssh-keys
    
  3. 管理您的AKS集群:
    • 扩展集群:
      az aks scale \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 5
      
    • 升级集群:
      az aks upgrade \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --kubernetes-version 1.21.2
      

部署应用程序

  1. 使用Kubernetes清单:为您的部署、服务和其他Kubernetes对象编写YAML文件。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: myapp
            image: myregistry.azurecr.io/myapp:latest
            ports:
            - containerPort: 80
    
  2. 使用kubectl部署:
    kubectl apply -f myapp-deployment.yaml
    
  3. Helm图表:使用Helm管理Kubernetes应用程序和版本控制。
    helm install myapp ./mychart
    

从Pod获取日志

  1. 附加到Pod并获取日志:
    kubectl logs <pod-name>
    
    • 流式传输日志:
      kubectl logs <pod-name> -f
      
  2. 使用Sidecar进行日志记录:
    • 在Pod规范中创建日志记录Sidecar容器,以将日志发送到集中式日志记录服务。
    spec:
      containers:
      - name: myapp
        image: myregistry.azurecr.io/myapp:latest
        ...
      - name: log-shipper
        image: log-shipper:latest
        ...
    

使用Azure应用程序见解进行监控和诊断

应用程序见解为您的应用程序提供了强大的监控和诊断功能。

  1. 设置应用程序见解:
    • 集成:将应用程序见解SDK添加到您的应用程序代码中。
    • 工具集成密钥:使用应用程序见解资源中的工具集成密钥配置您的应用程序。
  2. 跟踪性能:
    • 指标:监控响应时间、故障率和应用程序依赖项。
    • 实时指标流:查看实时性能指标以获得即时见解。
  3. 诊断和故障排除:
    • 应用程序映射:可视化依赖项并识别性能瓶颈。
    • 事务诊断:使用分布式跟踪跟踪服务之间的请求。

使用Azure虚拟机(VM)

Azure VM提供了运行未容器化的自定义应用程序和服务的灵活性。

  1. 部署虚拟机:
    • 创建VM:在Azure门户中创建新的虚拟机并选择适当的大小和操作系统。
    • 网络配置:设置虚拟网络、子网和安全组以控制流量。
  2. 配置VM:
    • 软件安装:安装所需的软件和依赖项。
    • 安全:定期应用补丁和更新,配置防火墙,并使用网络安全组(NSGs)。
  3. 管理VM:
    • 备份和还原:使用Azure备份进行VM备份。
    • 监控:使用Azure Monitor监控VM性能。

使用Azure事件中心进行实时数据摄入

Azure事件中心是一个大数据流平台和事件摄入服务,能够每秒接收和处理数百万个事件。

  1. 设置事件中心:
    • 创建事件中心命名空间:在Azure门户中创建事件中心命名空间以容纳您的事件中心。
    • 创建事件中心:在命名空间中创建一个或多个事件中心以捕获您的数据流。
  2. 摄入数据:
    • 生产者:配置您的应用程序或服务以使用多种语言(例如.NET、Java、Python)提供的SDK将事件发送到事件中心。
    • 分区:使用分区扩展事件处理,确保高吞吐量和并行性。
  3. 处理事件:
    • 消费者:使用消费者组读取和处理事件。Azure提供了多种处理选项,包括Azure流分析、Azure函数和使用事件中心SDK的自定义处理。
  4. 监控事件中心:
    • 指标:通过Azure门户监控吞吐量、延迟和事件处理指标。
    • 警报:设置警报以通知您任何问题,例如高延迟或丢失的消息。

使用Azure API管理服务管理API

Azure API管理服务提供了一种为现有后端服务创建一致且现代的API网关的方式。

  1. 设置API管理:
    • 创建API管理服务:在Azure门户中搜索API管理并创建新服务。
    • 配置API:从OpenAPI规范、Azure函数或其他后端定义和导入API。
  2. 保护API:
    • 身份验证和授权:使用OAuth2、JWT验证等机制保护您的API。
    • 速率限制和节流:实施策略以防止API被滥用。
  3. 监控和分析:
    • API见解:跟踪使用情况、监控性能并分析日志。
    • 开发者门户:为开发者提供一个门户以发现和使用您的API。
  4. 管理生命周期:
    • 版本控制和修订:无缝管理API的不同版本和修订。
    • 策略管理:应用策略以转换、验证和路由请求和响应。

使用Azure SQL数据库

Azure SQL数据库是一个具有内置智能、高可用性和可扩展性的完全托管的关系型数据库。

  1. 设置Azure SQL数据库:
    • 创建SQL数据库:在Azure门户中导航到SQL数据库并创建新数据库。
    • 配置数据库:设置数据库大小、性能级别并配置网络设置。
  2. 连接到SQL数据库:
    • 连接字符串:使用提供的连接字符串将应用程序连接到SQL数据库。
    • 防火墙规则:配置防火墙规则以允许来自应用程序或本地计算机的访问。
  3. 管理数据库:
    • 备份和还原:使用自动备份和点时间还原保护您的数据。
    • 扩展:根据性能需求扩展或缩小数据库。
  4. 监控和性能调优:
    • 查询性能见解:监控和优化查询性能。
    • 自动调优:启用自动调优功能以提高性能。

使用Kusto查询语言(KQL)查询日志

Kusto查询语言(KQL)用于查询Azure Monitor日志,为日志数据提供强大的见解。

  1. 基本KQL查询:
    // 从特定表中检索记录
    LogTableName
    | where TimeGenerated > ago(1h)
    | project TimeGenerated, Level, Message
    
  2. 过滤和聚合数据:
    LogTableName
    | where TimeGenerated > ago(1h) and Level == "Error"
    | summarize Count=count() by bin(TimeGenerated, 5m)
    
  3. 连接表:
    Table1
    | join kind=inner (Table2) on $left.UserId == $right.UserId
    | project Table1.TimeGenerated, Table1.Message, Table2.AdditionalInfo
    
  4. 基于查询创建警报:
    • 在Azure门户中导航到日志分析工作区。
    • 点击“日志”并输入您的KQL查询。
    • 点击“新建警报规则”以基于查询结果创建警报。

设置警报进行主动监控

Azure警报可帮助您了解资源的健康状况和性能。

  1. 创建警报:
    • 指标警报:基于指标(如CPU使用率、内存使用率和响应时间)设置警报。
    • 日志警报:基于KQL日志搜索查询创建警报。
  2. 配置操作:
    • 操作组:定义操作组以指定谁将收到通知以及如何通知(电子邮件、短信、Webhook)。
    • 集成:与ITSM工具(如ServiceNow)集成以实现自动化事件管理。
  3. 响应警报:
    • 仪表板:设置Azure仪表板以提供警报的集中式视图。
    • 自动化:使用Azure自动化自动响应某些警报。

结论

通过利用Azure订阅、AKS、应用程序见解、虚拟机、事件中心、API管理服务和SQL数据库,我们构建了一个可扩展、强大且可监控的应用程序基础架构。Azure全面的工具套件确保我们能够高效地部署、管理和监控应用程序。此设置不仅提高了应用程序性能,还为我们提供了所需的见解,以主动维护和优化资源。


Back Donate