|
|
|
|
公众号矩阵

与Azure Spring Cloud云端应用服务全接触

本文将和您讨论Azure Spring Cloud的主要功能,以及如何使用它在云端构建,部署,扩展和管理应用程序。

作者:陈峻编译来源:51CTO.com|2020-10-21 09:00

【51CTO.com快译】近年来,Java持续在企业中得到广泛地运用。例如:LinkedIn正使用着500多个Java微服务,Minecraft的游戏客户端是由Java编写而成,而Yammer的后端也是用Java编写的,甚至连Microsoft的Azure云也包含了一些可与Java应用进行交互组件,以及为Java特定的应用。可以说,随着Java生态系统逐渐被Spring所主导,Microsoft不但积极地参与到Java社区中,而且推出了Azure Spring Cloud等开源的Java项目,以便更好地支持Java应用程序和集成Azure Cloud组件。

每10个开发人员中就有6个会使用Spring来开发他们的应用程序 

Azure Spring Cloud是Azure系列产品中的一款PaaS产品,是由Microsoft和VMware共同努力构建的。通过依靠Spring Boot,Spring Cloud能够与Azure云组件相集成,并为用户提供无缝的云原生应用开发体验。

作为一项完全托管的云服务,Azure Spring Cloud是由完全托管的AKS群集提供支持的。因此,它能够为云端的构建、部署、以及管理微服务,提供真正的无服务器体验。

快速入门

为了简单起见,我们假定已经拥有了一个有效的Azure订阅帐户,并且选用Maven(https://maven.apache.org/)作为生成与依赖关系管理的工具。

请参照如下步骤,在Azure Spring Cloud上部署Spring Boot + Spring Cloud应用:

  • 通过Azure门户创建新的Azure Spring Cloud实例。
  • 请下载并安装Azure CLI
  • 通过命令“az extension add -n spring-cloud -y”,来添加Azure Spring Cloud的扩展。注意,由于Azure CLI版本的不同,spring-cloud命令集可能已经被添加到了默认的Azure CLI命令中,因此该步骤不一定需要。
  • 通过“az configure --defaults group={resource_group}”和“az configure --defaults spring-cloud={asc_instance}”,来设置资源组和Azure Spring Cloud实例的默认值。
  • 请按照如下代码,将Azure Spring Cloud Client的依赖项包含到您的项目中。您可能需要在单独的配置文件中进行,以免“污染”那些本地开发的依赖项。 
  1. <profiles>  
  2. <profile>  
  3. <id>cloud</id> 
  4. <dependencies> 
  5. <dependency> 
  6. <groupId>com.microsoft.azure</groupId> 
  7. <artifactId>spring-cloud-starter-azure-spring-cloud-client</artifactId> 
  8. <version>2.2.0</version> 
  9. </dependency> 
  10. </dependencies> 
  11. </profile> 
  12. </profiles> 
  • 通过命令:mvn clean package -Pcloud,来启用在上一步中添加的配置文件,并构建应用程序。
  • 使用:az spring-cloud app create -n {my-app},在Azure Spring Cloud实例中创建一个新的Azure Spring Cloud应用(只需在首次进行该操作)。
  • 通过如下命令,将应用程序部署到Azure Spring Cloud处: 
  1. az spring-cloud app deploy -n {my-app}  
  2. --jar-path target/my-app.jar 

如此零代码量、和对项目的影响最小,我们在数分钟之内,成功地将第一个应用程序部署到了完全托管的AKS群集中。

分布式跟踪

在Azure Application Insights上的应用程序映射示例 

Azure Spring Cloud能够为您的应用程序提供现成的分布式跟踪功能。它主要依靠Azure Application Insights来构建完整的“应用程序映射”,以展示传入的请求将如何流入系统,组件之间如何交互,采样调用的跟踪,以及有关调用的输出和持续时间等信息。

您既可以指定被依赖的Azure Application Insights预存实例,也可以通过启用分布式跟踪的设置,以专门创建一个全新的Azure Application Insights实例,供Azure Spring Cloud使用。

日志存储


诊断设置的示例,实现了将日志和各项指标重定向到Log Analytics上

Azure Spring Cloud通过Log Analytics、Azure存储或Azure事件中心,来提供日志与各项指标的收集和存储。我们可以通过“诊断设置”,来指定用于存储日志和指标的方式,并启用该功能。

在实际操作中,最常用的方法是:将所有日志和指标都发送到Azure Log Analytics的工作区中,以便依靠强大的Log Analytics Query Language(日志分析查询语言),对收集到的数据执行特定、且准确的各种历史信息检查。

值得一提的是,我们也可以使用一个特殊的表—AppPlatformLogsForSpring,来查询Log Analytics。该表包含了部署在Azure Spring Cloud上的各种应用程序中的所有日志。

日志跟踪

根据Azure Spring Cloud的一月份更新,我们已经可以通过运行如下命令,将流式日志实时地传输到终端上了:

  1. az spring-cloud app logs --name {app-name} --resource-group {resource-group} --service {asc-instance} -f 

在开发过程中,该功能对于验证应用程序的行为,或尝试着解决“类生产环境”中的难题,都具有非常实用的价值。

监控和警报

https://devblogs.microsoft.com/java/whats-new-in-azure-spring-cloud-jan-update/ 

Azure Spring Cloud在其一月份的更新中,还添加了创建警报规则的功能。它有助于用户实现如下方面:

  • 从应用程序中提取和分析相关指标。
  • 根据这些指标的设置条件,触发警报等操作。
  • 定义警报执行的方式(如,发送警告类电子邮件等)。

而且,这些关键功能的设置并不复杂。

集中式配置

当需要针对云原生应用进行集中式配置时,Spring用户往往需要用到Spring Cloud Config Server。而在使用Azure Spring Cloud时,我们不需要自行构建和部署Spring Cloud Config Server,而只需配置一个自动化的部署,然后完全交给由Azure Spring Cloud管理的Spring Cloud Config Server打理便可。

完全托管的Spring Cloud Config Server配置示例 

此外,需要联系Spring Cloud Config Server的应用程序也无需任何配置,我们只需要准备好spring-cloud-starter-config的依赖关系即可。Azure Spring Cloud将确保在部署时自动配置所有的客户端应用,以安全地连接到上述完全托管的Spring Cloud Config Server上。

服务发现

应用程序在完全托管的服务注册表中实现注册

服务发现与集中式配置非常相似,它能够提供开箱即用的服务。即:完全托管的Spring Cloud Eureka Server始终在后台运行,以方便客户端在其服务注册表中进行注册。

同样,客户端应用程序也无需任何配置,即可与上述Spring Cloud Eureka Server进行交互。它们只需要包含spring-cloud-starter-netflix-eureka-client的依赖项。

服务绑定

设置Azure Cosmos DB的绑定 

Azure Spring Cloud有一个非常独特的功能,称为“服务绑定”。它允许应用程序与Azure云组件(例如:Azure Cosmos DB、Azure Cache for Redis、以及Azure Database for MySQL)进行交互,而无需为待建立的连接提供凭据。一旦我们为应用程序创建了服务绑定,那么在运行时(runtime),Azure Spring Cloud将自动注入那些可以连接到与Azure服务相匹配的属性。

纵向扩展(Scale up)

我们可以按需通过Azure门户、或等效的Azure CLI命令,轻松地扩展Azure Spring Cloud上应用程序的资源。如上图所示,我们可以采用“标准”的扩展计费方式,即:每个应用的最大vCPU数为4,而分配给应用的最大内存GB数为8。那么纵向扩展便可以此为基数进行扩展。

横向扩展(Scaling Out)

在Azure Spring Cloud上手动扩展应用程序 

类似地,我们也可以通过Azure门户、或等效的Azure CLI命令,来手动执行横向扩展,以指定在特定时间内存在的实例副本总数(最多为500)。

只要出现超过10分钟的CPU平均使用率≥70%,就应扩展应用程序 

更有趣的是,我们可以选择基于实时收集与分析指标的自动化过程,来扩展应用程序。正如前面在“监控和警报”部分提到的,我们可以通过选择任意的度量标准,来设置某个触发条件。当该条件满足时,它将触发用户自定义的横向扩展操作(例如,将实例的个数增加1)。

设置最小、最大、以及默认的自动扩展限制 

如上图所示,对于任何给定的应用程序,我们需要为自动化扩展设定一套触发机制,其中可以包括实例的最小、最大、以及默认的实例数量。

可用性

只需几步点击,即可部署到生产环境中 

通过Azure Spring Cloud,我们可以轻松地实现最少的停机时间。首先,“标准”的Azure Spring Cloud层会遵守“至少99.9%的可用性”--这一服务级别协议。其次,我们也可以通过几步点击,执行蓝/绿部署,进而让开发人员可以在“类生产”环境中验证各项功能,最大程度地减少对于最终用户的影响,以及消除在发布更新时的停机时间。

计费

Azure Spring Cloud采用 “按使用付费”的模式,在“经济”地实现可扩展性的基础上,满足用户的各种实际使用情况。

“标准”的计费模式说明 

具体而言,它的基本费率为:用户每小时最多可使用16个vCPU和32 GB的内存。对于超出部分,则会按小时进行计费。

服务小结

总体而言,Azure Spring Cloud可以提供如下服务:

  • 缩短开发周期,便于部署到生产环境中。
  • 更少的基础设施管理开销,便于开发人员专注于软件应用本身,而非Kubernetes集群。
  • 通过SLA和易于实施的蓝/绿部署,大幅减少停机时间。
  • 将网络的管理任务,完全委托给Microsoft的安全网络。
  • 既提供弹性和可扩展的基础架构,又具有灵活匹配的计费模式。

实用资源

如果您想进一步熟悉Azure Spring Cloud,请参考如下资源:

  • Azure Spring Cloud官方文档(https://azure.microsoft.com/en-us/services/spring-cloud/)
  • Azure Spring Cloud培训文档(https://github.com/microsoft/azure-spring-cloud-training)
  • 由Josh Long和Julien Dubois撰写的《Bootiful Azure Spring Cloud》(https://www.youtube.com/watch?v=WAuGojnf2lA)

结论

Azure Spring Cloud是一款可用来快速构建、部署和管理的云端应用服务。您不必花费太多的精力,便可快速地享用其丰富的功能。如果您当前的应用程序恰好依赖的是与Azure Spring Cloud相同的技术栈,那么您绝对值得一试。

原文标题:Azure Spring Cloud: A Comprehensive Overview,作者:Domenico Sibilio

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【编辑推荐】

  1. 谈云说事儿——助力业务系统集成的Cloud Pak for Integration
  2. IBM Cloud Pak for Data 帮助Wunderman Thompson 构建重新开放指南
  3. 构建低代码开发生态,APICloud全面进入3.0时代
  4. 六年磨一剑 APICloud构建低代码开发平台的坚持与创新
  5. Cloudops工具集成比工具本身更重要
【责任编辑:未丽燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

云原生架构实践

云原生架构实践

新技术引领移动互联网进入急速赛道
共3章 | KaliArch

26人订阅学习

数据中心和VPDN网络建设案例

数据中心和VPDN网络建设案例

漫画+案例
共20章 | 捷哥CCIE

189人订阅学习

搭建数据中心实验Lab

搭建数据中心实验Lab

实验平台Datacenter
共5章 | ITGO(老曾)

118人订阅学习

视频课程+更多

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微