五分钟带你读懂!Spring Cloud构建微服务分布式云平台
Posted jinggege795
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五分钟带你读懂!Spring Cloud构建微服务分布式云平台相关的知识,希望对你有一定的参考价值。
云平台上的Spring微服务
Pivotal公司将Spring Cloud定义为加速云原生应用程序开发的框架。今天,当我们谈论云原生应用程序时,首先想到的是快速交付软件的能力。为了满足这些需求,开发人员应该能够快速构建可扩展、可移植且准备频繁更新的新应用程序和设计架构。提供容器化和编排机制的工具有助于开发人员建立和维护这样的架构。实际上,本书前面章节中已经讨论过Docker或Kubernetes等工具,它们都允许开发人员创建自己的私有云并在其上运行Spring Cloud微服务。虽然应用程序不必部署在公共云上,但它包含云软件的所有最重要的特征。
在公共云上部署Spring应用程序只是一种可能性,而不是必需的。但是,有一些非常有趣的云平台允许开发人员在几分钟内轻松运行微服务并在网络上公开它们。其中一个平台就是Pivotal Cloud Foundry (PCF),它优于其他平台的优势在于它对Spring Cloud服务的原生支持,包括使用Eureka. Config Server和Hystrix断路器进行发现。开发人员还可以通过启用Pivotal提供的代理服务轻松设置完整的微服务环境。
本章将要介绍的另一个云平台是Heroku。与PCF相比,它不支持任何编程框架。Heroku是一个完全托管的多语言平台,可以让开发人员快速交付软件。一旦推送了对存储在GitHub存储库中的源代码的更改,它就可以自动构建和运行应用程序。它还提供了许多附加服务,可以使用单个命令进行配置和扩展。
本章将要讨论的主题包括:
口 Pivotal Web Services平台简介。
口 使用CLI、Maven插件和用户界面仪表板在PivotalCloudFoundry上部署和管理应用程序。
口 使用 Spring Cloud Foundry库准备应用程序以使其在平台上正常工作。
口 在 Heroku平台.上部署Spring Cloud微服务。
口 管理代理服务。
Pivotal Cloud Foundry
虽然Pivotal平台可以运行用多种语言编写的应用程序,如Java、NET、Ruby、javascript、Python、php和Go等,但它对Spring Cloud Services和Netlix OSS工具提供了最好的支持。这非常有意义,因为他们是开发Spring Cloud的人。图15.1说明了Pivotal Cloud平台提供的基于微服务的架构(该图的英文版也可以在Pivotal的官方网站上找到)。开发人员可以在Cloud Foundry上使用Spring Cloud快速利用常见的微服务模式,包括分布式配置管理、服务发现、动态路由、负载均衡和容错等。
使用模式
开发人员可以按3种不同的模式使用Pivotal 平台。这些模式是根据主机进行区分的,而主机就是部署应用程序的位置。以下是可用解决方案的列表。
口 PCF Dev: Pivotal 平台的这个实例可以在一台虚拟机上以本地方式运行。它专为实验和开发需求而设计。它不提供所有可能的功能和服务。例如,只有一些诸如Redis、mysql和RabbitMQ之类的内置服务。但是,PCF Dev还支持Spring Cloud Services (SCS) 以及完整版PCF中支持的所有语言。值得注意的是,如果开发人员想要以本地方式运行包含SCS的PCF Dev,则需要超过6GB的内存。
口 Pivotal Web Services: 这是一个可在线访问的云原生平台,网址为htpt://run.pivotal.io/。它就像Pivotal Cloud Foundry 一样,提高托管功能,并且按小时付费。它不提供Pivotal Cloud Foundry中提供的所有功能和服务。例如,开发人员可以只启用由Pivotal的SaaS合作伙伴提供的服务。PivotalWebServices最适合初创公司或个人团队。我们将在本章后面的小节中使用此Pivotal平台托管模型进行演示。
口 Pivotal Cloud Foundry:这是一个功能齐全的云原生平台,可在任何主要的公共laaS上运行,包括AWS、Azure 和Google Cloud Platform,或者基于OpenStack或VMware vSphere的私有云。它是适用于大型企业环境的商业解决方案。
准备应用程序
由于Pivotal Web Services对Spring Cloud应用程序具有原生支持,因而部署过程非常简单。但是,它确实需要在应用程序端具有特定的依赖项和配置特别是如果开发人员的微服务必须与Pivotal平台( 如Service Registry、Config Server或Circuit Breaker)提供的内置服务集成的话,更是如此。除了Spring Cloud的标准依赖项管理之外,还应该在pom.xml中包含spring-cloud-services- dependencies,最新版本与Edgware.SR2版本列车一起使用,如下所示。
org . springframework. cloud
spring-cloud-dependencies
Edgware . SR2
pom
import
dependency>
io.pivotal.spring. cloud
spring-cloud-services-dependencies
1.6.1. RELEASE
pom
import
根据所选的集成服务,开发人员可能希望在项目中包含以下工件。我们决定使用Pivotal平台提供的所有Spring Cloud 功能,因此,我们的微服务将获取配置服务器的属性,在Eureka中注册它们,并使用Hystrix命令包装服务间通信。
以下是为在Pivotal平台上部署的应用程序启用发现客户端、配置客户端和断路器所需要的依赖项。
io.pivotal. spring.cloud
spring-cloud-services-starter-circuit-breaker
io.pivotal. spring . cloud
spring-cloud-services - starter -config-client
dependency>
io.pivotal. spring.cloud
spr ing-cloud- services-starter-service-registry
dependency>
我们将为示例微服务提供更多集成。所有这些都将在MongoDB中存储数据,而MongoDB也可以作为Pivotal 平台上的服务提供。要完成此目标,首先应该在项目依赖项中包含starter spring-boot- starter-data-mongodb.
org. springframework.boot
spring-boot -starter-data -mongodb
dependency>
应该使用springdata.mongodb.uri属性在配置设置中提供MongoDB数据库的地址。为了允许应用程序与MongoDB数据库连接,我们必须创建一个Pivotal的服务mLab,然后将其绑定到应用程序。默认情况下,与绑定服务相关的元数据将作为环境变量$VCAP_ SERVICES公开给应用程序。这种方法的主要动机是Cloud Foundry被设计为多语言,这意味着任何语言和平台都可以作为构建包(Buildpack)获得支持。可以使用veap前缀注入所有Cloud Foundry属性。如果想要访问Pivotal的服务,则应该使用veap.services前缀,然后传递如下所示的服务名称。
spring :
data:
mongodb :
uri: ${vcap.services.mlab. credentials.uril
实际上,这就是需要在应用程序端完成的所有工作,这样就可以使它们与Pivotal平台上创建的组件一起正常工作。现在我们必须与在Spring中编写的标准微服务相同的方式启用Spring Cloud功能,如下所示。
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
public class OrderApplication {
public static void main(String[] args) {
SpringApplication. run (OrderApplication.class, args);
部署应用程序
可以通过3种不同的方式在Pivotal Web Service (PWS)平台上管理应用程序。第一种方式是通过htps://console. run.pivotal.io上提供的Web控制台。开发人员可以通过这种方式监控、扩展、重新启动已部署的应用程序,启用和禁用服务,定义新指标以及更改账户设置。但是,使用Web控制台(换句话说,也就是初始应用程序部署)却无法执行此操作,它需要使用命令行界面(Command-Line Interface, CLI)执行。开发人员可以从pivotalio网站下载所需的安装程序。安装完成之后,即可通过输入cf来调用计算机上的Cloud Foundry CLI,如cf help.
1.使用命令行界面
命令行界面提供了一组命令,允许开发人员在Cloud Foundry上管理应用程序、代理的服务、空间、域和其他组件等。接下来将介绍在PWS上运行应用程序时应该知道的最重要的命令。
(1)要部署应用程序,必须先导航到其目录。然后,应该使用cf login命令登录PWS,如下所示。
$ cf login -a https://api. run.pivotal.io
(2)使用cf push命令将应用程序推送到Pivotal Web Service,并传递服务的名称。
$ cf push account-service -P target / account-service-1.0.0-
SNAPSHOT. jar
(3)或者,开发人员也可以在应用程序的根目录中提供manifest.yml 文件以及所有必需的部署设置。在这种情况下,开发人员只需运行cf push命令而无须任何其他参数,如下所示。
applications:
name: account-service
memory: 300M
random- -route: true
path: target/account-service-1.0-SNAPSHOT.jar
(4)使用如.上例所示的manifest.yml文件中提供的配置设置进行部署将失败。要查看原因,可以运行命令cf logs。原因是堆的内存限制不足。
$ cf logs account-service -- recent
默认情况下,平台将为代码缓存分配240MB,为元空间(Metaspace)分配140MB, 为每个线程分配1MB,并假设Tomcat连接器最多有200个线程。这样就很容易计算出,使用这些设置,每个应用程序需要大约650MB的分配内存(而上面的示例仅分配了300MB)。我们可以通过调用cf set-env命令并传递JAVA _OPTS参数来更改这些设置,如以下代码所示。像这样的内存限制在生产模式下是不够的,但可以用于测试目的。要确保这些更改生效,可以使用cf restage命令,如下所示。.
$ cf set-env account- service JAVA OPTS ”-Xmx150M -Xss250K -
XX:ReservedCodeCacheSize=70M -Xx :MaxMetaspaceSize=90M"
$ cf restage account- service
分配的内存很重要,特别是如果只有2GB内存可用于免费账户。应用默认内存设置后,我们就只能在Pivotal平台上部署两个应用程序,因为每个应用程序占用1GB的内存。虽然已经解决了前面描述的问题,但我们的应用仍然无法正常工作。
2.绑定到服务
在引导期间,应用程序无法连接所需的服务。出现此问题的原因是服务未默认绑定到应用程序。可以通过运行命令cf services来显示在空间中创建的所有服务,并通过调用命令ef bind- service将它们中的每-一个绑定到给定的微服务。在以下示例命令的执行中,我们将Eureka、配置服务器和MongoDB都绑定到account-service服务。最后,可以再次运行cf restage,此时-切都应该正常工作,如下所示。
$ ef bind-service account-service discovery- service
$cf bind-service account- service config-service
$ cf bind-service account-service sample-db
3.使用Maven插件
如前文所述,命令行界面和Web控制台并不是在Pivotal平台上管理应用程序的唯一方法。Cloud Foundry团队已经实现了Maven插件,以促进和加快应用程序部署。有趣的是,同一个插件可用于管理任何Cloud Foundry实例的推送和更新,而不仅限于由Pivotal提供的实例。
使用CloudFoundry的Maven插件时,开发人员可以轻松地将云部署集成到Maven项目的生命周期中。这允许开发人员在Cloud Foundry中推送、删除和更新项目。如果想要将项目与Maven一起推送,只需运行以下命令。
$ mvn clean install ef:push
一般来说,Maven插件提供的命令与命令行界面提供的命令非常相似。例如,开发人员可以通过执行命令mvn cfapps来显示应用程序的列表。如果要删除某个应用程序,则可以运行以下命令。
$ mvn cf:de1ete -Dcf。appname = product- service
如果要将某些更改上传到现有应用程序,则可以使用cf:update,其命令如下。
$ mvn clean install cf :update
在运行任何命令之前,都必须正确配置插件。首先,需要传递Cloud Foundry登录凭据。建议将它们分别存储在Maven的settings.xml文件中。服务器标记内的典型条目可能如下所示。
...
cloud- foundry-credentials
piotr .minkowski@play.p1
123456
...
使用Maven插件而不是命令行界面的命令有一个重要的优点:开发人员可以在一个位置配置所有必要的配置设置,并可以在应用程序构建期间使用单个命令应用它们。插件的完整配置显示在以下代码段中。除了一些基本设置( 包括空间、内存和大量实例)之外,还可以使用JAVA_ OPTS 环境变量更改内存限制,并将所需服务绑定到应用程序。运行ef.push命令之后,就可以在
ht:p:pro/uci-service-piomin.cfapps.. io/地址使用product-service服务。
org.cloudfoundry
cf -maven-plugin
1.1.3
http://api.run.pivotal.io
piotr .minkowski
development space>
Siproject.artifactId}
300
1 instances>
cloud- foundry-credentials
https://product -service-piomin.cfapps。io/
-Xmx150M -Xss250K -XX:ReservedCodeCacheSize=70M 一
Xx: MaxMetaspaceSize=90MOPTS>
sample-db name>
mlab
sandbox
config- service
p-config-server1abe1>
standard
觉得文章不错的朋友可以转发此文关注小编,有需要的可以下方扫码获取资料
以上是关于五分钟带你读懂!Spring Cloud构建微服务分布式云平台的主要内容,如果未能解决你的问题,请参考以下文章
五分钟带你玩转spring cloud alibaba越玩越溜!实战Spring Cloud Alibaba Sentinel
五分钟带你玩转spring cloud alibaba越玩越溜!实战Spring Cloud Alibaba Sentinel