【云计算】云计算八股与云开发焦点技能(虚拟化、分布式、容器化)
一、什么是云计算?
1、云计算的架构(基础设施,平台,软件)
国内做公有云的主要有:腾讯云,阿里云,华为云(对外贩卖)
做垂直私有云的有:米哈游,字节火山,等等
云计算的三种服务模式(企业卖的东西)
- IaaS:Infrastructure(基础设施)-as-a-Service;
- PaaS:Platform(平台)-as-a-Service;
- SaaS:Software(软件)-as-a-Service。
- 基础设施在最下端,平台在中间,软件在顶端。
常见应用:块存储、对象存储及文件存储服务,虚拟专用网络服务(VPN),负载均衡服务,虚拟防火墙及安全组隔离服务,桌面云服务,IDC托管云,企业私有云,大数据分析云服务,数据库云服务,媒体云服务,电信NFV云。
关键技能:
- 超大规模资源调度算法
- 计算资源调度
- 存储资源调度
- 能耗管理最优化
- 异构硬件继承管理本领
- 异构硬件管理集成技能
- 异构Hypervisor简化管理集成技能
- 异构存储管理继承的同一简化技能
- 应用无关的可靠性保障技能
- 数据中央内的可靠性保障技能
- 跨数据中央的可靠性保障技能
- 单VM及多VM的弹性伸缩技能
- 计算近端I/O性能加速技能
- 网络虚拟化技能
- 业务应用驱动的边缘虚拟网络自动化
- 更强大、更灵活的网络安全智能策略
- 应用模块以及工作流技能
- 容器调度与编排机制混合云适配连接机制
参考:1,2,
2、云计算的发展
发展汗青,参考,
物理机期间
- 云计算着实主要办理了四个方面的内容:计算,网络,存储,应用。前三者是资源层面的,最后是应用层面的。
- 计算是CPU和内存,为啥?1+1这个最简单的算法是把1放在内存里面,运行加法是CPU做的,做完告终果2又生存在内存里面。
网络就是你插根网线能上网。
存储就是你下个电影有地方放。本次讨论就是围绕这四个部分来讲的。
- 在原始社会,大家最爱用的是物理装备:
服务器用的是物理机,比方戴尔,惠普,IBM,联想等物理服务器,随着硬件装备的进步,物理服务器越来越强大了,64核128G内存都算是普通配置。
网络用的是硬件交换机和路由器,比方思科的,华为的,从1GE到10GE,现在有40GE和100GE,带宽越来越牛。
存储方面有的用普通的磁盘,也有了更快的SSD盘。容量从M,到G,连条记本电脑都能配置到T,更况且磁盘阵列。
如果摆设应用直接利用物理机,看起来很爽,总有种土豪的感觉,却又大大的缺点:
- 人工运维:如果你在一台服务器上安装软件,把系统安装坏了,怎么办?只有重装。当你想配置一下交换机的参数,必要串口连上去举行配置。当你想增长一块磁盘,总要买一块插进服务器。这些都必要人工来,而且很大可能要求机房。你们公司在北五环,机房在南六环,这酸爽。
浪费资源:着实你只想摆设一个小小的网站,却要用128G的内存。混着摆设吧,就有隔离性的问题。
隔离性差:你把很多多少的应用摆设在同一台物理机上,他们之间抢内存,抢cpu,一个写满了硬盘,另一个就没法用了,一个弄挂了内核,另一个也同时挂了,如果摆设两个雷同的应用,端口还会冲突,动不动就会出错。
于是有了第一次合久必分的过程,叫做虚拟化。所谓虚拟化,就是把实的变成虚的。
虚拟机的诞生
- 虚拟化办理了上面的问题
人工运维:虚拟机的创建和删除都可以远程操作,虚拟机被玩坏了,删了再建一个分钟级别的。虚拟网络的配置也可以远程操作,创建网卡,分配带宽都是调用接口就能搞定的。
浪费资源:虚拟化了以后,资源可以分配的很小很小,比如1个cpu,1G内存,1M带宽,1G硬盘,都可以被虚拟出来。
隔离性差:每个虚拟机有独立的cpu, 内存,硬盘,网卡,不同虚拟机的应用互不干扰。
- 但是虚拟化另有以下的缺点:
通过虚拟化软件创建虚拟机,必要人工指定放在哪台机器上,硬盘放在哪个存储装备上,网络的VLAN ID,带宽具体的配置,都必要人工指定。所以单单利用虚拟化的运维工程师往往有一个Excel表格,有多少台机器,每台机器摆设了哪些虚拟机。所以,一样平常虚拟化的集群数量都不是特别的大。
- 在虚拟化阶段,领跑者是Vmware,可以实现根本的计算,网络,存储的虚拟化。
当然这个世界有闭源,就有开源,有windows就有linux,有apple就有andord,有Vmware,就有Xen和KVM。在开源虚拟化方面,Xen方面Citrix做的不错,厥后Redhat在KVM发力不少。
- 为相识决虚拟化阶段剩余的问题,于是有了分久必合的过程。这个过程我们可以形象的称为池化。
虚拟化已经将资源分的很细了,但是对于云云细粒度的资源靠Excel去管理,资本太高,能不能打成一个大的池,当必要资源的时候,资助用户自动的选择,而非用户指定。所以这个阶段的关键点:调度器Scheduler。
公有云和私有云的诞生(池化计算)
- 于是vmware有了自己的vcloud。
于是基于Xen和KVM的私有云平台CloudStack,厥后Citrix将其收购后开源。
AWS最初就是基于Xen技能举行虚拟化的,并且终极形成了公有云平台。
- 私有云厂商和公有云厂商也拥有类似的技能,却在产品运营上呈现出完全不同的基因。
私有云厂商都是卖资源的,所以往往在卖私有云平台的时候往往伴随着卖计算,网络,存储装备。
公有云的厂商往往都是有自己的大规模应用必要摆设的,所以其产品的计划,可以将常见的应用摆设所必要的模块作为组件提供出来,用户可以像拼积木一样,拼接一个适用于自己应用的架构。
- Rackspace与NASA合作创始了开源云平台OpenStack。从OpenStack的模块组成,可以看到云计算池化的方法。
计算池化模块Nova:OpenStack的计算虚拟化主要利用KVM,然而到底在那个物理机上开虚拟机呢,这要靠nova-scheduler。
网络池化模块Neutron:OpenStack的网络虚拟化主要利用Openvswitch,然而对于每一个Openvswitch的虚拟网络,虚拟网卡,VLAN,带宽的配置,不必要登录到集群上配置,Neutron可以通过SDN的方式举行配置。
存储池化模块Cinder:OpenStack的存储虚拟化,如果利用本土地,则基于LVM,利用哪个LVM上分配的盘,也是用过scheduler来的。厥后就有了将多台机器的硬盘打成一个池的方式Ceph,则调度的过程,则在Ceph层完成。
- 有了OpenStack,所有的私有云厂商都疯了,原来VMware在私有云市场着实赚的太多了,眼巴巴的看着,没有对应的平台可以和他抗衡。现在有了现成的框架,再加上自己的硬件装备,你可以想象到的所有的IT厂商的巨头,全部参加到社区里面来,将OpenStack开发为自己的产品,连同硬件装备一起,杀入私有云市场。 网易当然也没有错过这次风口,上线了自己的OpenStack集群,网易蜂巢基于OpenStack自主研发了IaaS服务,在计算虚拟化方面,通过裁剪KVM镜像,优化虚拟机启动流程等改进,实现了虚拟机的秒级别启动。在网络虚拟化方面,通过SDN和Openvswitch技能,实现了虚拟机之间的高性能互访。在存储虚拟化方面,通过优化Ceph存储,实现高性能云盘。
应用层的云计算
- 前面一直在讲IaaS层的故事,也即基础设施即服务,根本上在谈计算,网络,存储的事情。现在应该说说应用层的事情了。
- IaaS的定义比力清楚,PaaS的定义就没那么清楚了,有的把数据库,负载均衡,缓存作为PaaS服务,有的把大数据Hadoop, Spark平台作为PaaS服务,有的讲应用的安装与管理,比方Puppet, Chef, Ansible作为PaaS服务。
- 着实PaaS主要用于管理应用层的,我总结两部分:一部分是你自己的应用应当自动摆设,比如Puppet, Chef, Ansible, Cloud Foundry等,可以通过脚本帮你摆设,一部分是你以为复杂的通用应用不消摆设,比如数据库,缓存,大数据平台,可以在云平台上一点即得。
- 有了PaaS最大的优点,就是可以实现应用层的弹性伸缩。 比如双十一来了,10个节点要变成100个节点,如果利用物理装备,再买90台机器固然来不及,仅仅只有IaaS实现资源的弹性是不敷的,再创建90台虚拟机,也是空的啊,还是必要运维人员一台一台的摆设。所以有了PaaS就好了,一台虚拟机启动后,马上运行自动摆设脚本,举行应用的安装,90台机器自动安装好了应用,才是真正的弹性伸缩。
- 当然这种摆设方式也有一个问题, 就是无论Puppet, Chef, Ansible把安装脚本抽象的再好,说到底也是基于脚本的,然而应用所在的环境千差万别 ,文件路径的差别,文件权限的差别,依赖包的差别,应用环境的差别,Tomcat, PHP, Apache等软件版本的差别,JDK,Python等版本的差别,是否安装了一些系统软件,是否占用了哪些端口 ,都可能造成脚本实行的不成功。所以看起来是一旦脚本写好,就能够快速复制了,但是一旦环境稍有改变,就必要把脚本举行新一轮的修改,测试,联调。 比方在数据中央写好的脚本,移到AWS上就不愿定直接能用,在AWS上联调好了,迁徙到Google Cloud上去也可能再会出问题。
容器的诞生
- 于是容器应运而生。容器是Container,Container另一个意思是集装箱,着实容器的思想就是要变成软件交付的集装箱。集装箱的特点,一是打包,二是尺度。
- 设想没有集装箱的期间,如果从A将货物运到B,中间要经过三个船埠,换三次船的话,每次货物都要卸下船来,摆的七零八落,然后再换船的时候,必要重新整齐摆好,所以没有集装箱的时候,船员们都能够在岸上待几天再走。然而有了集装箱,所有的货物都打包在一起了,并且集装箱的尺寸全部一致,所以每次换船的时候,团体一个箱子搬已往就可以了,小时级别就能完成,船员再也不能登陆长时间休息了。所以设想A就是步伐员,B就是用户,货物就是代码及运行环境,中间的三个船埠分别是开发,测试,上线。
- 假设代码的运行环境如下:
1.Ubuntu操作系统
2.创建用户hadoop
3.下载解压缩JDK 1.7在某个目次下
4.将这个目次参加JAVA_HOME和PATH的环境变量里面
5.将环境变量的export放在hadoop用户的home目次下的.bashrc文件中
6.下载并解压缩tomcat 7
7.将war放到tomcat的webapp路径下面
8.修改tomcat的启动参数,将Java的Heap Size设为1024M
- 一个简单的Java网站,就必要考虑这么多零零散散的东西,如果不打包,就必要在开发,测试,生产的每个环境上查看保证环境的一致,乃至要将这些环境重新搭建一遍,就像每次将货物打散了重装一样贫苦,中间稍有差池,比如开发环境用了JDK 1.8,而线上是JDK 1.7,比如开发环境用了root用户,线上必要利用hadoop用户,都可能导致步伐的运行失败。
- 容器如何对应用打包呢? 还是要学习集装箱,首先要有个封闭的环境,将货物封装起来,让货物之间互不干扰,相互隔离,这样装货卸货才方便。幸亏ubuntu中的lxc技能早就能做到这一点,这里主要利用了两种技能,一种是看起来是隔离的技能,称为namespace,也即每个namespace中的应用看到的是不同的IP地址,用户空间,进程号等。另一种是用起来是隔离的,称为cgroup,也即明显整台机器有很多的CPU,内存,而一个应用只能用此中的一部分。
- 有了这两项技能,集装箱的铁盒子我们是焊好了,接下来是决定往里面放什么的时候了。最简单粗暴的方法,就是将上面列表中所有的都放到集装箱里面。但是这样太大了,由于虚拟机的镜像就是这样的,动辄几十G,如果你安装一个干干静静的ubuntu操作系统,什么都不装,就很大了。这着实相当于把船也放到了集装箱里面,答案当然是NO.
- 所以撇下第一项操作系统,剩下的所有的加起来,也就几百M,就轻巧多了。所以一台服务器上的容器是共享操作系统内核的,容器在不同机器之间的迁徙不带内核,这也是很多人声称容器是轻量级的虚拟机的原因。轻不白轻,自然隔离性就差了,一个集装箱把船压漏水了,所有的集装箱一起沉。
- 另一个必要撇下的就是随着应用的运行而产生并生存在本地的数据,多以文件的情势存在,比方数据库文件,文本文件。这些文件会随着应用的运行,越来越大,如果这些数据也放在容器里面,会让容器变得很大,影响容器在不同环境的迁徙。而且这些数据在开发,测试,线上环境之间的迁徙是没故意义的,生产环境不可能用测试环境的文件,所以往往这些数据也是生存在容器外面的存储装备上。也是为什么人们称容器是无状态的。
- 总而言之,容器是轻量级的,隔离差的,适用于无状态的,基于镜像尺度实现跨主机,跨环境的随意迁徙。
- 有了容器,使得PaaS层对于用户自身应用的自动摆设变得快速而优雅。容器快,快在了两方面, 第一是虚拟机启动的时候要先启动操作系统,容器不消启动操作系统,由于是共享内核的。第二是虚拟机启动后利用脚本安装应用,容器不消安装应用,由于已经打包在镜像里面了。所以终极虚拟机的启动是分钟级别,而容器的启动是秒级。
- 由于容器的启动快,人们往往不会创建一个个小的虚拟机来刚刚摆设应用,由于这样太费时间了,而是创建一个大的虚拟机,然后在大的虚拟机里面再划分容器,而不同的用户不共享大的虚拟机,可以实现操作系统内核的隔离。
容器的粒度更加细,管理起来更难管,乃至是手动操作难以应对的。所以容器层面的管理平台是一个新的挑战,关键字就是自动化 。
- 容器管理平台
当前火热的容器管理平台有三大流派:
一个是Kubernetes,出自Borg,Borg是Google数据中央的容器管理平台。Kubernetes生态活泼,热度高。
一个是Mesos,我们称为乔峰型。Mesos的调度功能独有的,Mesos管理过Tweeter的容器集群。Mesos社区还是以Mesosphere为主导。社区热度不敷。
一个是Swarm,Swarm是Docker眷属的集群管理软件 ,Docker可以说称为容器的究竟尺度,但是Swarm的集群管理本领却有所不敷,幸亏Swarm鉴戒了很多前面的集群管理思想,也在渐渐的成熟中。
二、如何做云计算开发?云计算的焦点技能(重点)
参考:1,2,3,4,5,6,7
1、虚拟化技能 -> 虚拟机(计算,存储,网络)
计算虚拟化
- CPU虚拟化 (二进制翻译):如何模仿CPU指令 (所有敏感指令),如何让多个VM共享CPU。
办理方案:硬件–>VMM(虚拟机监视步伐)–>Guest os(虚拟机操作系统)–>app
全虚:将所有指令都网络到虚拟化层举行处置惩罚
半虚:计划理念是将16条指令,由VMM(虚拟化层)移向Guest OS(虚拟机操作系统)自身 通过主动的方式由Guest OS去处置惩罚这些指令,而不是被移交给VMM做处置惩罚。
硬虚(硬件辅助虚拟化):Guest OS实行到特别指令可以直接下到达计算机系统硬件去处置惩罚,而不必要通过VMM去处置惩罚
- 内存虚拟化
概念: 把物理机的真实物理内存统一管理,包装成多个虚拟机的内存给若干虚拟机利用
Native操作系统对内存的认识与管理达成以下两点认识:内存都是从物理地址0开始的,内存都是一连的。 这也是内存虚拟化必要办理两个的问题。
办理:KVM(基于内核的虚拟机)是一种内建于Linux中的开源虚拟化技能,可将Linux变化为虚拟机监控步伐,使主机计算性能够运行多个隔离的虚拟环境。
虚拟机的虚拟地址到物理机的物理地址的转换:GVA—>GPA—>HVA—>HPA。
- IO虚拟化
I/O装备是可对数据举行输入输出的如:磁盘、网卡 I/o虚拟化分为全虚、半虚、I/o透传
全虚:VMM为虚拟机直接模仿出一个与真实装备相似的io装备
半虚:发起一个特权级别的虚拟机,Dom0:安装原生驱动和后端驱动;普通虚拟机(DomU):安装前端驱动
io透传:直接将原生驱动安装给VM利用
- KVM技能:
基于内核的虚拟机,linux内核模块。II型虚拟化
任意一装有linux操作系统的虚拟机,安装KVM模块之后即变成了Hypervisor
网络虚拟化
- 网络的根本概念:
南北流量:流量经过路由。东西流量:流量不经过路由。
ip互联网协议地址,为计算机网络中主机通信计划的。
mac,物理地址,硬件地址,用来确定网络装备在网络中的位置。
- vlan:虚拟局域网,在逻辑上将一个物理的局域网划分为多个逻辑装备的广播域的技能
作用:限定广播域、增长安全性,进步网络的结实性,灵活
vlan:端口
Access:仅允许一个vlan id通过本接口,该vlan id与本接口的id雷同
Trunk:允很多个id通过
- 分布式虚拟交换机在功能上类似于普通的二层交换机。 此中一端与VM的虚拟端口相连,中间是一条虚拟的链路。 另外一端则通过上行链路与主机上的物理网络适配器相连,再与物理交换机相连。 从而连接到各个主机和虚拟机,实现网络互通。
存储虚拟化
- 常见的物理磁盘类型:机械硬盘HDD,固态硬盘SSD。
- 会集式存储(RAID):
RAID机制(冗余磁盘阵列),高效(多块磁盘并行读写),安全(奇偶校验和热备技能)。
常用的RAID类型:
RAID0(条带化):多块硬盘逻辑成一块硬盘用(不具备冗余功能)
RAID1(镜像):多块硬盘逻辑成一块硬盘用
RAID5(独立的数据磁盘与分布式校验块):最少必要三块硬盘
RAID6:最少必要4块硬盘
- 会集式存储类型
块存储:块存储指的是块装备,统统以磁盘情势存在的存储都是块装备,即块存储。块存储强调的是裸磁盘(所有以磁盘情势提供给主机的访问的存储就是块存储)。
文件存储:普通的明白“块存储+文件系统”打包后,对外提供存储服务。
对象存储:对象存储普通的说就是基于对象的存储,对象在一个层结构中不会再有层级结构。而文件存储依旧保持传统的文件目次结构层级,当文件层级太深,就会低落速率。
会集式存储按照技能架构分为SAN、NAS
- 分布式存储
概念: 分布式存储的资源来自于各个主机(服务器),然后将资源整合和分布式存储池,再为各个主机所用。
问题: 分布式存储为什么不消RAID机制
为了保证数据的高可用性和安全性,会集式存储利用的是RAID技能,RAID可以通过硬件和软件的方式来实现,无论是软RAID或者硬RAID,所有的硬盘都必要在一个服务器内 (硬RAID必要统一RAID卡,软RAID必要统一操作系统)。
由于分布式存储的硬盘分布在不同的服务器上,所以无法再利用RAID机制 。因此,分布式存储是通过副本机制来实现数据的高可靠性的。副本机制是指将数据复制成多份如出一辙的内容,并分别生存在不同的服务器上,当某台服务器出现故障后,数据并不会丢失。
2、分布式技能 -> 资源池
参考:1,
云计算与分布式计算的区别
- 云计算(Cloud Computing)是分布式计算的一种;云计算在早期,就是简单的分布式计算,举行使命分发并对计算结果举行合并;当前的云计算已经不单单是一种分布式计算,而是分布式计算、效用计算、负载均衡、并行计算、网络存储、热备份冗余和虚拟化等计算机技能混合演进并跃升的结果
- 云计算属于分布式计算。另有一个网格计算也属于分布式计算,它们之间的一个紧张区别在于资源调度模式。云计算采取集群来存储和管理数据资源,运行的使命以数据为中央。即调度计算使命到数据存储节点运行。而网格计算则以计算为中央。云计算则进一步将硬件资源虚拟化,活用虚拟机技能,对失败使命重新实行,而不必重启使命。
云计算的分布式存储
- 云计算系统中广泛利用的数据存储系统是由Google的GFS和Hadoop团队开发的HDFS。
- 一个GFS集群由一个主服务器(Master)和大量的块服务器(Chunk Server)构成 ,可被很多客户访问。主服务器存储文件系统所有的元数据,包罗名字空间、访问控制信息、从文件到块的映射以及块的当前位置。主服务器控制涉及系统范围的运动,如块租约(Lease) 管理、孤儿块的垃圾网络以及块服务器间的块迁徙。主服务器定期通过HeartBeat消息与每一个块服务 器通信,向块服务器传递指令并网络它的状态。GFS中的文件被切分为64 MB的块并以冗余9方式存储,每份数据在系统中生存3个以上备份。用户与主服务器的交流只限于对元数据的操作,所有涉及数据的通信都直接通过块服务器接洽,这大大进步了系统的效率,并可防止主服务器负载过重,
- 云计算必要对分布式的海量数据举行处置惩罚和分析,因此数据管理技能必须能够用来高效地管理大量的数据。云计算系统中的数据管理技能主要是Google的BT(BigTable)数据管理技能和Hadoop团队开发的开源数据管理模块HBase 。BT是建立在GFS、Scheduler、Lock Service 和MapReduce之上的一种大型的分布式数据库,与传统的关系数据库不同,它把所有的数据都作为对象来处置惩罚,以形成一个巨大表格用来分布存储大规模结构化数据。
如何实现一个分布式锁
- 参考
- 一, 基于数据库实现分布式锁
1.悲观锁
利用select … where … for update 排他锁
注意: 其他附加功能与实现一根本一致,这里必要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表。有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题。
2.乐观锁
所谓乐观锁与前边最大区别在于基于CAS思想,是不具有互斥性,不会产生锁期待而斲丧资源,操作过程中认为不存在并发冲突,只有update version失败后才能觉察到。我们的抢购、秒杀就是用了这种实现以防止超卖。
通过增长递增的版本号字段实现乐观锁
- 基于缓存(Redis等)实现分布式锁
1.利用命令先容:
(1)SETNX,SETNX key val:当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。
(2)expire,expire key timeout:为key设置一个超时时间,单位为second,超过这个时间锁会自动开释,避免死锁。
(3)delete,delete key:删除key
2.实现
(1)获取锁的时候,利用setnx加锁,并利用expire命令为锁添加一个超时时间,超过该时间则自动开释锁,锁的value值为一个随机生成的UUID,通过此在开释锁的时候举行判断。
(2)获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁。
(3)开释锁的时候,通过UUID判断是不是该锁,如果该锁,则实行delete举行锁开释。
- 基于Zookeeper实现分布式锁
ZooKeeper是一个为分布式应用提供一致性服务的开源组件,它内部是一个分层的文件系统目次树结构,规定同一个目次下只能有一个唯一文件名。基于ZooKeeper实现分布式锁的步骤如下:
(1)创建一个目次mylock;
(2)线程A想获取锁就在mylock目次下创建暂时次序节点;
(3)获取mylock目次下所有的子节点,然后获取比自己小的兄弟节点,如果不存在,则说明当火线程次序号最小,获得锁;
(4)线程B获取所有节点,判断自己不是最小节点,设置监听比自己次小的节点;
(5)线程A处置惩罚完,删除自己的节点,线程B监听到变更事件,判断自己是不是最小的节点,如果是则获得锁。
- 对比
数据库分布式锁实现
缺点:
1.db操作性能较差,并且有锁表的风险
2.非阻塞操作失败后,必要轮询,占用cpu资源;
3.长时间不commit或者长时间轮询,可能会占用较多连接资源
Redis(缓存)分布式锁实现
缺点:
1.锁删除失败 过期时间欠好控制
2.非阻塞,操作失败后,必要轮询,占用cpu资源;
ZK分布式锁实现
缺点:性能不如redis实现,主要原因是写操作(获取锁开释锁)都必要在Leader上实行,然后同步到follower。
总之:ZooKeeper有较好的性能和可靠性。
从明白的难易程度角度(从低到高)数据库 > 缓存 > Zookeeper
从实现的复杂性角度(从低到高)Zookeeper >= 缓存 > 数据库
从性能角度(从高到低)缓存 > Zookeeper >= 数据库
从可靠性角度(从高到低)Zookeeper > 缓存 > 数据库
3、容器化技能 -> 快速迁徙
容器是一个尺度的软件单位,它打包代码及其所有依赖项,以便应用步伐从一个计算环境快速可靠地迁徙到另一个计算环境。Docker 容器镜像是一个轻量级的、独立的、可实行的软件包,包罗运行应用步伐所需的统统:如代码、运行环境、系统工具、系统库和设置。Docker是容器的引擎,通过Docker引擎就可以实现容器的功能。
容器技能最紧张的价值是:为在不同主机上运行的应用步伐服务提供一个轻巧、一致的格式。容器格式的尺度化可加速交付体验,允许用户方便地对工作负载举行迁徙,避免局限于单一的平台提供商。利用容器可以短时间内摆设成百上千个应用,保证用户应用快速上线;容器可以简化配置过程,用户应用的运行环境可以直接打包到容器内,利用时可以直接启动。
如上图所示,左图为容器技能架构图,右图为虚拟化技能架构图。两者相比,容器与虚拟机最大的不同是容器里不再安装操作系统,容器的本质是一种操作系统级别的虚拟化,启动一个应用容器着实就是启动一个进程,节省了大量操作系统所占资源,同样一台计算机就可以服务于更多租户。容器技能对操作系统的资源举行再次抽象,而并非对整个物理机资源举行虚拟化。容器和虚拟机一起利用为摆设和管理应用步伐提供了极大的灵活性。
三、面经补充
1、云计算面经补充
计算机发展史、概念题
- Q:你认为云计算到底解决了软件生产中的什么问题?
- 节约成本、外包扩大业务、网站防攻击、数据备份等等
- Q:请解释云计算中的公有云、私有云和混合云,并说明它们的适用场景。
- 公有云是由第三方云服务提供商(如亚马逊AWS、微软Azure、谷歌云等)提供和管理的云基础设施和服务。这些基础设施和服务对外公开,客户可以按需使用并按照使用量付费。
- 私有云是指由单个组织或企业内部搭建和管理的云基础设施和服务。这些基础设施可以部署在自己的数据中心或由第三方托管,但对外部通常不公开。
- 混合云是指同时使用公有云和私有云的部署模型。在混合云中,组织可以将一些工作负载部署在公有云上,而将另一些工作负载部署在私有云上,并且这两者之间可以进行互操作。
- Q:讨论云计算的五个基本特征。
- 资源收缩,快速部署,资源抽象,按用量计费,宽带访问
- Q:请简述云计算中有哪些不同的层,并介绍各自的功能。
- a) Saas:软件及服务,它让用户可以直接访问云应用程序,不必再系统上安装任何东西。
- b) Iaas:基础设施即服务,它从硬件(比如内存和处理器速度等)等层面提供了基础设施
- c) Paas:平台及服务,它为开发人员提供云应用程序平台。
- Q:对云计算有什么了解?
- 云计算是一种基于互联网的计算方式,通过共享的资源池,提供可按需获取、可快速提供和可测量的计算服务。
- 它主要由三个部分组成:云存储、云计算和云服务。
- 云计算通过虚拟化技术,将硬件资源(如处理器、存储器、网络)进行抽象和汇总,形成资源池,通过软件技术对资源进行分配和管理,从而提供计算服务。
- 云计算可以根据需要快速提供计算、存储、网络等各种服务,可以节省企业的资金和时间成本,提高资源利用率。 云计算有多种服务模式,包括基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。
- 不同的服务模式适用于不同的业务需求。同时,云计算还有多种部署方式,包括公共云、私有云和混合云。企业可以根据自己的需求选择适合的部署方式。
- Q:云计算服务中涉及的数据库服务通常包括以下几个方面?
- + 数据库即服务(DBaaS):DBaaS是一种将数据库作为云服务提供的模式,用户无需购买、安装和维护数据库软件和硬件设备,而是通过云服务提供商提供的界面或API来管理和使用数据库。
- + 数据库实例,用户可以在其中部署和运行自己的数据库系统。这些数据库实例通常包括预配置的硬件资源(如CPU、内存、存储空间)和数据库软件环境,用户只需根据自己的需求选择合适的实例类型和规格即可快速部署自己的数据库系统。
复制代码 云计算焦点技能
- Q:云计算中的虚拟化技术是如何实现资源的隔离和共享的?
- 通过创建虚拟的计算资源(如虚拟机、容器等)来实现资源的隔离和共享。
- 资源隔离是指将不同用户或应用程序的计算资源彼此隔离,以确保它们在同一物理基础设施上运行时不会相互干扰。
- + 虚拟化层:在物理服务器上运行虚拟化软件,该软件负责创建和管理虚拟资源。虚拟化层将物理服务器的计算、存储和网络资源抽象化,以便多个虚拟实例可以共享这些资源。
- + 虚拟机(VM)技术:通过虚拟机管理器(如VMware、Hyper-V、KVM等),物理服务器可以被划分为多个虚拟机,每个虚拟机都运行着独立的操作系统和应用程序。这样,不同用户或应用程序的计算资源可以被隔离开来,就好像它们运行在不同的物理服务器上一样。
- + 容器技术:容器技术(如Docker、Kubernetes等)提供了一种更轻量级的虚拟化方式,容器可以在同一操作系统内共享内核,并且具有更快的启动时间和更小的资源开销。通过容器技术,不同应用程序的资源可以被隔离开来,同时共享相同的操作系统内核。
- Q:请解释云计算中的弹性伸缩是什么,以及为什么弹性伸缩对云计算环境具有重要意义?
- + 云计算中的弹性伸缩是指根据实际需求动态地增加或减少计算资源(如服务器、存储和网络资源)的能力。这意味着在云平台上,系统能够根据负载、用户需求或其他指标来自动地增加或减少计算资源,以保持系统的性能和可用性。
- Q:容器和虚拟机的区别?
- + 容器与虚拟机最大的不同是容器里不再安装操作系统,容器的本质是一种操作系统级别的虚拟化,启动一个应用容器其实就是启动一个进程,节省了大量操作系统所占资源。
- Q:vm虚拟机为什么效率高?
- 对比其他虚拟技术,内核也有做虚拟化。
- 对比物理机,资源共享,资源隔离,资源管理相关的能力。
复制代码 2、Linux面经补充
参考:1,2,3,4,5,6,7,8-git,9-git,10-内核,linux-运维
系统原理
- Q:怎么看一个文件被哪些进程占用,除了命令,找到所有日志,自己统计。
- lsof 文件名 (实现原理)
- 1、/proc 文件系统是 Linux 内核提供的一个虚拟文件系统,包含了关于系统运行状态的信息。
- 2、每个正在运行的进程在/proc/[PID]/fd目录下都有一个符号链接列表,这些链接指向该进程打开的文件描述符
- 3、 对于每个文件描述符,lsof会读取符号链接指向的真实文件路径,并获取该文件的相关信息,如文件类型、文件大小等
- 4、lsof根据文件描述符获取到的文件信息,查找相应的进程信息,包括进程ID、进程名称、用户ID等。
- 5、lsof将获取到的文件信息和进程信息以表格形式输出,显示文件被哪些进程占用。。
- Q:Linux查看某个端口是否被占用?
- sudo netstat -tuln | grep :80
- sudo ss -tuln | grep :80
- 这将显示所有正在监听端口的服务,并且可以看到端口 80 是否被占用。
- Q:Linux启动过程,从bios开始?
- 第一步:开机自检,加载 BIOS
- 第二步:读取 MBR(硬盘的主引导记录,MBR是第一个可开机设备的第一个扇区的引导分区块)
- 第三步:Boot Loader grub 引导菜单(里面的ext4驱动,可以识别/boot分区里的内容)
- 第四步:加载 kernel 内核 (根据 grub 设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。)
- 第五步:init 进程依据 inittab 文件夹来设定运行级别(内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取 /etc/inittab 文件,并依据此文件来进行初始化工作)
- 第六步:init 进程执行 rc.sysinit
- 第七步:启动内核模块
- 第八步:执行不同运行级别的脚本程序
- 第九步:执行 /etc/rc.d/rc.local
- 第十步:执行 /bin/login 程序,启动 mingetty,进入登录状态
- Q:如何查看一个服务是否开机启动?
- 方法1: 到多用户模式对应的文件夹下查看是否有这个服务的名字
- Q:运行级别(centos6里概念)
- 在centos6里有哪些运行级别?
- runlevel 可以查看当前运行级别
- 0级:关机
- 1级:单用户(找回丢失密码)
- 2级:多用户无网络,不能使用NFS功能
- 3级:多用户有网络(multi-user),最常用的级别,CLI字符界面
- (会定义哪些程序在字符界面下开机启动 -->开启的程序少–>消耗的资源少 -->最小化安装)
- 4级:保留,目前Linux暂无使用
- 5级:图像界面,GUI界面
- (图形界面 -->会定义哪些程序在图形界面下开机启动 -->开启的程序多–>消耗资源多 -->带GUI服务器,linux里启动图形界面是启动GNOME 和KDE)
- 6级:重启
- 在centos7/8里该文件已经不再使用了
- Q:内核子系统有哪些?操作系统的主要功能?
- 内核子系统包括文件系统、网络、内存管理等,操作系统的主要功能是资源管理和任务调度。
- Q:系统的运行级别,默认的运行级别是?
- 系统的运行级别,默认的运行级别是3。
- Q:虚拟化,完全虚拟化,半虚拟化,docker?
- 虚拟化有完全虚拟化、半虚拟化和容器虚拟化(如Docker)。
- Q:Docker常用命令:,例如开启所有容器,删除所有镜像,复制文件到容器内?
- `docker start $(docker ps -aq)`(开启所有容器)、`docker rmi $(docker images -q)`(删除所有镜像)、`docker cp`(复制文件到容器内)。
- Q:解释一下什么是分布式部署,负载均衡,反向代理?
- 分布式部署是将应用程序部署在多台服务器上,负载均衡是将请求分配到多个服务器上,反向代理是代理服务器接收客户端请求并将其转发到后端服务器。
- Q:对云原生的理解?
- 云原生是一种软件开发和部署方法,利用云计算和容器化技术,实现高度自动化、弹性扩展和持续交付。
复制代码 常用命令
- Q:常见的进程管理命令有哪些?
- top ps systemctl nice service
- Q:关闭Linux系统不重启
- 用 `shutdown -h now` 命令。
- Q:数据库备份
- 使用 `mysqldump`。
- Q:创建和解压压缩文件
- 使用 `tar` 命令。
- Q:常见的端口、
- Web服务使用80和443端口,数据库服务常用3306端口。
- Q:常见的Linux日志文件和路径:
- `/var/log/messages`、`/var/log/syslog`。
- Q:常见的进程管理命令:
- `ps`、`top`、`kill`。
- Q:linux查看某个端口是否开启
- a. 使用lsof -i:端口号命令行
- b.使用netstat -aptn命令行,查看所有开启的端口号
复制代码 其他补充:
- 如何停止一个进程?
kill命令被用来给步伐发送信号。如果没有指定信号,默认发送TERM(终止)信号。
语法 : kill [-signal] PID …
- 什么是硬链接和软链接?
硬链接:由于 Linux 下的文件是通过索引节点(inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配 inode 。每添加一个一个硬链接,文件的链接数就加 1 。
不敷:
1、 不可以在不同文件系统的文件间建立链接;
2、 只有超等用户才可以为目次创建硬链接。
软链接:软链接降服了硬链接的不敷,**没有任何文件系统的限定,任何用户可以创建指向目次的符号链接。**因而现在更为广泛利用,它具有更大的灵活性,乃至可以超过不同机器、不同网络对文件举行链接。
不敷:由于链接文件包含有原文件的路径信息,所以当原文件从一个目次下移到其他目次中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;另有它要系统分配额外的空间用于建立新的索引节点和生存原文件的路径。
现实场景下,根本是利用软链接。
总结区别如下:
1、 硬链接不可以跨分区,软件链可以跨分区。
2、 硬链接指向一个 inode 节点,而软链接则是创建一个新的 inode 节点。
3、 删除硬链接文件,不会删除原文件,删除软链接文件,会把原文件删除。
软连接类似于快捷方式但不一样.
- Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?
1、 不可停止状态:进程处于睡眠状态,但是此刻进程是不可停止的。不可停止, 指进程不响应异步信号。
2、 暂停状态/跟踪状态:向进程发送一个 SIGSTOP 信号,它就会因响应该信号 而进入 TASK_STOPPED 状态;当进程正在被跟踪时,它处于 TASK_TRACED 这个特别的状态。
正被跟踪”指的是进程暂停下来,期待跟踪它的进程对它举行操作。
3、 就绪状态:在 run_queue 队列里的状态
4、 运行状态:在 run_queue 队列里的状态
5、 可停止睡眠状态:处于这个状态的进程由于期待某某事件的发生(比如期待 socket 连接、期待信号量),而被挂起
6、 zombie 状态(僵尸):父亲没有通过 wait 系列的系统调用会趁便将子进程的尸体(task_struct)也开释掉
7、 退出状态
D 不可停止 Uninterruptible(usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核 2.6 开始无效)
X 死掉的进程
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |