2021-02-06 分类: 网站建设
为了将我们的应用部署到服务器上,我们需要为其配置一个运行环境。从底层到顶层有这样的运行环境及容器:
实现上这是一个请求的处理过程,一个HTTP请求会先到达你的
从上图中我们还可以发现一点: Docker容器是建立在Aufs基础上的。AUFS是一种Union File System,它可以不同的目录挂载到同一个虚拟文件系统下。它的目的就是为了实现上图的增量递增的过程,同时又不会影响原有的目录。即如下的流程如下:
image
其增量的过程和我们使用Git的过程中有点像,除了在最开始的时候会有一个镜像层。随后我们的修改都可以保存下来,并且当下次我们提交修改的时候,我们也可以在旧有的提交上运行。
因此,Docker与LXC的差距就如下如图所示:
LXC时每个虚拟机只能是一个虚拟机,而Docker则是一系列的虚拟机。
3、隔离底层(Servlet容器)
在上面的例子里我们已经隔离开了操作系统的因素,接着我们还需要解决操作系统、开发环境引起的差异。早期开发Web应用时,人们使用CGI技术,它可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。并且CGI程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行。而这样的脚本语言在多数情况下是依赖于系统环境的,特别是针对于C++这一类的编译语言来说,在不同的操作系统中都需要重新编译。
而Java的Servlet则是另外一种有趣的存在,它是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。
Tomcat
在开发Java Web应用的过程中,我们在开始环境使用Jetty来运行我们的服务,而在生产环境使用Tomcat来运行。他们都是Servlet容器,可以在其上面运行着同一个Servlet应用。Servlet是指由Java编写的服务器端程序,它们是为响应Web应用程序上下文中的HTTP请求而设计的。它是应用服务器中位于组件和平台之间的接口集合。
Tomcat服务器是一个免费的开放源代码的Web应用服务器。它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能。除此,它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。其架构如下图所示:
Servlet被部署在应用服务器中,并由容器来控制其生命周期。在运行时由Web服务器软件处理一般请求,并把Servlet调用传递给“容器”来处理。并且Tomcat也会负责对一些静态资源的处理。
4、隔离依赖版本(虚拟环境)
对于Java这一类的编译语言来说,不存在太多语言运行带来的问题。而对于动态语言来说就存在这样的问题,如Ruby、Python、Node.js等等,这一个问题主要集中于开发环境。当然如果你在一个服务器上运行着几个不同的应用来说,也会存在这样的问题。这一类的工具在Python里有VirtualEnv,在Ruby里有RVM、Rbenv,在Node.js里有NVM。
下图是使用VirtualEnv时的不同几个应用的架构图:
如下所示,在不同的虚拟环境里,我们可以使用不同的依赖库。在这上面构建不同的应用,也可以使用不同的Python版本来构建系统。通常来说,这一类的工具主要用于本地的开发环境。
5、隔离运行环境(语言虚拟机)
最后一个要介绍的可能就是更加抽象的,但是也是更加实用的一个,JVM就是这方面的一个代表。在我们的编程生涯里,我们很容易就会遇到跨平台问题——即我们在我们的开发机器上开发的软件,在我们的产品环境的机器上就没有办法运行。特别是当我们使用Mac OS或者Windows机器上开发了我们的应用,然后我们需要在Linux系统上运行,就会遇到各种问题。并且当我们使用了一个需要重新编译的库时,这种问题就更加麻烦。
如下图所示的是JVM的架构示意图
JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它可以实现“编写一次,到处运行”。
换句话来说,它在底层实现了环境隔离,它屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
基于此,只要其他编程语言的编译器能生成正确Java bytecode文件,这个语言也能实现在JVM上运行。如下图所示的是基于JVM的Jython语言的架构图:
其底层是基于JVM,而编写时则是用Python语言,并且他可以使用Java的模块来编程。
常见拥有同样架构的工具,还有MySQL,如下图是所示的是MySQL的架构图:
MySQL在最顶层提供了一个名为SQL的查询语言,这个查询语言只能用于查询数据库,然而它却是一种更高级的用法 。它不像通用目的语言那样目标范围涵盖一切软件问题,而是专门针对某一特定问题的计算机语言,即领域特定语言。
6、隔离语言(DSL)
这是一门特别有意思也特别值得期待的技术,但是实现它并不是一件容易的事。
作为讨论隔离环境的一部分,我们只看外部DSL。内部DSL与外部DSL大的区别在于:外部DSL近似于创建了一种新的语法和语义的全新语言。如下图所示是两中DSL的一种对比:
在这样的外部DSL里,我们有自己的语法、自己的解析器、类型检测器等等。最简单且最常用的DSL就是Markdown,如下图所示:
如果我们可以将我们的业务逻辑写成DSL,那么我们就不需要担心底层语言的变动过多地影响原有的业务逻辑。换句话说,这相当于创建了我们自己的语言隔离环境,我们不需要思考用何种语言来实用我们的业务。
分享文章:六种隔离技术你知道几种呢?
文章网址:/news25/99425.html
成都网站建设公司_创新互联,为您提供用户体验、企业建站、外贸建站、营销型网站建设、自适应网站、小程序开发
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联
猜你还喜欢下面的内容