服务器运行容器工具大盘点!


服务器到底是什么?

服务器的硬件好理解,其实就是一台性能稳定性扩展性等等比我们普通个人PC强的一台机器而已,它也需要搭载操作系统,比如有专门的Windows Server或者各种Linux发行版系统。只不过咱这里很多小伙伴可能还是处于学习阶段,没见过企业里面真实的服务器机房,觉得好奇而已。

而一直以来,通过和小伙伴们私信交流发现,很多初学者疑惑的主要可能还是服务器软件层面的东西。类似一些诸如:Web服务器HTTP服务器应用服务器TomcatApacheNginx……等等的概念。

通常来讲,只要运行在服务器系统之上,绑定了服务器IP地址并且在某一个端口监听用户请求并提供服务的软件都可以叫服务器软件。


静态服务 VS 动态服务

在开始下文之前,首先必须搞清楚:静态服务动态服务这两个基本概念。

还记得在我之前的 「个人博客搭建系列视频」里,我曾演示过多种博客框架的搭建,比如:HexoHugoWordPressHalo等等。像Hexo这种属于静态博客,而HaloWordPress这种则是动态博客。

  • 静态服务一般返回的是静态资源,不同用户无论何时,只要访问同一个服务拿到的内容都是一毛一样的。比如不同用户去访问我的个人博客页面,浏览器上看到的内容都一样,因为我的博客是静态博客,因此提供的也就是静态服务。

  • 而动态服务一般返回的是动态资源,比如用户登录一个网站后台,比如就B站吧,肯定会根据不同的用户身份权限信息返回给用户不同的内容和资源,所以不同人看到的东西也不一样,这种就可以理解为动态服务。

所以,在我之前演示过的 「个人博客搭建系列视频」 里,像HexoHugoVuePress这种框架搭建的博客全部都属于静态博客,毕竟它们都是生成了固定HTML页面,然后托管起来,不论谁去访问看到的东西都一样;而像WordPressHugo这些有着后台应用服务的博客则属于动态博客,它们需要应用服务器的承载,部署起来也会更加复杂。


几个基本概念

在这里,首先搞懂三个基本概念:

  • Web服务器

  • HTTP服务器

  • 应用服务器

1、Web服务器

我觉得这个概念是最广的!

顾名思义,Web的功能就是提供Web化服务。那什么又叫Web服务呢,简单点理解比如:网站页面服务、邮件服务、网络下载服务等等,都可以称作Web化服务。

总而言之,Web服务器从广义上来说,就是响应用户的需求并提供响应和服务。所以从这个角度来讲,当下几乎所有服务器软件都可以称之为Web服务器。

2、HTTP服务器

由于当今Web服务器应用层通信协议主要就是HTTP协议,所以我们 “基本”上可以将HTTP服务器理解为和Web服务器对等,因此在下文的阐述时这两个概念不会作过多的纠结区分。

HTTP服务器只是把服务器上的资源通过HTTP协议传输给了客户端,所以这地方我们 侧重于 它对于静态资源传输的支持。因此一般也理解为静态服务器

当然它的功能一般不止这些,实际企业里也常做反向代理负载均衡等用途。

3、应用服务器

应用服务器,则可以理解为一个特定应用的承载容器。一般来说它需要有运行时环境的支持。比如在Java领域比较常用的应用服务器Tomcat,它就必须要Java运行时环境的支持。

因此,应用服务器也常常被称为:动态服务器动态容器应用容器Web容器等等,这些概念基本都是对等的。

既然属于动态服务器,很明显它就能支持动态响应,比如可以根据不同用户的请求,能够动态的生成资源并返回。这样一来,在客户端,不同用户拿到的返回内容也不一样,不像静态服务器,大家拿到的资源都一样。

当然一般来说,在流量不大的场景下,应用服务器肯定也是可以做HTTP服务器来用,只不过很少有这么去干的。

所以接下来我们就以目前市场上常用的服务器软件为例,逐个对号入座,来审视一遍,大致有十几款软件。


Nginx

Nginx是一个典型的HTTP服务器。它原本的本职工作就是将服务端的某一个静态内容或资源通过HTTP协议传到客户端,所以也就是典型的静态服务器。

当然Nginx服务器的功能远不止这些,现在常用的功能还包括做反向代理、负载均衡。

现实应用部署场景中,Nginx一般是与后面真正的动态应用服务器打配合,比如Tomcat,把用户请求转发给后面的应用服务器,从而提供灵活稳定的Web服务。因为Nginx服务器性能好稳定性也高,能扛得住冲击,把它放在前面去直面用户。

当然,Nginx服务器本身也可以在诸如Lua等脚本的辅助下做二次开发,可以变成一个提供动态服务的应用服务器,这也就是大名鼎鼎的OpenResty

Nginx这玩意是纯C语言写的,代码也是开源的,官网就能够下载得到。性能贼高,而且内存消耗贼少,稳定性也是一等的好,所以你看市面上大量的互联网公司在重度使用它。


Tengine

Tengine其实是基于Nginx服务器做的改造,可以看做是在Nginx的基础上又做了加强封装,主要就是针对大流量网站的需求,添加了很多高级功能和特性。

Tengine它是淘宝发起的Web服务器项目。它的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

所以Tengine它和Nginx哥俩是一个性质的东西。


Apache

当然这个地方的Apache服务器具体指的就是:Apache HTTP Server,它是Apache软件组织旗下的一个HTTP服务器项目。

Apache从功能上来说和Nginx服务器对等,也是做静态HTTP服务器,只不过在并发、负载和资源消耗等方面的性能都比不上Nginx,所以现在选用Nginx的更多。


IIS

IIS是微软阵营的Web服务器,只能运行于Windows系统下,而且并不是开源的。

IIS的主要身份还是一个HTTP服务器,但由于它也支持比如ASP.NET这种类似环境(毕竟都是微软自家的东西),因此也可以兼做应用服务器,所以它可以定位为一个具有应用服务器能力的HTTP服务器。


Tomcat

Tomcat和上面所述的Apache HTTP Server一样,虽然都是隶属于Apache软件组织旗下的子项目。

但Tomcat它却是一个典型的应用服务器软件,或者说是Web容器动态容器应用容器,提供的是动态服务,而且它需要Java运行环境的支持。所以它和像上面讲过的NginxTengineApache 不是一个性质的服务器软件。

众所周知,现在大名鼎鼎的Spring Boot框架就将Tomcat作为内嵌的默认应用服务器,或者叫应用容器。

Tomcat本身其实就是一个,也仅仅是一个,支持Servlet标准的Java EE应用容器,所以主要用途也就是做Java EE应用服务器。

虽说Tomcat是一个动态应用服务器,但是在流量不大的场景里,当然也可以直接提供HTTP服务,但一般不会这么去用,不会让Tomcat去直面客户,而是像上文所述,Tomcat一般是和诸如Nginx这种高性能静态服务器打配合,Nginx负责接收请求,然后转发到后面真正的Tomcat容器里去处理。


Jetty

Jetty也是大名鼎鼎的Spring Boot框架所支持的内嵌应用容器之一,只不过不是默认的而已,所以Jetty是和Tomcat是一个性质的东西。

按照Jetty官网来说,Jetty是一个开源的HTTP服务器 + 应用容器,因此可以提供静态或者动态服务,而且提供了对:HTTP/2WebSocketJMX等等许多其他集成的支持。

如果拿Jetty和Tomcat对比,两者在功能上几乎是一致的,都是做动态应用容器居多,也都符合Servlet标准。只是Jetty比Tomcat要轻量一些,配置也更简单一些而已,所以大家在用Spring Boot框架时,也别光可着Tomcat一种用,也可以切换到Jetty容器用用看。


Undertow

Undertow和上面阐述过的Tomcat、Jetty一样,也是大名鼎鼎的Spring Boot框架所支持的内嵌应用容器之一。

Undertow是Red Hat红帽子公司开源的一款基于Java语言编写的应用服务器,也是下面即将要阐述的一款名为Wildfly应用服务器的默认Web容器。

Undertow也符合Servlet标准规范,支持HTTP/2,支持WebSocket,是一款灵活的,高性能Web应用服务器。

在并发量不高的情况下 , Undertow与Tomcat、Jetty的性能区别不大 , 但是在并发量高的情况下, Undertow的性能其实是要优于Jetty与Tomcat的。


小结一下,上面介绍的不管是TomcatJettyUndertow,其实都还是属于那种蛮轻量的应用服务器,不重,也是开源免费的,实际用得也是非常非常多的。

然后下面再介绍几款重量级的服务器软件,当然很多也都是商用软件,他们的功能会更加综合、体量更大,虽然主要功能也是做应用服务器(应用容器),但它们更多算是一种平台级别的软件。


JBoss/WildFly

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

WebLogic是Oracle公司出品的用于部署企业级Java EE应用程序的应用服务器

它可谓是一个“全能型”的重量级应用服务器软件,因为支持Java EE的几乎所有应用规范,包括EJBServletJMS... 等等,当然,它毕竟是一个商业软件,有着强大的商业化和周边组件的支持,和Tomcat这种开源免费的应用容器的体量当然不一样。


WebSphere

WebSphere是IBM公司出品的Java EE应用服务器软件,功能很强大,而且有IBM的开发工具相配套,当然它也是一个价格不菲的商业服务器软件。

和WebLogic一样,WebSphere也是一个支持更多Java EE标准和规范的综合性应用服务器环境,可靠性高,体量更大,性能更好,功能也更全,当然使用的成本也会高很多。


每天进步一点点,Peace!

除了负载均衡,Nginx 还能干啥?

想快速拥有个人网站?来试试这个...

没用过这些IDEA插件?怪不得写代码头疼

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python函数示例_使用Python中的示例的input()函数

python函数示例Python input()函数 (Python input() function) input() function is a library function, it is used to get the user input, it shows given message on the console and wait for the input and returns input value in string format. input()函数是一个库函…

Python pandas DateFrame查询数据df.loc的5种方法

# _*_coding:utf-8_*_ import pandas as pd# 自定义函数 def func(df):return df[temperature] < 32# Press the green button in the gutter to run the script. if __name__ __main__:data {date: [2022-08-21, 2022-08-22, 2022-08-23],weather: ["晴", &quo…

想读Spring源码?先从这篇「 极简教程」开始吧...

为什么要阅读源码&#xff1f;这是一个有趣的问题&#xff0c;类似的问题还有&#xff0c;为什么要看书&#xff1f;为什么要爬山&#xff1f; 这也是一个哲学问题&#xff0c;我想每个人都有不同的答案&#xff0c;下面我是对阅读源码好处的一些思考。 &#xff08;PS&#x…

Python pandas DateFrame新增数据列

下面代码在Linux下运行 # _*_coding:utf-8_*_ import os import pandas as pd# 自定义函数 def func(x):if x[temperature] > 30:return 高温if x[temperature] < 10:return 低温return 常温# Press the green button in the gutter to run the script. if __name__ __…

python函数示例_带Python示例的float()函数

python函数示例Python float()函数 (Python float() function) float() function is a library function in Python, it is used to get a float value from a given number or a string. It accepts either a string (that should contain a number) or a number and returns …

ALP规则的验证

实验1&#xff1a;ALP规则的验证实验目标创建本地用户jack、tom、mike,创建本地组group1&#xff0c;并把所建的用户加入到group1中&#xff0c;通过ALP规则实现以上用户对e:\share\1.txt 文件内容读取和写入权限实验环境略实验步骤一、 创建本地用户jack、tom、mike右击计算机…

6大分布式定时任务对比

作者 | sharedCode来源 | blog.csdn.net/u012394095/article/details/79470904分布式定时任务简介 把分散的&#xff0c;可靠性差的计划任务纳入统一的平台&#xff0c;并实现集群管理调度和分布式部署的一种定时任务的管理方式&#xff0c;叫做分布式定时任务。常见开源方案 e…

Python利用pandas获取每行最大值和最小值

知识点 1.找出每一行最大值和对应的列索引&#xff1a; #找出每行最大值对应的索引 df[max_idx]df.idxmax(axis1) #取出该最大值 df[max_val]df.max(axis1)2.找出每一行最小值和对应的列索引&#xff1a; # 找出每行最小值对应的索引 df[min_idx]df.idxmin(axis1) # 取出该最…

一文搞懂 ThreadLocal 原理

当多线程访问共享可变数据时&#xff0c;涉及到线程间同步的问题&#xff0c;并不是所有时候&#xff0c;都要用到共享数据&#xff0c;所以就需要线程封闭出场了。数据都被封闭在各自的线程之中&#xff0c;就不需要同步&#xff0c;这种通过将数据封闭在线程中而避免使用同步…

python中assert_在Python中带有示例的assert关键字

python中assertPython断言关键字 (Python assert keyword) assert is a keyword (case-sensitive) in python, it is used to debug the code. Generally, it can be used to test a condition – if a condition returns False – it returns an Assertion Error (AssertionEr…

单域MPLS ***数据转发实验分析

MPLS 数据详细转发流程示意图&#xff1a;配置思路&#xff1a;在自治系统AS100中配置IGP&#xff0c;使得两台PE路由器的lo 0接口路由可达&#xff1b;两台PE路由器路由可达后&#xff0c;在两台PE路由器之间建立MP-iBGP邻居关系&#xff0c;用来传输V4路由&#xff1b;AS100中…

python中list函数_list()函数以及Python中的示例

python中list函数Python list()函数 (Python list() function) list() function is a library function, it is used to create a list, it accepts multiple elements enclosed within brackets (because list() takes only one argument. Thus, the set of elements within b…

IDEA 终于支持中文版和 JDK 直接下载了(太方便了)附新版介绍视频

这是我的第 48 篇原创文章。IDEA 2020.1 经过了漫长的打磨终于发布正式版了&#xff0c;而这次的版本不止直接支持 Java 14&#xff0c;还带来了两个重量级的功能&#xff1a;官方中文版支持和 JDK 直接下载。在之前的开发中&#xff0c;当我们需要下载 JDK 时&#xff0c;通常…

【BO】WEBI文件打开时提示Illegal access错误

在infoview中打开WEBI文件时&#xff0c;提示如下错误。 通过查看SCN&#xff0c;找到错误原因是CMC中有一个服务没有启动。 启动这个服务即可&#xff1a; WebIntelligenceProcessingServer转载于:https://www.cnblogs.com/uzipi/p/3905513.html

华为交换机链路聚合使用ENSP模拟器进行实验

一、简介 链路聚合(Eth-Trunk)是将多个物理接口捆绑为一个逻辑接口,实现增加链路带宽,提高可靠性,提供负载分担的目的。 二、华为ENSP模拟器仿真图 华为交换机LSW1和LSW2端口G0/0/2、G0/0/3实现链路聚合,这2个交换机通过静态路由实现2个不同网段V10、V20互通。 三、华…

为什么工作很卖力,最后还晋升不了?

作者 | 军哥来源 | 军哥手记&#xff08;公众号ID&#xff1a;zxhy_cj&#xff09;最近写文章多了一些思考&#xff0c;要写对大家有价值的、有启发、有思考的东西&#xff0c;希望读者朋友们enjoy&#xff01;为什么自我感觉良好&#xff0c;可是晋升没我&#xff1f;感觉老板…

python 示例_Python中带有示例的class关键字

python 示例Python类关键字 (Python class keyword) class is a keyword (case-sensitive) in python, it is used to define a class, when we need to define a class, before the class name - we must have to use class keyword. class是python中的一个关键字(区分大小写)…

基于Java的数据采集(终结篇)

关于写过关于JAVA采集入库的三篇文章&#xff1a; 基于Java数据采集入库&#xff08;一&#xff09;&#xff1a;http://www.cnblogs.com/lichenwei/p/3904715.html 基于Java数据采集入库&#xff08;二&#xff09;&#xff1a;http://www.cnblogs.com/lichenwei/p/3905370.ht…

华为交换机、路由器配置单臂路由实现不同网段通信

一、eNSP模拟器仿真图 二、华为交换机配置 //批量创建VLAN [Huawei]vlan batch 10 20 //PC1电脑与交换机连接端口配置 [Huawei]interface GigabitEthernet0/0/2 [Huawei-GigabitEthernet0/0/2]port link-type access [Huawei-GigabitEthernet0/0/2]port default vlan 10 [Huaw…

python中的Lambda表达式/函数

Explanation: 说明&#xff1a; In python, there is a function named Lambda. Lambda function is an anonymous function - that means the function which does not have any name. 在python中&#xff0c;有一个名为Lambda的函数。 Lambda函数是一个匿名函数-表示该函数…