Linux 作為伺服器操作系統的優勢是什麼?
這個問題回答起來很難,至少要分三部分:
- Linux 相對於其他閉源收費操作系統的優勢(例如 Windows Server)【我知道有WRK,不過我下載不到。】
- Linux 相對於其他(半/准)開源收費 Unix(-like) 操作系統的優勢(例如 Solaris)【OpenSolaris 好像已經死了,而且Solaris在x86上的投入比不上Sparc吧,畢竟不是親兒子。】
- Linux 相對於其他開源免費 Unix(-like) 操作系統的優勢(例如 FreeBSD),這似乎不是一個技術問題(其他答案提到的命令行、穩定性、安全性、性能、免費、開源這幾樣 BSD 都不差呀)。Linux 快糙猛怎麼比得上嚴謹細緻的 BSD 呢?
我沒有答案。
另外,「伺服器操作系統」本身的範圍就很廣,在企業辦公領域(Corp IT),特別是中小企業,我看不出 Linux 相比 Windows 有什麼優勢,反而是 Windows Server 更容易上手,因為和 Windows 桌面配合更容易:
- 列印伺服器,想想在 Linux 安裝列印驅動就頭疼
- 郵件伺服器,Linux 配置企業郵件服務可不是一件輕鬆的事,RAID 和備份自然也少不了
- 文件共享伺服器,Linux 下怎麼方便地管理許可權?
- Windows 域伺服器,Linux 上搞定 LDAP 的絕對是專家
- 企業內部網站的 web 伺服器,如果網站用 http://ASP.NET 開發的話
- 單個資料庫伺服器,支持企業的 ERP 什麼的
以上這些需求,除了最後一項資料庫外,買一台 5 萬塊的配置不錯的 x86 伺服器,再花 5000 買一套 Windows Server 標準版,就全解決了。如果用 Linux,對於普通的非 IT 公司,維護成本不敢想像。
比較明確的是,Linux 在 server farm 方面確實比 Windows 有很大優勢,無論是 web/3D 渲染/HPC 都少見非 Linux 的實例。引用一句話:『你來是因為產品,你留下是因為生態系統』
Linux 作為伺服器的優勢是,他目前具有最好的生態系統,伺服器端的各種軟體都為它而設計,默認都認為你是在 Linux 上跑,你要是整一個非 Linux 的伺服器,你得有足夠的心理準備,因為出現任何問題,你可能未必能找到能幫你解決問題的人。
這裡我想引申說一個例子:
為什麼 android 中的一部分軟體質量比較差?因為那些公司已經為 iOS 寫了個軟體,到了 android 就根本不想重新開發,只想把原先的一些資源稍微修補一下弄上去用,所以搞出了一個很糟糕的軟體,那些用慣 iOS 的人,到了 android 裡面可能首先想找那些 iOS 程序的替代品,結果那些程序往往都很糟糕。
反過來常常也是一樣,有些軟體,天生是在 android 下誕生的,他們去做 iOS 的時候,也經常是糊弄一下子就解決問題,而那些長期用慣了 android 的人,到 iOS 下,首先去找自己用慣的那些軟體在 iOS 裡面的對應軟體,結果就還是發現這些在 android 下的優秀軟體『在 iOS 裡面的表現糟透了』。
上面的例子實際上就是所謂『生態系統鎖定』的問題。
現在 Linux 就面臨這些現狀,他本身構建的生態系統,太多的軟體本來在 Linux 下開發,也只適合在 Linux 下運行,雖然通常他們可能被移植到了 Windows,可是這些血統來源於 Linux 的軟體,在 Windows 下安裝部署的用戶體驗全都糟糕透了,於是乎伺服器端開發者越發反感使用 Windows 作為伺服器的部署平台。生態系統鎖定之勢已成。
這世界,歸根結底還是一句話:跨平台(而不犧牲用戶體驗)其實只是個過於美好的夢想。很不幸,以如今 Linux 伺服器的用戶規模,任何技術上的優勢都是次要的。決定 Linux 作為伺服器 OS 不二選擇的是"網路效應"。
「當一種產品對用戶的價值隨著採用相同的產品、或可兼容產品的用戶增加而增大時,就出現了網路外部性。」 在具有網路效應的產業,「先下手為強」(first-moveradvantage)和「贏家通吃」 (winner–take–all)是市場競爭的重要特徵。[1]
聽起來像是 Windows 在 PC 端的優勢,事實上兩個完全一樣。一旦大家都開始用 Linux 做服務了。豐富的伺服器軟體、用戶都會接踵而來。新用戶的使用體驗會越來越美好,因為有更加豐富的軟體和經驗資源(資料和人)。
那麼,Linux是怎麼達到今天的規模的?雖然有點跑題,但既然在 @yegle 的答案里聊到了,就就此多聊些吧。今天人人熱衷的互聯網經濟,growth 模式在 Linux 的世界裡是早就不稀罕的概念了:
高端種子用戶
comp.os.minix 是類 Unix 內核愛好者/學習者討論組。這個用戶組裡的用戶理解操作系統原理,具備內核代碼的理解,設計能力。Linus 做出 Linux 內核第一版後首先發布到了 comp.os.minix,馬上引來了眾多愛好者關注並貢獻代碼,很快得以創建 comp.os.linux。到了92年已經能夠運行 X-Window。此後 Linux 內核代碼飛速發展,全靠越來越多的內核貢獻者加盟。和GNU結盟
Linux 從 0.01 開始就要求用戶自行安裝 GNU 工具。後來選擇以 GPL 發行。GPL 雖然在幫助創造更好的商業軟體上有些爭議。但在保證源代碼回饋量上卻效果極佳。
此時GNU Hurd 遙遙無期,社區迫切需要一個高速迭代,能用的 GPL 操作系統內核。因此 Linux 迅速獲得更多用戶的支持。不論有心無心,這是第二步成功的推廣——提供目標用戶無可替代的必需品。同時期的 386BSD, 卻因為代碼和協議問題,沒有獲得同樣推廣的機會。
免費的操作系統
Linux 內核源代碼可以免費下載。大多數 Linux 發布版本,包括 GNU/Linux 的發行版本和商業的發行版本幾乎都提供免費下載服務。
免費意味著零試用成本,也不需要為安裝在第二台機器上付費。如果你在大學機房裡勤工儉學,從朋友那裡聽到一個新興的操作系統,還是免費的。你有什麼理由不下載下來試一試呢?如果你使用之後覺得比一些老掉牙的 Unix 系統好用,為什麼不給安裝到機房的其他機器上呢?
這種在 WWW 時代的免費推廣方式。在上個世紀就被利用在了 Linux 的推廣中。知乎上的程序員/SA 們,誰沒有下過一個 Linux Distro 的鏡像刻過盤?Internet 高速分發
軟體的銷售和服務,渠道有多重要,各行各業都知道。今天人人稱道的 App Store 模式,就是把軟體發布和更新的渠道做得最 NB,才能在短時間內就建立起基於 iOS 的生態系統, 迎來了 Mac 的第二次復興。但是這種軟體分發/更新的渠道不是蘋果發明的,也不是蘋果最先採用的。Linux 和其他開源軟體早就知道用類似的方法分發軟體。其中典型的就是幾乎所有 Linux Distro 都會帶的軟體倉庫(Software Repository ).
帶有軟體倉庫的 Linux Distro, 幾張 CD 不是 OS 的全部。Repositoy 才是。 這些倉庫有些安裝 Compile Farm 編譯出的二進位包。有的提供從第三方軟體網站上的源碼包自動編譯的腳本。在 Linux 的世界裡,你不知道滿地找軟體或它的最新版本是個什麼概念。
憑藉這個技術,Linux 內核和最新的開源軟體被以最快的速度分發到世界各地。CLI 用戶體驗
有多少人在 Windows 伺服器下打開CMD, 在 Solaris 和默認的 *BSD 系統下打開一個終端模擬器,面對那色盲般的界面皺緊眉頭?伺服器的用戶也是用戶,也講究用戶體驗。
在今天,很少有Linux Distro 會提供那麼單調的 shell 提示符,會不把 ls -G 設成ls 的 alias,會不使用 readline, 會給一個 GUI 的終端模擬器那麼丑的字體。如果你還不滿意,還有bash, csh, zsh 等 shell 可以替換。比如截圖中用的是zsh,藍色代表用戶名和主機名,黃色的代表 git 當前分支,綠色代表當前目錄。
這種不起眼的美化,使得同樣用途的伺服器 OS,Linux 更能抓住其用戶的心。我們今天做產品講究在滿足用戶價值的前提下提高視覺和交互體驗,其實這些 Linux 做得都比同類伺服器 OS 好。總結
正是通過以上幾點,Linux 才逐漸的積累作為伺服器操作系統的優勢。至於 Web 代理,伺服器軟體的豐富和高性能,都是用戶規模形成之後的事了。epoll 和 NTPL 在 2.6 kernel 正式分發,但那時 Linux 作伺服器已經勢不可擋。而現在再談 Linux 作為伺服器系統的優勢,第一點永遠是:你用、我用、大家用,軟體多、體驗好!
1. http://wiki.mbalib.com/wiki/%E7%BD%91%E7%BB%9C%E6%95%88%E5%BA%941,大的公司都會定製linux來使linux的性能達到極致。為什麼?因為linux開源,可被定製。Windows你定製一個我看看。2,出了系統漏洞怎麼辦?自己改源碼重新編譯即可。Windows你重新編譯一個我看看。不還得等微軟出補丁。3,由於開源,所以更新快,雖然有些更新並不是十分完美的更新,但,凡是最炫的特性,最新最快的演算法都可以以極短的時間裡集成到穩定發行版里。Windows得等官方更新升級。4,
侯捷老師說過,源碼面前,了無秘密。還是開源。說白了,人對自己知根知底的東西用著心裡放心。
5,性能問題不多說了。給運營商做系統維護幾年了,經手的操作系統很多很雜,說說自己的體會吧。windows的缺點:首先windows的故障排查很傷心,那個日誌系統基本是擺設,把你已經知道的再重複無數遍,所以一個巨大的日誌文件消除重複信息後什麼都沒有;其次由於本身封閉,有些莫名的問題連MS自己也不能解答,比如啟動30分鐘還沒有看見用戶界面,mssql啟動不了需要把操作系統重啟兩次(偶數次,奇數次的不行);windows的優點:上手快,操作簡單,有很多現成的東西可以馬上用。在重要的伺服器領域,這個優點基本沒有什麼用。linux的優點除了上面說的規模,其實這個內核本身的確有優勢,至少在網路服務方面,在大量用戶進程的情況下,性能差異已經達到等級差了。
其實我覺得是規模決定的,不藉助特殊工具的情況下,一個人同時操作30台左右的linux伺服器開發聯調,基本上沒有什麼不便,個人估計就算同時操作100台也沒什麼太大的區別。但windows伺服器同時操作3台我就暈菜了,3個遠程桌面擺在一起根本分不清,很容易點錯。該死的windows,居然連個多桌面都沒有。規模很小,不需要專人維護的時候,windows占很大成本優勢,但如果有一定規模了,linux/unixer一個頂100個windows這邊的吧。
熟悉了會感嘆Linux的大道至簡.
比如你買了VPS,安裝個PHP:
sudo apt-get install php7.0-cli
/etc/rc.local里exit 0前加一句:
nohup /usr/bin/php -S 0.0.0.0:80 -t /root/www &>&>/dev/shm/www.log 2&>1
一個開機自啟動的PHP+SQLite網站環境就搞好了.
網站根目錄: /root/www
網站訪問日誌: /dev/shm/www.log
附:
PHP內置的HTTP伺服器就應該搭配/etc/rc.local啟動才顯得簡單粗暴.
PHP-FPM和Swoole這些生產環境級別的服務,
當然是搭配systemd來守護更好,照貓畫虎,也很簡單.
[Unit]
Description=Swoole Server
After=network.target
After=syslog.target
[Service]
Type=forking
PIDFile=/opt/swoole/server.pid
ExecStart=/usr/bin/php /opt/swoole/server.php
ExecStop=/bin/kill $MAINPID
ExecReload=/bin/kill -USR1 $MAINPID
# 起死回生的守護就是這個配置項了
Restart=always
[Install]
WantedBy=multi-user.target graphical.target
# 使用方法:
# /etc/systemd/system/foobar.service
# sudo systemctl --system daemon-reload
# sudo systemctl enable foobar.service
# sudo systemctl start foobar.service
# sudo systemctl status foobar.service
# sudo systemctl reload foobar.service
# sudo systemctl stop foobar.service
- 性能問題。比如說Linux下nginx可以高效用epoll實現高性能,但是Windows下似乎只有Apache和IIS?又比如JVM,網上的測評太多了,可以看看Linux下和Windows下的性能對比
- 社區支持。開源的解決方案幾乎都是最先基於*nix開發的,Windows下要麼是二等公民有延遲,要麼是優化不夠性能差距。Linux下有天然優勢。
- 白盒化,容易做優化和自定義。比如說開發nginx模塊實現靜態css和js資源的服務端合併、nginx開發實現高效SSL卸載等等。當然開發在Windows下也是可以的,但是太麻煩
1、看回答不少將linux神化了,如按這邏輯,windows在伺服器上早被淘汰了,事實又是怎樣呢?事實勝於雄辯。2、linux是有很多優點,但也有缺點,只說優點不提缺點那是片面化。如提到linux開源,不用怎花錢就可布署,但有算過維護成本嗎?一個懂行的linux維護人員容易找嗎?看看銀行的ATM機為何還用xp,怎麼不全換成linux?
3、windows真那麼差嗎?說整天死機,要重啟那都是些不懂行的,我手上就有windows伺服器在線8年多沒重啟過還在正常工作的機子,這無法貼圖,如需證據可加qq83136,說明來意。
4、這個問題將linux換成windows,也有大把人會說windows有多少優點,linux有多少缺點。1.內置網路和防火牆,網路性能較好。2.做VOIP伺服器,windows話務量大就重啟,而Linux能運行很長時間。
開源,免費,高效,穩定,安全。龐大的技術社區。
不同方向對LINUX的解讀是不一樣的。
以下是一個開發人員的視角。作伺服器也有自身的」生態系統「最典型的如LAMP,JAVA.mysql和linux的互為支撐。新技術多是來自於國外的,所以新技術總是先對linux作支持的。
linux除卻本身的優點,更重要的是開源解決方案的支持。很多優秀的企業應用,要麼沒有對winodws的支持,要麼兼容性作的並不好,要麼在windows下性能有損失。
緩存,NOSQL,消息隊列,大數據,負載,DB分散式,集群方案等等。
hadoop只能在linux上跑(官方說可以在windows下模擬,但坑了我3天,我放棄了)
nginx在windows有損失
nodejs對windows支持不完整
linux有軟raid1+0的方案,但windows我是沒找到,微軟那套不支持1+0
windows下 sqlserver 的集群一直是弱項,這點上oracle強一些,據說oracle對Linux的支持更好
之前有面一家作類似微信應用開發的,後端是個通訊框架,也是在linux上跑的。
目前較熱的移動應用,手機遊戲開發,後端多數也都是linux,其實winodws也能作,也真有不少這麼作的,但總覺得不倫不類。
技術強的企業用linux,技術一般的以winodws為主少量作linux支持。
成本和安全,小公司不擔心成本,因為全是盜版的,公司到一定規模,微軟就來要錢了,並且對微軟不信任
從國家層面來說,壓微軟是趨勢。
……其實我目前算是windows陣營的Linux技術上的優勢,之前的各位都講了很多了,在此不多廢話。
由於工作原因,現在以市場工作為主,因此也比較關注市場。在實際的市場環境當中,Linux的優勢並不突出,甚至可以說整體遜於Windows。Web Server運行主機的市場佔有率僅僅比Windows高1.72%,基本算是旗鼓相當。而從市場營業額上可以看出,Windows佔了伺服器系統銷售額的50.3%,而Linux僅僅才28%,差距快1倍了。在銷售數量基本接近,而銷售額差距巨大的情況下,說明Linux目前的市場份額得來也是依靠低價才得以維持的。參見:Usage share of operating systems
而Linux唯一的優勢僅僅是在超級計算中心當中,能夠達到96.4%。
這是一個值得思考的結果,一個產品,依靠低價,也僅僅能夠維持與對手持平的市場份額,某個層面上來講,不算是一個優秀的產品。感覺linux佔領市場是個自上而下的過程。對geek群體來說,linux可玩性更高。對於大型it公司來說,作為伺服器集群,定製linux系統顯然能更多挖掘設備性能,深度定製功能,更方便調試。作為大型行業解決方案銷售時,第一不用被微軟剪羊毛,第二也不受微軟牽制。geek以及領頭羊公司首先有個示範效應,讓linux帶上了光環;其次無論這類公司、個人、團體都會貢獻出很多有用的概念、最佳實踐理論、以及配套的工具鏈。然後就真的火起來了。所以個人覺得,ubuntu的屌絲戰術是無法讓debian翻身當家做主人的...另外其實win server market share也不低吧...我們公司至少非核心的內網系統都是ms一家門建設的。
最有優勢的,還是cli吧。linux在命令行下能解決一切。windows下很多必要配置必須使用GUI。而伺服器往往在很遠的機房裡,linux cli的優勢大大地,一個ssh即可。windows開遠程桌面,更麻煩。
個人認為,因為Linux的開源,讓運維人員掌握了更多的主動性,自己能處理的事情更多了,而不是什麼都要等著微軟或者周邊的廠商來出相應的支持。另外就是:傳說Linux比Windows穩定(使用「傳說」是因為,我自己沒有證實過讓一台windows電腦連續開機服務很久過,因為我花不起那電錢)。