Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
本教程教大家通過阿里云服務器搭建一個由nginx做代理轉發的javaweb系統,所有的請求通過nginx
轉發到對應的tomcat下。
1、阿里云Ubuntu服務器一臺
2、ssh遠程連接工具
window下可以使用xshell,putty,securecrt。推薦使用xshell個人覺得比較方便。
Mac或者linux都可以直接使用控制臺連接
3、下載安裝所需要資源包(tomcat7,nginx1.6,nginx配置 linux環境證書更新腳本),把下載好的resource.zip上傳到服務器上
本例中resource包放在 /home/resource下
resource.zip
在開始安裝具體的軟件前我們需要安裝一些支持性環境或者軟件,創建好文件夾。
1、更新apt-get命令
apt-get -y update
2、安裝mysql依賴查詢和其他所需要用到的程序
apt-get -y install unzip build-essential libncurses5-dev libfreetype6-dev libxml2-dev libssl-dev libcurl4-openssl-dev libjpeg62-dev libpng12-dev libfreetype6-dev libsasl2-dev libpcre3-dev autoconf libperl-dev libtool libaio*
3、清除防火墻設置
iptables -F
4、解壓resource.zip,切換到resource文件夾中
unzip /home/resource.zip
5、更新ssl證書
./env/update_openssl.sh
6、創建所需要用到的文件夾,我們需要創建的文件結構如下
/home
|- www
|- java1.7 //java環境安裝文件夾
|- tomcat7 // tomcat文件夾
|- nginx // nginx根目錄
|-sites-enabled //nginx配置文件目錄
|-log //日志文件目錄
|- webresource
|- static //nginx文件上傳目錄
mkdir -p /home/www/tomcat7
1、安裝tomcat
mv apache-tomcat-7.0.63 /home/www/tomcat7
2、安裝java運行環境,命令的意思是下載jdk、解壓jdk壓縮文件、移動解壓后的文件
wget
設置java環境變量
echo 'export JAVA_HOME=/home/www/java1.7' >> /etc/profile
3、安裝ngix
創建文件夾,解壓文件
touch /home/www/log/nginx/access.log
切換工作目錄
cd /home/www/nginx/
開始安裝
./configure
修改配置文件
cd /home/resource
啟動nginx,我們在nginx的root路徑下寫入一個index.html文件然后啟動nginx
touch /home/www/webresource/static/index.html
啟動成功后你可以通過訪問ip看到一個寫著hellow的網站
配置nginx代理tomcat,我們在 /home/www/nginx/sites-enabled 文件下創建一個叫tomcat的文件,文件內容如下,表示nginx將代理www.test.com這個域名,并且轉發到本地的tomcat監聽端口下。
server {
4、mysql數據庫安裝
sudo apt-get -y install mysql-server
修改遠程登錄權限 ,mysql默認是不開啟遠程登錄的,如要需要開啟則需要修改配置
需要改動一下 /etc/mysql/my.cnf文件把#bind-address=127.0.0.1節點注釋掉
注意最新版本mysql my.cnf中已經不再配置具體參數,而是分成了2個文件
#bind-address 需要在/etc/mysql/mysql.conf.d/mysqld.cnf中修改
修改完成后重啟mysql
service mysql restart
創建mysql遠程登錄用戶,給用戶授權數據庫管理權限。這里創建了一個testdb數據庫,然后創建了一個用戶,用戶名為:testdb_user,密碼為:testdbpassword。這個用戶就可以遠程登錄mysql數據庫了
CREATE DATABASE testdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
5、安全軟件
考慮到服務器端的安全問題,大家可以選擇性的安裝一些安全軟件如安全狗,
wget
啟動安全狗
service safedog restart
進入管理界面
sdui
久之前,小編就買了一年的阿里云服務器,也購買了域名,一直都沒有時間,加上自己對linux的知識不足,最后小編終于把wordpress和tomcat同時部署在一個服務器上,
先簡單說說阿里云的購買流程,如果你的域名不需要備案,只是能夠訪問那么簡單的多,
wordpress部署部分
在阿里云部署購買云主機CES或輕應用服務器,
如果你在24歲以下,進行學生認證,那么一平均一個月9.9元,
在系統選擇上,windows會有可視化的界面,不會linux的可以選擇windows
想搭建自己的博客的可以選擇wordpress;
只是部署java項目可以直接選擇系統鏡像的centos
域名購買
域名可以選擇一個自己喜歡的,看一下不同的后綴名交流,查看一下價格
這里需要填寫個人相關信息
并且通過實名認證
在控制臺的域名就可看到自己購買的域名,選擇解析,填寫剛才購買服務器的ip地址就解析完成了
這時回到輕應用服務器列表,
按照圖中的命令就可以進行操作,設置wordpress的站點信息,這里阿里云有完整的參考文檔,這里我就不寫了,可以參考這個文章
java項目部署
java項目部署需要tomcat jdk 和mysql 本地電腦與服務傳遞文件需要使用ftp,以及開啟相關端口,在阿里云的安全組開啟如圖的安全規則,
使用遠程連接工具鏈接阿里云:
ftp安裝:
ftp的安裝
這里小編一直沒有使用安裝上傳文件成功過,
百度了ftp的文件的配置,執行了安裝命令,使用Suceure File Transfer就可以進行文件上傳
mysql安裝
安裝mysql:
依次運行一下命令
cd /tmpwget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql mysql-server mysql-devel -y
開啟服務
systemctl start mysql.service
查看是否開啟成功
netstat -anp|grep 3306
通過Yum安裝的mysql的管理員賬戶是沒有密碼的, 如下命令設置為admin
mysqladmin -u root password admin mysql -uroot -padmin
創建一個用戶
>insert into mysql.user(Host,User,Password) values("localhost","用戶名",password("密碼")); 賦予遠程連接等權限 >grant all privileges on *.* to '用戶名'@'%' identified by '密碼';刷新權限flush privileges;
就可以使用mysql管理工具進行管理
在wordpress部署的時候,會默認安裝mysql,所以我們就不需要自己再裝mysql了
需要自己創建一個用戶,賦予權限,不能修改默認的數據庫密碼,否則wordpress會鏈接不上數據庫導致博客網頁不能訪問,
jdk安裝
CentOS 7.3 可能會默認安裝open jdk,如果沒有的話,本地在oracle下載tar.gz格式的jdk
上傳到服務器,復制到一個文件夾 解壓然后
vim vim /etc/profile
在打開的文件最后一行,
加入#java environmentexport JAVA_HOME=/usr/java/安裝的jdk目錄export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jarexport PATH=$PATH:${JAVA_HOME}/bin/etc/profile
還有就是在線安裝
yum -y install java-1.8.0-openjdk.x86_64
接著運行
java -version
出現當前java版本即表示java安裝成功了
tomcat安裝
tomcat 也可以進行在線安裝
cd /tmp wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.92/bin/apache-tomcat-7.0.92.tar.gz tar xzf apache-tomcat-7.0.92.tar.gz mv apache-tomcat-7.0.92 /usr/local/tomcat7 運行 /usr/local/tomcat7/bin/startup.sh 檢查 netstat -anp|grep 8080
開啟防火墻的8080端口 包括阿里云的安全組
firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload #重啟firewall
在瀏覽器進行測試
也可以在tomca官網下載linux的tomcat壓縮包,上傳到阿里云,解壓啟動服務開放端口
通過后就可以將自己的數據庫導入阿里云的數據庫,
將自己的java項目打包(打包前將連接參數修改)
復制到tomcat的webapps下,地址欄輸入
ip:8080/項目名
就可以訪問自己的項目了
如果不想要項目名.就將原來的ROOT刪除,項目的war包重命名為ROOT
這里基本就配置完成,這里小編介紹的相對簡單,有興趣的可以參考
http://how2j.cn/k/deploy2linux/deploy2linux-breif/1591.html
這里有詳細到命令的介紹
最后說一下小編遇到的問題
ftp上傳文件問題:開始小編安裝了ftp一直不能上傳,最后使用了Suceure File Transfer就可以進行上傳了
還有就是,開始小編使用在線安裝,一直不成功最后使用了上傳的方式安裝成功
小編使用wordpress的數據庫,輸入mysql -u root - u 提示找不到命令,然后可能是環境變量找不到命令.在阿里云上找到了mysql的安裝位置,創建一個軟連接到/usr/bin目錄下,解決
**不要輕易修改mysql的命令,否則會導致wordpress不能訪問
多個項目部署到tomcat是,注意路徑問題,存在訪問路徑添加項目名時,第一種方式;修改項目的所有請求路徑,第二種,再創建一個tomcat 修改端口號
小編寫的比較簡單,配置過程中還要參考其他資料,大佬勿噴
多用戶量大并發度高的應用系統為了避免發布過程中的流量有損,一般選擇在流量較小的半夜發布,雖然這樣做有效果,但不可控導致背后的研發運維成本對企業來說是一筆不小的負擔。基于此,阿里云微服務引擎 MSE 在應用發布過程中,通過應用下線時進行自適應等待+主動通知,應用上線時就緒檢查與微服務生命周期對齊+服務預熱等技術手段所提供的微服務應用無損上下線功能,能有效幫助企業規避線上發布所出現的流量資損。
常見的流量有損現象出現的原因包括但不限于以下幾種:
無損下線
其中的服務無法及時下線問題,如下圖 1 所示:
圖1. Spring Cloud 應用消費者無法及時感知提供者服務下線
對于 Spring Cloud 應用,當應用的兩個實例 A’ 和 A 中的 A 下線時,由于 Spring Cloud 框架為了在可用性和性能方面做平衡,消費者默認是 30s 去注冊中心拉取最新的服務列表,因此 A 實例的下線不能被實時感知,此時消費者繼續通過本地緩存繼續調用 A 就會出現調用已下線實例出現流量有損。
針對該問題,阿里云微服務引擎 MSE 基于 Java Agent 字節碼技術設計實現的無損下線功能如下圖 2 所示:
圖2. 無損下線方案
在該套無損下線方案中,服務提供者應用僅需接入 MSE,相比一般的有損下線。應用在下線前會有一段自適應等待時期,該時期待下線應用會通過主動通知的方式,向其在自適應等待階段發送了請求的服務消費者發送下線事件,消費者接收到下線事件后會主動拉取注冊中心服務實例列表以便實時感知應用下線事件避免調用已下線實例造成應用下線流量有損。
無損上線
延遲加載是軟件框架設計中最常見的一種策略,例如在 Spring Cloud 框架中 Ribbon 組件的拉取服務列表初始化時機默認是要等到服務的第 1 次調用時刻,例如下圖 3 是 Spring Cloud 應用中第 1 次和第 2 次通過 RestTemplate 調用遠程服務的請求耗時情況:
圖3. 應用啟動資源初始化與正常運行過程中耗時情況對比
由測試結果可見,第一次調用由于進行了一些資源初始化,耗時是正常情況的數倍之多。因此把新應用發布到線上直接處理大流量極易出現大量請求響應慢,資源阻塞,應用實例宕機的現象。針對該類大流量下應用資源初始化慢問題,MSE 提供的小流量預熱功能通過調節剛上線應用所分配的流量幫助其在進行充分預熱后再處理正常流量從而對新實例進行保護。小流量預熱過程如下圖 4 所示:
圖4. 小流量服務預熱過程 QPS 與啟動時間關系圖
除了針對上述應用第一次調用初始化慢所造成的有損上線問題,MSE 還提供了資源預建連接、延遲注冊、確保 Kubernetes 就緒檢查通過前完成服務注冊和確保 Kubernetes 就緒檢查通過前完成服務預熱等一整套無損上線手段來滿足各類不同應用的無損上線需求,整套方案如圖 5 所示:
圖5. MSE 無損上線方案
接下來將演示阿里云微服務引擎 MSE 在應用發布時提供的無損上下線和服務預熱能力最佳實踐。假設應用的架構由 Zuul 網關以及后端的微服務應用實例(Spring Cloud)構成。具體的后端調用鏈路有購物車應用 A,交易中心應用 B,庫存中心應用 C,這些應用中的服務之間通過 Nacos 注冊中心實現服務注冊與發現。
前提條件
開啟 MSE 微服務治理
準備工作
注意,本實踐所使用的 Agent 目前還在灰度中,需要對應用 Agent 進行灰度升級,升級文檔:
https://help.aliyun.com/document_detail/392373.html
應用部署在不同的 Region(暫時僅支持國內 Region)請使用對應的 Agent 下載地址:
http://arms-apm-cn-[regionId].oss-cn-[regionId].aliyuncs.com/2.7.1.3-mse-beta/
注意替換地址中的[RegionId],RegionId 是阿里云 RegionId。
例如 Region 北京 Agent 地址為:
http://arms-apm-cn-beijing.oss-cn-beijing.aliyuncs.com/2.7.1.3-mse-beta/
應用部署流量架構圖
圖6. 演示應用部署架構
流量壓力來源
在 spring-cloud-zuul 應用中,如圖 6 所示,其分別向 spring-cloud-a 的灰度版本和正常版本以 QPS 為 100 的速率同時進行服務調用。
部署 Demo 應用程序
將下面的內容保存到一個文件中,假設取名為 mse-demo.yaml,并執行 kubectl apply -f mse-demo.yaml 以部署應用到提前創建好的 Kubernetes 集群中(注意因為 demo 中有 CronHPA 任務,所以請先在集群中安裝 ack-kubernetes-cronhpa-controller 組件,具體在容器服務-Kubernetes->市場->應用目錄中搜索組件在測試集群中進行安裝),這里我們將要部署 Zuul,A, B 和 C 三個應用,其中 A、B 兩個應用分別部署一個基線版本和一個灰度版本,B 應用的基線版本關閉了無損下線能力,灰度版本開啟了無損下線能力。C 應用開啟了服務預熱能力,其中預熱時長為 120 秒。
# Nacos Server
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nacos-server
name: nacos-server
spec:
replicas: 1
selector:
matchLabels:
app: nacos-server
template:
metadata:
labels:
app: nacos-server
spec:
containers:
- env:
- name: MODE
value: standalone
image: registry.cn-shanghai.aliyuncs.com/yizhan/nacos-server:latest
imagePullPolicy: Always
name: nacos-server
resources:
requests:
cpu: 250m
memory: 512Mi
dnsPolicy: ClusterFirst
restartPolicy: Always
# Nacos Server Service 配置
---
apiVersion: v1
kind: Service
metadata:
name: nacos-server
spec:
ports:
- port: 8848
protocol: TCP
targetPort: 8848
selector:
app: nacos-server
type: ClusterIP
#入口 zuul 應用
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-cloud-zuul
spec:
replicas: 1
selector:
matchLabels:
app: spring-cloud-zuul
template:
metadata:
annotations:
msePilotAutoEnable: "on"
msePilotCreateAppName: spring-cloud-zuul
labels:
app: spring-cloud-zuul
spec:
containers:
- env:
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
- name: LANG
value: C.UTF-8
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-zuul:1.0.1
imagePullPolicy: Always
name: spring-cloud-zuul
ports:
- containerPort: 20000
# A 應用 base 版本,開啟按照機器緯度全鏈路透傳
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-a
name: spring-cloud-a
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-a
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-a
msePilotAutoEnable: "on"
labels:
app: spring-cloud-a
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
- name: profiler.micro.service.tag.trace.enable
value: "true"
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-a:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-a
ports:
- containerPort: 20001
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
livenessProbe:
tcpSocket:
port: 20001
initialDelaySeconds: 10
periodSeconds: 30
# A 應用 gray 版本,開啟按照機器緯度全鏈路透傳
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-a-gray
name: spring-cloud-a-gray
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-a-gray
strategy:
template:
metadata:
annotations:
alicloud.service.tag: gray
msePilotCreateAppName: spring-cloud -a
msePilotAutoEnable: "on"
labels:
app: spring-cloud-a-gray
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
- name: profiler.micro.service.tag.trace.enable
value: "true"
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-a:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-a-gray
ports:
- containerPort: 20001
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
livenessProbe:
tcpSocket:
port: 20001
initialDelaySeconds: 10
periodSeconds: 30
# B 應用 base 版本,關閉無損下線能力
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-b
name: spring-cloud-b
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-b
strategy:
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-b
msePilotAutoEnable: "on"
labels:
app: spring-cloud-b
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
- name: micro.service.shutdown.server.enable
value: "false"
- name: profiler.micro.service.http.server.enable
value: "false"
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-b:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-b
ports:
- containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
livenessProbe:
tcpSocket:
port: 20002
initialDelaySeconds: 10
periodSeconds: 30
# B 應用 gray 版本,默認開啟無損下線功能
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-b-gray
name: spring-cloud-b-gray
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-b-gray
template:
metadata:
annotations:
alicloud.service.tag: gray
msePilotCreateAppName: spring-cloud-b
msePilotAutoEnable: "on"
labels:
app: spring-cloud-b-gray
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-b:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-b-gray
ports:
- containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
lifecycle:
preStop:
exec:
command:
- /bin/sh
- '-c'
- >-
wget http://127.0.0.1:54199/offline 2>/tmp/null;sleep
30;exit 0
livenessProbe:
tcpSocket:
port: 20002
initialDelaySeconds: 10
periodSeconds: 30
# C 應用 base 版本
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-c
name: spring-cloud-c
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-c
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-c
msePilotAutoEnable: "on"
labels:
app: spring-cloud-c
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-c:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-c
ports:
- containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
livenessProbe:
tcpSocket:
port: 20003
initialDelaySeconds: 10
periodSeconds: 30
#HPA 配置
---
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: spring-cloud-b
spec:
scaleTargetRef:
apiVersion: apps/v1beta2
kind: Deployment
name: spring-cloud-b
jobs:
- name: "scale-down"
schedule: "0 0/5 * * * *"
targetSize: 1
- name: "scale-up"
schedule: "10 0/5 * * * *"
targetSize: 2
---
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: spring-cloud-b-gray
spec:
scaleTargetRef:
apiVersion: apps/v1beta2
kind: Deployment
name: spring-cloud-b-gray
jobs:
- name: "scale-down"
schedule: "0 0/5 * * * *"
targetSize: 1
- name: "scale-up"
schedule: "10 0/5 * * * *"
targetSize: 2
---
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: spring-cloud-c
spec:
scaleTargetRef:
apiVersion: apps/v1beta2
kind: Deployment
name: spring-cloud-c
jobs:
- name: "scale-down"
schedule: "0 2/5 * * * *"
targetSize: 1
- name: "scale-up"
schedule: "10 2/5 * * * *"
targetSize: 2
# zuul 網關開啟 SLB 暴露展示頁面
---
apiVersion: v1
kind: Service
metadata:
name: zuul-slb
spec:
ports:
- port: 80
protocol: TCP
targetPort: 20000
selector:
app: spring-cloud-zuul
type: ClusterIP
# a 應用暴露 k8s service
---
apiVersion: v1
kind: Service
metadata:
name: spring-cloud-a-base
spec:
ports:
- name: http
port: 20001
protocol: TCP
targetPort: 20001
selector:
app: spring-cloud-a
---
apiVersion: v1
kind: Service
metadata:
name: spring-cloud-a-gray
spec:
ports:
- name: http
port: 20001
protocol: TCP
targetPort: 20001
selector:
app: spring-cloud-a-gray
# Nacos Server SLB Service 配置
---
apiVersion: v1
kind: Service
metadata:
name: nacos-slb
spec:
ports:
- port: 8848
protocol: TCP
targetPort: 8848
selector:
app: nacos-server
type: LoadBalancer
由于我們對 spring-cloud-b 跟 spring-cloud-b-gray 應用均開啟了定時 HPA,模擬每 5 分鐘進行一次定時的擴縮容。
登錄 MSE 控制臺,進入微服務治理中心->應用列表->spring-cloud-a->應用詳情,從應用監控曲線,我們可以看到 spring-cloud-a 應用的流量數據:
gray 版本的流量在 pod 擴縮容的過程中請求錯誤數為 0,無流量損失。未打標的版本由于關閉了無損下線功能,在 pod 擴縮容的過程中有 20 個從 spring-cloud-a 發到 spring-cloud-b 的請求出現報錯,發生了請求流量損耗。
我們在 spring-cloud-c 應用開啟了定時 HPA 模擬應用上線過程,每隔 5 分鐘做一次伸縮,在擴縮容周期內第 2 分鐘第 0 秒縮容到 1 個節點,第 2 分鐘第 10 秒擴容到 2 個節點。
在預熱應用的消費端 spring-cloud-b 開啟服務預熱功能。
在預熱應用的服務提供端 spring-cloud-c 開啟服務預熱功能。預熱時長配置為 120 秒。
觀察節點的流量,發現節點流量緩慢上升。并且能看到節點的預熱開始和結束時間,以及相關的事件。
從上圖可以看到開啟預熱功能的應用重啟后的流量會隨時間緩慢增加,在一些應用啟動過程中需要預建連接池和緩存等資源的慢啟動場景,開啟服務預熱能有效保護應用啟動過程中緩存資源有序創建保障應用安全啟動從而實現應用上線的流量無損。
方案介紹 & 實操
更多方案設計細節,請點擊下方鏈接觀看微服務應用如何實現無損上下線主題直播視頻回放:
https://yqh.aliyun.com/live/detail/27936
[1]創建 Kubernetes 托管版集群:https://help.aliyun.com/document_detail/95108.htm#task-skz-qwk-qfb
[2]開通 MSE 微服務治理:https://help.aliyun.com/document_detail/347625.htm#task-2140253
原文鏈接:https://developer.aliyun.com/article/872430?utm_content=g_1000331001
本文為阿里云原創內容,未經允許不得轉載。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。