在公共云上部署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,此时-切都应该正常工作,如下所示。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
由于篇幅原因,就不多做展示了
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
-1713468585303)]
[外链图片转存中…(img-f2j9o9TE-1713468585303)]
[外链图片转存中…(img-L8DFlewZ-1713468585304)]
[外链图片转存中…(img-6yP65ITJ-1713468585304)]
[外链图片转存中…(img-BKyoBln9-1713468585304)]
[外链图片转存中…(img-fN3vg43Q-1713468585304)]
由于篇幅原因,就不多做展示了
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!