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

  • 来源:网络
  • 更新日期:2020-10-23

摘要:【51CTO.com快译】近年来,Java持续在企业中得到广泛地运用。例如:LinkedIn正使用着500多个Java微服务,Minecraft的游戏客户端是由Java编写而成,而Yammer的后端也是用Java编写的,

【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=”和“az configure --defaults spring-cloud=”,来设置资源组和Azure Spring Cloud实例的默认值。

请按照如下代码,将Azure Spring Cloud Client的依赖项包含到您的项目中。您可能需要在单独的配置文件中进行,以免“污染”那些本地开发的依赖项。

cloud com.microsoft.azure spring-cloud-starter-azure-spring-cloud-client 2.2.0

通过命令:mvn clean package -Pcloud,来启用在上一步中添加的配置文件,并构建应用程序。

使用:az spring-cloud app create -n ,在Azure Spring Cloud实例中创建一个新的Azure Spring Cloud应用(只需在首次进行该操作)。

通过如下命令,将应用程序部署到Azure Spring Cloud处:

az spring-cloud app deploy -n --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的一月份更新,我们已经可以通过运行如下命令,将流式日志实时地传输到终端上了:

az spring-cloud app logs --name --resource-group --service -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】

新网数码