Java进程隔离_程序员必知的六种隔离技术(下)

为了在开发、测试、产品环境正确的运行我们的代码,我们需要使用不同的环境隔离技术。从常用的虚拟机、应用容器等等,最后到DSL,你都知道些什么?

隔离依赖版本:虚拟环境

对于Java这一类的编译语言来说,不存在太多语言运行带来的问题。而对于动态语言来说就存在这样的问题,如Ruby、Python、Node.js等等,这一个问题主要集中于开发环境。当然如果你在一个服务器上运行着几个不同的应用来说,也会存在这样的问题。这一类的工具在Python里有VirtualEnv,在Ruby里有RVM、Rbenv,在Node.js里有NVM。

下图是使用VirtualEnv时的不同几个应用的架构图:

69329947_1

如下所示,在不同的虚拟环境里,我们可以使用不同的依赖库。在这上面构建不同的应用,也可以使用不同的Python版本来构建系统。通常来说,这一类的工具主要用于本地的开发环境。

隔离运行环境:语言虚拟机

最后一个要介绍的可能就是更加抽象的,但是也是更加实用的一个,JVM就是这方面的一个代表。在我们的编程生涯里,我们很容易就会遇到跨平台问题——即我们在我们的开发机器上开发的软件,在我们的产品环境的机器上就没有办法运行。特别是当我们使用Mac OS或者Windows机器上开发了我们的应用,然后我们需要在Linux系统上运行,就会遇到各种问题。并且当我们使用了一个需要重新编译的库时,这种问题就更加麻烦。

如下图所示的是JVM的架构示意图

69329947_2

JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它可以实现“编写一次,到处运行”。

换句话来说,它在底层实现了环境隔离,它屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

基于此,只要其他编程语言的编译器能生成正确Java bytecode文件,这个语言也能实现在JVM上运行。如下图所示的是基于JVM的Jython语言的架构图:

69329947_3

其底层是基于JVM,而编写时则是用Python语言,并且他可以使用Java的模块来编程。

常见拥有同样架构的工具,还有MySQL,如下图是所示的是MySQL的架构图:

69329947_4

MySQL在最顶层提供了一个名为SQL的查询语言,这个查询语言只能用于查询数据库,然而它却是一种更高级的用法 。它不像通用目的语言那样目标范围涵盖一切软件问题,而是专门针对某一特定问题的计算机语言,即领域特定语言。

隔离语言:DSL

这是一门特别有意思也特别值得期待的技术,但是实现它并不是一件容易的事。

作为讨论隔离环境的一部分,我们只看外部DSL。内部DSL与外部DSL最大的区别在于:外部DSL近似于创建了一种新的语法和语义的全新语言。如下图所示是两中DSL的一种对比:

69329947_5

在这样的外部DSL里,我们有自己的语法、自己的解析器、类型检测器等等。最简单且最常用的DSL就是Markdown,如下图所示:

69329947_6

如果我们可以将我们的业务逻辑写成DSL,那么我们就不需要担心底层语言的变动过多地影响原有的业务逻辑。换句话说,这相当于创建了我们自己的语言隔离环境,我们不需要思考用何种语言来实用我们的业务。

更多精彩内容欢迎关注我的微信公众号(搜索Phodal)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值