服務器的硬件好理解,其實就是一臺性能、穩定性、擴展性等等比咱們普通我的PC強的一臺機器而已,它也須要搭載操做系統,好比有專門的Windows Server
或者各類Linux
發行版系統。只不過咱這裏不少小夥伴可能仍是處於學習階段,沒見過企業裏面真實的服務器機房,以爲好奇而已。瀏覽器
而一直以來,經過和小夥伴們私信交流發現,不少初學者疑惑的主要可能仍是服務器軟件層面的東西。相似一些諸如:Web服務器、HTTP服務器、應用服務器、Tomcat、Apache、Nginx……等等的概念。安全
一般來說,只要運行在服務器系統之上,綁定了服務器IP地址而且在某一個端口監聽用戶請求並提供服務的軟件均可以叫服務器軟件。服務器
在開始下文以前,首先必須搞清楚:靜態服務和動態服務這兩個基本概念。網絡
還記得在我以前的 「我的博客搭建系列視頻」裏,我曾演示過多種博客框架的搭建,好比:Hexo
、Hugo
、WordPress
、Halo
等等。像Hexo
這種屬於靜態博客,而Halo
,WordPress
這種則是動態博客。併發
因此,在我以前演示過的 「我的博客搭建系列視頻」 裏,像Hexo
、Hugo
、VuePress
這種框架搭建的博客所有都屬於靜態博客,畢竟它們都是生成了固定HTML
頁面,而後託管起來,不論誰去訪問看到的東西都同樣;而像WordPress
,Halo
這些有着後臺應用服務的博客則屬於動態博客,它們須要應用服務器的承載,部署起來也會更加複雜。負載均衡
在這裏,首先搞懂三個基本概念:框架
一、Web服務器工具
我以爲這個概念是最廣的!性能
顧名思義,Web的功能就是提供Web化服務。那什麼又叫Web服務呢,簡單點理解好比:網站頁面服務、郵件服務、網絡下載服務等等,均可以稱做Web化服務。學習
總而言之,Web服務器從廣義上來講,就是響應用戶的需求並提供響應和服務。因此從這個角度來說,當下幾乎全部服務器軟件均可以稱之爲Web服務器。
二、HTTP服務器
因爲當今Web服務器應用層通訊協議主要就是HTTP
協議,因此咱們 「基本」上能夠將HTTP服務器理解爲和Web服務器對等,所以在下文的闡述時這兩個概念不會做過多的糾結區分。
HTTP服務器只是把服務器上的資源經過HTTP協議傳輸給了客戶端,因此這地方咱們 側重於 它對於靜態資源傳輸的支持。所以通常也理解爲靜態服務器。
固然它的功能通常不止這些,實際企業裏也常作反向代理、負載均衡等用途。
三、應用服務器
應用服務器,則能夠理解爲一個特定應用的承載容器。通常來講它須要有運行時環境的支持。好比在Java領域比較經常使用的應用服務器Tomcat
,它就必需要Java運行時環境的支持。
所以,應用服務器也經常被稱爲:動態服務器、動態容器、應用容器、Web容器等等,這些概念基本都是對等的。
既然屬於動態服務器,很明顯它就能支持動態響應,好比能夠根據不一樣用戶的請求,可以動態的生成資源並返回。這樣一來,在客戶端,不一樣用戶拿到的返回內容也不同,不像靜態服務器,你們拿到的資源都同樣。
固然通常來講,在流量不大的場景下,應用服務器確定也是能夠作HTTP服務器來用,只不過不多有這麼去幹的。
因此接下來咱們就以目前市場上經常使用的服務器軟件爲例,逐個對號入座,來審視一遍,大體有十幾款軟件。
Nginx是一個典型的HTTP服務器。它本來的本職工做就是將服務端的某一個靜態內容或資源經過HTTP協議傳到客戶端,因此也就是典型的靜態服務器。
固然Nginx服務器的功能遠不止這些,如今經常使用的功能還包括作反向代理、負載均衡。
現實應用部署場景中,Nginx通常是與後面真正的動態應用服務器打配合,好比Tomcat
,把用戶請求轉發給後面的應用服務器,從而提供靈活穩定的Web服務。由於Nginx服務器性能好,穩定性也高,能扛得住衝擊,把它放在前面去直面用戶。
固然,Nginx服務器自己也能夠在諸如Lua
等腳本的輔助下作二次開發,能夠變成一個提供動態服務的應用服務器,這也就是大名鼎鼎的OpenResty
!
Nginx這玩意是純C
語言寫的,代碼也是開源的,官網就可以下載獲得。性能賊高,並且內存消耗賊少,穩定性也是一等的好,因此你看市面上大量的互聯網公司在重度使用它。
Tengine實際上是基於Nginx服務器作的改造,能夠看作是在Nginx的基礎上又作了增強和封裝,主要就是針對大流量網站的需求,添加了不少高級功能和特性。
Tengine它是淘寶發起的Web服務器項目。它的性能和穩定性已經在大型的網站如淘寶網,天貓商城等獲得了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平臺。
因此Tengine它和Nginx哥倆是一個性質的東西。
固然這個地方的Apache服務器具體指的就是:Apache HTTP Server
,它是Apache軟件組織旗下的一個HTTP服務器項目。
Apache從功能上來講和Nginx服務器對等,也是作靜態HTTP服務器,只不過在併發、負載和資源消耗等方面的性能都比不上Nginx,因此如今選用Nginx的更多。
IIS是微軟陣營的Web服務器,只能運行於Windows系統下,並且並非開源的。
[圖片上傳失敗...(image-c78832-1585711220439)]
IIS的主要身份仍是一個HTTP服務器,但因爲它也支持好比ASP.NET
這種相似環境(畢竟都是微軟自家的東西),所以也能夠兼作應用服務器,因此它能夠定位爲一個具備應用服務器能力的HTTP服務器。
Tomcat
和上面所述的Apache HTTP Server
同樣,雖然都是隸屬於Apache軟件組織旗下的子項目。
但Tomcat它倒是一個典型的應用服務器軟件,或者說是Web容器、動態容器、應用容器,提供的是動態服務,並且它須要Java運行環境的支持。因此它和像上面講過的Nginx
、Tengine
、Apache
不是一個性質的服務器軟件。
衆所周知,如今大名鼎鼎的Spring Boot
框架就將Tomcat做爲內嵌的默認應用服務器,或者叫應用容器。
Tomcat自己其實就是一個,也僅僅是一個,支持Servlet標準的Java EE應用容器,因此主要用途也就是作Java EE應用服務器。
雖然說Tomcat是一個動態應用服務器,可是在流量不大的場景裏,固然也能夠直接提供HTTP服務,但通常不會這麼去用,不會讓Tomcat去直面客戶,而是像上文所述,Tomcat通常是和諸如Nginx這種高性能靜態服務器打配合,Nginx負責接收請求,而後轉發到後面真正的Tomcat容器裏去處理。
Jetty也是大名鼎鼎的Spring Boot框架所支持的內嵌應用容器之一,只不過不是默認的而已,因此Jetty是和Tomcat是一個性質的東西。
按照Jetty官網來講,Jetty是一個開源的HTTP服務器 + 應用容器,所以能夠提供靜態或者動態服務,並且提供了對:HTTP/2
,WebSocket
,JMX
等等許多其餘集成的支持。
若是拿Jetty和Tomcat對比,二者在功能上幾乎是一致的,都是作動態應用容器居多,也都符合Servlet標準。只是Jetty比Tomcat要輕量一些,配置也更簡單一些而已,因此你們在用Spring Boot框架時,也別光可着Tomcat一種用,也能夠切換到Jetty容器用用看。
Undertow和上面闡述過的Tomcat、Jetty同樣,也是大名鼎鼎的Spring Boot框架所支持的內嵌應用容器之一。
Undertow是Red Hat紅帽子公司開源的一款基於Java語言編寫的應用服務器,也是下面即將要闡述的一款名爲Wildfly
應用服務器的默認Web容器。
Undertow也符合Servlet標準規範,支持HTTP/2
,支持WebSocket
,是一款靈活的,高性能Web應用服務器。
在併發量不高的狀況下 , Undertow與Tomcat、Jetty的性能區別不大 , 可是在併發量高的狀況下, Undertow的性能實際上是要優於Jetty與Tomcat的。
小結一下,上面介紹的無論是Tomcat
、Jetty
、Undertow
,其實都仍是屬於那種蠻輕量的應用服務器,不重,也是開源免費的,實際用得也是很是很是多的。
而後下面再介紹幾款重量級的服務器軟件,固然不少也都是商用軟件,他們的功能會更加綜合、體量更大,雖然主要功能也是作應用服務器(應用容器),但它們更多算是一種平臺級別的軟件。
JBoss也是一個Java EE應用服務器,能夠部署動態應用,但它不只僅是Servlet
應用容器,並且仍是EJB
應用容器。
JBoss在早年的確是很是火的一款動態應用服務器軟件,尤爲是在EJB應用時代發揮着巨大的做用。並且更普遍意義上的JBoss已經不只僅是一個Java應用服務器了,而是一套基於Java EE框架的全套解決方案,因此也算是一個比較重量級的應用服務平臺。
JBoss AS從版本8開始改名爲WildFly
了,所以如今你若是試圖去訪問JBoss官網的話,JBoss官網已經提示遷移到wildfly.org
了。
因此WildFly也是一款企業級的應用服務器,由Red Hat紅帽子公司開發維護,並且Wildfly應用服務器中的默認的Web容器就是上文闡述過的Undertow。
WebLogic是Oracle公司出品的用於部署企業級Java EE應用程序的應用服務器。
它可謂是一個「全能型」的重量級應用服務器軟件,由於支持Java EE的幾乎全部應用規範,包括EJB
、Servlet
、JMS
... 等等,固然,它畢竟是一個商業軟件,有着強大的商業化和周邊組件的支持,和Tomcat這種開源免費的應用容器的體量固然不同。
WebSphere是IBM公司出品的Java EE應用服務器軟件,功能很強大,並且有IBM的開發工具相配套,固然它也是一個價格不菲的商業服務器軟件。
和WebLogic同樣,WebSphere也是一個支持更多Java EE標準和規範的綜合性應用服務器環境,可靠性高,體量更大,性能更好,功能也更全,固然使用的成本也會高不少。