Jexus 網站服務器和 ASP.NET 跨平台開發


微軟的跨平台戰略

微軟在過去的一年多中時間中發生了令整個 IT 行業感到驚嘆的變化。這一切始於 Ballmer 的退位和 Nadella 的決心,更始於早已在微軟各個基層部門蠢蠢欲動的二次創業。

以開發工具團隊來說,他們很早就開源了 ASP.NET MVC 開發框架,並從那以后連續開源了后續全部新的開發框架,例如 Web API 和 SignalR,例如 OWIN 組件 Katana,並且和開源社區如 Mono 保持着良好的互動。

而其他團隊,例如 Hyper-V,則同樣與 Linux 內核社區有積極互動。

image

圖一:微軟 CEO Nadella 先生表示 Microsoft Loves Linux

因此當 Nadella 先生在2014年10月表態 Microsoft Loves Linux 時,長期的微軟觀察家應該並不會表現出太多驚訝,因為這真的只是個水到渠成的過程。

以 ASP.NET 為例,業界的公司早已或多或少的使用了 Linux 或者基於 Linux 平台的解決方案。因此如果微軟提供 ASP.NET 跨平台開發和部署支持,那么此前完全采用 Linux 的公司可以直接在現有平台上部署網站,從而節約購買 Windows 授權的費用。混合使用 Linux 和 Windows 的公司則有機會重新調整平台間的相對規模,達成成本控制目標。

除去公司內部計算平台,在多種主流公有雲平台上,采用 Linux 虛擬機為主的解決方案也非常普遍,成本低廉,同時適合各種級別的公司和個人來部署網站應用。

因此只要微軟 ASP.NET 技術能夠支持跨平台開發部署,那么就能立即進入一個全新的市場領域。

.NET Core 5 和 ASP.NET 5

為了達成跨平台目標,微軟開發工具部門在發布了 .NET 4.5 和 ASP.NET 4.5 之后花了相當長的時間來構架下一代網站開發技術。在這個超過兩年的漫長過程中,以下幾個目標逐漸清晰,

  1. 采用新思路來重新設計框架基礎。這方面向 node.js 學習不少。
  2. 采用全新技術,主要是 Roslyn。
  3. 脫離 .NET Framework 的束縛實現跨平台。

結果就是我們現在已經看到的 ASP.NET 5。

image

圖二:ASP.NET 5

為了使得 ASP.NET 5 運行在新平台上,.NET 團隊也借此機會開發了全新的運行環境,也就是 .NET Core 5。

.NET Core 5 完全開源,整個開發過程和全部代碼都可以在 GitHub 上面找到。它的 API 參考資料可以在下面找到,

https://dotnet.github.io/api/index.html

一個明顯的變化是很多我們熟悉的 .NET Framework 類型被刪除了,例如 System.Security.Cryptography 下面的一些類型,System.Net 下面的 UdpClient 類型和 Socket 類型的同步方法。

在 VS 2015 中新建一個 .NET Core 函數庫工程的時候,也有很大變化。首先就是工程類型變成了 .xproj,依賴項管理方式改為通過 project.json 文件指定,而編譯結果也換成了 NuGet 包。

ASP.NET 5 方面同樣如此,完全開源之外也帶來了很大的變化。System.Web 這個古老的部分和 WebForms 一並被刪除。今后我們就不再通過 HttpContext 類型訪問運行時的各種信息,也不再通過 web.config 文件中的 <system.web> 標簽來管理配置項目了。MVC/Web API/SignalR 三個原本獨立的框架得以統一為一個開發模型(例如Web API 中的 ApiController 類型現在就和 MVC 的 Controller 類型合二為一)。

在最終應用的部署上,假如 ASP.NET 應用部署在 IIS 和 Windows 上,那么需要額外安裝 HttpPlatformHandler。在 Linux 平台上,則首推 nginx 和 Kestrel 搭配的部署方式。

Picture1

圖三:微軟的應用遷移路徑

由此我們可以看出微軟提供的遷移方式有一個從 ASP.NET 4 到 ASP.NET 5 的遷移步驟。這一個看似簡單的步驟其實並不簡單。代碼的遷移和修改暫時還需要很多手工步驟,部署方式的變化要求 Linux 和 nginx 知識的學習,而之前開發者學習多年的 Windows 和 IIS 知識似乎都過時了。

有沒有更加簡單的方式讓 ASP.NET 應用登陸 Linux 平台呢?

Mono 和 Jexus 網站服務器

Mono 這個開源項目其實一直伴隨着 .NET Framework 成長。Miguel de Icaza 先生早年一直領導着 Gnome 這個開源桌面系統的開發。在2000年微軟公布了 C# 語言和 .NET Framework 之后,他非常感興趣並且希望能把這些新技術帶到 Linux 平台,於是一手建立了 Mono 這個項目和社區。現在 Mono 的穩定版本是 4.2.1,得到了 Xamarin 和微軟兩家公司的共同支持。

和 .NET Core 5 另起爐灶相比,Mono 處處都保持着和 .NET Framework 的兼容性。在微軟去年11月完全基於 MIT 協議開放 .NET Framework 參考代碼后,Mono 立即開始集成微軟的代碼(迄今完成超過600多個類型),非常明顯的改善了兼容性。不過 Mono 保持了自己獨立開發的 CLR 實現和 C# 編譯器,有自己的 AOT 運行環境和 C# Shell。在應用程序框架方面,Mono 提供 WinForms 和 WebForms 支持,也包含了微軟早已開源的 MVC 5、Web API 2 和 SignalR 2。

在 Mono 這個穩固的基礎之上,中國四川的一位微軟 C# MVP 劉冰歷時多年設計了一款免費的網站服務器,取名 Jexus,最新穩定版本是5.8.0。比較有意思的是,它基本是用 C# 開發,直接通過 Linux 內核的 epoll 機制來處理網站請求,而不是采用 libuv 之類的封裝庫,所以提供了高性能保證。作為一款跨平台軟件,它支持各種主流 Linux 發布版本和 FreeBSD。

視頻一:Ubuntu Server 上安裝 Jexus

從架構等技術特點來看,Jexus 也可以媲美 IIS 等商用服務器。比如它提供了多站點支持,擁有應用程序池來調度管理工作進程,具有良好的穩定性和容錯能力。又比如它支持 HTTPS 和 WebSockets,支持 FastCGI 協議和 OWIN 標准。它不僅可以作為一款應用服務器,來托管各種 ASP.NET 4 應用(WebForms、MVC、Web API、SignalR),同樣也可以作為一般服務器使用,包含 URL 重寫、反向代理、壓縮傳輸等基礎功能和 SQL 注入預防等多項內置安全防護。

image

圖四:Mono 和 Jexus 提供的簡便遷移路徑

因為 Jexus 提供了如果便利的遷移方法,所以國內外一些網站已經采用它來作為服務器。在 Jexus 官方網站上有相關的案例可供參考。

視頻二:Visual Studio 2013 導出 MVC 5 網站

視頻三:Jexus 上架設 MVC 5 網站

Jexus Manager

為了進一步簡化 Jexus 的管理,方便熟悉 IIS 的開發者遷移,我在2014-2015這段時間開發了一個可視化的管理工具,名叫 Jexus Manager。

image

圖五:Jexus Manager 用戶界面

這是一個可以跨平台運行的程序,支持 Jexus,IIS 和 IIS Express 三種服務器的管理,操作方式完全和微軟的 IIS Manager 一致。

從技術細節來看,它也和微軟 IIS 高度相似,比如提供了 Microsoft.Web.Administration 和 Microsoft.Web.Management 兩個 API 接口,實現配置文件的讀寫和用戶界面的擴展。

Jexus 的未來藍圖

在未來的版本中,Jexus 服務器可能會加入下面的功能:

  • 完美支持 web.config 中的 <system.webServer>
  • 提供 Microsoft.Web.Administration API 給本機其他程序
  • 提供 appcmd 命令行管理工具以達到本機和遠程管理
  • 完整的 ASP.NET 5 支持!
  • 提供更多配置選項
  • 提供基於 REST 的遠程管理 API
  • 提供網頁版的管理工具
  • 可靠的商業技術支持服務

而 Jexus Manager 管理工具則會在2016年分階段完全開源。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM