一种基于虚拟化技术构建智能终端WEB运行时的方法
技术领域
本发明涉及智能终端,涉及虚拟化技术领域和WEB引擎、WEB运行时技术领域,特别涉及一种基于Docker虚拟化技术,采用容器隔离WEB应用的多进程WEB引擎技术,具体涉及一种基于虚拟化技术构建智能终端WEB运行时的方法。
背景技术
随着嵌入式系统的发展越来越智能化,所支持的应用也越来越多,在多应用运行环境下,用户的隐私数据面临巨大的挑战,木马,恶意软件和病毒很容易侵入并盗取用户的隐私数据。为了增强应用的安全性,我们采用虚拟化技术,通常基于虚拟化技术,应用之间通过容器进行隔离,应用彼此之间是完全隔离的,即使一个子系统遭受攻击而崩溃,也不会对其他系统造成影响。此外,通过虚拟化技术可通过改进灾难恢复解决方案提高业务连续性,在使用备份机制后,子系统可以被快速的恢复且不影响整个集群的运作,在整个数据中心实现高可用性。虚拟化的另外的优点是资源整合和效率,通过资源整合提升效率,虚拟化技术可以大大提高资源的利用率。
在智能终端上,虚拟化技术可以为应用提供安全域,有效隔离应用间访问,保护用户隐私数据,提供资源使用效率。以Docker为代表的容器虚拟化技术是目前虚拟化技术的热点,Docker除具备虚拟化本身的优点外,还具有以下的独特优点:
◆轻量级虚拟化技术
Docker以LXC核心,是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。LXC可以在操作系统层次上为进程提供虚拟的执行环境,一个虚拟的执行环境就是一个容器。
◆秒级启动,秒级停止,空间资源占用极少
随着虚拟化技术的发展,一台物理的机器可以虚拟成多台虚拟机,但是虚拟一个独立操作系统是存在系统损耗的,不可能虚拟太多。而容器就不同,同一台机器,可以运行几十个甚至数百个容器,性能上的损耗很小,并且启动一个容器,就像启动一个进程那么简单,在秒级的时间即可完成。
◆实现进程级别的隔离
Docker可以在进程级别进行隔离,因此一台物理的机器,可以运行非常多的容器,而将性能损耗降到最低。在Docker中,有容器和仓库的概念,任何服务,都可以打包成容器。容器可以存储在仓库中。当需要执行时,直接从仓库中拉取进行执行。服务的运营实体不需要了解容器内部的结构,只需要从仓库中拉取进行执行就行了。
◆高效的资源利用率
Docker的核心LXC提供的另一个组件是控制组(cgroups)。命名空间负责主机与容器之间的隔离,而控制组实现资源核算和限制。当允许docker限制被一个容器消耗的资源:如内存、磁盘空间和输入输出时,控制组也会输出大量与之相关的指标。这些指标使docker能够监控容器内各个进程的资源消耗并确保每个进程只获取可用的公平共享资源。
◆以应用为中心
相对于机器而言,Docker被用于优化应用的部署过程。而LXC的辅助脚本专注在把容器作为一个轻量级的机器使用——基本上就是一堆启动更快并且内存需求更小的服务器。
◆自动构建
Docker引入了源代码自动打包到容器的工具,并且能够对于应用的依赖,构建工具,打包服务等有着完全的自主掌控能力。从而能够自由地使用make、Maven、Chef、Puppet、salt、debian包、RPM包,源码包,或者任意以上的结合,而无需关心机器本身的配置。
目前Docker虚拟化技术主要在服务器端使用,在智能终端上因CPU的结构不同及软件版本有较大不同,还未在智能终端上采用Docker虚拟化技术,在智能终端上,针对WEB应用核心技术是WEB引擎,WEB引擎除具备浏览器内核的功能外,还需要能实现对WEB应用的下载、安装管理、生命周期管理等。在多个WEB应用的运行环境中,为了让多应用运行井然有序,需要对多WEB应用进行统一管理。多应用管理采用WEB运行时环境,基于多进程机制。多进程在安全性和稳定性上优于多线程模型,单个进程有独立的内存空间,不同于多线程共享虚拟内存,因此不会因为一个线程的崩溃导致整个应用的崩溃。多进程模型和多线程模式相比,如果将IPC和启动的开销降低,其性能的高低仍然取决于各个进程中的线程设计。Google和Mozilla都采用了多进程架构,促使浏览器采用多进程架构的原因是越来越复杂的页面。随着页面越来越复杂,H5、Webapp或者Hybrid App等等,它们执行的任务越来越重,不再像以前都是文档类型的页面,现在的页面更像是一个应用。它们对系统资源的需求变大,同时不稳定的机率也增大。如果同时开启多个页面,就会引入更长的操作延迟,严重影响用户体验。页面浏览中核心的功能是页面的渲染(从DOM Tree到Render Tree),JS的执行,需要集中运算的功能,相对独立于系统资源的使用。而系统资源的使用又可以集中起来共享使用,也有利于将不安全的页面与系统资源隔离开来(沙箱机制的需求)。于是就形成了多进程架构。
WEB运行时环境,可实现对WEB应用安装管理、生命周期管理等;在设计WEB运行时环境时,目前存在的问题是:WEB应用的安全性低,不能实现WEB应用的服务迁移。
发明内容
本发明的目的在于克服目前WEB应用存在的上述问题,基于多进程WEB引擎,提供了一种基于虚拟化Docker技术、面向WEB应用的构建WEB运行时环境的方法;该方法将多进程WEB引擎与Docker虚拟化技术相结合,构建了一种WEB运行时环境,能够更有效地隔离WEB应用,隔离资源和进程,使得WEB应用具有更好的安全性。
为了实现上述目的,本发明提供了一种基于虚拟化技术构建智能终端WEB运行时环境的方法,所述方法包括:
构建与Docker相结合的多进程WEB引擎,每个WEB应用通过容器进行隔离;将多进程WEB引擎中浏览器主进程和渲染进程进行分离,渲染进程在Docker容器中运行;多进程WEB引擎中的浏览器主进程和渲染进程通过IPC进行通信;WEB运行时管理中的应用进程包括Docker的Container Handler和Docker client,其中Container Handler用于管理应用的进程,调用Docker client提供的接口;Docker client用于与Docker引擎交互,管理容器和获取容器状态信息。
上述技术方案中,当多进程WEB引擎为chromium时,所述构建与Docker相结合的多进程WEB引擎具体包括:
步骤101)将Zygote Process修改成Docker client端,与Docker engine进行通信,利用Docker的容器技术隔离和创建Render Process;
步骤102)将ZygoteHost修改为管理以上Docker client端的host端;
步骤103)将Render Process与Browser Process进行分离,独立出RenderProcess,并将其作为容器执行的入口程序;
步骤104)Browser process和Render Process通过IPC进行通信;
步骤105)Browser process与终端虚拟化Docker引擎在框架层进行结合;chromium多进程包括:Browser Process、Zygote Process和Render Process;其中BrowserProcess为整个浏览器核心进程,管理web应用,zygote Process用于为每个web app提供运行环境,渲染引擎Render Proces中为每个web应用。
上述技术方案中,在所述步骤103)中,所述容器包括:根文件系统RootFS、RenderProcess、View Process和对设备的访问。
上述技术方案中,容器实现对设备的访问的前提是:首先需要在容器的RootFS中包括该设备名称,即容器的RootFS系统中存在设备文件;另外需要针对增加的设备添加容器的cgroup访问权限。
本发明的方法具有以下的优点:
1、本发明的方法基于容器隔离WEB应用,使得WEB应用具有更高的安全性;可同时实现对进程和资源的隔离;在应用隔离的同时并可实现资源共享,资源利用率高;容器间可基于Docker虚拟化技术进行通信;启动速度快。
附图说明
图1为多进程引擎chromium的示意图;
图2为将chromium多进程WEB引擎与Docker结合后的示意图;
图3为本发明构建的Web运行时软件架构的框架图。
具体实施方式
下面结合附图和具体实施例对本发明进行进一步的说明.
下面以多进程WEB引擎chromium为例,说明如何基于Docker虚拟化技术来构建WEB运行时环境。
如图1所示,Chromium中每个Tab页对应了一个进程,据此可看到chromium中的进程关系:主进程Browser管理整个主框架逻辑,负责UI显示和窗口管理,其中有一个MainThread作为各RenderProcess和RenderView的Host管理不同Tab的渲染和显示,另一个I/OThread作为代理,支持Host和Client的通信;每个Tab页为Renderer进程,负责自己页面的处理和渲染,通过IPC和I/O Thread的代理,与Browser进程通信。Renderer进程包含MainThread和Render Thread两个线程,前者负责通信,后者负责页面渲染和交互。可以看到webkit是被包含进每个Renderer进程中的。
chromium浏览器包括以下主要进程类型:
Browser Process:浏览器的主进程,负责浏览器界面的显示,各个页面的管理,其他各种进程的管理;
Render Process:页面的渲染进程,负责页面的渲染工作,WebKit的工作主要在这个进程中完成;
NPAPI Process:每种类型的插件只会有一个进程,每个插件进程可以被多个Render进程共享;
GPU Process:最多只有一个,当且仅当GPU硬件加速打开的时候才会被创建,主要用于对3D加速调用的实现;
Pepper Process:同NPAPI插件进程,不同的是为Pepper插件而创建的进程。
如图2所示,多进程WEB引擎chromium与DOCKER的结合的具体步骤方法如下:
步骤101)将Zygote Process(Sandbox init)修改成docker client端,与Dockerengine进行通信,利用Docker的容器技术隔离和创建Render Process;
步骤102)将ZygoteHost修改为管理以上docker client端的host端;
步骤103)将多进程WEB引擎中的渲染引擎Render Process与Browser Process进行分离,独立出Render Process,并将其作为容器执行的入口程序,即多进程WEB引擎中的Render Process放在容器中;
在所述步骤103)中,所述容器包括:根文件系统RootFS、渲染进程RenderProcess,显示进程View Process和对设备的访问。
在Docker整个系统设计中,容器实现对设备的访问(如hi_disp,)的前提是:首先需要在容器的RootFS中包括该设备名称,即容器的RootFS系统中存在设备文件/dev/hi_disp;另外需要针对增加的设备添加容器的cgroup访问权限。
在容器RootFS中增加设备名称,可采用如下两种方式:第一种是根据设备的major和minor号以及设备类型调用mknod接口创建设备,第二种采用mount bind的方式将host系统/dev/中的设备挂载过来。其中第一种方式由于需要调用mknod接口,因此需要root权限,因此只有当容器的user是root才可以通过mknod调用。
cgroup使用devices子系统可以允许或者拒绝cgroup中的进程访问设备。devices子系统有三个控制文件:devices.allow,devices.deny,devices.list。devices.allow用于指定cgroup中的进程可以访问的设备,devices.deny用于指定cgroup中的进程不能访问的设备,devices.list用于报告cgroup中的进程访问的设备。devices.allow文件中包含若干条目,每个条目有四个字段:type、major、minor和access。type、major和minor字段中使用的值对应Linux分配的设备。
步骤104)多进程WEB引擎中的Browser process和Render Process通过IPC进行通信;
步骤105)Browser process与终端虚拟化Docker引擎在框架层进行结合;
将Docker与多进程WEB引擎chromium结合后,chromium多进程分为BrowserProcess、Zygote Process与Render Process;其中Browser Process为整个浏览器核心进程,管理web应用,zygote Process用于为每个web app提供运行环境,渲染引擎RenderProces中为每个web应用。
Docker容器镜像采用分层式结构,包括三个部分:基础镜像,WEB引擎相关库的镜像和应用程序,其中,基础镜像是指系统程序运行所依赖的环境,如busybox,libc库,驱动等;WEB引擎相关库的镜像是指WEB引擎运行所依赖部分,应用程序则是指容器运行入口程序。容器间的基础镜像和WEB引擎相关库的镜像部分是所有容器间共享的,不同容器间运行程序的差异在于其应用程序的不同。
如图3所示,在本发明中采用的软件架构中,Docker引擎的主要作用是将每个WEB应用通过容器技术进行隔离,并为Web runtime提供接口和服务,同时提供完整容器生命周期管理,包括启动、运行、暂停、恢复、停止、迁移。
Web运行时管理中的应用进程管理包括Render Process Host,View ProcessHost,Container Handler和Docker client,其中Render Process Host和View ProcessHost与容器中的Render Process和View Process相对应,主要用于管理渲染网页,Container Handler用于管理应用的进程,调用Docker client提供的接口,Docker client用于与Docker引擎交互,管理容器和获取容器状态信息。每个容器中包括rootfs,renderprocess和view process三部分,rootfs单进程浏览器方案一样也采用分层结构,依据每个web应用的配置和入口url不同导致最上层的镜像有所差异。
本发明中的WEB运行时环境,集成了多进程WEB引擎,同时包含Installer core、Runtime core和Security core,主要功能包括:
Web应用的生命周期管理:应用启动、暂停、恢复、终止等
Web应用的执行管理:窗口管理、事件接收和分发
Web应用的打包管理:应用包解析、安全验证、配置文件解析、更新
Web应用的安全管理:应用使用资源认证、权限管理、执行状态管理等。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。