云原生+大数据

虚拟化:

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率

虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。

虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPu模拟多CPU并行,允许一个平台运行多个操作系统,并且应用程序都可以在相互独立的空间运行而互不影响,从而显著提高计算机的工作效率

虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。

虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率

以我的理解,虚拟化技术就是把真实存在的XXX以软件等形式,在原有XXX的基础上,实现多个虚拟XXX,或者把真实存在的多个XXX以某种方式使其透明地成为整个虚拟的XXX。比如你可以在你的主机上开多个虚拟机;又如把存储设备统一管理,对外是一整个存储设备。

**用维基百科来讲:**在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。一般所指的虚拟化资源包括计算能力和资料存储。

IBM描述:虚拟化是让物理主机硬件资源得到更充分应用的过程,也是云计算的基础。虚拟化通过软件在计算机硬件之上构建一层抽象层,允许硬件的处理器、内存、存储硬盘等被划分成多个虚拟计算机,也就是俗称的Virtual Machine(VM),每个VM运行各自的操作系统,即便他们实际都是运行在底层计算机硬件上的一部分,各个VM也表现为互相独立的计算机。由此可见,虚拟化能够更有效地利用计算机物理硬件资源,能够为一个机构在硬件上的投资带来更大的回报。如今,虚拟化是企业在IT架构上的标准做法,同时也是云计算的主要驱动技术。虚拟化使得云提供商能够基于他们现有的计算机物理硬件,为用户提供更好的服务;云用户也能够按需购买所需的计算资源,并在工作负载增加时经济而高效的拓展计算资源。

**Red Hat描述:**虚拟化是一种技术,可以利用以往局限于硬件的资源来创建有用的 IT 服务。它让您能够将物理计算机的工作能力分配给多个用户或环境,从而充分利用计算机的所有能力。

举一个实际例子,假设您有 3 台物理服务器,分别用于不同的特定用途。 其中一台是邮件服务器,一台是 Web 服务器,最后一台则用于运行企业内部的传统应用。 每台服务器只使用了大约 30% 的计算容量,这仅是运行潜能的一小部分。但是,由于传统应用对内部运营非常重要,您必须将其连同所运行的第三台服务器予以保留,对吗?

Server usage

过去确实如此。相对简单和可靠的做法是在单独的服务器上运行单独的任务:1 台服务器, 1 个运行操作系统,1 个处理任务。我们很难让 1 台服务器有多个大脑。但是,借助虚拟化技术,您可以将邮件服务器分为 2 个能够处理独立任务的特殊服务器,从而实现传统应用的迁移。您仍然使用相同的硬件,但可以更加高效地利用这些资源。

Server usage: virtualization

考虑到安全问题,您可以再次划分第一台服务器,从而可以处理另一项任务,将其使用率从 30% 提高到 60%,甚至提高到 90%。这样,现在空闲的服务器可以用于其他任务或停用,以降低散热和维护成本。

**VMware描述:**像大多数组织一样,随着业务的发展和增长,你可能正面临新的IT挑战。在一个动态的环境中,你需要提高敏捷性以跟上快速变化的业务需求。你的员工、客户和业务伙伴都要求更多的响应服务和更复杂的应用程序。当你试图跟上新的要求和不断增长的需求时,你的IT基础设施正变得越来越大,越来越复杂,给你的IT设施带来了更大的压力。

虚拟化有助于解决你最紧迫的技术挑战:基础设施的无序扩张迫使IT部门将70%的预算用在维护上,并消耗了用于业务建设创新的资源。困难源于当今X86计算机的架构:它们被设计为一次只运行一个操作系统和应用程序。这意味着,即使是小型的数据中心也必须部署许多服务器–每台服务器只能以12%的容量运行。虚拟化软件通过使多个操作系统和应用程序在一台物理服务器(host)上运行来解决这个问题。

虚拟化前

  • 每台主机一个操作系统
  • 软件硬件紧密地结合
  • 在同一主机上运行多个应用程序通常会遭遇沖突
  • 系统的资源利用率低
  • 硬件成本高昂而且不够灵活

虚拟化后

  • 打破了操作系统和硬件的互相倚賴
  • 通过封装到到虚拟机的技术, 管理操作系统和应用程序为单一的个体
  • 強大的安全和故障隔离
  • 虚拟机是独立于硬件的, 它们能在任何硬件上运行

云计算和虚拟化的简单区别:

云计算是个概念,而不是具体技术。
虚拟化是一种具体技术,指把硬件资源虚拟化,实现隔离性、可扩展性、安全性、资源可充分利用等特点的产品。

Hypervisor:

Hypervisor一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器它不是具体的软件,而是一类软件的统称,负责虚拟机的托管和管理

Hypervisor是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisor不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行Hypervisor时,它会加载所有虚拟机客户端的操作系统同时会分配给每一台虚拟机适量的内存,CPU,网络和磁盘。

关键概念:

1,虚拟化类型:

虚拟化类型,比如完全虚拟化、准虚拟化等指的是设计层面的实现虚拟化的方案和思想,而不涉及具体的虚拟化技术。

2,虚拟化技术:

虚拟化技术指的是软件层面的实现虚拟化的技术,整体上分为开源虚拟化和商业虚拟化两大阵营。部分商业虚拟化的技术也是在开源技术的基础之上发展而来的。

3,虚拟机软件:

基于虚拟化技术的单机版虚拟机管理软件,如:

  • KVM: Linux的虚拟机基于KVM虚拟技术的单机版虚拟机管理软件。
  • VirtualBox:oracle公司的直接基于Intel VT及AMD-V的虚拟机管理软件。
  • VMware Workstation:Wmware公司的基于Wmware虚拟技术的虚拟机管理软件。

4,云计算:

云计算中的虚拟化指的是IaaS层虚拟化解决方案,而不是虚拟机技术。IaaS层虚拟化解决方案,要符合IaaS层的基础特点,除了最基础的虚拟化软件之外,还包括,共享存储服务,镜像服务,身份认证服务,统一监控服务,以及收费管理等其他配套的服务。当然,既然是IaaS服务,必须支持对外API接口开放,支持定制开发。一般来说不是一个软件,而是一组软件组成的整理解决方案。

VMware vSphere是基于VMware虚拟化技术的虚拟化管理软件,目前在行业内来说算是最成熟,生产环境应用度最广的IaaS层虚拟化技术的解决方案。目前对整个集群的虚拟机监控管理也是最好的。(vSphere本身收费,而且监控软件还需要单独收费)。

Openstack是基于linux的IaaS层解决方案(支持多种虚拟化技术,比如KVM),是目前用户最多,影响最大的开源解决方案,得到了HP,IBM等知名厂商的大力支持,国内的虚拟化解决方案也大部分是基于Openstack开发定制。主要运行在cent os和ubuntu server操作系统上。

CloudStack是使用 java开发的基于linux的IaaS层解决方案(支持多种虚拟化技术,比如KVM),目前发展潜力非常不错,也得到了很多知名厂商的认可,不过相对起步比较晚,在国内的推广度也不如Openstack。

虚拟化分类:

1.完全虚拟化

最流行的虚拟化方法,使用Hypervisor这种中间层软件,在虚拟服务器和底层硬件之间建立一个抽象层。

Hypervisor可以捕获CPU指令,为指令访问硬件控制器和外设充当中介。因而,完全虚拟化技术几乎能让任何一款操作系统不用改动就能安装到虚拟服务器上,而它们不知道自己运行在虚拟化环境下。主要缺点是,性能方面不如裸机,因为Hypervisor需要占用一些资源,给处理器带来开销。

在完全虚拟化的环境下,Hypervisor运行在裸硬件上,充当主机操作系统,而由Hypervisor管理的虚拟服务器运行客户端操作系统(Guest OS)。

完全虚拟化技术又叫硬件辅助虚拟化技术,最初所使用的虚拟化技术就是全虚拟化(Full Virtualization)技术,它在虚拟机(VM)和硬件之间加了一个软件层–Hypervisor,或者叫做虚拟机监控器(VMM),可以理解成翻译者

  • hypervisor 直接运行在物理硬件之上 - KVM
  • hypervisor 运行在另一个操作系统中 - QEMU 和 WINE

在这里插入图片描述

2.准虚拟化

完全虚拟化是处理器密集型技术,因为它要求Hypervisor管理各个虚拟服务器,并让它们彼此独立。减轻这种负担的一种方法就是,改动客户操作系统,让它以为自己运行在虚拟环境下,能够与Hypervisor协同工作,这种方法就叫准虚拟化。

准虚拟化技术的优点是性能高。经过准虚拟化处理的服务器可与Hypervisor协同工作,其响应能力几乎不亚于未经过虚拟化处理的服务器。它的客户操作系统(Guest OS)集成了虚拟化方面的代码。该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。

半虚拟化技术,也叫做准虚拟化技术。它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这个API可以将客户操作系统发出的指令进行最优化,即不需要Hypervisor耗费一定的资源进行翻译操作,因此Hypervisor的工作负担变得非常的小,因此整体的性能也有很大的提高。但这属于内核级别的开发,负担太大
在这里插入图片描述

3.操作系统层虚拟化

实现虚拟化还有一个方法,那就是在操作系统层面增添虚拟服务器功能。就操作系统层的虚拟化而言,没有独立的Hypervisor层。相反主机操作系统本身就负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立。一个明显的区别是,如果使用操作系统层虚拟化,所有虚拟服务器必须运行同一操作系统。

虽然操作系统层虚拟化的灵活性比较差,但本机速度性能比较高。此外,由于架构在所有虚拟服务器上使用单一、标准的操作系统,管理起来比异构环境要容易。

4.桌面虚拟

服务器虚拟化主要针对服务器而言,而虚拟化最接近用户的还是要算的上桌面虚拟化了,桌面虚拟化主要功能是将分散的桌面环境集中保存并管理起来,包括桌面环境的集中下发,集中更新,集中管理。桌面虚拟化使得桌面管理变得简单,不用每台终端单独进行维护,每台终端进行更新。终端数据可以集中存储在中心机房里,安全性相对传统桌面应用要高很多。桌面虚拟化可以使得一个人拥有多个桌面环境,也可以把一个桌面环境供多人使用,节省了license。另外,桌面虚拟化依托于服务器虚拟化。没有服务器虚拟化,这个桌面虚拟化的优势将完全没有了。不仅如此,还浪费了许多管理资本。

5.硬件虚拟化

英特尔虚拟化技术(IVT,Intel Virtualization Technology)是由英特尔开发的一种虚拟化技术,利用IVT可以对在系统上的客操作系统,通过虚拟机查看器(VMM,Virtual Machine Monitor)来虚拟一套硬件设备,以供客操作系统使用。这些技术以往在VMware与Virtual PC上都通过软件实现,而通过IVT的硬件支持可以加速此类软件的进行。

AMD虚拟化(AMD Virtualization),缩写为“AMD-V”,是AMD为64位的x86架构提供的虚拟化扩展的名称,但有时仍然会用“Pacifica”(AMD开发这项扩展时的内部项目代码)来指代它。

虚拟化方案:

从两个角度来答:架构角度和企业侧角度。

架构角度

从实现架构上将虚拟化方案分类,也就是从虚拟化技术本身出发。现在网上资料众说纷纭,我在这里加上自己的理解做一个整合,起一个通识的作用:

虚拟化方案

全虚拟化(Full Virtualization):

全虚拟化是最早出现的虚拟化技术。顾名思义,全虚拟化中VM从头到脚都是虚拟化的,VM操作系统所发出的一切可能指令都由虚拟化层(即VM Manager, VMM或者Hyperviser)处理。

全虚拟化最先完全由软件实现,典型的实现是将客户VM的二进制代码进行翻译。后来出现了硬件辅助的全虚拟化,典型的如Intel-VT和AMD-V。

相对来说更加简单和易于实现,但由于有两层OS,管理开销更大,性能损耗大。

很多个人或者小型的组织使用的VMware Workstation和VirtualBox就属于这种软件辅助的全虚拟化,还有KVM等

半虚拟化(Para Virtualization):

半虚拟化中客户VM知道其运行在虚拟平台上,并需要主动适应,这样的虚拟平台需要对所运行的客户机操作系统进行或多或少的修改使之适应虚拟环境。虚拟化层是直接安装在硬件设备上的,会接管虚机的指令。

这种技术不依赖于操作系统,但需要对虚拟层的内核进行开发,开发难度更大。

VMware ESX、Xen、华为的FusionSphere都是这种模式。

混合虚拟化:

无需开发内核,可支持多种操作系统,但需要底层硬件的虚拟化支持。

KVM就是这种模式

操作系统级别虚拟化(Operating system–level virtualization):

常说的容器化就是一种OS级别虚拟化,也有人不把容器算作虚拟化方式的,目的是与VM方式区分开。

操作系统层上的虚拟化是指操作系统的内核可以提供多个互相隔离的用户态实例。这些用户态实例(经常被称为容器)对于它的用户来说就像是一台真实的计算机,有自己独立的文件系统、网络、系统设置和库函数等。

由于是OS提供的,这种方式往往非常高效,最核心的优点,也是Docker最鼓吹的——占用资源更少、启动更快,因为容器不需要像虚机一样运行客户端OS,容器底层是主机OS,其上只需运行需要的应用,同样做到了相互隔离,这种启动速度也使得容器可以不需要时关闭,释放主机资源。此外模块化程度更高,体积小,应用可以通过微服务技术部署在多个容器。劣势来说,首先容器是基于Host OS的,不同系统OS的区别也就使得容器不能在各种系统环境混用;安全性相对更差,因为容器需要与底层操作系统或者其他容器通信。

容器化的应用场景更多是在应用程序上,而不是隔离操作系统,可能这也是很多资料将其与其他虚拟化技术分隔开的原因。

企业侧角度

整体上分为开源虚拟化和商业虚拟化两大阵营。典型的代表有:Xen,KVM,WMware,Hyper-V、Docker容器等。

Xen和KVM,是开源免费的虚拟化软件;WMware是付费的虚拟化软件;Hyper-V微软的收费虚拟化技术;Docker是一种容器技术,属于一种轻量级虚拟化技术。

虚拟化软件产品有很多,无论是开源还是商业的,上面只是列举了很少的几款,每款软件产品有其优缺点以及应用场景,需要根据业务场景选择,我们主要讲这几个主流方案:KVM、Hyper-V、VMware sPhere、Xen

**1.KVM:**KVM全称Kernel-based Virtual Machine,可将Linux内核转化为一个虚拟机监视器。需要硬件的支持,比如Intel-VT和AMD-V。属于全虚拟化技术。(即不与软硬件绑定,可以部署在我自己的服务器上的。)

**应用场景:**用于支持虚拟化技术(Intel V或AMD-V)的x86架构硬件,的Linux的全虚拟化。

优势:

  • 首先从现有形势来看,国内的阿里云,华为云,国外的AWS 之类的云服务提供商从几年前开始就均将技术路线向KVM进行切换,性能和稳定性经历了考研。
  • 开源。不仅开源性能还比vmware、xen等老牌虚拟化服务好,费用基本可以无视,高度可定制。
  • 已写入Linux内核,可以利用内核的优化和改进,是Linux的一部分,Linux活着可以不用太担心KVM死掉。且KVM本身是内核模块,结构更精简,无需对内核进行修改。
  • 充分支持现有的硬件虚拟化功能,支持SR-IOV,

劣势:

  • 需要支持虚拟化的处理器,如果CPU比较旧或者不支持虚拟化,KVM也就不能用了,因为KVM本身并不执行硬件模拟。

**2.Hyper-V:**微软家的,旧称Windows Server Virtualization。可以归属到半虚拟化

**应用场景:**更适合小型的组织和企业

优势:

  • Hyper-V建立在微内核化设计之上,因此设备驱动程序在控制层中独立运行和操作,可以保持最少的设备驱动程序管理;
  • 初始化时间更短

劣势:

  • 使用Hyper-V之前必须安装主OS,且由于架构问题,父OS的崩溃会使得所有的VM崩溃。

3.VMware vSphere:

**应用场景:**更适合大型组织或企业。

**优势:**独立,无需像Hyper-V一样使用一个主OS控制所有的的虚拟化组件。

劣势:

  • 需要硬件的支持。
  • 由于设备驱动程序在体系结构的管理程序层中初始化,因此需要更多的初始化时间。该层中的任何损坏代码都可能导致初始化速度变慢,甚至导致服务器挂起或崩溃。
  • 贵。

**4.Xen:**Xen是开放源代码虚拟机监视器,由XenProject开发,能够在单个计算机运行多达128个有完全功能的操作系统。支持半虚拟化和全虚拟化。

**优势:**无需特殊硬件支持,就能达到高性能的虚拟化。即支持更广泛的CPU架构。

劣势:版本更新需要对内核重新打补丁,重新编译整个内核。

虚拟化工作原理:

img

虚拟化类型:

1、全虚拟化(50%)

2、半虚拟化(软硬件结合)

3、直通(以全硬件的方式,实现虚拟化功能)

虚拟化功能

1、在一个操作系统内,模拟多个操作系统

2、以软件的方式模拟物理设备的功能

虚拟机管理器功能:调用资源

两大核心组件:QEMU、KVM

QEMU:

QEMU是I/O控制的模块,可以理解为队列,核心目的是调用资源内核中的资源,需要把KVM逻辑分割出来的资源运输给QEMU,再给虚拟机。
QEMU它并不是直接调用,而是用I/O方式调用,QEMU把资源调用来的过程借用ioctl,QEMU借助libvirt这个工具调用ioctl,再通过接口,给虚拟机应用程序。

KVM:

用来逻辑分割物理资源,抽象化为虚拟化资源,根据VMM里的配置,会逻辑分割出多少G,给应用程序,去进行虚拟化。
只接受来自QEMU的请求指令。对于应用程序直接过来的敏感指令会拦截,然后通过接口发给QEMU,让QEMU判断是否需要执行,可以的话,再下来,不可以的话,打回去,不执行该敏感指令。
对于workstation而言——》硬件辅助虚拟化,表现形式在处理器里面有一个虚拟化引擎,可以勾取硬件辅助虚拟化,看到虚拟接口/dev/kvm,可以加强辅助调用,在应用程序需要频繁调用的时候,需要开启。比如openstack。

虚拟化类型:

  • 全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
  • 半虚拟化:需要修改操作系统
  • 直通:直接使用物理硬件资源(需要支持,还不完善)

全虚拟化:KVM——》产品vmware—ce

半虚拟化:EXSI——》workststion vsphere

虚拟化功能:

在一个操作系统内,模拟多个操作系统
以软件的方式模拟物理设备的功能

容器化:

容器是云原生概念的重要组成部分,一种计算单元,容器比虚拟化技术更轻量化、更小开销的方式运行,作为应用的包装形式,容器赋予应用独立和便携的能力。

容器就是一个视图隔离、资源隔离、独立文件系统的进程集合。容器就是一个进程集合,它将系统的其他资源隔离开来,具有自己独立的资源视图。

容器具有一个独立的文件系统,因为使用的是系统的资源,所以在独立的文件系统内不需要具备内核相关的代码或者工具,我们只需要提供容器所需的二进制文件、配置文件以及依赖即可。只要容器运行时所需的文件集合都能够具备,那么这个容器就能够运行起来

容器的目的就是为进程集合提供一个独立的运行环境。

容器化解决了部署中的一些大问题。容器也提供了超越部署的好处,包括标准化和自动化的巨大能力,使跨语言和技术工作成为可能。

  • 高性能—容器使应用程序更接近硬件,提供更少的抽象,并允许在整个系统中更好地分配资源。

  • 标准化—保持一致性意味着容器可以持续开发、测试和集成,而无需担心这些环境中的变化。

  • 自动化—由于容器是标准化的,因此可以更轻松地在开发管道中实现流程自动化,从而加快开发流程。

  • 技术不可知论—容器与技术和语言无关,这意味着无论底层操作系统和物理服务器配置如何,它们都可以工作。

实现类似集装箱的封装技术,实际依赖两种技术:

1、文件系统隔离

每个容器都具有独立的文件系统,单个容器内对文件系统进行增删改查不会影响到其他容器

参考 Linux 下的 chroot 命令,可以将子目录变为根目录

2、资源隔离

利用 namespace 隔离进程之间的相互可见及通信

使用 Cgroup 限制资源使用率,设置其能够使用的 CPU 以及内存量的大小

什么是镜像?

综上所述,我们将这些容器运行时所需要的所有的文件集合称之为容器镜像。

那么,一般都是通过什么样的方式来构建镜像的呢?

通常情况下,我们会采用 Dockerfile 来构建镜像,这是因为 Dockerfile 提供了非常便利的语法糖,能够帮助我们很好地描述构建的每个步骤。当然,每个构建步骤都会对已有的文件系统进行操作,这样就会带来文件系统内容的变化,我们将这些变化称之为 changeset。当我们把构建步骤所产生的变化依次作用到一个空文件夹上,就能够得到一个完整的镜像。

和虚拟化区别:

虚拟化技术已经非常强大,为什么还需要容器化技术?

如今的虚拟机可以非常方便的扩展出应用需要的资源。但是仍存在两个问题:

  • 应用扩展问题。拿双十一举例,应用在平常只需要20台机器,但是在双十一那天至少需要准备100台机器,就需要在非常短的时间快速完成的部署应用
  • 环境迁移问题。 应用开发过程是包含了开发-测试-预发布-线上,整个流程中设计到多套环境的发布,开发人员维护开发环境、测试人员维护测试环境、运维负责着预发布和线上环境,如何确保每套环境的一致性,这会经常出现因环境差异导致的问题

在云计算的时代,通常通过自动化脚本的方式去解决上面的问题,但是环境差异,导致脚本维护要投入额外的人力。亦或有的团队使用虚拟化镜像,但是镜像大且启动慢,没法满足时效性的要求。于是,人们考虑是否存在一种更加轻量化的虚拟化技术,更容易迁移和扩展应用层业务。就这样,正式借鉴了集装箱的解决方案,就有人提出了类似集装箱的方式封装应用以及它的运行环境,将应用和环境打包成一个轻量化、可移植、自包含的容器。

**容器的特点:**其实我们拿跟它跟硬件抽象层虚拟化hypervisor技术对比就清楚了,我们之前也提到过,传统的虚拟化(虚拟机)技术,创建环境和部署应用都很麻烦,而且应用的移植性也很繁琐,比如你要把vmware里的虚拟机迁移到KVM里就很繁琐(需要做镜像格式的转换)。那么有了容器技术就简单了,总结下容器技术主要有三个特点:

极其轻量:只打包了必要的bin/Lib

秒级部署:根据镜像的不同,容器的部署大概在毫秒与秒之间(比虚拟机强很多)

便于移植:一次构建,随处部署

Kubernetes、Swam、Mesos这类开源、方便、好使的容器管理平台有着非常强大的弹性管理能力。

容器和 VM 之间的差异:

在这里插入图片描述

VM 利用 Hypervisor 虚拟化技术来模拟 CPU、内存等硬件资源,这样就可以在宿主机上建立一个 Guest OS,这是常说的安装一个虚拟机。

每一个 Guest OS 都有一个独立的内核,比如 Ubuntu、CentOS 甚至是 Windows 等,在这样的 Guest OS 之下,每个应用都是相互独立的,VM 可以提供一个更好的隔离效果。但这样的隔离效果需要付出一定的代价,因为需要把一部分的计算资源交给虚拟化,这样就很难充分利用现有的计算资源,并且每个 Guest OS 都需要占用大量的磁盘空间,比如 Windows 操作系统的安装需要 10~30G 的磁盘空间,Ubuntu 也需要 5~6G,同时这样的方式启动很慢。正是因为虚拟机技术的缺点,催生出了容器技术。

容器是针对于进程而言的,因此无需 Guest OS,只需要一个独立的文件系统提供其所需要文件集合即可。所有的文件隔离都是进程级别的,因此启动时间快于 VM,并且所需的磁盘空间也小于 VM。当然了,进程级别的隔离并没有想象中的那么好,隔离效果相比 VM 要差很多。

总体而言,容器和 VM 相比,各有优劣,因此容器技术也在向着强隔离方向发展。

容器技术与虚拟机的区别:

我们用的虚拟机如VMware,属于软件虚拟化的完全虚拟化,而docker属于操作系统虚拟化。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。

虚拟机更擅长于彻底隔离整个运行环境,而Docker通常用于隔离不同的应用,例如mysql、node 等

从下图可以分析出容器技术是如何从效率上完胜虚拟机

img

在这里插入图片描述

img

由于没有了虚拟操作系统和虚拟机监视器这两个层次,大幅减少了应用程序运行带来的额外消耗。

更准确的来说,所有在容器中的应用程序其实完全运行在了宿主操作系统中,与其他真实运行在其中的应用程序在指令运行层面是完全没有任何区别的。

优缺点:

容器化技术的优势:

  • 更高效的系统资源利用率。相比虚拟化技术,不需要额外的hypervisor层,会有更高的性能和效率。单台高配物理机可以跑上白近千个docker容器。

  • 启动非常快,秒级时间。这是由于直接运行于宿主机内核,需要启动完成的操作系统,因此可以做到秒级、甚至毫秒级的启动时间

  • 一致的运行环境。容器的镜像封装应用和应用依赖的环境,确保了应用运行环境的一致性,避免了开发环境、测试环境、生产环境不一致的问题

  • 持续交付和部署。一次创建和配置之后,可以在任意地方运行。测试人员可以将容器与持续集成系统结合,在pipeline中自动化的完成集成测试,同时运维人员可以通过持续部署系统对应用自动完成部署。

  • 更易于迁移。可以轻松迁移到物理机、虚拟机、公有云、私有云中,且不需要担心运行环境变化导致应用无法运行的问题

局限性:

  • 容器隔离性问题,也可以是安全性问题,只要是由于共用内核和Namespace实现隔离的限制

  • 容器里面不存放数据,容器中的数据会随容器消失而消失,特别是对有状态的应用需要做数据的持久化设置

  • 容器的粒度更细,管理复杂度更大,在生产环境管理大量的容器带来了更大的挑战,有赖于K8S、Swarm等容器编排

云原生:

简单理解为:云原生就是换了个开发环境,由物理服务器换到了云服务器,然后为了适应这个云服务器的环境做了一些技术架构调整,这就是云原生。元原生是一种构建和运行可在公共、私有和混合云上进行扩展的应用程序的方法,利用云功能,以实现负载均衡和易于扩展。

云原生简单来说:就是软件应用在云上是为了适应云,用好云的一种技术架构。核心还是脱离物理上的限制

技术的变革,一定是思想先行,云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中,而不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势

Pivotal公司的Matt Stine于2013年首次提出云原生(CloudNative)的概念;2015年,云原生刚推广时,Matt Stine在《迁移到云原生架构》一书中定义了符合云原生架构的几个特征:12因素、微服务、自敏捷架构、基于API协作、扛脆弱性;到了2017年,Matt Stine在接受InfoQ采访时又改了口风,将云原生架构归纳为模块化、可观察、可部署、可测试、可替换、可处理6特质;而Pivotal最新官网对云原生概括为4个要点:DevOps+持续交付+微服务+容器

云原生计算基金会 (CNCF) 对云原生的定义更加狭隘,专注于应用程序容器化——将应用程序分解为微服务并打包在轻量级容器中,以便在各种服务器上进行部署和编排。

用 CNCF 自己的话来说:“云原生技术使组织能够在公共、私有和混合云等现代动态环境中构建和运行可扩展的应用程序。”

云原生应用程序开发通常包括:微服务、云平台、容器、Kubernetes 、不可变基础设施、声明式API 和持续交付技术与devops和敏捷方法等技术相结合。

云原生拆分为原生两部分:

  • ,指的就是云服务器。

  • 原生,指的是应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,要充分利用云上资源的优点,从而使我们的的应用更强大,更迅速、更稳定。

云原生为用户指定了一条敏捷的、可扩展、可复制的、最大化地利用云的能力、发挥云的价值的最佳路径。

云原生是一套指导进行软件架构设计的思想。按照这样的思想而设计出来的软件:首先,天然就“生在云上,长在云上”;其次,能够最大化地发挥云的能力,使得我们开发的软件和“云”能够天然地集成在一起,发挥出“云”的最大价值。

云原生的最大价值和愿景,就是认为未来的软件,会从诞生起就生长在云上,并且遵循一种新的软件开发、发布和运维模式,从而使得软件能够最大化地发挥云的能力。

img

2015年云原生计算基金会(CNCF)成立,CNCF掺和进来后,最初把云原生定义为包括:容器化封装+自动化管理+面向微服务;到了2018年,CNCF又更新了云原生的定义,把服务网格(Service Mesh)和声明式API给加了进来。

可见,不同的人和组织对云原生有不同的定义,相同的人和组织在不同时间点对云原生也有不同的定义,真是乱的一匹,搞得鄙人非常晕菜,我的应对很简单,选一个我最容易记住和理解的定义:DevOps+持续交付+微服务+容器。

总而言之,符合云原生架构的应用程序应该是:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。

云原生构建应用简便快捷,部署应用轻松自如、运行应用按需伸缩。优点不一而足,缺点微乎其微;秒杀传统Web框架,吊打祖传IT模式,实在是保命**、评优晋级不可多得的终极绝密武器。

云原生的四要素:

  • **微服务:**几乎每个云原生的定义都包含微服务,跟微服务相对的是单体应用,微服务有理论基础,那就是康威定律,指导服务怎么切分,很玄乎,凡是能称为理论定律的都简单明白不了,不然就忒没b格,大概意思是组织架构决定产品形态,不知道跟马克思的生产关系影响生产力有无关系。微服务架构的好处就是按function切了之后,服务解耦,内聚更强,变更更易;另一个划分服务的技巧据说是依据DDD来搞。

  • **容器化:**Docker是应用最为广泛的容器引擎,在思科、谷歌等公司的基础设施中大量使用,是基于LXC技术搞的,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡,谷歌搞的,Docker和K8S都采用Go编写,都是好东西。

  • **DevOps:**这是个组合词,Dev+Ops,就是开发和运维合体,不像开发和产品,经常刀刃相见,实际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。

  • **持续交付:**持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发版本和稳定版本并存,其实需要很多流程和工具支撑。

云原生包括以下4个方面:

1、开发过程:从瀑布流到敏捷到DevOps的发展。

2、应用程序架构:从单块架构到微服务架构。每个服务都被设计成小型的,并能够适应云容器的有限资源。

3、部署和打包:应用程序以前通常部署在物理服务器上。在2000年左右,对于那些对延迟不敏感的应用程序,通常会部署在虚拟服务器上。随着云原生应用程序的出现,它们被打包为Docker镜像并部署在容器中。

4、应用程序基础架构**:**应用程序大规模部署在云基础架构上,而不是自托管的服务器上。

以下是一些可能的联想:

•敏捷开发和DevOps•微服务和容器•自动化部署和可伸缩性•弹性计算和负载均衡•云平台和云服务

云原生产生背景:

随着云计算技术的发展,企业上云已成为趋势,越来越多的企业都已将应用部署到了云上。但是应用上云并不意味着就能充分利用云平台的优势。目前,大部分云化的应用,都是基于传统的软件架构来搭建的,然后再移植到云上去运行,和云平台的整合度非常低,主要表现在以下几个方面:

  • **操作系统依赖强:**传统应用程序和底层操作系统、硬件、存储和后备服务之间存在紧密的依赖关系,这些依赖关系使得应用程序在跨越云基础设施进行迁移和扩展时非常复杂且有风险。

  • **系统紧耦合:**传统的企业应用多采用单体架构,将许多不同的功能模块捆绑在一个部署包中,导致功能模块之间产生不必要的依赖,并导致开发和部署过程中丧失敏捷性,无法独立的部署、发布更新、重启。

  • **手动化扩展:**通过手工管理基础设施,包括手工编写管理服务器、网络和存储的配置脚本。在大规模复杂的操作中,操作人员在诊断问题时会很慢,而且无法大规模地实施。手工制作的自动化脚本还有可能将人为错误硬编码到基础设施中。

  • **恢复缓慢:**基于虚拟机的基础设施相对于基于微服务的应用程序来说,是缓慢而低效的。因为单个虚拟机启动/关闭的速度很慢,并且在部署应用程序代码之前就会带来巨大的开销。

  • **瀑布开发:**传统应用的开发模式,IT团队定期发布软件,通常间隔几周或几个月。尽管发布的许多组件已经提前准备好了,并且没有依赖关系,也必须等待版本中的其他组件。客户想要的功能被延迟,企业失去赢得客户和增加收入的机会。

总体来说,提供方便的基础设施,只是对云计算最初级的利用(提升利用率,按需使用,不够了随时扩容),无法充分发挥云计算的优势,要想充分发挥云计算的优势(弹性、高可用性、易扩展性),就必须进行真正的云化,不仅仅是基础设施和平台的变化,应用也需要做出改变,这就需要摈弃传统的方法,在架构设计、开发方式、部署维护等各个阶段和方面都基于云的特点重新设计,从而建设全新的云化的应用,也就是云原生的应用。

云原生技术:

云原生技术有很多,大体可以分为以下5种:容器、服务网格、声明书API、不可变基础设施、微服务。

**容器(Containers):**容器化终端容器化封装是指以容器为基础,应用程序封装在容器之中,在容器里运行,实现资源的相对隔离与容器镜像的重复使用,因为使用的容器化技术应用运行于容器之中,就不需要考虑底层硬件的差异,这大大简化了开发的工作量,同时对于运维人员也极为友好,不需要再为环境问题而苦恼。使用到的技术包括Docker和k8s。

**微服务(Microservices):**向微服务,面向微服务是指把一个大的功能应用拆分成一个个功能单一,相对独立,相互解耦的微应用。微应用之间通过接口进行通讯,使用的的微服务技术比如SpirngCloud

**服务网格(Service Meshes):**服务网格(Service Mesh)是一个专门处理服务通讯的基础设施层。它的职责是在由云原生应用组成服务的复杂拓扑结构下进行可靠的请求传送。在实践中,它是一组和应用服务部署在一起的轻量级的网络代理,并且对应用服务透明。

**不可变基础设施(Immutable Infrastructure):**不可变基础设施里的“不可变”非常类似于程序设计中的“不可变”概念。程序设计中不可变变量(Immutable Variable)就是在完成赋值后就不能发生更改,只能创建新的来整体替换旧的。由于具有这样的特性这种变量可以在并发环境下安全的使用。对于基础设施的不可变性,最基本的就是指运行服务的服务器在完成部署后,就不在进行更改。

**声明式API(Deciarative API):**声明式 API是Kubernetes的技术点,它的核心原理,就是当用户向 Kubernetes 提交了一个 API 对象的描述之后,Kubernetes 会负责为你保证整个集群里各项资源的状态,都与你的 API 对象描述的需求相一致。更重要的是,这个保证是一项“无条件的”、“没有期限”的承诺:对于每个保存在 etcd 里的 API 对象,Kubernetes 都通过启动一种叫做“控制器模式”(Controller Pattern)的无限循环,不断检查,然后调谐,最后确保整个集群的状态与这个 API 对象的描述一致。简单理解就是对象的声明与对象的创建相解耦,在普通程序中创建对象需要向操作系统申请资源,相似的,在容器云平台上创建对象,需要向k8s申请资源。但k8s更进一步的是,你只需要提交一个申请单,然后由k8s系统完成对象的创建。

这些技术只是云原生组成的一部分,但是,这些技术,我们自己机房服务器,也能使用,换句话来说,如果不是云环境,就算有了这些技术,这不是云原生,云原生,一定是基于云服务器的。

优缺点:

云服务器相对传统物理服务器的优势:

云服务器具体优势如下:

1.灵活性:云服务器采用虚拟化技术,整合了大量集群主机的计算、网络与存储资源,其CPU、内存、硬盘、带宽等资源都可以弹性扩容,按需取用;公司的项目,都有一个特点,就是访问量不是固定的,在做活动的时候,访问量会是日常流量的几倍,为了应对这种情况,如果是物理服务器,公司就必须随时准备能应对流量最高峰的物理设备,但在流量高峰过后,这些物理设备不能像云服务器那样释放,不灵活。

2.安全稳定性:基于集群服务器,云服务器拥有更强的主机性能,运行更安全、稳定;

3.方便性:云服务器操作及升级更方便,传统服务器中的资源都是有限的,如果想要获得更好的技能,只能升级云服务器,所谓“云”,就是网络、互联网的意思,云服务器就是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。其操作起来更加简便,如果原来使用的配置过低,完全可以在不重装系统的情况下升级CPU、硬盘、内存等,不会影响之前的使用;

4.低成本:云服务器有更高的性价比,云服务器是按需付费的,与传统服务器相比,用多少买多少,而且并不会造成资源浪费,而传统物理服务器,必须准备满足流量高峰的设备数量。

云原生的好处:

  • 快速云原生架构使用敏捷开发和单位,不但可以让企业快速的进行开发,自动化的不做产品,同时还能持续地更新产品,让产品跟得上需求,甚至是引导需求,让企业立于不败之地。
  • 弹性扩展云原生架构天生具有云计算的特点,资源可以按需进行伸缩,这样不单提高资源的利用率,也大大降低了企业成本。
  • 强壮云原生架构依托于容器编排工去k8s与微服务的组合应用,就拥有了自动恢复能力,容错能力,故障隔离能力,让应用更强。
  • 屏蔽底层差异,因为使用的容器化技术应用运行于容器之中,就不需要考虑底层硬件的差异,这大大简化了开发的工作量,同时对于运维人员也极为友好,不需要再为环境问题而苦恼。

云原生与传统企业应用:

云原生应用:

  • **可预测。**云原生应用符合旨在通过可预测行为最大限度提高弹性的框架或“合同”。云平台中使用的高度自动化的容器驱动的基础架构推动着软件编写方式的发展。第一次作为 12 因素应用记录的 12 个原则就是阐释此类“合同”的良好示例。
  • 操作系统抽象化。云原生应用架构要求开发人员使用平台作为一种方法,从底层基础架构依赖关系中抽象出来,从而实现应用的简单迁移和扩展。实现云原生应用架构最有效的抽象方法是提供一个形式化的平台。Tanzu 非常适用于在谷歌云端平台 、微软 Azure 或亚马逊云服务等基于云的基础架构上运行。
  • **合适的容量。**云原生应用平台可自动进行基础架构调配和配置,根据应用的日常需求在部署时动态分配和重新分配资源。基于云原生运行时的构建方式可优化应用生命周期管理,包括扩展以满足需求、资源利用率、可用资源编排,以及从故障中恢复,最大程度减少停机时间。
  • **协作。**云原生可协助 DevOps,从而在开发和运营职能部门之间建立密切协作,将完成的应用代码快速顺畅地转入生产。
  • **持续交付。**IT 团队可以在单个软件更新准备就绪后立即将其发布出去。快速发布软件的企业可获得更紧密的反馈循环,并能更有效地响应客户需求。持续交付最适用于其他相关方法,包括测试驱动型开发和持续集成。
  • **独立。**微服务架构将应用分解成小型松散耦合的独立运行的服务。这些服务映射到更小的独立开发团队,可以频繁进行独立的更新、扩展和故障转移/重新启动操作,而不影响其他服务。
  • 自动化可扩展性。大规模基础架构自动化可消除因人为错误造成的停机。计算机自动化无需面对此类挑战,可以在任何规模的部署中始终如一地应用同一组规则。云原生还超越了基于以虚拟化为导向的传统编排而构建的专用自动化。全面的云原生架构包括适用于团队的自动化和编排,而不要求他们将自动化作为自定义方法来编写。换句话说,自动化可轻松构建和运行易于管理的应用。
  • **快速恢复。**容器运行时和编排程序可在虚拟机上提供动态的高密度虚拟化覆盖,与托管微服务非常匹配。编排可动态管理容器在虚拟机群集间的放置,以便在发生故障时提供弹性扩展和恢复/重新启动功能。

传统的企业应用:

  • **不可预测。**传统应用的架构或开发方式使其无法实现在云原生平台上运行的所有优势。此类应用通常构建时间更长,大批量发布,只能逐渐扩展,并且会发生更多的单点故障。
  • **依赖操作系统。**传统的应用架构允许开发人员在应用和底层操作系统、硬件、存储和支持服务之间建立紧密的依赖关系。这些依赖关系使应用在新基础架构间的迁移和扩展变得复杂且充满风险,与云模型相背而驰。
  • **过多容量。**传统 IT 会为应用设计专用的自定义基础架构解决方案,这延迟了应用的部署。由于基于最坏情况估算容量,解决方案通常容量过大,同时几乎没有能力继续扩展以满足需求。
  • **孤立。**传统 IT 将完成的应用代码从开发人员“隔墙”交接到运营,然后由运营人员在生产中运行此代码。企业的内部问题之严重以至于无暇顾及客户,导致内部冲突产生,交付缓慢折中,员工士气低落。
  • **瀑布式开发。**IT 团队定期发布软件,通常间隔几周或几个月,事实上,当代码构建至发布版本时,该版本的许多组件已提前准备就绪,并且除了人工发布工具之外没有依赖关系。如果客户需要的功能被延迟发布,那企业将会错失赢得客户和增加收入的机会。
  • **依赖。**一体化架构将许多分散的服务捆绑在一个部署包中,使服务之间出现不必要的依赖关系,导致开发和部署过程丧失敏捷性。
  • **手动扩展。**手动基础架构包括人工运营人员,他们负责手动构建和管理服务器、网络及存储配置。由于复杂程度较高,运营人员无法快速地大规模正确诊断问题,并且很容易执行错误实施。手动构建的自动化方法可能会将人为错误的硬编码到基础架构中。
  • **恢复缓慢。**基于虚拟机的基础架构对于基于微服务的应用来说是一个缓慢而低效的基础,因为单个虚拟机启动或关闭的速度很慢,甚至在向其部署应用代码之前就存在很大的开销。

技术全景图:

这是CNCF提供的云原生技术全景图,云原生的生态十分繁荣,涉及的技术栈庞大复杂,以下收集了和云原生相关的工具、平台和项目,并随着行业发展在不断丰富壮大。

在这里插入图片描述

在这里插入图片描述

云原生架构的数据库,其核心是充分发挥云基础设施带来的各种资源弹性的优势,通过将计算和存储分离,提高数据库资源配置效率,实现计算和存储弹性扩展,按需分配,为客户带来超高的ROI。

img

大数据:

大数据(Big Data):指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,需要新处理模式才能俱有更强的决策边、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

**主要解决:**海量数据的存储和海数据的分析计算问题。

“大数据”是一个体量特别大,数据类型特别大的数据集,并且这样的数据集无法用传统数据库工具对其内容进行抓取、管理和处理。

  1. “大数据”首先是指数据体量(volumes)大,指代大型数据集,一般在10TB规模左右,但在实际应用中,很多企业用户把多个数据集放在一起,已经形成了PB级的数据量;

  2. 其次是指数据类别(variety)大,数据来自多种数据源,数据种类和格式日渐丰富,已突破了以前所限定的结构化数据范畴,囊括了半结构化和非结构化数据;

  3. 接着是数据处理速度(velocity)快,在数据量非常庞大的情况下,也能够做到数据的实时处理;

  4. 最后一个特点是指数据真实性(veravity)高,随着社交数据、企业内容、交易与应用数据等新数据源的兴起,传统数据源的局限被打破,企业愈发需要有效的信息之力已确保其真实性以及安全性。

在周刊上说,“大数据”的概念远不止大量的数据(TB)和处理大量数据的技术,或者所谓的"4个V"之类的简单概念,而是涵盖了人们在大规模数据的基础上可以做的事情,而这些事情在小规模数据的基础上是无法实现的。换句话说,大数据让我们以一种前所未有的方式,通过对海量数据进行分析,获得有巨大价值的产品和服务,或深刻的洞见,最终形成变革之力。

大数据特点:

要理解大数据这一概念,首先要从“大”人手,“大”是指数据规模,大数据一般指在10TB(1TB=1024GB)规模以上的数据量。大数据同过去的海量数据有所区别,其基本特征可以用4个V来总结,即体量大、多样化、价值密度低、速度快。

1、Volume (大量):截至目前,人类生产的所有印刷材料的数据量是200PB,而历史上全人类总共说过的话的数据量大约是5EB。当前,典型个人计算机硬盘的容量为TB量级,而一些大企业的数据量已经接近EB量级。

2、Velocity (高速):这是大数据区分于传统数据挖掘的最显著特征。根据IDC的“数字宇宙”的报告,预计到2020年,全球数据使用量将达到35. 2ZB。在如此海量的数据面前,处理数据的效率就是企业的生命。

3、Variety (多样):这种类型的多样性也让数据被分为结构化数据和非结构化数据。相对于以往便于存储的以数据库文本为主的结构化数据,非结构化数据越来越多,包括网络日志、音频、视频、图片、地理位置信息等,这些多类型的数据对数据的处理能力提出了更高要求。

4、Value (低价值密度):价值密度的高低与数据总量的大小成反比。如何快速对有价值数据"提纯”成为目前大数据背景下待解决的难题。

大数据技术是指从各种各样类型的巨量数据中,快速获得有价值信息的技术。解决大数据问题的核心是大数据技术。目前所说的“大数据”不仅指数据本身的规模,也包括采集数据的工具、平台和数据分析系统。大数据研发目的是发展大数据技术并将其应用到相关领域,通过解决巨量数据处理问题促进其突破性发展。因此,大数据时代带来的挑战不仅体现如何处理巨量数据从中获取有价值的信息,也体现如何加强大数据技术研发,抢占时代发展的前沿。

大数据技术栈:

做大数据开发,无非要干四件事情,采集、存储、查询、计算。此外,一些开发必备的基础语言能力是需要的。我按照这几个维度,对大数据常见技术栈做了下划分。

在这里插入图片描述

**1、数据采集:**ETL工具负责将分布式的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。

**2、数据存取:**关系数据库、NOSQL、SQL等。

**3、基础架构:**云存储、分布式文件存储等。

**4、数据处理:**自然语言处理(NLP)是研究人与计算机交互的语言问题的一门学科。处理自然语言的关键是要让计算机理解自然语言,所以自然语言处理又叫做自然语言理解(NLU),也称为计算语言学,一方面它是语言信息处理的一个分支,另一方面它是人工智能的核心课程之一。

**5、统计分析:**假设检验、显著性检验、差异分析、相关分析、T检验、方差 分析、卡方分析、偏相关分析、距离分析、回归分析、简单回归分析、多元回归分析、逐步回归、回归预测与残差分析、岭回归、logistict回归分析、曲线估计、因子分析、聚类分析、主成分分析、快速聚类法与聚类法、判别分析、对应分析、多元对应分析(最优尺度分析)、bootstrap技术等等。

**6、数据挖掘:**分类、估计、预测、相关性分组或关联规则、聚类、描述和可视化、复杂数据类型挖掘(Text,Web,图形图像,视频,音频等)

**7、模型预测:**预测模型、机器学习、建模仿真。

**8、结果呈现:**云计算、标签云、关系图等。

大数据分析:

众所周知,大数据已经不简简单单是数据大的事实了,而最重要的现实是对大数据进行分析,只有通过分析才能获取很多智能的,深入的,有价值的信息。那么越来越多的应用涉及到大数据,而这些大数据的属性,包括数据量,速度,多样性等等都是呈现了大数据不断增长的复杂性,所以大数据的分析方法在大数据领域就显得尤为重要,可以说是决定最终信息是否有价值的决定性因素。基于如此的认识,大数据分析普遍存在的方法理论有哪些呢?以下是大数据分析的五个基本方面:

**1、可视化分析:**大数据分析的使用者有大数据分析专家,同时还有普通用户,但是二者对于大数据分析最基本的要求就是可视化分析,因为可视化分析能够直观的呈现大数据特点,同时能够非常容易被读者所接受,就如同看图说话一样及简单明了。

**2、数据挖掘算法:**大数据分析的理论核心就是数据挖掘算法,各种数据挖掘的算法基于不同的数据类型和格式才能更加科学的呈现出数据本身具备的特点,也正是因为这些被全世界统计学家所公认的各种统计方法(可以称之为真理)才能深入数据内部,挖掘出公认的价值。另外一个方面也是因为有这些数据挖掘的算法才能更快速的处理大数据,如果一个算法得花上好几年才能得出结论,那大数据的价值也就无从说起了。

**3、预测性分析能力:**大数据分析最重要的应用领域之一就是预测性分析,从大数据中挖掘出特点,通过科学的建立模型,之后便可以通过模型带入新的数据,从而预测未来的数据。

**4、语义引擎:**大数据分析广泛应用于网络数据挖掘,可从用户的搜索关键词、标签关键词、或其他输入语义、分析、判断用户需求,从而实现更好的用户体验和广告匹配。

**5、数据质量和数据管理:**大数据分析离不开数据质量和数据管理,高质量的数据和有效的数据管理,无论是在学术研究还是在商业领域,都能够分析结果的真实和价格。

大数据分析的基础就是以上五个方面,当然更加深入大数据分析的话,还有很多很多更加有特别的、更加深入的、更加专业的大数据分析方法。

大数据处理:

1.大数据处理之一:采集

大数据的采集是指利用多个数据库来收发自客户端(Web,APP或者传感器形式等)的数据,并且用户可以通过这些数据库来金星简单的查询和处理工作。比如,电商会使用传统的关系型数据库Mysql和Oracle等来存储每一笔事务数据,除此之外,Redis和MonggoDB这样的NoSQL数据库也常用语数据的采集。

在大数据的采集过程中,其主要特点和挑战是并发数高,因为同时有可能会有成千上万的用户来进行访问和操作,比如火车票售票网站和淘宝,它们并发的访问量在峰值时达到上百万,所以需要再采集端部署大量数据库才能支撑。并且如何在这些数据库之间进行负载均衡和分片的确是需要深入的思考和设计。

2.大数据处理之二:导入/预处理

虽然采集端本身会有很多数据库,但是如果要对这些海量数据进行有效的分析,还是应该将这些来自前端的数据导入到一个集中地大型分析式数据库,或者分布式存储集群,并且可以在导入基础上做一些简单的清洗和预处理工作。也有一些用户会在导入时使用来自Twitter的Storm来对数据进行流式计算,来满足部分业务的实时计算需求。

3.大数据处理之三:统计/分析

统计与分析主要利用分布式数据库,或者分布式计算集群来对存储于其内的海量数据进行普通的分析和分类汇总等,以满足大多数常见的分析需求,在这方面,一些实时性需求会用到EMC的GreenPlum、Oracle的Exadata,以及基于Mysql的列式存储Infobright等,以及基于Mysql的列式存储Infobright等,而一些批处理,或者基于半结构化数据的需求可以使用Hadoop。

统计与分析这部分的主要特点和挑战是分析涉及的数据量大,其对系统资源,特别是I/O会有极大的占用。

4.大数据处理之四:挖掘

与前面统计和分析过程不同的是,数据挖掘一般没有什么预先设定好的主题,主要实在实在数据上面进行基于各种算法的计算,从而起到预测的结果,从而实现一些高级别数据分析的需求。比较典型算法有用于聚类的Kmeans、用于统计学习的SVM和用于分类的NaviveBayes,主要使用的工具有Hadoop的Mahout等。该过程的特点和挑战主要是用于挖掘的算法很复杂,并且计算涉及的数据量和计算量都很大,常用数据挖掘算法都以单线程为主。

整个大数据处理的普遍流程至少应该满足这四个方面的步骤,才能算的上是一个比较完成的大数据处理。

**大数据处理流程:**主要包括数据收集、数据预处理、数据存储、数据处理与分析、数据展示/数据可视化等环节,每一个数据处理环节都会对大数据质量产生影响.

通常一个好的大数据产品要有以下特征:

  1. 大量的数据规模;
  2. 快速的数据处理能力;
  3. 精确的数据分析与预测能力;
  4. 优秀的可视化图表以及简练易懂的结果解释

img

大数据应用场景:

1、物流仓储:大数据分析系统助力商家精细化运营、提升销量、节约成本。

2、零售:分析用户消费习惯,为用户购买商品提供方便,从而提升商品销量。

3、旅游:深度结合大数据能力与旅游行业需求,共建旅游产业智慧管理、智慧服务和智慧营销的未来。

4、商品广告推荐:给用户推荐可能喜欢的商品

5、保险:海量数据挖掘及风险预测,助力保险行业精准营销,提升精细化定价能力。

6、金融:多维度体现用户特征,帮助金融机构推荐优质客户,防范欺诈风险。

7、房产:大数据全面助力房地产行业,打造精准投策与营销,选出更合适的地,建造更合适的楼,卖给更合适的人。

8、人工智能

大数据无处不在,大数据应用于各个行业,包括金融、汽车、餐饮、电信、能源、体能和娱乐等在内的社会各行各业都已经融入了大数据的印迹。

制造业,利用工业大数据提升制造业水平,包括产品故障诊断与预测、分析工艺流程、改进生产工艺,优化生产过程能耗、工业供应链分析与优化、生产计划与排程。

电商行业,零售行业可以利用大数据技术进行精准营销。

金融行业,大数据金融行业主要应用于,精准营销、风险管控、决策支持、效率提升、产品设计中发挥重大作用。

交通领域:通过交通数据分析,合理的规则出行道路,其次可以通过大数据分析人流高峰,调控信息灯,提高运行能力。

教育领域:可以收集学生的学习数据,优化教学过程,从而达到个性化教学;还可以通过数据分析优化学习方法,更好的提高成绩

汽车行业,利用大数据和物联网技术的无人驾驶汽车,在不远的未来将走入我们的日常生活。

互联网行业,借助于大数据技术,可以分析客户行为,进行商品推荐和针对性广告投放。

电信行业,利用大数据技术实现客户离网分析,及时掌握客户离网倾向,出台客户挽留措施。

能源行业,随着智能电网的发展,电力公司可以掌握海量的用户用电信息,利用大数据技术分析用户用电模式,可以改进电网运行,合理设计电力需求响应系统,确保电网运行安全。

物流行业,利用大数据优化物流网络,提高物流效率,降低物流成本。

城市管理,可以利用大数据实现智能交通、环保监测、城市规划和智能安防。

生物医学,大数据可以帮助我们实现流行病预测、智慧医疗、健康管理,同时还可以帮助我们解读

DNA,了解更多的生命奥秘。

体育娱乐,大数据可以帮助我们训练球队,决定投拍哪种题财的影视作品,以及预测比赛结果。

安全领域,政府可以利用大数据技术构建起强大的国家安全保障体系,企业可以利用大数据抵御网络攻击,警察可以借助大数据来预防犯罪。

个人生活, 大数据还可以应用于个人生活,利用与每个人相关联的“个人大数据”,分析个人生活行为习惯,为其提供更加周到的个性化服务。

大数据的价值,远远不止于此,大数据对各行各业的渗透,大大推动了社会生产和生活,未来必将产生重大而深远的影响。

在这里插入图片描述

大数据组织结构:

在这里插入图片描述

大数据结合其他技术:

大数据与云计算的关系:

云计算: 是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户

大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式计算架构。它的特色在于对海量数据的挖掘,但它必须依托云计算的分布式处理、分布式数据库、云存储和虚拟化技术

大数据是云计算非常重要的应用场景,而云计算则为大数据的处理和数据挖掘提供了最佳的技术解决方案

他俩之间的关系你可以这样来理解,云计算技术就是一个容器,大数据正是存放在这个容器中的水,大数据是要依靠云计算技术来进行存储和计算的。

大数据与人工智能的关系:

人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等两者联系:

一方面,人工智能需要数据来建立其智能,特别是机器学习。

例如,机器学习图像识别应用程序可以查看数以万计的飞机图像,以了解飞机的构成,以便将来能够识别出它们。人工智能应用的数据越多,其获得的结果就越准确。在过去,人工智能由于处理器速度慢、数据量小而不能很好地工作。今天,大数据为人工智能提供了海量的数据,使得人工智能技术有了长足的发展,甚至可以说,没有大数据就没有人工智能。另一方面,大数据技术为人工智能提供了强大的存储能力和计算能力。

在过去,人工智能算法都是依赖于单机的存储和单机的算法,而在大数据时代,面对海量的数据,传统的单机存储和单机算法都已经无能为力,建立在集群技术之上的大数据技术(主要是分布式存储和分布式计算),可以为人工智能提供强大的存储能力和计算能力。

大数据与云原生:

云原生和大数据是两个独立但相互关联的概念。

云原生是一种软件开发和部署的方法论,旨在利用云计算的优势来构建和运行可扩展、可靠和高效的应用程序。它强调容器化、微服务架构、自动化和持续交付等特性,可以帮助开发团队更快地构建、部署和管理应用程序。

大数据是指处理和分析规模庞大、复杂多样的数据集的技术和方法。大数据技术能够帮助组织从海量数据中提取有价值的信息,并进行实时分析和决策。它包括数据采集、存储、处理、分析和可视化等环节。

将云原生和大数据结合起来可以带来许多好处。云原生的弹性和可伸缩性使得大数据处理更加高效和灵活,可以根据需求动态调整资源。容器化技术可以将大数据处理任务拆分成小的模块,提高并行处理能力。同时,云原生平台提供了丰富的工具和服务,使得大数据处理任务的部署、监控和管理更加便捷。

总之,云原生和大数据的结合可以提供强大的数据处理和分析能力,帮助组织更好地应对数据爆炸带来的挑战,并从中获取更多的商业价值。

云原生和大数据项目结合可以为企业提供高效、可扩展的数据处理和分析解决方案。下面是一个可能的云原生+大数据项目的示例:

  1. 构建数据湖:使用云原生技术(如容器编排工具Kubernetes)来构建一个数据湖,将结构化和非结构化的数据集中存储在统一的存储系统中,如对象存储服务。
  2. 数据采集与处理:使用云原生的流处理框架(如Apache Flink或Kafka Streams)来实时采集、处理和转换大数据流。这些工具可以自动化数据的提取、转换和加载(ETL)过程。
  3. 数据仓库和分析:使用云原生的数据仓库解决方案(如Amazon Redshift或Google BigQuery)来存储和分析大规模数据集。这些解决方案提供了强大的查询和分析功能,并支持高度并行化的处理。
  4. 弹性扩展性:利用云原生的弹性扩展性,根据需求自动调整计算和存储资源。这可以通过容器编排工具来实现,根据工作负载的变化自动调整容器数量和规模。
  5. 数据安全和隐私:在项目中重视数据安全和隐私保护,使用云原生的安全工具和服务来加密和保护数据。这可以包括身份和访问管理、数据加密、漏洞扫描等安全措施。

总结起来,云原生+大数据项目利用云原生技术和工具来构建高效、可扩展的大数据处理和分析解决方案,提供实时数据处理、弹性扩展性、数据安全等优势。

项目:

云原生+大数据(从架构层面聊),

做过具体的项目(统计疫情期间xxx),

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/906591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小游戏流量主广告自动化浏览功能案例5

功能需求: 支持APP单行文本框输入1个小程序链接,在“文件传输助手”界面发送小程序链接并进入。 主要有“文章列表首页”和“文章内容”页面。每个页面支持点击弹窗广告、槽位广告、视频广告入口、视频广告内第三方广告。 弹窗广告、槽位广告、视频广…

线上 Linux 环境 MySQL 磁盘 IO 高负载深度排查与性能优化实战

目录 一、线上告警 二、问题诊断 1. 系统层面排查 2. 数据库层面分析 三、参数调优 1. sync_binlog 参数优化 2. innodb_flush_log_at_trx_commit 参数调整 四、其他优化建议 1. 日志文件位置调整 2. 生产环境核心参数配置模板 3. 突发 IO 高负载应急响应方案 五、…

【git进阶】git rebase(变基)

文章目录 合并分支提交信息修改合并提交记录时间问题1时间问题2时间问题3git rebase有很多用武之地,我一一道来 合并分支 当多人协作同一个分支时,在提交我们自己版本之前,我们会先用git pull获取远端最新的版本。但是 git pull = git fetch + git mergegit merge是一个非…

上位机知识篇---keil IDE操作

文章目录 前言文件操作按键新建打开保存保存所有编辑操作按键撤销恢复复制粘贴剪切全选查找书签操作按键添加书签跳转到上一个书签跳转到下一个书签清空所有书签编译操作按键编译当前文件构建目标文件重新构建调试操作按键进入调试模式复位全速运行停止运行单步调试逐行调试跳出…

代码随想录算法训练营 Day49 图论Ⅰ 深度优先与广度优先

图论 基础 图的概念 图的概念 概念清单有向图 (a)无向图 (b)有向/无向如图 a 所示每条边有指向如图 b 所示每条边没有箭头指向权值每条边的权值每条边的权值度-有几条边连到该节点 (eg V 2 V_2 V2​ 度为 3)入度/出度出度:从该节点出发的边个数入度:…

Windows在PowerShell或CMD运行 curl 命令报错 解决办法 (zx)

解决 zx 8.x 不稳定的问题 在 Windows 上使用 zx 8.x 时可能会遇到不稳定的问题,建议降级到 7.x 版本。可以通过以下命令进行降级: pnpm remove zx pnpm add zx7 -D解决 PowerShell 不识别 curl 参数的问题 在 Windows 上,PowerShell 默认将…

WPF···

设置启动页 默认最后一个窗口关闭,程序退出,可以设置 修改窗体的icon图标 修改项目exe图标 双击项目名会看到代码 其他 在A窗体点击按钮打开B窗体,在B窗体设置WindowStartupLocation=“CenterOwner” 在A窗体的代码设置 B.Owner = this; B.Show(); B窗体生成在A窗体中间…

【IP101】图像修复技术精解:从传统插值到深度生成修复的算法演进

图像修复技术详解 🎨 图像修复就像是数字世界的"修复匠"!通过各种"修复技术",我们可以让受损的图像重获新生,就像修复匠修复破损的艺术品一样。让我们一起来探索这个神奇的图像"修复工作室"吧&…

Qt enabled + geometry 属性(2)

文章目录 enabled属性可用与禁用的概念API接口代码演示 阐述说明1. 先简单描述下要如何演示出上面两个接口的效果(思路)2. 事先规范按钮对象的命名3. 定义两个按钮对象的槽函数 动图演示效果4. widget.cpp geometry属性预备知识API接口上下左右移动 ta…

Linux下 使用 SSH 完成 Git 绑定 GitHub

文章目录 1、检查 SSH2、生成 SSH key3、添加 SSH key4、验证绑定是否成功 1、检查 SSH Git Bash 中输入ssh命令,查看本机是否安装 SSH: 2、生成 SSH key (1)输入 ssh-keygen -t rsa 命令,表示我们指定 RSA 算法生…

ubuntu18.04通过cuda_11.3_xxx.run安装失败,电脑黑屏解决办法

项目场景: ubuntu18.04跑DG-SLAM相关代码,安装lietorch包报错,需要用到GPU。 问题描述 跑代码需要cuda11.3,系统里面有另外一个版本,运行cuda_11.3_xxx.run,同时也选择了driver,安装成功后&am…

基于Qwen1.5-0.5B指令监督微调数据集的模型训练

1、安装 LLaMA Factory 输出:检查LLaMA Factory版本&#xff0c;日志或截图。 2、更新数据集 输出:样本数据集(zh.test.csv)处理后形成微调训练格式的json文件&#xff0c;部分数据或截图。 <数据集> dataset_info.json文件指定 &#xff08;1&#xff09;格式转换&…

JVM梳理(逻辑清晰)

JVM总览 JVM 是什么&#xff0c;作用是什么 JVM&#xff08;Java Virtual Machine&#xff0c;Java 虚拟机&#xff09;是一个可以运行 Java 字节码的虚拟计算机 核心作用&#xff1a;实现跨平台&#xff08;“一次编写&#xff0c;到处运行”&#xff09;&#xff0c;JVM 是…

【typenum】 9 与常量泛型桥接(generic_const_mappings.rs)

一、源码 该代码提供了常量结构体与库类型的转换。 // THIS IS GENERATED CODE //! Module with some const-generics-friendly definitions, to help bridge the gap //! between those and typenum types. //! //! - It requires the const-generics crate feature to be…

SOPHGO算能科技BM1688内存使用与编解码开发指南

1. BM1688内存分配接口详解 1.1 设备内存分配接口区别 BM1688提供了三个主要的设备内存分配接口,它们的主要区别如下: // 基本设备内存分配接口 void* bm_malloc_device_byte(bm_handle_t handle, unsigned int size);// 指定heap区域的设备内存分配 void*</

解决软件连接RabbitMQ突发System.IO.IOException: 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接异常

一、问题描述 系统再运行时&#xff0c;突然出现 System.Exception: [RabbitMQ.Send Error] RabbitMQ.Client.Exceptions.AlreadyClosedException: Already closed: The AMQP operation was interrupted: AMQP close-reason, initiated by Library, code541, text“Unexpected…

STM32单片机GUI系统1 GUI基本内容

目录 一、GUI简介 1、emWin 2、LVGL (Light and Versatile Graphics Library) 3、TouchGFX 4、Qt for Embedded 5、特性对比总结 二、LVGL移植要求 三、优化LVGL运行效果方法 四、LVGL系统文件 一、GUI简介 在嵌入式系统中&#xff0c;emWin、LVGL、TouchGFX 和 Qt 是…

基于vue框架的动漫论坛g2392(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户 开题报告内容 基于Vue框架的动漫论坛开题报告 一、研究背景与意义 &#xff08;一&#xff09;研究背景 随着互联网技术的飞速发展&#xff0c;动漫文化在全球范围内迅速传播&#xff0c;成为连接各国青年的重要文化纽带。动漫…

网络安全管理之钓鱼演练应急预案

文章目录 网络安全管理之钓鱼演练应急预案前言一、背景和目的1.1背景1.2目的 二、整体思路三、演练所需四、风险评估和演练目标4.1 风险评估4.2 演练目标 五、演练计划5.1 演练时间和地点5.2 参与人员5.3 演练场景5.4 演练流程5.5 演练评估 六、 应急响应流程七、钓鱼邮件防范7…

Hooks实现原理与自定义Hooks

React Hooks 是 React 16.8 引入的一种机制&#xff0c;允许在函数组件中使用状态&#xff08;state&#xff09;、副作用&#xff08;effect&#xff09;等功能&#xff0c;而无需编写 class 组件。其核心原理是通过闭包和链表结构&#xff0c;在 React 的 Fiber 架构中管理组…