实战Spring应用到PaaS平台的迁移

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wq237wq/article/details/51705950

实战Spring应用到PaaS平台的迁移

    I.         PaaS平台介绍

PaaS是位于IaaS和SaaS模型之间的一种云服务,它提供了应用程序的开发和运行环境。

 

  II.         HPEHelion Stackato平台介绍

HPE Helion Stackato 是多语言支持的Platform-as-a-Service (PaaS). 用户可以使用HelionStackato 来轻松部署各种语言和框架编写的应用程序,同时能够使用到各种不同的数据服务,包括Stackato内置支持的和用户自定义配置的服务。

Helion Stackato 为web服务,应用依赖,数据库和其他服务提供自动化的配置的功能。

用户可以在自己的数据中心使用私有云版本的 Helion Stackato ,或者使用用户已有的云平台来构建私有或者公有云PaaS平台。

 

III.         本文实战项目背景介绍

1.  本地Spring项目架构
            在本文中尝试了Spring框架的java app的上云部署。该app包含三个模块,对应于3个jar包,部署时打成一个war包部署在本地tomcat服务器,依赖的服务有mysql,redis,rabbit mq, zookeeper等。前端有apache服务器搭建了PHP的服务,提供页面的展示和请求转发。

 

2.  迁移到Stackato后项目架构
            迁移到Stackato云平台之后,spring项目的3个模块打包成3ge对应的war包,分别部署在stackato上的3个tomcat,每个tomcat跑在独立的docker容器里,依赖的MQ,redis和mysql服务有Stackato平台提供,并且自定义了zookeeper服务作为user-provided服务。



IV.         开始迁移本地Spring到Stackato

1.  指定API endpoint url和认证
在部署应用之前,Stackato客户端必须首先设定Stackato服务器API的endpoint地址.

执行staccato login 命令,使用用户名和密码登录

2.  创建manifest.yml文件
在Stackato客户端中,新建文件manifest.yml如下:

参数说明:

                                                   i.     Name: 应用名字

                                                 ii.     Buildpack:java类型的构建包,也就是指定你的应用语言类型

                                               iii.     Framework:应用使用的框架,可用的参数有java_web, java_ee, spring, grails, play。

                                               iv.     Services:依赖的服务, 用于声明应用所依赖的服务,需要提供服务名和服务类型,Stackato会将mysql,redis等服务以docker容器的方式运行起来 (需要在管理控制台激活) ,在应用启动时,Stackato会根据应用声明的服务信息去寻找对应的服务。

3.  使用Java BuildPack构建Java Application
Stackato默认使用Cloud Foundry Java Buildpack.

4.  配置Spring的数据服务
            如果只用到一种数据库,则不需要做任何修改,Stackato提供自动为用户绑定数据库服务,并动态将改数据库的连接池信息替换到本地配置文件



自动配置后的datasource bean的数据库连接信息会被自动更新,spring框架会读取这个更新后的连接信息,从而连接到Stackato上的mysql服务

 

5.  如何使用自定义的服务
            如果用户需要提供自定义服务,可以在manifest.yml文件里增加env变量,来声明服务的连接信息:

 

用户可以通过环境变量获取服务器的配置信息。


获取服务器的配置信息之后,可以通过复写Spring的PropertiesFactoryBean.loadProperties()方法,将Stackato提供的数据库连接信息,手动写到数据库配置的properties文件里,然后调用PropertiesFactoryBean.loadProperties()方法,去读取被修改过的properties文件,从而连接到Stackato提供的Mysql服务

6.  执行数据库数据初始化脚本
在spring的配置文件里声明jdbc的namespace及其文件地址


在spring的配置文件里,加上initialize-database的jdbc 标签,指定需要执行的脚本

7.  部署应用至Stackato
            构建application的部署文件 app-name.war,拷贝至Stackato服务器上, 执行stackat push命令,向stackato推送app


8.  管理应用

                                                   i.     登录Stackato控制台,查看部署的app


                                                 ii.     查看app所依赖的服务

                                               iii.     查看app的日志信息



  V.         总结
由此可见,通过实践部署本地spring项目到Stackato,可以获得如下好处

1.  实现了基于Stackato PaaS平台的持续集成和交付,用户不用关心应用所依赖的服务的安装和维护,这些服务都有Stackato来接管,包括用户隔离,应用的高可用。

2.  Stackato使用docker容器技术部署应用和服务,使得用户可以快速的部署多套环境,并且通过服务声明的方式,将环境依赖显示的定义为代码,保持开发环境,测试环境和线上环境的高度一致性,便于线上问题的定位。

3.  Stackato使用docker容器技术发布应用,支持服务的版本化,当用户发现应用问题时,可以快速进行回溯部署。

4.  Stackato支持应用的动态水平扩展,用户可以定义一些规则,当内存使用率达到一定阈值的时候,Stackato可以自动扩展.

 

 

展开阅读全文
博主设置当前文章不允许评论。

没有更多推荐了,返回首页