微軟的 Web 伺服器為何能屹立不倒?

因為在看《大教堂與集市》,看到書中介紹Apache的崛起,2000年11月,Apache及其變種取得了60%的市場份額。書中提供了一個URL: Web Server Survey

點擊過去一看,卻發現了一個奇怪的現象:微軟的Web伺服器,有兩次重要的衰落與崛起期,兩次都與Apache的上升/衰落期一致。即使是Nginx的興起,也沒有能夠阻止微軟Web伺服器的再次興起,這背後有什麼原因嗎?

抱歉,因為看文章不夠細緻,發現還需要補充更多的資料:

在最新的這篇文章中 June 2014 Web Server Survey 有更多難解之謎。

其中的一段文字,也很值得玩味:

However, Apache continues to dominate in terms of active sites, i.e. sites which are actively managed by humans rather than being automatically generated for use in activities such as link farming and domain squatting. Under this metric, Apache"s losses were less significant, still leaving it with more than half of the market share, and more than 36 percentage points ahead of its closest competitor, nginx.

----------------上面這段E文還真不容易看懂-----------------翻譯下by@Baidu

然而,Apache繼續活躍在網站佔主導地位,即網站是人類積極管理而不是自動生成的活動中使用的如鏈接養殖和域名搶注。根據這個指標,Apache的損失是不重要的,還是讓它超過一半的市場份額,超過36個百分點,比其最接近的競爭對手,Nginx.


先說web伺服器性能,iis的網路通訊部分是在內核層由http.sys實現的,採用最高性能的iocp模型,而且是微軟的戰略產品。盲目的崇拜nginx所謂的性能怪獸,那是病,得治。iis也有很成熟的集群機制,並且是與操作系統緊密集成的,因為操作系統和web伺服器是出自同門,微軟可以把它做得性能足夠好。

在windows上面跑的web伺服器,iis說第一,沒人敢說第二。

其次,操作系統本身,幾十年了,很多人還停留在大型用unix,pc用windows。這種慣性思維已經太out了。現代操作系統的理論和各種不同實現,殊途同歸,linux,unix,和windows在內核上都已做到極致,後面拼的都是生態,不存在windows性能不行的問題。

其三,就是各位談到的簡單性與維護性的問題。我同意。

最後,由於微軟是閉源,而linux是開源時間,很自然擁有強大技術實力的互聯網公司,希望能命運自己掌控自己,自己研究linux內核源碼,nginx,apache源碼,甚至根據自己的需求進行定製,使之達到最優。是非常合理的。

用戶類型不同,各取所需,反問:為什麼iis就必須是不行的呢?


很簡單,有商業支持的成熟產品里最便宜的就是微軟,干甲方項目經理後才體會到微軟業界真良心~ 特別是算上操作系統、資料庫一條龍下來成本拉的更低了,維護也很省心。

什麼?你說apache跟tomcat?我就呵呵了,等安全team漏洞掃描掃出高危漏洞要求限期整改,你能做的就是:

1.有補丁,提心弔膽的自己幹活升級,沒有商業支持,萬一升級失敗影響業務連續性等著挨抽吧

2.我們是開源社區,你不付錢我們沒有義務給你發布補丁…

以上第二點是我們上半年漏掃整改遇到的真實情況,銀行科技部被做過漏掃的兄弟們應該都有體會。

做運行維護要的是100%的保障能力~ 我再舉兩種很常見的情況:

1.國內安全機構認定高危漏洞,國外開源社區觀點不同,不給補丁。

2. 必須跨大版本升級才能解決漏洞,商業軟體不存在這種情況但是開源很多見。跨大版本升級對於運維來講是last choice,沒逼到最後誰也不願意做,而且另外一個實際的栗子是我們升級了apache解決了一個中危漏洞,但是又帶來了幾個高危漏洞還沒補丁,最後付出了很大的精力和人力成本才降級回去的。

至於weblogic、websphere那6位數的報價、還是按cpu核數算的咱就不提了…


不邀自答。

部分反對排名第一的答案:確實有很多人不熟悉Linux平台以及相關的Web伺服器技術(apache,nginx,lighttpd等),這是造成IIS市場佔有率高的非常重要的原因但不是全部。

作為一個被各平台都深度蹂躪過的苦逼,這裡要為IIS說句公道話:成功的產品不是偶然。

易用性

對比其他平台只能通過配置文件+查手冊的方式來管理你的Web服務,IIS同時支持本機圖形化管理、遠程圖形化管理、通過web.config配置文件進行管理,操作上的便捷程度,絕對不是開源產品能夠媲美的。

同時,微軟專賣設計了Microsoft Web Platform工具,用圖形化嚮導的方式幫助你部署應用程序和組件。

功能和性能

Apache和nginx相比,前者功能豐富,後者性能強勁;而IIS是兩者兼備的典範。

很多人(特別是開源社區或者是盲目崇拜開源的人)對微軟產品有著刻板印象,認為他們必然是臃腫、緩慢的,但是如果你的英語不差的話可以看一下這篇Benchmark:

What is the Fastest Webserver?

IIS的性能要比所有的開源解決方案都好……

====題外話開始====

很多人對Linux Kernel很崇拜,覺得epoll牛逼,覺得tickless scheduler牛逼

但是你要知道,和epoll具有對應關係的技術iocp可是從nt3.5內核時代就有的啊

順便吐槽一下linux下的驅動程序。你造嗎,linux下的驅動程序大多數是以源碼形式發布的,有時內核一個小版本的升級就會導致原來的驅動程序不可用,必須使用內核的源碼重新編譯。驅動程序的二進位兼容性在Linux上基本就是個笑話。對比一下Windows,都Windows 8.1了,還能用很多xp時代的驅動程序,這是多麼業界良心的事情啊!!

===引用評論中 @alex chen 的文字:===

iocp 模型實際上要比 epoll 更」現代「。iocp 是目前成熟的 io 模型里最接近非同步模型的,而 epoll 還是只同步模型。一個顯而易見的性能差距,如 epoll 模型處理數據時免不了更多的內核態/用戶態切換,降低了性能。

===引用結束===

====題外話結束====

服務和支持

眾所周知,最為開源軟體,除非我們付錢給指定的公司(有些技術付錢都找不到技術支持啊),我們是完全沒有技術支持的。基本上我們得依靠Google大法,然後再配合Stackoverflow上的問答,才能把環境搭建起來。然而,悲催的是,再不同的Linux髮型版上搭建對應的伺服器環境也可能是完全不同的兩件事情。

反觀微軟,如果您是花了軟妹幣買的正版的Windows,是可以直接打電話給微軟要求技術支持的,有一幫微軟亞太技術支持中心的苦逼高薪工程師會為你服務到底,解決問題的。本身配置就很簡單了,同時還有那麼好的技術支持,簡直是喪xi心wen病le狂jian啊!

安全性

微軟每個月的第二個周二是Patch Tuesday,會固定的發布系統補丁,只要你伺服器配置的合理(比如配置成每天夜裡3點自動下載安裝補丁(通常是默認配置)),你的伺服器永遠是安裝了最新安全補丁的系統,受到0Day漏洞攻擊的概率,也遠比開源伺服器的低。

而微軟的應急響應機制也是非常可靠有效的,當出現緊急漏洞時,通常1~3個工作日內就完成補丁的製作和推送了,這是開源軟體所無法做到的。

想想OpenSSL的漏洞吧,想想Python、PHP、ruby的hash碰撞漏洞吧,開源社區花了多久才完成的修復和新版本的發布;由於Linux伺服器通常沒有或沒有啟用自動更新機制,你的伺服器得到這些更新的時間往往是1周之後了,黑客該黑的早黑完了。

產品的支持周期,微軟更是完勝所有競爭對手,你去看看有哪個開源系統承諾,單一版本的操作系統給予15年以上的技術支持。微軟就是這麼支持Windows XP的啊。

成本

這是老生常談的問題了。成本不能光看軟體授權費用,同時還要考慮到你後期維護的成本。你去對比一下微軟的Windows Server的價格以及包含的服務,以及Redhat Enterprise Linux的價格,就會明白,微軟的價格真的很便宜啊,

====結論分割線====

勿存偏見、平心而論:微軟的IIS確實是非常優秀且有競爭力的產品。


在SP500和中小企業都工作過,這些企業所有的軟體都是微軟的Stack,所以沒辦法,必須用IIS

我問過幾個老闆為什麼不用linux,答案都是:「你走了誰會用?」


你覺得微軟知道了和nignx的差距的話。她不會改進嗎?你覺得iis會停滯不前不學習借鑒嗎?你覺得微軟的技術就真的如linux菜鳥門所說的那樣嗎?

世界賣那麼簡單,互相競爭,又互相汲取有價值的東西然後讓自己成長的更優秀。微軟有拔尖的it人才,你考慮的他們都看到了。

存在就有存在的合理性,一個東西存在,說明有其不可取代的優勢價值。

Linux社區保持驕傲的同時,不要忘記虛心的技術心態,沒有什麼絕對的優勢,在時間的長河裡,都在蛻變!


我認為微軟Azure雲服務的崛起,是一個很重要的原因。隨著Azure雲服務的推廣,基於IIS的網站只會越來越多。所以IIS不但不會倒,反而佔有率會越來越高。

技術角度來講,IIS從性能,穩定性到擴展性,即使不說比Apache更強,至少也不比Apache差。在我看來,Apache對IIS的唯一優勢,是免費。但如果算上維護和運營成本的話,Apache也不見的便宜。舉個例子,Stack Overflow這麼大的站,從OS,到資料庫,到IIS,到編程工具,全部用的是微軟最新的產品,Which tools and technologies are used to build the Stack Exchange Network?。想像一下,這要是個基於Apache的站,從Linux內核,到MySQL,Apache,甚至到PHP,這是說升級就能升級的嗎?

順便說一句,題目里這個Web Server Survey,只是針對internet上的網站,並沒有統計企業內部的intranet。

=========== 本想放在評論里的,可是太長了... =================

首先,討論微軟的服務響應速度沒有意義,那是明文寫在服務協議里的,微軟做不到,客戶可以要求賠錢。Incident Severity Table 這個問題里,也有人談到了對微軟服務的體驗 京東今天還在用 .NET 架構的原因是什麼?

其次,用開源方案的人多,正說明了多數人的觀念有問題,要麼根本不懂,要麼人云亦云。有人舉了BAT,知乎,豆瓣等等網站,那我們就拿這些網站和StackOverflow比比看。

StackOverflow在Alexa上的Global Rank是53,BAT比它高,而豆瓣,知乎等等都比它低很多。StackExchange的團隊一共100多人,其中大部分還是市場和銷售人員,Our Team - Stack Exchange,我太喜歡這個頁面了,公司每個人的大頭像都可以放上去,而不只是老闆的,這才是「小而美」。這樣的規模,別說和BAT比了,比起豆瓣和知乎來,也來得小吧?StackOverflow的技術架構在最上面的一個鏈接里給出來了,這個架構對這麼大一個站來說,我認為已經相當精簡高效了。BAT,知乎,豆瓣等等的具體架構我沒找到,有的文章里泛泛談到的,不過是一堆技術和框架的羅列,具體到用了幾台Web,幾台Application,幾台Database,它們是怎麼架構的,就不肯講了。

StackOverflow起步的時候,加入了微軟的BizSpark計劃,現在已經畢業,他們在Stack Overflow and BizSpark ? Blog 里也談到了,他們認為build cool stuff,比到底用哪個牌子的螺絲刀來build,重要多了。這個計劃允許參加者三年內免費是用微軟的所有產品,三年之後才開始收授權費。如果你的項目三年之後還賺不到軟體授權的錢,我看也沒有什麼做下去的必要了。

這麼對比下來,開源方案出色在哪裡呢?盲目追求完全可控,對你的項目究竟又有什麼好處呢?


要看就看有流量規模的網站,那些小網站用什麼都差不多,沒什麼參考價值.
2017年4月份統計,在排名【前一百萬最繁忙的站點】中:

https://news.netcraft.com/archives/2017/04/21/april-2017-web-server-survey.html
https://news.netcraft.com/wp-content/uploads/2017/03/wpid-wss-top-1m-share1.png

Apache為41.06%,同比下降0.20
Nginx為28.50%,同比增長0.22
IIS為10.12%,同比下降0.06

可見Nginx正在慢慢蠶食Apache和IIS的份額.
國內阿里的Tengine本質也是Nginx,所以Other份額中還有不少Nginx的修改版.


Tomcat和IIS的問題正好是目前我所在公司的現實情況,用公司的情況舉個例子。

一個公司的網站如果每天只有100多人訪問並且整個公司的網站完全由你來開發,同時你又沒有一個穩定的收入來源,這個時候無疑用免費的Tomcat是最好的選擇,不僅成本低(電費...),而且開發擴展都非常方便(Spring和http://VS.net相比)。

如果很幸運的你的網站內容非常吸引人,每日訪問量翻倍增長,在搜索引擎中甚至可以爬到你網站的數據了,甚至有一些商家打算在你的網站上投放廣告了,這時候你的一台tomcat伺服器肯定有些吃力了,但是由於收入不多,你還是捨不得讓MS瓜分走你的利潤,所以你決定挖掘tomcat的潛能,部署集群,問題彷彿被解決了。

隨著你的用戶群不斷增長,tomcat集群的問題又出現了,由於你將它們部署在了普通pc機上,穩定性很難保證,開始的時候掛掉幾台機器可能還沒問題,但隨著用戶規模的暴漲,你就要處理由於集群的宕機帶來的雪崩問題,並且不勝其煩,幾乎公司所有的技術人員都在維護伺服器,根本完成不了新項目的開發任務,這個時候你就得考慮要不要找人承擔這個風險,於是你決定花一部分收入去購買IIS和VS,這能很好的把你從處理伺服器負載的問題中解放出來,有問題,找微軟!

最終,你的企業成為互聯網領域的巨頭,每日都有幾個億的PV,這時候你會發現,無休止的增加IIS伺服器似乎也解決不了所有問題,過大的集群不僅會增加硬體成本,而且帶來的性能提升微乎其微,這個時候有人對你說,有一種神器叫做nginx...

以上所說只是個例子,各種伺服器都有它的應用場景,這也跟各個企業起家時候的基因有關,選擇哪種伺服器都是企業經過權衡各個方面的成本的結果。從這點考慮,IIS的優缺點很明顯,壞了有人管,但性能一般。

正式因為現在市場上伺服器類型很多,所以出現了類似CDN這樣的平台,一來為伺服器減輕壓力,二來還可以屏蔽各種不同伺服器的產生的差異。例如我公司目前就在用IIS經營著一個日均3億PV的網站,並不是因為IIS有多好,只是因為當初他們起家的時候用的IIS和http://VS.net,為了維護這個架構,公司不惜重金購買CDN和搭建各種緩存平台,目前還可以輕鬆維持,不過我預計我們早晚還是會投入nginx的懷抱。

/*--------------------------------------------------7.12更新--------------------------------------------------------------------*/

看來大家對俺們公司網站的細節還是很感興趣啊……不過我並不打算透露技術細節,一是沒必要:各家網站都有自己的技術基因,公開出來無疑會引來唇槍舌戰;第二:我確實也沒了解那麼深。

我想題主的問題主要是不明白IIS為何有著這麼高的使用率,我覺得我的回答的重點是各種伺服器都有使用它的場景,沒有萬金油的選擇,期間只是虛擬了一個場景,並不是說俺們公司就是這麼個線路發展的(其實我也不知道最早他們是怎麼搞的……),希望大家不要再就一些技術細節問題來跟我討論了,我真的沒那麼高水平把所有架構問題都搞清楚,忘知友見諒……


IIS 和 Apache 的關係就像佳能和尼康,你讓門外漢挑一個,會選 nginx 這種知名度跟賓得相機差不多的怪物?

所以這裡存在著一定的認知偏差。

知乎里 IT 人員的主流是靠伺服器吃飯的互聯網企業精英們,而非傳統企業里把 IT 視作與市場運營渠道營銷平級的管理層。 管理層還要關心報表業務,會有多 「care」 你的伺服器名字叫什麼?你確定 Apache 在人家眼裡不是直升機?Server 2003 和 XP 在人家眼裡除了默認主題丑了還有差別?

是啊,大可以理解為他們沒有 「taste」.

在選 Server 的決策者沒所謂 「taste」 的前提下,靠什麼決定?不外乎品牌、價格、服務,品牌不必說,企業不外乎自己養運維或者找紅帽,未必就比 M$ 的售後服務便宜吧?

你說 tornado/node.js/nginx 多好多好,外行會怎麼覺得?

應該就像這樣:

「賓得這塊 cmos 動態範圍比佳能 40nm 製程的底大了將近 1ev,色深按 dxomark 指標多出了將近 2bit,並且無低通濾鏡,可通過 cmos 抖動抑制摩爾紋 balabala……」

「我聽人家都說佳能不錯。」


前面的答案都很厲害,我續兩句吧

第一就是很多提到的,非IT技術企業一般直接上微軟的,覺得名氣大,比如各種國企和不搞互聯網的500強。這是高端的。

第二就是微軟是提供一條龍服務的,iis+mssql+dynamics之類的網站,省心了。這也是高端的。

第三就是維護,像銀行用微軟一條龍,出了問題根本不指望自己課室里的醬油運維,直接ticket 0等微軟解決。當然像紅帽這樣的小夥伴也有這服務的。但是如果資料庫一家,伺服器一家,web一家,其他的又好幾家,該找哪家的維護服務呢?

第四就是非常簡單的一條了,apach也好,nginx也好,與windows系列差異太大,不少敲命令行的。對於大多數一個人全包的個人站長,離開滑鼠基本就廢了,懂技術更是天方夜譚。所以大量低端用戶都在用盜版win svr系列。

另外據說最頂級的核心業務很多還是unix結構下的,無論你說unix技術好是真正的面向網路的操作系統還是說積重難返基本換不了winsvr了也好。反正最後拍板的是人類,大爺就是不換了。

其實技術上我覺得微軟還是難以和廣大開源世界戰鬥的。但最重要的兩點是,第一微軟節約了「尋覓」的時間,成套的解決方案就在那,動動滑鼠就安裝了。省去了非it人員大量的研究技術方案的時間和技術門檻。第二就是背黑鍋,只要用微軟這樣服務商的產品,出了問題只要不是人為失誤,有什麼損失微軟都能抗,甚至說人為失誤給足了錢微軟也會幫你擦屁股,紅帽家能做起來同理。

說到底部署iis的絕大多數都是為了掙錢,只要微軟能幫企業主節省下來時間賺10塊,給微軟2~3塊也無妨阿。

最後,我還是不喜歡微軟的東西,這是一種潔癖了吧。


答案略有修改

----

除了程序員圈子,IT的外圍從業人員對微軟品牌的認可度是非常高的。微軟在他們心中的形象就是「民用級最知名的一攬子軟體系統提供商」,很符合中小微企業/機構用戶的心理期待

尤其的,當領導要求有技術支持保證的時候,中小微企業的非程序員IT主管基本上都不考慮開源軟體了,因為採用微軟平台+找個乙方二次開發看起來是更保險的組合。那麼,要不要採用IBM和Oracle的平台呢,一般他們也不考慮。因為「中小企業用微軟,大款企業用IBM/Oracle」的刻板印象在人民群眾心中也是很根深蒂固的


微軟出售的不僅僅是軟體licence,還有售後服務licence。

對很多公司來說,我要的是穩定,出問題要有人解決!


有許多非互聯網企業,甚至非it企業,他們內部需要用到各種mis系統,比如erp神馬的。這些系統的開發者,有的就是專門做類似解決方案的公司,有的就是這些公司內部的it部門。他們有幾個特性:

1.能力配置是技術加業務,也就是說,人家不是一個勁兒玩技術的,人家還要理解具體行業的業務流程,因此,他們會願意選擇開發和維護上更友好的解決方案。

2.沒有太大性能壓力。這個好理解。數據量在哪兒擺著呢。

3.ha要求低。down了就重啟好了,反正影響不大,數據保證好就行。據我不客觀不中立不第三方的觀察,很多類似的系統,沒有做讀寫分離,不用任何內存緩存,不需要集群。

4.沒有特別專業的運維團隊。這個也好理解,運維壓力也不大。

5.不需要大量硬體和軟體。一個伺服器上跑好幾個應用多的是。資料庫系統也是多系統公用,伺服器都是一個的也有。

綜上,他們需要開發快,解決方案最好現成,幾乎不用在集群,雲,緩存,資料庫上做任何為了運維或性能的定製開發,不在乎花錢,因為只用買一套或者幾套,界面友好對技術要求盡量少(不一定是低)。

還有一個補充,出了事有人兜底(售後,責任)。這樣的話,微軟(類似的,甲骨文,db2等等)是最符合要求的。


題主只貼了佔有率,沒有貼總量。我收集了從200808-201406月 apache 和MS 的裝機量。可以說明點問題:新增的裝機量基本都被ms吃了。 而apache裝機量基本穩定

我覺得這些年信息化普及,影響力越來越大,越來越多的非IT行業開始有建站需求。但是他們缺少技術人員,apache技術門檻太高,所以只能選擇ms了。

==============更新圖==============

誰來講講2013年後MS發布了什麼產品,或者發生了什麼事,讓IIS有這麼大的 增長


其實很簡單,兩個字:成本

Web伺服器的主要用戶是中小企業,包括為中小企業服務的大量VPS服務商,而非廣大互聯網從業者熟悉的高大上的互聯網企業。

對中小企業而言,他們的Web網站或者是櫥窗式展示型或者是企業OA或者是售前售後客服平台,訪問量極其有限,很少量甚至沒有IT support人員,很多只是依賴他們的系統提供商有限的服務,甚至自建成以後從不維護。

所以對這些企業而言,性能、技術架構都是瞎扯淡的東西,運維成本才是最大的成本。

OS?用VPS的壓根兒不關心什麼系統;託管主機的一套Windows Server才花幾個錢?隨便找個計算機愛好者員工就有網管了,你讓他們專門雇個linux管理員?

WebSie amp;應用?大把小公司提供全套基於Windows的解決方案,深圳華強北網站論斤賣。Java?沒問題,for Windows,MySql?OK,for Windows。

所以IIS最強大之處根本不是什麼性能什麼支持,而是…隨便一個計算機愛好者花幾天時間就能成為一個合格的企業網站網管,極低的學習成本意味著極低的運維成本。

如果你說nginx也有for Windows啊lighttpd也有for Windows啊!計算機愛好者會說這他媽是啥那他媽又是啥?

就醬。


這是因為Windows屹立不倒。


我從圖表上得出結論就是大部分人只考慮apache和iis兩種選則,非A即B

類似的情況還有移動用戶常常會轉聯通,聯通用戶經常會轉移動,很少有人最後跑到電信去了

一入電信深似海,從此手機不好買

電信用戶留

順便求輪子爺 @vczh 不要只贊同別人,順便借題簡評下apache和iis吧!知乎上這個話題冷得可以


我們部門主要用.net開發,除了人力成本以外,要花錢的估計只有阿里雲了,微軟的全套軟體全是盜版,如果微軟出一個什麼免費的啥雲系統,誰還用什麼阿里雲啊?我們部門20個人,今年業績比昨年提高了80%,年終獎增加了整整一倍多,明年打算買一套正版的VS2015。


看了這麼久,還不斷的被頂上來,我就來說一條:

易用性:No1

證據:php跑在iis7上,用個PHPManagerForIIS插件,直接點滑鼠,N個不同php版本的生產環境分分鐘就配置起來了好不好?不用這個工具,你得知道要把php.ini放在哪裡,參數怎麼配置,fastcgi怎麼對應dll,文檔夠你折騰的。

現在好了,有了PHPManagerForIIS插件,so easy。

其他的apache/nginx+php+mysql,你如果會手工配置當然不錯,費功夫不是。


小企業 在編人數不夠多的ZF部門很少有專職IT支持人員,對性能要求不高但易維護性要求高-win server有圖形化桌面用起來跟pc沒差,IIS有中文圖形界面,wpi讓安裝新功能都傻瓜化了,一堆帶圖手把手教你的各類教程問答很容易找到,首次購買價格高,但後期維護費用基本沒有。

開源軟體是好,便宜量又足還高大上,可若不是北上廣這些大城市,IT基礎不牢的二三線城市沒有付費服務支持,用開源出了問題卻只能找到一堆說了半截三言兩語的解決方案,可是要命死翹翹的呀!(齊魯大地一枝獨秀的某軟體公司現場技術支持連nginx都都沒聽說過)看著是拿來用省了授權,可維護費又花出去了。一般管理者比起付費服務大多更捨得買授權。


推薦閱讀:

Linux多進程模型比多線程更容易實現熱部署嗎?
Nginx 多進程模型是如何實現高並發的?
如何解讀Nginx源碼?
被頻繁攻擊訪問,nginx如何破解?
假如有一張100W左右數據的表,根據查詢條件進行分頁。如何分頁?

TAG:伺服器 | Nginx | Apache | IIS |