Powered by .NET Core 進展:驗證高併發效能問題嫌疑犯 docker swarm

部落格園團隊 發表於2019-08-11

相關博文:

抱歉,.NET Core 版部落格系統(部落格後臺除外)的釋出給大家帶來麻煩了,我們正在一邊忙著修各種 bug ,一邊排查訪問高峰高併發效能問題。

對於釋出後遇到的高併發效能問題,我們一點都沒去懷疑 .net core ,我們懷疑的是 docker swarm ,懷疑在高併發下 docker swarm 網路效能急劇下降,而且極不穩定。

對比新舊版部落格系統所消耗的伺服器資源,差距之大讓人乍舌。同樣的併發,之前基於 .net framework 的舊版部落格系統用 6臺4核8G 的阿里雲 windows 伺服器就能撐住,而現在基於 docker swarm +  .net core 的新版部落格系統用 6臺8核16G 的阿里雲 centos 伺服器都撐不住。

為了驗證我們對罪魁禍首 docker swarm 的懷疑,我們今天已經將 .net core 版部落格系統改用 docker-compose 部署:

version: '3.7'
services:
  web:
    image: blog-web
    restart: always
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: '4'
          memory: 7G
        reservations:
          memory: 500M
    ports:
      - 80:80
    working_dir: /app
    environment: 
      - TZ=Asia/Shanghai
      - COMPlus_GCHeapHardLimit=1C0000000    
    command: bash -c 'sh run.sh'
docker-compose --compatibility up -d 

現在已經發布上線,如果真的是 docker swarm 的問題,明天上午的訪問高峰將驗證出結果。

目前用了3臺4核8G的伺服器,明天根據負載情況再增加伺服器。

【更新】

8:40 左右,響應速度變慢,加了1臺伺服器,響應速度立馬恢復。(之前使用 .net framework + windows 也是在這個時間點加伺服器)

9:00 左右,又加了1臺伺服器,現在是5臺4核8G的伺服器。

9:35 左右,又加了1臺伺服器,現在是6臺4核8G的伺服器。

10:00 左右,又加了1臺伺服器,現在是7臺4核8G的伺服器。

13:10 左右,退回到 .net framework + windows 部落格系統,.net core 部落格系統待調整部署與修復 bug 後再上線。

上午使用 docker-compose 部署時,部落格系統所依賴的後端服務部署在另外一個 docker swarm 叢集上,結果這個叢集的路由轉發出現了問題。使用 docker-compose 部署還需要將部落格系統所依賴的服務進行 docker-compose 部署。

從上午的訪問高峰的情況看,docker-compose 部署時的資源瓶頸在 CPU ,出現響應速度慢時加伺服器就能解決(這是正常情況),沒有出現使用 docker swarm 部署時那種響應速度極不穩定、加伺服器也無補的情況。

docker-compose 部署是否能夠在訪問高峰長時間持續穩定執行以及需要多少臺伺服器?待進一步驗證。


相關文章

Docker

Docker 常用命令

學習完整課程請移步 網際網路 Java 全棧工程師檢視 Docker 版本docker version從 Docker 檔案構建 Docker 映像docker build -t image-name
.Net

做夢也沒有想到:Windows 上的 .NET Core 版部落格系統表現更糟糕

昨天晚上 18:15 左右我們釋出了跑在 Windows 上 .NET Core 部落格系統,本想與 .NET Framework 版進行同“窗”的較量,結果剛釋出上線就發現 CPU 佔用異常高,釋出
.Net

同“窗”的較量:部署在 Windows 上的 .NET Core 版部落格站點發布上線(已暫時下線)

為了驗證 docker swarm 在高併發下的效能問題,週一我們釋出了使用 docker-compose 部署的 .net core 版部落格站點(博文連結),但由於有1行程式碼請求後端 web a
Linux|.Net|macOS

如何在 Linux/Windows/MacOS 上使用 .NET 進行開發

瞭解 .NET 開發平臺啟動和執行的基礎知識。.NET 框架由 Microsoft 於 2000 年釋出。該平臺的開源實現 Mono 在 21 世紀初成為了爭議的焦點,因為微軟擁有 .NET 技術的多
Docker

docker刪除所有容器和映象命令

刪除容器需要先停止後remove:# docker stop $(docker ps -a -q)a679aa25d419d6f061600581a1fc78352ff1fdb3718b8ad1348
.Net

.netcore持續整合測試篇之Xunit結合netcore記憶體伺服器傳送post請求

系列目錄.net core整合測試之Post請求Web專案中,很多與使用者資料互動的請求都是Post請求,想必大家都用過HttpClient構造過post請求,這裡並不對HttpClient做詳細介紹
Docker

docker 安裝

安裝 Dockeryum -y install docker啟動 Docker 後臺服務service docker start安裝mongodbdocker pull mongodocker ru
C#|.Net

.NETCore C# 中級篇2-4 一文帶你完全弄懂正規表示式

.NETCoreCSharp 中級篇2-4本節內容為正規表示式的使用簡介有的時候,你是否有過這種需求:判斷一個Ip地址、郵箱、密碼規則是否合法。如果讓你使用if一類的傳統方法進行處理,你肯定會被逼瘋的
Docker

《Docker Deep Dive》閱讀筆記(一)

安裝Linux系統下安裝wget -qO- https://get.docker.com/ | sh如果需要使用非root使用者管理docker(最佳實踐),需要新增使用者到docker組:sudo
.Net

使用CefSharp在.NET中嵌入Google kernel

使用CefSharp可以在.NET輕鬆的嵌入Html,不用擔心WPF與Winform 控制元件與它的相容性問題,CefSharp大部分的程式碼是C#,它可以在VB或者其他.NET平臺語言中來進行使用。
Redis|Docker

docker 實現 Redis 的哨兵機制

redis 哨兵的由來redis 的主從都需要人工來切換,如果生成環境中 redis 主伺服器 掛掉了,無法提供服務。 這時候需要人工自動把從伺服器設定 主伺服器; 這個方法就會存在一定弊端,導致無法
Docker

Docker Swarm 叢集搭建實踐

說明Docker Swarm 是 Docker 的一個原生的叢集管理工具,可以把多個Docker主機(節點)組織成一個叢集,使得容器可以組成跨主機的子網網路,此外,Docker Swarm 還內建了部
Docker

Docker容器系列文章|這20個Docker Command,有幾個是你會的?

在這之前呢,也寫過兩篇關於Docker基礎入門類的文章Docker容器技術入門(一)Docker容器技術入門(二)很多人都感覺這文章這麼簡單、這麼基礎,可是別忘記了“萬丈高樓平地起”,如果少了這個平地
Docker

Docker 基礎學習

可以理解為全新的虛擬機器容器環境: CentOS 7.x首先更新yum: sudo yum -y update然後執行安裝命令:sudo yum install -y dockerDocker預設位置
.Net

峰迴路轉:去掉 DbContextPool 後 Windows 上的 .NET Core 版部落格表現出色

今天早上,我們修改了部落格程式中的1行程式碼,將 services.AddDbContextPool 改為 services.AddDbContext ,去掉 DbContextPool 。然後奇蹟出
Docker

修改 Docker 容器對映的埠

前言就執行中的容器而言,對於資源性的修改可以直接使用 docker update 進行改動,但是對映的埠、掛載等不可通過指令修改,雖然可以刪除容器再新建一個新的容器,除了此方案還可以修改容器的執行時配
.Net

.netcore持續整合測試篇之測試方法改造

系列目錄通過前面兩節講解,我們的測試類中已經有兩個測試方法了,總體上如下 public class mvc20 { private readonly HttpClient _cli
.Net

http://ppa.launchpad.net 太慢?試下這個

最近換了新電腦 但是家裡網不好 裝PHP擴充套件時總是提示安裝失敗,網路錯誤。而且絕大部分是發生在http://ppa.launchpad.net這個網址。解決方案:sudo apt-get inst
Spring|.Net

Spring.Net 依賴注入

一、Spring.Net概念  程式設計模型(Ioc,DI方式)IoC:控制反轉 原來建立物件的權利由程式來控制就是new例項,IoC就是改由容器來建立,相當於一個工廠, DI:依賴注入 沒有IoC就
Redis|Docker

docker 配置 Redis 主從

配置主從有三種方式(1)配置檔案 在從伺服器的配置檔案中加入:slaveof <masterip> <masterport> (2)啟動命令 redis-server啟動命令後