通过google app engine 在google cloud 部署支持quic的Java web 应用(多种方式)
quic最先是由google提出并完善的,18年google cloud支持了quic協(xié)議,我嘗試在google上部署一套自己的應(yīng)用,并使其支持quic協(xié)議
google的文檔還是非常完善的,只是類似的文檔有點(diǎn)多反而不好選擇了。在部署過程中遇到不少問題,都會(huì)在博客里記錄下來,最后會(huì)把自己成功部署的操作分享出來
google app engine
在以提供物理資源為目的的 IaaS ( Infrastructure as a Service )領(lǐng)域里, Amazon EC2是當(dāng)之無愧的領(lǐng)先者。而在以提供平臺(tái)為目標(biāo)的 PaaS( Platform as a Service)領(lǐng)域里, Google App Engine 的美譽(yù)度是非常高的。
Google App Engine(GAE) 是 Google 的平臺(tái)即服務(wù)(PaaS)產(chǎn)品,允許開發(fā)人員和企業(yè)使用 Google 的高級(jí)基礎(chǔ)架構(gòu)構(gòu)建和運(yùn)行應(yīng)用程序,并自動(dòng)根據(jù)應(yīng)用所承受的負(fù)載來對(duì)應(yīng)用進(jìn)行擴(kuò)展,免去用戶對(duì)應(yīng)用和服務(wù)器等的維護(hù)工作。
Google App Engine: Java版應(yīng)用服務(wù)器和Python版基本一致,也是基于標(biāo)準(zhǔn)的Java Web容器,而且選用了輕量級(jí)的Jetty技術(shù),并跑在Java 6上。
簡(jiǎn)單來說, Amazon EC2只是提供了最基礎(chǔ)的虛擬機(jī)器,需要什么我們都要自己在上面安裝部署。
而Google App Engine 提供的是平臺(tái)服務(wù),它幫我們封裝了很多操作命令以便開發(fā)者快速進(jìn)行部署,比方說實(shí)例的維護(hù)和擴(kuò)容,自動(dòng)將web應(yīng)用部署在web服務(wù)器里等 。
部署spring-boot應(yīng)用到google cloud (app engine)
一開始按照google的文檔嘗試了多次,但是最后都沒有部署成功,有的部署成功了但是無法正常訪問,最后按照文檔提供的官方示例成功部署了
代碼示例
java-docs-samples/appengine-java8/springboot-helloworld
1. 下載Google Cloud SDK
https://cloud.google.com/sdk/docs/install
安裝成功后雙擊Google Cloud Shell啟動(dòng),按照上面的提示操作
- gcloud init: 初始化cloud sdk
- 初始化后會(huì)咨詢你是否需要選擇部署區(qū)域,根據(jù)自己的需要選擇即可
2.在當(dāng)前的google cloud項(xiàng)目里創(chuàng)建一個(gè)app engine 應(yīng)用
gcloud app create3.創(chuàng)建自己的app engine 項(xiàng)目
項(xiàng)目的創(chuàng)建方式和普通的spring-boot項(xiàng)目一樣(我部署的是war包),創(chuàng)建完成后需要修改如下配置:
1) 在pom.xml添加 App Engine Maven插件
<plugin><groupId>com.google.cloud.tools</groupId><artifactId>appengine-maven-plugin</artifactId><version>2.2.0</version><configuration><!--你在google cloud創(chuàng)建的項(xiàng)目id--><projectId>myProjectId</projectId><!--GCLOUD_CONFIG表示自增長的App Engine版本,也可以用具體的版本號(hào)來代替--><version>GCLOUD_CONFIG</version></configuration> </plugin>2) 添加app engine配置文件
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"><threadsafe>true</threadsafe><runtime>java8</runtime> </appengine-web-app>本地運(yùn)行: mvn package appengine:run
部署到google cloud: mvn package appengine:deploy
部署成功后可以看到如下日志信息:
app engine其他部署方式
除了前面成功的部署,我還嘗試過使用其他辦法部署,有的一開始沒有成功,不過多次嘗試后最終也都成功了,記錄一下, 在部署期間還是有一些小問題,如果有人能幫忙解答下就更好了
通過Google Cloud SDK 部署
參照的文檔如下:
使用入門:設(shè)置開發(fā)環(huán)境
否則會(huì)報(bào)如下錯(cuò)誤:
通過IDEA Cloud Code插件部署(標(biāo)準(zhǔn)環(huán)境)
參考文檔:創(chuàng)建適用于 App Engine 標(biāo)準(zhǔn)環(huán)境的應(yīng)用
3.點(diǎn)擊項(xiàng)目右鍵 添加框架支持(Add Framework Support) 這里我已經(jīng)在創(chuàng)建項(xiàng)目的時(shí)候使用了Google App Engine Standard,所以就不需要再添加了,我只是添加了一個(gè)maven的框架支持
項(xiàng)目的pom.xml如下 ,就是正常maven項(xiàng)目的配置:
<properties><spring.boot.version>1.4.3.RELEASE</spring.boot.version><jdk.version>1.8</jdk.version></properties><packaging>war</packaging><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>19.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><encoding>${file.encoding}</encoding><source>${jdk.version}</source><target>${jdk.version}</target><showWarnings>true</showWarnings></configuration></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins><finalName>quic</finalName></build>于是我修改了項(xiàng)目生成時(shí)的appengine-web.xml的文件位置,改為src\main\webapp\WEB-INF\appengine-web.xml 目錄下,再次運(yùn)行就可以成功部署了
怎么使應(yīng)用支持quic協(xié)議
部署完應(yīng)用之后,可以在App Engine的管理頁面里看到對(duì)應(yīng)的版本和實(shí)例信息
接下來就需要部署對(duì)應(yīng)的外部Https負(fù)載均衡器,配置頁面
https://console.cloud.google.com/net-services/loadbalancing/
配置對(duì)應(yīng)的后端: 類型選擇 無服務(wù)器網(wǎng)絡(luò)端點(diǎn)組,協(xié)議選擇HTTPS (這里配置的就是我之前部署的springboot項(xiàng)目)
配置前端: 開啟quic, 協(xié)議選擇https, 添加證書,這里的ip是自動(dòng)生成的
證書的申請(qǐng)?jiān)诹硪黄┛屠锒加姓f明:不花一分錢申請(qǐng)免費(fèi)域名和ssl證書
配置完成后就可以通過域名進(jìn)行訪問了
除了通過app engine部署應(yīng)用(app engine會(huì)幫助我們自動(dòng)擴(kuò)縮容,所以就不需要搭建應(yīng)用集群了),還可以使用原始的實(shí)例來部署,感興趣的可以參考以下文章: 如何在Google Cloud上創(chuàng)建負(fù)載均衡器?
部署一個(gè)實(shí)例組,然后創(chuàng)建指向該實(shí)例組的負(fù)載均衡器。
最后的問題
部署成功后,訪問域名發(fā)現(xiàn)目前google cloud只能支持h3-Q050等協(xié)議,不能支持h3-29
部署踩坑
在使用Idea的Cloud Code插件部署項(xiàng)目時(shí),一開始安裝插件后其新建Google App Engine項(xiàng)目的頁面和文檔的不太一樣,創(chuàng)建后的項(xiàng)目部署起來也總是有問題
使用Flexible 柔性環(huán)境部署后會(huì)訪問項(xiàng)目會(huì)出現(xiàn)如下提示:
500 Server Error\br Error: Server Error The server encountered an error and could not complete your request. If the problem persists, please report your problem and mention this error message and the query that caused it.在google cloud的控制臺(tái)觀察其實(shí)例也發(fā)現(xiàn)其及其不穩(wěn)定,經(jīng)常處理健康檢查失敗的狀態(tài)
后面就嘗試使用了標(biāo)準(zhǔn)環(huán)境來部署,部署后的實(shí)例狀態(tài)看上去到是正常,但是在通過google 部署后提供的域名訪問應(yīng)用的時(shí)候一直提示404
最后我是通過卸載插件并重新安裝插件重啟IDEA 解決了這個(gè)問題
參考資料:
外部 HTTP(S) 負(fù)載平衡概覽
總結(jié)
以上是生活随笔為你收集整理的通过google app engine 在google cloud 部署支持quic的Java web 应用(多种方式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea打断点启动项目后debug红点内
- 下一篇: HashedWheelTimer时间轮原