先谈谈虚拟化吧!
为什么要有虚拟化?物理CPU,物理内存和存储,物理网络的硬件能力越来越丰富的情况下,为了高效、灵活的使用资源,以及在使用时的资源隔离,把硬件资源抽象成软件资源,来动态的业务按需分配和使用。
在虚拟化环境下,物理服务器的CPU、内存、硬盘和网卡等硬件资源被虚拟化并受Hypervisor的调度,多个操作系统在Hypervisor的协调下可以共享这些虚拟化后的硬件资源,同时每个操作系统又可以保存彼此的独立性。根据Hypervisor所处层次的不同和Guest OS对硬件资源的不同使用方式,Hypervisor虚拟化被分为两种类型:Bare-metal虚拟化方式(“裸机”虚拟化)和Host OS虚拟化方式(基于操作系统的虚拟化,宿主型虚拟化)。
Host OS类型将Hypervisor虚拟化层安装在传统的操作系统中,虚拟化软件以应用程序进程形式运行在Windows和Linux等主机操作系统中。典型的宿主型Hypervisor有VMware Workstation和VirtualBox。
Bare-metal类型的Hypervisor虚拟化环境中无须完整的Host OS,直接将Hypervisor部署在裸机上并将裸机服务器的硬件资源虚拟化,Bare-metal类型(裸机)Hypervisor有Microsoft的Hyper-V以及开源的KVM等虚拟化软件。我们常说的虚拟化一般指的是Bare-metal类型。
虚拟化技术又分为全虚拟化(Full Virtualization,FV)、准虚拟化(Para Virtualization,PV)和主机操作系统虚拟化(Host OS Virtualization),其中PV和FV基于Bare-metal类型Hypervisor的虚拟化技术,而主机操作系统虚拟化基于Host OS类型Hypervisor的虚拟化技术。
基于容器的虚拟化技术并不依赖传统的Hypervisor虚拟化引擎,而是在Host OS中配置虚拟服务器环境(Virtual Server Environment,VSE),即无须在Host OS中配置Hypervisor,并且在容器虚拟化中,仅有Guest OS被仿真模拟。由于容器虚拟化技术抛弃了较为复杂的,针对全部硬件资源进行虚拟化的Hypervisor,且是仅针对Guest OS的虚拟化,因此基于容器的虚拟化是一种“更轻”的虚拟化方式,同时也具有很好的性能。
为了解决硬件性能和过剩和软件冲突,**「硬件虚拟化」**的普及就很自然而然的出现。对于 Guest OS 和上面的应用程序来说,这台虚拟机和普通物理计算机是完全一样没有任何区别的——除了性能可能差一点。全球第一人气的 VMware Workstation 就是这么一个软件,Oracle 的 VirtualBox 以及 Microsoft 的 Virtual PC 都是。这类软件英语有一个专用的单词是 Hypervisor(虚拟机管理程序)。
虚拟机的优点:
虚拟机的缺点:
为了解决这个问题,容器技术发展了起来,她是应用程序级别的虚拟化技术。和虚拟机相比,容器有以下优点:
Docker的创始人所罗门·海克斯(Solomon Hykes)说过:“如果在2008年已经有了 WASM + WASI,我们根本不需要创建 Docker,WASM 就是这么重要。服务器端的 Webassembly 是计算的未来。标准化的系统接口是缺失的环节。让我们希望WASI能够胜任这项任务!”,可见其对WASM的重视和青睐。
WebAssembly 技术源于浏览器,其发展历程可以说是一部浏览器性能优化史。在 Web 前端领域,JavaScript 语言是编写运行在浏览器上的 Web 应用的首选,为了满足应用日益增长的性能需求,针对 JavaScript 语言本身缺陷带来的瓶颈优化,逐步形成了三个阶段性优化产物,他们分别是 asm.js、NaCl/PNaCl 以及 WebAssembly。
随着 WebAssembly 在开发者社区中越来越流行,WebAssembly 的潜在价值从 Web 逐渐开始向其他领域,比如云原生、AI 以及区块链,物联网等;2019 年 12 月,Bytecode Alliance 字节码联盟宣布正式成立,联盟旨在通过协作的方式,来共同实现 WebAssembly 及 WASI 相关标准,并通过提出新标准的方式来共同打造 WebAssembly 在浏览器之外的未来生态。
英特尔的 WebAssembly Micro Runtime(WAMR)和 Mozilla 主导的 WASMTIME 成为转入字节码联盟的第一批核心开源项目。字节码联盟的目标是基于 WebAssembly 和 WebAssembly System Interface(WASI)等标准创建一个安全、高效和模块化的新运行引擎(Runtime)环境和语言工具链,同时推广让尽可能多的平台和设备使用它们。
WebAssembly 是一个新的技术体系而非单一技术,它涉及到编程语言、编译器、虚拟机、工具链 (LLVM, Binaryen 等)、操作系统等相关的多个技术领域。
WASM 的名称的体现了它在最初的设计中人们对它的希望:能够在 Web 环境中快速地运行。目前,WASM 已经能够在包括浏览器在内的很多不同的环境中运行。这些场景包括:云原生场景、移动设备、物联网、区块链等多种不同的场景。在这些场景中,大家使用 WASM 的主要目标包括,但是不限于如下几个方面:
一个引擎如何驱动一段程序运行,并得到结果呢?
wasmtime 是非盈利组织——字节码联盟(Bytecode Alliance)旗下的 WebAssembly 引擎,使用 Rust 语言编写开发,是一种高性能编译型 wasm 引擎。
wasmtime 对于 WebAssembly 相关标准支持的完整度非常高。它支持了标准的 WASI,实现了标准的 wasm c-api,并紧密跟踪 WebAssembly 核心特性。
WasmEdge 是一款由 CNCF(Cloud Native Computing Foundation,云原生计算基金会)托管的 WebAssembly 引擎,其命名也在告诉我们:WasmEdge 主要面向边缘计算、云原生和去中心化应用。根据 IEEE 论文数据,WasmEdge 是当时运行性能最高的 WebAssembly 运行时。但根据最新的 2023 wasm runtime benchmark 数据[2],wasmedge 的性能优势已经有所削弱。
与 wasmtime 一样,WasmEdge 也是一种编译型的 wasm 引擎,可以按照 JIT/AOT 两种模式对 wasm 指令进行编译,并最终执行。不同之处在于,WasmEdge 使用 LLVM 作为编译器后端,利用了 LLVM 出色的优化编译能力。因此,相比于使用 Cranelift 的 wasmtime,WasmEdge 生成的指令更优,执行速度更快。
除了卓越的性能表现之外,WasmEdge 的一个最为显著的特点就是社区提供丰富的扩展能力。比如,在云原生的使用场景中,很多开发者使用 JavaScript 语言开发应用。
wasm3 是一款基于解释器执行的轻量级 WebAssembly 引擎,使用 C 语言编写开发,wasm3 最大特点就是依靠纯解释器执行所有的 WebAssembly 指令,没有引入 JIT/AOT 编译。根据 Benchmark 数据,自 wasm3 出现在社区并逐渐成熟之后,在相当一段长的时间内,wasm3 都是运行速度最快的解释型引擎。
由于是纯解释执行, wasm3 可以在多系统等设备上运行。而这一点是其它纯编译型引擎无法做到的,这也赋予了它独特的跨平台优势。再考虑到它的轻量特点——移动端二进制产物体积不到 70 KB,作为移动端引擎,wasm3 可谓表现优异。
wasm-micro-runtime 也简称为 WAMR,与 wasmtime 一样是隶属于 Bytecode Alliance 的开源 WebAssembly 引擎项目,适用于嵌入式平台、各类 IoT 设备、智能合约和云原生等场景。名字中的 micro 也正是它的特点之一:WAMR 的二进制产物很轻量,纯 AOT 配置的产物体积只有约 50KB,非常适合资源受限的宿主。
WAMR 同步支持解释与编译两种方式执行 wasm 程序,因此兼有两种执行方式低冷启延迟、高峰值性能的优点。使用编译模式时,宿主可以选择使用 JIT 或 AOT 方式执行目标程序。与 WasmEdge 相同,WAMR 的编译器也基于 LLVM 构建。根据官方数据,JIT 或 AOT 的执行方式可以得到接近原生的速度,表现十分亮眼。而援引最新的 2023 年 wasm runtime 的性能测试数据,wamr 是运行速度最快的引擎。可见,wamr 在 2022 年度完成了行之有效的优化。
引擎 | 关键特征 |
---|---|
wasmtime | 高性能编译 字节码联盟项目 应用于Serverless等场景 |
wasm3 | 高性能解释器 跨平台, iOS 等平台 通用轻量级引擎 |
WasmEdge | 在 Docker 中集成 使用 LLVM 编译后执行 社区提供了非常丰富的扩展能力 |
wasm-micro-runtime | 解释 & 编译两种运行模式 使用 LLVM 作为编译后端 运行速度最快的引擎 适用于 IoT 设备等资源受限的场景 |
基于OneOS,我们希望寻找一个创新的项目进行开发验证,基于此,从虚拟化和安全的角度出发,我们认为WAMR符合这些条件,和传统的虚拟化技术相类比,我们认为她就是物联网下的Docker。它的特性在不同环境下可以带来各种价值,下面简单列举一二:
文章浏览阅读1.5w次,点赞2次,收藏5次。如何手动触发 JavaScript 垃圾回收行为?垃圾回收,即 garbage collect,简称 “GC”。这里的 “手动” 指有效地、显式地、可控地触发浏览器 JavaScript 引擎的垃圾回收行为,比如通过点击页面中的按钮来调用 JS 方法,或使用浏览器提供的功能。IEIE 实际上提供了一个未公开的 JS 方法 CollectGarbage()。至少在 I_js手动触发gc
文章浏览阅读2.6k次。一、Flume是什么 Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。二 、Fulme 有什么特点Fulme 特点如下: 1、可靠性 当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to_flume海量日志聚合
文章浏览阅读353次。公司项目需要用到ios原生和JS交互,所以要用到WKWebView。使用很简单,下面我贴出几幅截图(列子是通过js触发后调用ios原生方法)导入WebKit,并遵守协议开始创建WKWebView和WKWebView的配置类WKWebViewConfiguration、WKUserContentController代理方法最后remove一下,_h5和ios交互,判断ios还是安卓的具体代码
文章浏览阅读6.9k次,点赞6次,收藏19次。ubuntu镜像,清华镜像_ubuntu镜像下载
文章浏览阅读608次。uniapp 支付宝小程序拉起收银台 h5拉起收银台 授权 获取code _uniapp h5获取支付宝授权
文章浏览阅读463次。ehcache 使用说明_withevictionadvisor
文章浏览阅读1.5w次,点赞19次,收藏54次。本文算法完整实现源码已开源至本人的GitHub(如果对你有帮助,请给一个 star ),参看其中的 iforest 包下的 IForest 和 ITree 两个类: https://github.com/JeemyJohn/AnomalyDetection前言 本文介绍的 Isolation Forest 算法原理请参看我的博客:Isolation Forest异常检测算法原理详解,本文_compute_path_length功能
文章浏览阅读2.4w次,点赞7次,收藏21次。Android Studio里SDK原生的Android模拟器不支持蓝牙,Android x86支持蓝牙。下载工具1、VirtualBox2、Android x86参考:Android x86安装详细教程_android x86安装教程
文章浏览阅读1.1k次。问题:在本地启tomcat,报错严重: StandardServer.await: create[8080]:java.net.BindException: Address already in use: JVM_Bind原因:端口已被其他进程占用解决:1.找tomcat配置文件server.xml修改端口配置MyEclipse自带的tomcat的server.xml文件位置服务启动,原来是8005报错,改为9090就好了HTTP请求默认的本地ip端口80802.查看进程,该端口被_tomcat端口冲突怎么解决
文章浏览阅读5.3k次。2022头歌平台操作系统实验一实验(1):Linux操作系统基本使用实验(2):Linux之C编程入门文章目录2022头歌平台操作系统实验一前言一、Linux操作系统基本使用二、C编程入门1.C语言程序从源代码到二进制行程序需要经历如下四个步骤:2. gcc命令:3. gcc运用三、编程要求1.在当前目录下新建一个新的文件(名称为newfile);2.在当前目录下新建一个新的文件夹(名称为newdir);3.将newfile文件复制一份到newdir目录下并命名为newfileCpy。总结前言_当前目录下新建一个新的文件(名称为newfile); 在当前目录下新建一个新的文件夹(名
文章浏览阅读869次。OSPF路由重分发OSPF路由重分发的作用非成末梢区域区域类型表OSPF虚链路配置虚链路的规则及特点路由重分发指令配置OSPF路由重分发的作用在现实环境中,一个单一的IP路由协议是管理网络中IP路由的首选方案,但是,在企业环境中,网络中是存在多种路由协议的,如果想要这些网络都互连互通,就要至少有一台路由器运行多种路由协议来实现不同网络之间的通信。就需要使用今天介绍的路由重分发,那我们下面简单介绍一下路由重分发及相关的配置。路由重分发通常在那些负责从一个AS学习路由,然后向另一个AS广播的路由器进行配置_路由重分布的作用
文章浏览阅读883次。一.RabbitMQ的可靠性投递1.MQ实现异步通信过程中,消息丢失或重复,可能导致业务数据不一致如何解决? ps:在解决问题之前,必须清楚可靠性只是问题的一方面,发送消息的效率同样是需要考虑的问题,而这两个因素无法兼得。如果在发送消息的每一个环节都采取相关措施来保证可靠性,势必会对消息的收发效率造成影响。会产生消息丢失的四个地方:1.从生产者到Broker,Broker未接收 可能原因:网络连接或者Broker的问题(硬盘故障、硬盘写满了)导致消息发送失败,但生产者..._rabbitmq consumer tag