【網站公告】.NET Core 版部落格站點第二次發布嘗試

  • 2019 年 10 月 3 日
  • 筆記

上次發布失敗後,很多朋友建議我們改用 k8s ,但我們還是想再試試 docker swarm ,實在不行再改用 k8s 。

在改進了 docker swarm 集群的部署後,我們準備今天 17:30 左右進行一次發布嘗試。

docker swarm 集群是我們使用阿里雲伺服器自己搭建的,這次進行了3方面的改進。

1. 升級了 worker 節點伺服器的配置

worker 節點由6台4核8G伺服器換成了3台8核16G伺服器,基於3點考慮:

1)提高單台伺服器的處理能力;

2)提高伺服器的網路處理能力,阿里雲的伺服器配置越高,網路處理能力越強;

3)減少伺服器數量可以減少 docker swarm 節點之間的通訊開銷。

2. 升級了 docker engine,由 18.09.4 升級至 19.03.1 

wget -c https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm  &&   wget -c https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-19.03.1-3.el7.x86_64.rpm &&   wget -c https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-19.03.1-3.el7.x86_64.rpm &&   yum install -y containerd.io-1.2.6-3.3.el7.x86_64.rpm &&   yum install -y docker-ce-19.03.1-3.el7.x86_64.rpm &&   yum install -y docker-ce-cli-19.03.1-3.el7.x86_64.rpm

3. nginx 改用 host 網路模式部署

ports:      - target: 80        published: 80        protocol: tcp        mode: host

另外,改進了部落格系統快取部分的程式碼,解決了新舊版切換時的快取衝突問題。

這次發布如果遇到問題,我們可以快速回退到舊版。

如果在發布過程中出現問題影響您的正常訪問,請您諒解。

——————————————

發布過程記錄

17:40 使用 nginx 轉發,切換了1/5不到的流量就出現了1秒延遲的問題。

18:20 改為 kestrel 以埠映射的方式直接監聽 80 埠,切換了1/3左右的流量,未出現延遲1秒的問題。

18:33 所有流量都已切換,未出現延遲1秒的問題。

以下是發布過程中伺服器同時連接數監控,使用 nginx 轉發時,當同時連接數超過 40K ,所有請求都出現1秒延遲的問題。當改為 kestrel 直接監聽80埠後,即使同時連接數超過 100K ,也沒出現1秒延遲的問題。沒想到1秒延遲竟然是 nginx 的問題(或者是 nginx 對 docker swarm 的支援問題),不是 docker swarm 網路本身的問題。

21:00 今天發布後一直在線上,如果明天上午的訪問高峰能撐住,那就說明發布成功了。

8月8日

9:15 左右,伺服器同時連接數超過 130K ,3台伺服器撐不住,加了1台伺服器。

9:26 左右,memcached 客戶端 socketPool 滿了,將 maxPoolSize 由 500 修改為 800 。

2019-08-08 09:24:30.781 [Error] Pool is full, timeouting. 10.0.78.124:11211

10:15 左右,docker swarm 集群有增加了1台8核16G的伺服器,目前一共5台 worker 節點。

11:05 更新:每台伺服器上部落格應用容器的的 CPU 消耗在 5-6 核,記憶體消耗在 1G 與 1.5G 之間。

11:05 左右,負載沒有下降,我們什麼也沒動,響應速度卻出奇地穩定,並且與訪問低峰時一樣飛快。

13:30 更新:今天上午訪問高峰時單台伺服器同時連接數最高達到21萬(監控數據來自阿里云云監控)。

17:10 更新:今天下午訪問高峰期間,訪問速度很不穩定。我們正在考慮下一步的對策。

17:30 左右,當訪問量回落到一定程度後, 訪問速度恢復正常。