今天下午我們將生產環境中一個單台服務器 QPS(每秒請求數)在100左右的 ASP.NET Core 站點部署到了 Linux 服務器上,這是我們解決了在 .NET Core 上使用 EnyimMemcached(memcached客戶端)的問題之后,.NET 跨平台之旅邁出的重要一步。這個 ASP.NET Core 站點,既用了緩存,也有數據庫訪問操作,是一個典型的 Web 站點,如果它能持續穩定運行,將為我們全站遷移至 ASP.NET Core + Linux 掃清障礙。
這個 ASP.NET Core 站點用的 memcached 客戶端是我們在 nuget.org 上最新發布的 EnyimMemcachedCore;
public void ConfigureServices(IServiceCollection services) { services.AddEnyimMemcached(options => options.AddServer("memcached", 11211)); }
.NET Core 用的是最新的 .NET Core 1.0.1;以 self-contained 方式部署,用 dotnet publish 命令發布出來的文件中包含可以直接在 Linux 上運行的可執行文件,因此服務器上無需另外安裝 .NET Core 運行環境,用 scp 命令將 dotnuet publish 命令生成的文件上傳到部署服務器即可。
"frameworks": { "netcoreapp1.0.1": { "imports": [ "dnxcore50", "portable-net45+win8" ], "dependencies": { "Microsoft.NETCore.App": "1.0.1" } } }
最前端用的是阿里雲負載均衡,后端 2 台 Linux 服務器的配置是 1 核 CPU 與 1G 內存,Linux 發行版用的是 Ubuntu 14.04,使用 supervisor 以服務的方式運行站點。Web 服務器用的是 Kestrel,Kestrel 目前最大的問題是不支持主機名綁定,同一台服務器上的不同站點必須綁定不同的端口,這給部署帶來了麻煩。數據庫服務器用的是阿里雲 RDS(SQL Server 2008 R2)。Memcached 緩存服務器用的是阿里雲雲數據庫 Memcache 版。
Now listening on: http://*:8003 Application started. Press Ctrl+C to shut down.
接下來,我們將一邊觀察已經運行在 ASP.NET Core + Linux 上的站點的運行情況,一邊將更多項目遷移至 ASP.NET Core 。