后端服务器概念了解下

  1. CGI
  2. FastCGI
  3. Servlet
  4. 容器
  5. Docker
  6. 并发量
    1. “共享宽带”和“独享宽带”
    2. 在线人数的因素
    3. 参考公式
    4. 服务器

本文主要是收录些后端节点的概念,通过了解来帮助阅读后端的技术资讯、排查系统问题、项目需求会议整体讨论等情境上可以对后端相关的内容能有一定认知度,思考与自身领域的相关性,而不至于错过一些优秀的思维角度和设计理念、定位问题局限、相关议题参与度低等情况,也可以作为扩充知识面,学习后端的导索。

CGI

先看一个普通的网络请求流程:

Client -> Web Server -> CGIs
Client <- Web Server <- CGIs

在上面的流程中,
Web Server:如果是静态页面直接返回响应,如果是动态页面则提取请求信息发送给CGI程序。
CGIs:多个通用网关接口(Common Gateway Interface)的进程响应请求;

CGI的特性:

  • Http 协议只存在于Web Client和Web Server之间,与CGI程序之间没有任何关系;
  • Web Server与CGI程序之间的数据传输遵循的是CGI规范;
  • Web Server和CGI程序运行在同一个主机上,每个CGI请求Web Server都会fork一个新的CGI程序的进程,等到请求处理完毕则该进程结束;
  • 如果是请求动态页面(至于如何判断是静态页面还是动态页面则是在Web Server中通过正则表达式进行匹配),通过解析该请求携带的信息,并依据CGI规范将这些信息打包到CGI规定的变量中,然后在Web Server中调用OS中对应的CGI程序来解析该CGI请求,然后生成相应的页面返回给Web Server服务器,然后Web Server再将该内容返回给客户端;
  • CGI程序不对Web客户端开放,CGI程序是与OS有关的,需要根据OS的环境使用适当的语言来开发,所以对系统平台的移植不友好,需更改代码或重新编译。

通俗来讲解的话,就是,一个HTTP请求到达一台服务器的80端口(Web Server)的时候,需要有个程序来响应这个请求。所谓HTTP response,其实只是运行一个程序,它的输入是HTTP request header,它的返回是HTTP response。程序运行方式的区别、HTTP request header的传递方式区别就是CGI、WSGI以及其他各种GI的区别。如果是CGI,通常来说是一个web server(例如apache、nginx)接收到请求后,将请求中的HTTP request header按照一定规则设置成环境变量,然后启动一个程序(Python脚本),将stdout的输出(其中包含HTTP response header)当成HTTP response返回给客户端。

FastCGI

FastCGI是对CGI的一个从本质上改变的优化。

FastCGI程序只有一个进程来处理CGI请求,而且处理完该请求之后也不会销毁,而是作为守护进程继续运行。

FastCGI程序允许运行在不同的主机之上,而Web Server和FastCGI之间通过TCP连接进行通信,这种方式可以使Web Server和FastCGI程序独立配置和启动,也可以通过负载均衡提高系统的伸缩性和扩展性。

Servlet

对于生成动态页面和进行数据的传输,CGI和Servlet是两个可实现的选项。而对于servlet来说,虽然目前Java EE有些式微,但作为实现微服务的前沿框架Spring Boot仍然是建立在Servlet的基础之上。

Servlet运行在一个进程中,对于每个请求则会生成一个单独的线程,由这些独立的线程处理对应的HTTP请求,Servlet执行完毕后不会销毁,而是驻留在内存中直到Servlet Container关闭,以便能随时处理HTTP请求。Servlet是由多个线程处理请求,所以各个请求之间可以进行很容易的进行数据共享。但如果将编译生成的字节码文件移动到另外的主机或者另外的操作系统中,只要是存在JVM就仍然可以运行。

Servlet和JSP两者分工协作,Servlet侧重于解决运算和业务逻辑问题,JSP则侧重于解决展示问题。

容器

一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。
通俗形容:容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。

容器虚拟化的是操作系统而不是硬件,容器之间是共享同一套操作系统资源的。虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统。因此容器的隔离级别会稍低一些。

  • 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
  • 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。
  • 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

Django在容器中,如果是Django跑在uWSGi、unicorn之类的容器里,那么程序是一个常驻进程,web server和Python进程用WSGI协议传递HTTP request header信息,然后返回给用户。如果是Django的dev server,它使用Python自带的wsgiref模块实现了一个简单的HTTP server (django/django/core/servers/basehttp.py at master 路 django/django 路 GitHub),响应HTTP请求。

同样Servlet是受控于另一个由Java实现的容器,Tomcat就是这样一个容器。

容器能为Servlet提供:

  • 通信支持:利用容器提供的方法,你能轻松地让servle与Web服务器对话。
  • 生命周期管理:容器控制着servlet的生与死。它会负责加载类、实例和初始化servlet、调用servlet方法,并使servlet实例能够被垃圾回收。
  • 多线程支持:容器会自动地为它接收的每个servlet请求创建一个新的java线程。针对客户机的请求,如果servlet已经运行完相应的HTTP服务方法,这个线程就会结束(也就是会死掉)。
  • 声明方式实现安全:利用容器,可以使用XML部署描述文件配置(和修改)安全性,而不必将其硬编码写到servlet(或其他)类代码中。
  • JSP支持:负责把JSP代码翻译成真正的java。

Docker

Docker 是世界领先的软件容器平台。

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核 的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docke最初实现是基于 LXC.

Docker 能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。
用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker的思想:

  • 集装箱
  • 标准化: ①运输方式 ② 存储方式 ③ API接口
  • 隔离

Docker的基本概念:

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

使用Docker的优点:

  • Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 “这段代码在我机器上没问题啊” 这类问题;——一致的运行环境
  • 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。——更快速的启动时间
  • 避免公用的服务器,资源会容易受到其他用户的影响。——隔离性
  • 善于处理集中爆发的服务器使用压力;——弹性伸缩,快速扩展
  • 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。——迁移方便
  • 使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。——持续交付和部署

容器与虚拟机的区别:
容器是一个应用层抽象,用于将代码和依赖资源打包在一起。多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行 。与虚拟机相比, 容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动 。
虚拟机 (VM) 是一个物理硬件层抽象,用于将一台服务器变成多台服务器。 管理程序允许多个 VM 在一台机器上运行。每个VM都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此 占用大量空间 。而且 VM 启动也十分缓慢 。

并发量

1M带宽到底能容纳多少人同时在线呢?

对于一台中低端服务器通常支持在线人数最高为2000人左右,而且只适合普通网站建设后的服务器和文字型论坛,不包括图片类、下载类、视频类等。如果是其他类型的网站,那就要考虑更高配置的服务器以及更大的带宽。

“共享宽带”和“独享宽带”

在租用服务器时一定要了解“共享宽带”和“独享宽带”的区别。有些服务器的带宽配置是共享带宽或者独享带宽,而共享带宽就是有一定数量的用户在使用,而独享带宽就只有自己在使用,但独享带宽的费用是比独享高出许多。

在线人数的因素

1)访问量
2)网站类型

如果是出文字的网站(如小说站),1M带宽带动日均5000IP,还勉强。如果是普通网站有图片,有文字、论坛、新闻资讯类型网站大概1M能带1000IP。考虑到高峰期并发,1M高峰期还会卡(假设1000IP同时并发,只有1KB带宽/用户)。

参考公式

支持连接数 = 服务器带宽/页面尺寸大小

  1. 打开网站8秒原则
  2. 评判用户从服务器下载文件的速度
  3. 页面的标准尺寸大小为(假设60KB)

通过计算大致结果是,1Mbps的带宽(服务器的1M带宽最快上下速度能达到1M/s),跟一般家用的带宽稍有区别,支持的连接数为:17个(=1M/60K)。因此,N M带宽可以支持的同时在线人数大概为N*17个。所以,1M带宽的服务器,日均3000IP以下应该没问题。当然如果网站每个页面都比较大的话,那就没这么多了。

服务器

  1. 服务器的质量:服务器分为高中低三种。不同型号品牌的服务器能够承受的流量是不同的,所以,这是影响同时在线访问数量的原因之一。
  2. 宽带的大小:假若服务器保证的最大带宽是5M (即5Mbit/s),相应服务器的数据最高传输速度应为5Mbit/s x 1024/8=640KB,1分钟流量大约640 x 60=38400KB。假设毎个用户1分钟内始终占用10KB的流量,即该1分钟内支持占用这样的流量的同时在线访问人数为3840人(视频类大流量网站不在此例)。但并不能保证每个用户在1分钟内只有一次到该站的链接,假如每个用户在1分钟内有两次或以上到该站的链接)每个链接始终占用10KB的流量),那么支持在线人数应该在2000以下。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 mingfungliu@gmail.com

文章标题:后端服务器概念了解下

文章字数:3.1k

本文作者:Mingfung

发布时间:2019-02-21, 20:30:00

最后更新:2020-01-09, 10:05:12

原始链接:http://blog.ifungfay.com/后端/后端服务器概念了解下/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

宝贝回家