如何轻松地在不同平台上运行Spring Cloud微服务,通过示例演示云原生应用程序的真正威力

Posted jinggege795

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何轻松地在不同平台上运行Spring Cloud微服务,通过示例演示云原生应用程序的真正威力相关的知识,希望对你有一定的参考价值。

维护

假设开发人员已经成功部署了构建基于微服务的示例系统的所有应用程序,那么现在就可以使用PivotalWebServices仪表板甚至命令行界面的命令轻松管理和监视它们。Pivotal平台提供的免费试用版为开发人员提供了许多维护应用程序的可能性和工具,接下来我们将介绍一些有趣的功能。

1.访问部署的详细信息

开发人员可以通过运行命令cfapps或导航到Web控制台中我们空间的主站点来列出所有已部署的应用程序。在如图15.2所示的屏幕截图中即可看到该列表。表的每一行代表一个应用程序。除了名称之外,还有关于其状态、实例数、分配的内存、部署时间以及平台外可用服务的URL信息等。如果在应用程序部署期间未指定URL地址,则这些URL会自动生成。

 

可以通过单击每一行来了解有关该应用程序的详细信息,也可以在命令行界面中使用命令cf app <app-name>或cf app order- service访问类似信息。图15.3显示了应用程序详细信息视图的主面板,其中包含每个实例的事件历史记录、摘要,以及内存、磁盘和CPU使用情况。在此面板中,可以通过单击Scale (扩展)按钮来扩展应用程序。还有其他几个选项卡可用,通过切换到其中一个即可执行相应操作。例如,单击Services (服务)可以检查所有绑定的服务,单击Route (路由)可以分配外部URL,单击Logs (日志)可以显示日志,单击Trace (跟踪)可以查看传入请求的历史记录。

当然,开发人员始终可以使用命令行界面收集与上一示例中所示相同的详细信息。如果执行cf logs <app-name> 命令,则会附加到由应用程序生成的stdout。开发人员还可以使用绑定应用程序列表显示已激活的Pivotal托管服务列表,如图15.4所示。

 

2.管理应用程序生命周期

PivotalWebServices提供的另一个非常有用的功能是管理应用程序生命周期的能力。换句话说,只需单击一下,我们就可以轻松地停止、启动和重新启动应用程序。在执行请求命令之前,系统将出现提示要求确认,如图15.5所示。

 

运行以下命令行界面的命令之一可以实现相同的结果。

$ cf stop <app-name>

$ cf restart <app-name>

$ cf start <app-name>

3.扩展

使用云解决方案的最重要的原因之一是能够轻松扩展应用程序。Pivotal 平台以非常直观的方式处理这些问题。首先,开发人员可以决定在每个部署阶段启动应用程序的实例数。例如,如果决定使用manifest.yml并通过cf push命令部署它,则创建的实例数将由字段实例确定,如以下代码段所示。

---

applications:

— name: account - service

memory: 300M

instances: 2

host: account- service-piomin

domain: cfapps.io

path: target/account-service-1. 0-SNAPSHOT. jar

可以在启动的应用程序上修改正在运行的实例数以及内存和CPU限制。实际上,有两种可用的扩展方法。开发人员既可以手动设置应启动的实例数,也可以启用自动扩展,在自动扩展中,只需根据选定指标的阈值定义一一个条件即可。Pivotal 平台上的自动扩展功能将通过一个名为PCF App Autoscaler的工具实现。开发人员可以从以下5个可用规则中进行选择,具体如下。

口 CPU 利用率

口 内存利用率

口 HTTP延迟

口 HTTP吞吐量

口 RabbitMQ 深度

开发人员可以定义多个活动规则。对于向下扩展(Scale Down)来说,这些规则中的每一个都具有单个指标的最小值:而对于向上扩展(ScaleUp)来说,自然就是最大值了。在图15.6中,显示了customer-service服务的自动扩展设置。在这里,我们决定应用的是HTTP Throughput (HTTP吞吐量)和HTTP Latency (HTTP延迟)规则。如果9%流量的延迟低于20ms (毫秒),则应该禁用应用程序的一个实例,因为连接速度足够,所以不必出现多个实例:反过来,如果延迟大于200ms (毫秒),则平台应该再附加一个实例,以提高处理能力。

 

开发人员还可以手动控制运行实例的数量。自动扩展具有许多优点,但手动方法可以让开发人员更好地控制该过程。由于每个应用程序的内存有限,因而仍有其他实例的空间。在我们的示例系统中,重载(Overload)最多的应用程序是account-service服务,因为它在订单创建期间需要调用,在订单确认时又需要调用。所以,我们可以给它再添加一个实例。要执行此操作,可以转到account-service 服务详细信息面板,然后单击Processes and Instances ( 进程和实例)下的Scale (扩展)。在出现Scale app (扩展程序)设置界面时,在Instances (实例)框中输入目标实例数,然后单击APPLY CHANGES (应用更改)按钮,如图15.7 所示。经过这样的修改之后,开发人员应该看到两个可用的account-service服务实例。

 

4.提供代理服务

我们已经了解了如何使用cf bind-service命令和Maven插件将应用程序绑定到服务。但是,我们现在应该看看如何启用和配置服务。开发人员可以轻松显示所有可用服务的列表,然后使用Pivotal的仪表板启用它们,这可以在Marketplace (市场)下找到。

使用Pivotal Web Services 提供代理服务非常容易。在安装之后,某些服务已可供使用,而无须任何其他配置。我们所要做的就是将它们绑定到选定的应用程序,并在应用程序的设置中正确传递其网络地址。通过用户界面仪表板可以轻松地将每个应用程序绑定到服务。首先,导航到服务的主页面。在那里,开发人员将看到当前绑定的应用程序列表。可以先单击BIND APP (绑定应用程序)按钮,然后从显示的列表中选择:一个程序来将新应用程序绑定到服务,如图15.8所示。

 

除了在Marketplace (市场)中启用注册表服务并将其绑定到应用程序以便在Pivotal Web服务上启用发现功能之外,开发人员不必执行任何其他操作。当然,如果需要,也可以在客户端覆盖某些配置设置。已注册的应用程序的完整列表可以显示在服务主配置面板中Manage (管理)下的Eureka仪表板中。在图15.9中可以看到,有两个正在运行的account-service服务实例,这是因为之前已对其进行了扩展,但是其他微服务仍然只有一个运行实例。

 

与发现服务相比,配置服务器需要包含其他设置。和以前一样,开发人员应该导航到其主面板,然后选择Manage (管理)。在这里,开发人员将被重定向到配置表单,并且在那里必须提供配置参数作为JSON对象。count 参数指定供应所需的节点数,如果实例可以升级则选中Upgrade (升级)选项,而force 参数则会强制升级,即使当前实例已经是最新可用的版本。其他配置参数取决于用于存储属性源的后端类型。关于存储属性源的后端类型,在本书第5章“使用Spring Cloud Config 进行分布式配置”中已经详细介绍过,最流行的Spring Cloud Config Server解决方案是基于Git存储库的。我们在GitHub上创建了一个示例存储库,其中提交了所有必需的源。以下是应在Pivotal Web Services上为Config Server提供的JSON格式的参数。

"count": 1,

"git": {

"password":****"

"uri":

"https://gi thub . com/pi omin/ sample-spr ing-cloud-pcf -config.git",

"username": "piomin"

}

}

我们提供的示例应用程序使用的最后一个代理服务托管了一个MongoDB实例。在该服务的主面板上导航到Manage (管理)之后,开发人员应该被重定向到htp://mlab.com/home,在那里将能够使用数据库的节点。

Heroku平台

Heroku是使用平台即服务(PaaS)模型创建的最古老的云平台之一。 与Pivotal Cloud Foundry相比,Heroku 没有内置的Spring Cloud应用程序支持,这会使开发人员的模型稍微复杂化,因为这意味着无法使用平台的服务来启用典型的微服务组件,包括服务发现、配置服务器或断路器。尽管如此,Heroku 仍包含了一些 Pivotal Web Services无法提供的非常有趣的功能。

部署方法

开发人员可以使用命令行界面、Web控制台或专用的Maven插件管理自己的应用程序。部署Heroku与部署Pivotal平台非常相似,但方法略有不同。主要方法假定开发人员通过从存储在本地Git存储库或GitHub上的源代码构建应用程序来部署应用程序。在将分支中的某些更改推送到存储库之后,构建将由Heroku平台自动执行。或者,也可以根据所选分支中的最新版本代码的要求执行构建。部署应用程序的另一个有趣方法是将Docker镜像推送到Heroku的容器注册表。

1.使用命令行界面

要使用命令行界面,首先需要下载htpt:p:/li/ 
assets.heroku.com/heroku-cli/channels/stable/heroku-cli-x64.exe ( 适用于Windows)并安装Heroku命令行界面(CLI) 。要使用命令行界面在Heroku上部署和运行应用程序,必须执行以下步骤。

(1)安装之后,可以使用shell 中的命令Heroku。 首先,开发人员需要使用凭据登录Heroku,如下所示。

$ heroku login

Enter your Heroku credentials:

Email: piotr 。minkowski@play.pl

Password: ******

Logged in as piotr 。minkowski@play.pl

(2)现在导航到应用程序的root目录并在Heroku上创建一个应用程序。运行以下命令后,不仅会创建应用程序,还会创建一一个 名为heroku的Git远程主机,这是与本地Git存储库相关联的,如下所示。

$ heroku create

Creating app... done, aqueous-retreat- 66586

https: //aqueous- retreat- 66586。herokuapp。com/ I

https://git . heroku . com/ aqueous retreat- 66586.git

Git remote heroku added

(3)此时可以通过将代码推送到Heroku的Git远程主机来部署应用程序。Heroku将自动完成所有工作,如下所示。

$ git push heroku master

(4)如果应用程序成功启动,则开发人员将能够使用一些基本命令进行管理。按照如下所示的顺序,可以显示日志、更改正在运行的Dynos的数量(换句话说,其实就是扩展应用程序)、分配新的加载项(Addons) ,并列出所有已启用的加载项。

$ heroku logs --tail

$ heroku ps: scale web = 2

$ heroku addons: create mongolab

$ heroku addons

(3)此时可以通过将代码推送到Heroku的Git远程主机来部署应用程序。Heroku将自动完成所有工作,如下所示。

$ git push heroku master

(4)如果应用程序成功启动,则开发人员将能够使用一些基本命令进行管理。按照如下所示的顺序,可以显示日志、更改正在运行的Dynos 的数量(换句话说,其实就是扩展应用程序)、分配新的加载项(Addons) ,并列出所有已启用的加载项。

$ heroku logs --tail

$ heroku ps: scale web = 2

$ heroku addons: create mongolab

$ heroku addons

2.连接到GitHub存储库

就个人而言,笔者更喜欢通过使用GitHub 存储库连接到项目来将应用程序部署到Heroku。这种部署方法同样有两种可能的方式:手动和自动。开发人员可以选择导航到应用程序详细信息面板上的Deploy (部署)选项卡,然后将其连接到指定的GitHub存储库,如图15.10所示。如果单击Deploy Branch (部署分支)按钮,则会立即从给定的Git开始构建并部署到Heroku.或者,开发人员也可以通过单击Enable Automatic Deploys(启用自动部署)按钮在所选分支.上启用自动部署。此外,如果为GitHub 存储库启用了Heroku,则可以将Heroku配置为等待持续集成构建结果。这是一个非常有用的功能,因为它允许开发人员对项目运行自动化测试并确保它们在推送之前就已经通过。

 

3. Docker 容器注册表

Heroku遵循了最新趋势,允许开发人员使用Docker部署容器化应用程序。为了能够做到这一一点,开发人员应该在本地计算机上安装Docker和Heroku命令行界面。

(1)首先,需要通过运行heroku login命令登录Heroku Cloud。 下一步则是登录到Container Registry (容器注册表)。

$ heroku container: login

(2)接下来,需要确保当前目录包含Dockerfile。 如果存在,则可以继续构建并通过执行以下命令将镜像推送到Heroku的Container Registry。.

$ heroku container:push web

(3)如果有现成的构建镜像,则可以标记它并将其推送到Heroku。要完成此任务,需要通过执行以下命令来使用Docker 的命令行(假设当前应用程序的名称是piomin-order-service )。

$ docker tag piomin/order- service regis try . heroku. app/piomin-order -

service/web

$ docker push registry。heroku . app/piomin-order - service/web

在成功推送镜像之后,新应用程序应在Heroku仪表板中可见。

准备应用程序

在将基于SpringCloud组件的应用程序部署到Heroku时,开发人员不再需要对其源代码执行任何额外更改或添加任何其他库,因为这在按本地方式运行时就已经做了。这里唯一的区别在于配置设置,开发人员应该设置一个地址,以便将应用程序与服务发现、数据库或任何其他可以为微服务启用的加载项集成。当前示例与为Pivotal部署提供的示例相同,将数据存储在MongoDB中,该数据将作为mI ,ab服务分配给应用程序。此外,在本示例中,每个客户端都会在Eureka服务器上注册它们自己,该Eureka服务器被部署为piomin-discovery service.我们的示例在Heroku上部署的应用程序列表如图15.11所示。

 

我们通过将应用程序与GitHub存储库连接的方式在Heroku.上部署了这些应用程序。反过来,这需要为每个微服务创建一个单独的存储库。例如,order-service 服务的存储库可以在htps:/githubo. 
com/piomin/sample-heroku-order-service.git获得,其他微服务可能处于类似的地址下。开发人员可以轻松地分开这些微服务并将其部署在自己的Heroku账户上以执行测试。现在以account-service应用程序为例,来仔细看-看如何提供配置设置。首先,我们必须使用Heroku平台提供的MONGODBURI环境变量覆盖MongoDB的自动配置地址。此外,还必须提供Eureka服务器的正确地址,以及在注册期间覆盖由发现客户端发送的主机名和端口。这是必需的操作,因为在默认情况下,每个应用程序都会尝试使用其他应用程序无法使用的内部地址进行注册。如果开发人员不覆盖这些值,则与Feign客户端的服务间通信将失败。

spring:

application:

name: account-service

data:

mongodb :

uri: $ (MONGODB URI }

eureka :

instance:

hostname: $ (HEROKU_ APP_ NAME }. herokuapp。com

nonSecurePort: 80

client:

serviceUrl :

defaultZone: 
http://piomin-discovery-service . he rokuapp。com/eureka

请注意,环境变量HEROKU_ APP_ NAME是部署在Heroku上的当前应用程序的名称,如前面的代码段所示,且默认情况下不可用。要为应用程序启用变量( 如customer-service),可以使用实验性的加载项runtime -dyno-metadata运行以下命令。

$ heroku labs: enable runtime-dyno -metadata 一a piomin- customer- service

测试部署

在部署完成之后,每个应用程序都可以在由其名称和平台域名组成的地址上使用,如ht:/piomnin order- service herokupp.com。开发人员可以使用公开的URL地址/:/pionin-discovevry-service.herokuapp.com/)调用Eureka仪表板,这将允许开发人员检查示例微服务是否已经注册。如果一切正常, 则应该看到类似于图15.12所示的内容。

 

由于每个微服务都已经公开了由Swagger2自动生成的API文档,因而可以访问/swagger-ui.html.打开Swagger用户界面仪表板(如htp://piomin-customer-srevice.herokuapp.com/swagger-ui.html),然后通过调用每个端点来轻松测试它们。customer- service服务的HTTP API的可视化结果如图15.13所示。

每个微服务都会将数据存储在MongoDB中。可以通过添加Heroku提供的加载项(如mLab)为项目启用此数据库。如前文所述,我们已经使用了相同服务的示例来在Pivotal平台上部署的应用程序中存储数据。要为应用程序启用加载项,可以找到每个应用程序的详细信息面板的Resources (资源)选项卡,然后为选定的计划配置加载项。完成后,开发人员只需单击即可管理每个插件。对于mLab来说,将重定向到mLab站点(mlab.com) , 在该站点中可以看到所有集合、用户和生成的统计信息的列表。本示例的mLab仪表板如图15.14所示。

 

小结

我们已经到达Spring Cloud微服务之旅的终点!我们的练习始于本地计算机上的简单部署,但在第14章中,我们已经将微服务部署在由云供应商完全管理的环境中,它将自动构建、启动和公开指定域上的HTTP API。笔者个人认为,使用任何最流行的编程语言或第三方工具(如数据库或消息代理),开发人员可以轻松地运行和扩展应用程序,以及公开应用程序之外的数据。事实上,我们每个人现在都可以在几个小时内实现并启动可用于生产模式的应用程序,而无须担心必须安装的软件。

本章展示了如何轻松地在不同平台上运行Spring Cloud微服务。通过示例演示了云原生应用程序的真正威力。无论是在笔记本电脑上以本地方式启动应用程序,还是在Docker容器内部或使用Kubernetes,甚至是在Heroku或Pivotal Web Services等在线云平台上启动应用程序,开发人员都不必更改应用程序源代码中的任何内容,而仅需要在其属性中执行一些修改(假设在架构中使用了Config Server, 那么这些更改都不是侵入性的)。

在本书的最后两章中,我们研究了IT世界中的一些最新趋势。 现在已经有越来越多的企业或组织开始讨论和使用诸如持续集成和持续交付(CI/CD) 、使用Docker的容器化、使用Kubernetes 的编排以及云平台之类的技术。实际上,这些解决方案也是微服务日益普及的部分原因。目前,该编程领域有一个领导者一Spring Cloud. Spring Cloud所具有的功能之丰富,可以实现的与微服务相关的模式之多,目前尚无其他Java框架可以与之媲美。衷心希望本书能够帮助开发人员有效使用此框架,从而更好地构建和磨砺自己的基于微服务的企业系统。

本文给大家讲解的最后一个内容是如何轻松地在不同平台上运行Spring Cloud微服务,通过示例演示云原生应用程序的真正威力。

觉得文章不错的朋友可以转发此文关注小编,有需要的可以扫下方二维码获取资料;

感谢大家的支持!

以上是关于如何轻松地在不同平台上运行Spring Cloud微服务,通过示例演示云原生应用程序的真正威力的主要内容,如果未能解决你的问题,请参考以下文章

spring cloud互联网分布式微服务云平台规划分析--spring cloud服务统一配置中心

spring cloud互联网分布式微服务云平台规划分析--spring cloud服务统一配置中心

如何正确使用 Spring Cloud?上

Spring Cloud 轻松解决跨域,别再乱用了!

Spring Boot 微服务在 Pivotal Cloud Foundry 平台上部署时无法通过 Kerberos 身份验证

部署微服务的时候,Spring Cloud 和 Kubernetes 哪个更好?