本篇将分享如何将SpringBoot应用通过云开发平台部署到服务型Serverless上;如何通过一套代码,协同支持线下环境、线上环境和云端开发测试环境的开发。讲解过程将通过一个任务管理系统如何搬迁并部署到Serverless上来演示。 首先打开任务管理系统的登录页面并登录,这是一个分布式的任务管理系统。我们看看如何将任务管理器-Service端和Web客户端整合成一个应用,并应用部署到云开发平台上。
在任务系统页面右侧添加一个任务,左侧任务列表的底部就会显示新添加的任务。 第一步,确认此应用是不是云原生的应用,是不是无状态的应用。 怎么来保证它的无状态呢?那就要确认它的Session不会保存在单台主机上。通过代码我们可以发现,比如常用的登陆态,登录态不能通过传统的单机模式把Session设置到Web容器的Session的属性里去,如果这样的话它其实是存在这台主机的服务端,这台主机服务端就相当于有一个状态了。
在Serverless上,主机随时会漂移或随时会扩容。这个时候如果用户登录到其它主机上,它的登陆态就会丢失。所以迁移的前提是把应用有状态的特征变成无状态,怎么把它变成无状态呢?有两种方式。 第一种,把登录态信息存储到cookie上,让浏览器保存。 第二种,在大型应用场景,登录态把它存储到共享服务上。共享服务是指数据库或Redis缓存,一般是存在缓存里而不是存数据库里的。或者是专门启动一个保存用户登录态的服务,设置一个专门的微服务管理,这是大型应用场景的做法。登录态里面可能就存储在用户的一些权限信息、组织信息、一些状态、或是具体应用的信息,都可以存在这里。 一般轻量级的应用,都是通过存储到cookie上,cookie在浏览器和服务端来回传,它的登陆态就都保存起来了。这样用户每次访问时是无感的。 第二步,怎么通过云开发平台把应用迁移并部署到Serverless服务上。 在云开发平台创建迁移项目,点击创建后选择技术场景下的微(Microservice)服务,然后选择Springboot应用迁移方案SAE。
关于解决方案,我们展开说一下。云开发平台上有三种Serverless计算服务,一种是函数计算,之前的篇幅已经介绍过了;另外两种是服务型的Serverless,它包含两种计算服务方式:a是轻量型的微服务引擎SAE即Service Application Engine; b另外一种更适合大型应用场景的ASK即Application Serverless Kubernetes,这个也是按量计费的服务方式。这两个典型服务型Serverless都是免运维的,意思是它能自动伸缩自动弹性,宕机自动扩容,不用评估流量,不用担心不够用。 选好解决方案后,补充应用名称和介绍,确定完成创建。项目启动后,它会自动生成与项目对应的代码仓库。点进去会发现代码仓库里面包含三个文件:Dockerfile、README.md和启动脚本生成文件prepare.sh.
回到云开发平台创建的应用页面,点击开发部署打开Cloud IDE。
把本地的代码,迁移到打开的IDE文件目录中去,也就是部署到项目中去。这个操作有两种方式,方式一是把项目文件直接拖放到IDE代码目录中。
另外一种方式更简单。大家把codeup代码仓库checkout出来到本地,然后再把这个代码拷贝到相关目录下提交到codeup代码仓库,然后再在Cloud IDE中把代码拉取到IDE工程目录中。
拖完代码后,从IDE页面代码目录结构可以看到这是一个很典型的应用。目录中包括控制层、服务层、数据访问层等等。
完成代码设置,可以实现应用的本地启动。尝试CloudIDE云端启动的时候,要确保应用连接到云端的数据库。方法就是,提前在云端申请一个数据库,并做好配置。 怎么部署应用? 首先在云端准备一个测试数据库,这个数据库是外网能访问的rds的数据库。如果我们在阿里云上买了数据库,那么查看实例的时候,会看到每个数据库都有一个内网地址和外网地址,外网地址表示在外网通过地址可以访问到这个数据库的。我们在Cloud IDE里面配置就是的这个地址。
启动的时候Spring-boot会下载很多依赖,说明Cloud IDE这个容器它是能访问外网的。然后打开README.md,按照提示的第三步修改pom.xml文件,让pom.xml文件符合迁移的约束,这个是必须的。然后将Springboot打包,将启动类打成启动包。
当本地启动成功,如何访问和调试? 在Cloud IDE页面左下角点击预览,并把8080端口映射出来并点击访问,就可以访问服务了。
这个登录页面是访问容器的,登录进去后,进入到任务管理界面。任务管理系统里面建了两个表,如果在主页面添加数据,表格中也会对应的添加进来。在没有电脑的情况下,使用一台平板电脑打开这个浏览器登录Cloud IDE界面就可以写代码,这是浏览器在线编程的方式。
部署操作详解 部署到云端的时候一定要提交代码,因为云端去集成构建的时候,Flow集成环境是通过代码仓库去拉代码。
应用部署,系统默认有三套环境,一个日常环境,一个是预发,一个是线上。我们来讲解部署到日常环境的情况。
如何使用这三套环境 线下开发环境,测试环境、预发环境和正式环境的需要在代码配置层面保证一致。比如我们有三个数据库,一个是本地数据库,一个是云端测试数据库,一个云端正式数据库。我们的工作环境会经常在这几个环境中切换,对应的数据库连接如下图。
在本地IDE中写代码的效率是比较高的,在云端Cloud IDE 开发环境更方便联调代码。当遇到没有自己电脑的情况,或者修改简单bug的时候,会用到云端的Cloud IDE,在上面可以实现写代码。未来,云端开发体验基本上可以做到和本地IDE开发体验一致。如果能达到这样的效果,未来所有的开发都可以在线上实现。现在主要还是通过本地开发环境,写好代码后提交到代码仓库里完成项目的实现。 开发完毕,需要部署到测试环境进行验证,这就需要部署到云端的测试环境上,这个测试环境可能会连接到测试数据库,或者单独有个专门的测试数据库,尽量跟开发隔离。 测试环境完成后,基本上就可以把这个应用发布到线上了。发布之前会有一个预发的环境,这个预发环境只是没有对外提供服务而已。这个预发,内网可以访问而外部客户是访问不到的。预发环境都是连的正式数据库。预发也没问题了,就可以发布到正式环境,直接向外提供服务了。 部署完成,我们通过日志可以看到整个过程。 第一步,Java构建申请运行环境,然后在Flow容器里去构建编译代码,编译代码完成是去打镜像,然后把镜像上传到镜像仓库里面去; 第二步,编排VPC的网络,编排网络就是要构建一个基础设施的环境,就是一个虚拟的网络。如果访问一个存量的应用,存量的数据库或者是存量的Redis或者中间件服务,这些都需要编排在同一个VPC里面,才能访问、才能互联互通。 第三步,SAE的三套环境初始化和SAE服务和编排部署。部署完成,就去绑定域名。域名对我们普通开发者个人来说,是个比较高的门槛。我们考虑到这一点,阿里云云开平台会给开发者默认创建了一个域名,但是这个域名只有半个小时生效期。 第四步,测试环境完成后就可以发布到线上环境,不过在发布前要前往预发环境验证,验证发布是否正确。 第五步,推送线上发布。在部署线上的时候,prepare.sh生成的脚本要调整一下,原来指定的正式环境要把它改成prod,相当于将容器镜像脚本启动。端口一定是8080,即使本地开发时使用其他端口,部署上线时候也一定要改成8080端口。 展开讲一下Spring配置文件。这个文件下的application-dev.properties可以链接本地数据库;application-devrds.properties连接的是远程测试数据库,这个是在线开发模式;application-h2自己没有数据库,可以使用内存数据库;application-prod.properties是正式数据库,一般是在 VPC里购买的数据库。 如何购买数据库? 购买数据库的时候要选择VPC和交换机,并选择网络,这个网络跟应用要保证在同一个VPC里。
课程汇总 把一个Springboot迁移到云开发平台, 第一步,要把当前应用,无论是本地开发还是云端开发,变成无状态的; 第二步,把代码搬迁到云开发平台上,云开发平台会给你创建一个代码仓库; 第三步,根据迁移工程里面的README.md或者云开发平台上帮助文档的说明,修改pom.xml文件,加上代码和配置,再加上Springboot打包的插件,提交代码; 第四步,提交代码然后点部署,部署的时候它是只有一个环境的,只有一个prod 。线上的配置相当有两个层级,第一个层级是区分开发模式;第二个层级是区分三套环境,测试环境、预发环境和正式环境; 第五步,测试环境测试验证,最后部署到正式环境。 最后阿里云开发平台为了让用户更好的体验该平台特此准备了10元无门槛代金券: https://workbench.aliyun.com/activities/coupon ![]() |
![]() 鲜花 |
![]() 握手 |
![]() 雷人 |
![]() 路过 |
![]() 鸡蛋 |
• 新闻资讯
• 活动频道
更多