☆ 服务器运行环境

从一个HTTP的请求就能够说明服务器运行环境的【嵌套】关系。当然,不同的服务器环境当中有不同的选择。
客户端的HTTP请求,如果经过传输,遇到的第一个大门就是主机,在主机上可能有成千上万个虚拟机。
HTTP请求会找到一个虚拟机进去,这就是第二个大门。
然后可能的话,在虚拟机当中还有很多的容器,这就是第三个大门。
最后HTTP请求就会在容器当中找到HTTP服务器,
服务器会调用相应的脚本或者应用程序来处理请求做出响应。
这种包含被包含的关系,可以通过下面的图获得印象:

待续


☆ 虚拟机

虚拟机是一种隔离技术。虚拟机通常程序员都是很熟悉的。用软件来模拟硬件功能,然后在这个【虚拟硬件】上装上【操作系统】,在这个操作系统当中就能够运行很多程序了。

但是,这里要注意区分一个概念。虚拟机和虚拟机软件可【不是】一个等同的概念。虚拟机软件是虚拟机管理程序。虚拟机可以在当下的操作系统当中创建很多个的。

那么创建一个虚拟机,就是需要安装一个操作系统的,这个操作系统也是要做配置的。需要的时候,还可以创建一个虚拟机,同样地,要重复上面的步骤。这里,可以用脚本来实现【自动化】。

从底层硬件网上叠加的话。
第一层楼就是硬件。
第二层楼就是操作系统。
第三层楼就是虚拟机软件。
第四层楼就是虚拟机硬件。
第五层楼就是虚拟机当中的操作系统。
第六层楼才是你的应用程序。


☆ 容器

针对操作系统的内核共享,进行的隔离。


☆ 应用服务器进行的底层隔离

Tomcat当中的Servlet容器。


开发环境隔离(依赖版本)

Python里有VirtualEnv,在Ruby里有RVM、Rbenv,在node.js里有NVM。

这也是一种隔离技术。隔离技术讨论的都是怎么在环境当中【部署】或者是【运行】应用程序的问题。
在本地进行应用程序的开发的时候,布置的那些开发环境也算是一定程度的隔离。
但是,这里要注意两点内容。
第一,这种具有【隔离效果】的虚拟开发环境,是针对动态语言而言的。
像是对Java这种编译型的静态语言是没有的。
动态语言,比如说python,node.js,ruby这些。

可以简单粗暴地像前面对待【虚拟机】和【容器】的理解一样,对这个虚拟环境的进行区分。

Java就可以类比成虚拟机,
而python它们的环境就可以类比成为【容器】;

第二点要注意的是,这种运行环境的隔离,是要依赖版本的。因为不同的运行环境当中依赖的库都是可能不一样的。

但是,本人感觉,如果说虚拟机是对硬件上,进行的隔离。容器是对操作系统进行的隔离。那么运行环境的隔离,


运行环境隔离(虚拟机)

Java虚拟机


语言隔离

例如Markdown


总结

  1. 硬件隔离: 虚拟机
  2. 操作系统隔离: 容器
  3. 底层隔离: Tomcat中Servlet容器
  4. 开发环境隔离: python vitualEnv
  5. 运行环境隔离: JVM
  6. 语言隔离: markdown

相关文章: