「Docker入门指北」容器很难理解?带你从头到尾捋一遍

在这里插入图片描述

文章目录

  • 1. 初始虚拟化
    • 🍑 虚拟化概念
    • 🍑 硬件虚拟化
  • 2. Docker容器
    • 🍑 Docker技术的诞生
    • 🍑 容器与虚拟化
    • 🍑 性能差别
    • 🍑 Docker优势
      • 编排有序
      • 高效易迁移
      • 快速部署
  • 3. 容器生态系统
    • 🍑 核心技术
      • 容器规范
      • 容器 runtime
      • 管理工具
      • 定义工具
      • 容器仓库
      • 容器OS
    • 🍑 平台技术
      • 容器编排引擎
      • 容器管理平台
      • 容器PaaS
    • 🍑 支持技术
      • 容器网络
      • 服务发现
      • 容器监控
      • 数据管理
      • 日志管理
      • 容器安全
  • 4. 总结

在这里插入图片描述

1. 初始虚拟化

🍑 虚拟化概念

在计算机技术中,虚拟化(Virtualization) 是一种资源管理技术。
 
虚拟化的目的是在一台计算机上运行多个系统或应用,从而提高资源的利用率,节约成本。将单台服务器中的各种资源,如网络、CPU及内存等,整合转换为一台或多台虚拟机,用户就可以从多个方面充分利用计算资源。
 
由下图可以看出,一台物理机可以拥有多台虚拟机,而这些虚拟机都是基于物理机运行。
 
其中,物理机又叫作虚拟机的宿主机(可简称为主机),只要它处于正常运行状态,就可以一直承载虚拟机的运行。
 
由于虚拟机基于物理机运行,硬件设备都是共享的,在创建多台虚拟机时,也要考虑到物理机的配置是否能够承载足够数量的虚拟机。
在这里插入图片描述

🍑 硬件虚拟化

硬件虚拟化是对宿主机的硬件进行虚拟化,使硬件对用户隐藏,并将虚拟化的硬件呈现在用户面前,如下图所示。
在这里插入图片描述
图中所示的硬件并非真实的物理硬件,而是通过虚拟化技术虚拟出来的,与虚拟机一样基于物理机硬件。
 
虚拟机的运行需要考虑物理机硬件的配置,例如,将物理机中的网卡取出后,在虚拟机设置中是无法添加网卡的,但只要物理机中有网卡,虚拟机中就可以添加多个网卡。
 
再例如,物理机的内存有 16GB,用户直接给虚拟机配置 16GB 内存,这也是无法实现的,因为物理机的运行也需要消耗内存。

下面是一些硬件虚拟化的例子👇

Inter-VT(Inter Virtualization Technology,Intel公司的虚拟化技术)。
 
为了解决纯软件虚拟化安全、性能等方面的不足,这种技术可以让一个 CPU 看起来像是多个 CPU 在工作一样,从而实现在一台计算机上同时存在多个操作系统。
 
AMD-V(AMD Virtualization,AMD公司的虚拟化技术)。
 
它是针对 x86 处理器系统架构的一组硬件扩展虚拟化技术,可以简化纯软件的虚拟化解决方案,改进 VMM(VirtualMachine Manager,虚拟机监视程序)的设计,更充分地利用硬件资源,提高了服务器和数据中心的虚拟化效率。

2. Docker容器

🍑 Docker技术的诞生

容器(Container) 技术是基于虚拟化技术的,它使应用程序可以从一个计算环境快速可靠地转移到另一个计算环境运行,可以说是一种新型的虚拟化技术。
 
由于容器技术的优越性,越来越多的互联网公司开始开发容器应用。
 
早在1979年,UNIX系统中就出现了一种 chroot 机制,这是容器技术的维形。
 
2000年,FreeBSD Jails技术出现。它基于 FreeBSD 系统,将计算机分为多个独立的小型计算系统。
 
2006年,谷歌推出了Process Containers (过程容器)技术,它不仅可以隔离进程,还可以对隔离空间限制计算资源。
 
2008年,出现了第一个完整的容器管理工具——LXC (Linux Container, Linux容器)。
 
2013年,,LMCTFY (Let Me Contain That For you,我为你的程序打包)作为由谷歌开发的开源容器技术,实现了在 Linux 系统中使用容器技术,,LMCTFY 最终成为 Libcontainer 容器管理的重要组成部分。
 
同年,,Docker 技术问世,容器热度呈爆发式增长,Docker 逐渐成为了容器中的杰出代表,如下图所示👇
在这里插入图片描述
Docker 是一个开源的容器引擎,它可以使开发者打包好的应用程序在 Docker 空间中运行起来。
 
当一台物理机中运行多个 Docker 容器时,就算其中一个容器出故障,也不会影响到整个业务。
 
Docker技术之所以独特,是因为它专注于开发人员和系统操作员的需求,将应用程序依赖项与基础架构分开。目前,容器无处不在,在 Linux、Windows、数据中心、公有云中,都可以看到容器的影子,如下图所示。
 
我们引入集装箱的概念来辅助理解 Docker 容器。集装箱被誉为运输业与世界贸易最重要的发明。
 
早期的货物运输时,设法将不同的货物放在运输机上和因货物规格不同而频繁进行的货物装载与卸载等浪费了大量的人力物力。
 
为此人们发明了集装箱,根据货物的形状、大小,使用不同规格的集装箱进行装载,然后再放在运输机上运输。
 
集装箱密封,只有货物到达目的地才需要拆封,在运输过程中能够在不同的运输机上平滑过渡,避免了资源的浪费。
在这里插入图片描述
Docker 容器就是利用了集装箱的思想,为应用程序提供基于容器的标准化运输系统。
 
Docker可以将任何应用及其依赖包打包进一个轻量级、可移植、自包含的容器。容器几乎可以运行在所有操作系统上。
 
因此才有了那句话 “Build Once,Run Anywhere(生成一次,到处运行)”。Docker的思想从其Logo中也不难看出——一堆可移动的集装箱,如下图所示。
在这里插入图片描述

🍑 容器与虚拟化

传统的虚拟机技术是模拟出一套硬件,在其上运行一套完整的操作系统,拥有自己独立的内核。
 
虚拟机包含应用程序、必需的库或二进制文件,以及一个完整的 Guest 操作系统。
 
而容器没有进行硬件虚拟,容器包含应用程序和它所有的依赖,容器中的应用进程直接运行在宿主机的内核上,与宿主机共享内核,因此容器比传统的虚拟机更加轻便。
 
容器技术与虚拟化技术都对需要运行的东西进行隔离,形成一个独立的运行空间,与宿主机系统互不干扰。虚拟化技术是基于系统的隔离,它对物理层面的资源进行隔离,如下图所示。
在这里插入图片描述
而容器技术与之不同,容器的隔离空间中运行的是应用程序,隔离是基于程序的,不需要将系统隔离,如下图所示。
在这里插入图片描述
相较于虚拟化,容器是更加快捷方便的技术,它的部署与迁移都十分快速,结构更加精简,运行速率更高。
 
而虚拟化技术需要系统隔离,结构腑肿,无论是部署还是迁移都要消耗大量时间,每次创建都要新建系统,为用户的操作带来不便。

🍑 性能差别

虚拟化与容器还有着性能上的区别,如下表所示。
在这里插入图片描述
Docker容器的操作系统是共享的,虚拟化的操作系统是独立的,所以后者的隔离性更强,但也注定结构复杂,无法被广泛应用到企业中。
 
如今,容器技术已进入成熟阶段,为开发人员与运维人员提供了更大的灵活性。容器可以快速部署,提供不变的基础架构。它们还取代了传统的修补过程,使组织可以更快地响应问题,并使应用程序更易于维护。
 
容器化之后,应用程序可以部署在任何基础架构上,如虚拟机、服务器以及运行不同虚拟机管理程序的各种公共云。许多企业从在虚拟化基础架构上运行容器开始,发现无须更改代码即可轻松地将其迁移到云。
 
容器本身具有固有的安全性。Docker容器在应用程序之间以及应用程序与主机之间创建隔离层,并通过限制对主机的访问来减少主机对外暴露的面积,从而保护主机与主机上的其他容器。
 
在服务器上运行的Docker容器具有与在虚拟机上运行时相同的高级限制,来保证业务的安全性。
 
Docker容器还可以通过保护虚拟机本身并为主机提供深度防御来与虚拟化技术完美结合。
目前,大多数企业都有成熟的虚拟化环境,包括备份、监视、自动化工具以及与之相关的人员和流程。

🍑 Docker优势

目前,Docker 发展趋势十分乐观,在企业中得到了广泛应用。接下来,我们将对 Docker 的优势进行详细介绍。

编排有序

在以往的项目交付过程中,常常出现在开发人员这里能够正常运行,到了运维人员那里却无法正常运行的情况,使业务不能在第一时间完成上线,导致交付过程效率低下。
 
Docker 提供了一种全新的发布机制。这种发布机制使用Docker镜像作为统一的软件制品载体,以Docker 容器作为统一运行环境,通过 Docker Hub 提供镜像统一协作,最重要的是使用Dockerfile 定义容器内部行为和容器关键属性来做支撑,从而使整个开发交付周期中软件环境保持统一,大大提高了产品交付效率。
 
Dockerfile 处于整个机制的核心位置。因为在 Dockerfile 中,不仅能够定义使用者要在容器中进行的操作,而且能够定义容器中的软件运行需要的配置,实现了软件开发和运维在配置文件上达成统一。运维人员能够使用 Dockerfile 在不同场合下部署出与开发环境一模一样的 Docker 容器。

高效易迁移

Docker 容器基于开放式标准,几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人计算机、服务器等。这种兼容性可以让用户轻松地把一个应用程序从一个平台直接迁移到另外一个平台。
 
Docker 是一款轻量级应用,在一台机器上运行的多个 Docker 容器可以共享这台机器的操作系统内核,能够做到快速启动,只需占用很少的服务器资源。镜像是通过文件系统层进行构造的,并共享一些公共文件,这样就能有效降低磁盘用量,使用户能够更快地下载镜像。

快速部署

公司进行业务迁移的时候(例如,公司的 IDC 机房要进行搬迁,业务要迁移到云服务器上),通常需要将所有应用在云服务器上重新部署,这些烦琐的工作极大地浪费了人力,并降低了工作效率。
 
利用Docker容器可以简化这项工作,实现快速部署。人们只需要在云服务器上运行相应的容器,无须考虑环境因素。
 
Docker 赋予应用的隔离性还独立于底层的基础设施。Docker 默认提供最强的隔离,因此应用出现间题也只是单个容器的问题,不会影响到整台机器。

3. 容器生态系统

Docker 容器能有今天的蓬勃发展,与它生态系统的支持是分不开的。这一套完整的生态系统就是 Docker 发展的基础,为 Docker 提供了一整套技术支持,包括核心技术、平台技术、支持技术。

🍑 核心技术

容器的核心技术是用来支持容器在主机上运行起来的技术,如下图所示
在这里插入图片描述

容器规范

虽然 Docker 是最常用的容器之一,但容器不是只有 Docker,还有其他的容器,如 rkt。
 
为了容器技术能够有更加良好的发展,各个容器技术的开发公司联合成立了 OCI ( Open Container Initiative,开放容器计划)组织。OCI组织的主要目的就是定制一套完整的容器规范,以保证各个容器之间能够兼容。
 
目前已经发布了两个容器规范,分别是 runtime spec(运行环境规范) 与 image format spec(镜像格式规范),如下图所示。
在这里插入图片描述
这两个规范保证了不同公司开发出来的容器能够在不同的环境下运行,保证了容器的可移植性与互操作性。

容器 runtime

容器 runtime 是指容器的运行环境,用来包容容器的运行。
 
例如,要养一株花,就要给它阳光、空气和水,来营造一个舒适的环境。容器也是一样,想要让它运行起来就要给它相应的环境。
 
目前有三种主流的容器runtime,如下图所示。
在这里插入图片描述
LXC (Linux Containers ) 是一款比较老的容器 runtime,最初 Docker 在 Linux 系统中就是用LXC 作为容器 runtime的,如下图所示👇
在这里插入图片描述
rkt 是Core OS 公司开发的容器 runtime, 目前是 Docker 默认使用的容器 runtime, 如下图所示。👇
在这里插入图片描述
runC 是 Docker 公司自己专门为 Docker 容器开发的 runtime,与 rkt 一样都是符合 OCI 规范的。

管理工具

管理工具是任何一款应用程序必备的要素,否则将无法对应用进行管理。
 
例如,开车时,司机需要通过方向盘等来对汽车进行操作,用户则需要通过管理工具来对容器进行操作,如下图所示。
 
容器的管理工具不仅为用户提供管理界面,还与 runtime 进行交互,所以不同的 runtime 对应不同的管理工具。
 
LXC对应的容器管理工具是 Ixd。
在这里插入图片描述
runC 对应的容器管理工具是 Docker Engine,分为 deamon 与 CLI 两部分。
 
rkt 对应的容器管理工具是 rktCLI。

定义工具

容器的定义工具用于定义容器的内容与属性,使用户随心所欲地创建自己想要的容器,如下图所示。
在这里插入图片描述
Docker Image 就是 Docker 镜像,用户会先根据自己的要求创建一个镜像,再根据配置好的镜像创建出容器。DockerImage 相当于一幅设计蓝图,用户将蓝图规划完成之后,Docker 程序会按照蓝图创建容器。
 
Dockerfile 是一个文本文件,它包含了在创建镜像时需要使用的命令,这些都是用户事先配置完成的。在创建镜像时,只要指定一个 Dockerfile,Docker 程序就会按照 Dockerfile 中的命令进行镜像的创建。
 
ACI (App Container Image,应用程序容器镜像)也是一种容器镜像,只不过它是由 CoreOS 公司开发的,专门用于 rkt 容器。

容器仓库

容器仓库并不是用来存放容器的,而是用来存放镜像的。
 
用户可以将使用过的镜像上传到容器仓库中,下次使用时再从容器仓库中下载需要的镜像,并且仓库中的镜像在一定范围内是共享的。各类容器仓库如图所示。👇
在这里插入图片描述
Docker Registry 支持企业自己搭建私有仓库。
 
Docker Hub 是 Docker 公司为用户提供的公有仓库,里面有许多 Docker 镜像,为广大用户提供了极大的便利。
 
Quay.io 也是公有仓库,只不过是由红帽(Red Hat)公司提供的。

容器OS

容器 OS(Operating System,操作系统)专门用于容器的运行。
 
虽然几乎所有的系统都可以通过容器runtime来运行容器,但容器OS比起其他系统更加轻巧,更加适宜容器的运行,容器OS中的容器运行起来更加高效。常见的容器OS如图所示。
在这里插入图片描述

🍑 平台技术

在容器普及之前,企业为了便于管理,服务器都是分布式部署,容器平台技术支持容器集群在分布式环境中运行,如图所示。
在这里插入图片描述

容器编排引擎

企业根据业务需求随时可能会对容器进行创建、迁移或销毁。容器编排引擎为工程师们提供了更方便的容器集群管理方式。常见的容器编排引擎如图所示。
在这里插入图片描述
Docker Swarm 是 Docker 公司于2014年12月发布的容器编排引擎。
 
Kubernetes 其实是 Google(谷歌)公司早就开发出来的,直到2014年才启用。Kubernetes同时支持 Docker 容器与 rkt 容器,是目前国内企业中最常用的容器编排引擎之一。
 
Mesos 是一个分布式内核,Marathon 是一个框架,二者结合即可为企业提供完整的容器集群管理引擎。

容器管理平台

容器管理平台与容器编排引擎一样用于管理容器集群,但容器管理平台是位于容器编排引擎之上的平台, 它可以兼容各类容器编排引擎。
 
容器管理平台将编排引擎的功能抽象化地呈现在Web页面中,使用户的管理方式更加简单。常见的容器管理平台如图所示。
在这里插入图片描述

容器PaaS

PaaS (Platform as a Service,平台即服务) 是指将研发平台或环境作为一种服务,通过商业模式提供给用户或企业。
 
容器 PaaS 就是基于容器的 PaaS,开发人员无须对低层设施进行操作,直接在 PaaS 上进行研发。常见的容器 PaaS 如图所示。
在这里插入图片描述

🍑 支持技术

容器支持技术是用来支持容器设备的技术,有了这些技术的支持,容器才能完整地运行并运用到企业中,如图所示。
在这里插入图片描述

容器网络

容器运行在物理机中,一台物理机中又可能会有多个容器。
 
由于业务的架构不同,容器与容器之间或者容器与其他设备之间,都可能需要网络支持,但它们又相互隔离。
 
容器网络技术的出现解决了各个设备之间复杂的网络问题。常见的容器网络技术如图所示。
在这里插入图片描述
Docker Network 是 Docker 容器本身的网络技术,Flannel、Weave与 Calico 都是主流的第三方容器网络技术,企业根据业务的不同需求选择不同的容器网络技术。

服务发现

容器集群是动态的,访问量增大就会自动创建容器,访问量减小就会自动销毁容器,还会根据业务需要进行容器迁移。
 
在这样一系列的变动之后,业务信息也发生改变,服务发现技术将这些变动之后的最新信息通知客户机,让客户能够准确地访问服务。常见的服务发现技术如图所示。
在这里插入图片描述

容器监控

在传统的服务集群中,为确保业务的正常运行,需要对业务进行监控管理。容器集群是动态的,这无疑给容器监控带来了挑战。常见的容器监控工具如图所示。
在这里插入图片描述
docker ps/top/stats 是 Docker 自带的命令行形式的监控工具,docker stats API 是通过接口使用户可以获取容器状态的工具。

数据管理

容器集群既然为用户提供服务,就会产生数据,为保证这些数据的安全性,就有了容器的数据管理技术。
 
数据管理技术可以使容器集群发生变化时,不对持久化数据造成损失,并且完整地保留新的数据。常见的数据管理技术如图所示。
在这里插入图片描述

日志管理

在用户访问网站时,Web 服务会将访问信息记录到特定的文件当中,这些文件就是日志文件。
常见的日志管理工具如图所示。
在这里插入图片描述
Docker Logs 是 Docker 容器自带的日志管理工具。Logspout 通过容器接口从各个容器中收集日志信息,将收集到的日志信息发送给后续的程序进行处理,最终日志信息被写入日志系统。

容器安全

容器的安全性是企业工程师们时刻要关注的,也是整个企业都需要重视的事情。常见的容器安全工具如图所示。
在这里插入图片描述
Docker 本身也是有安全机制的,它通过对资源的限制与对信息的过滤来提高容器的安全性。另外,还有其他的第三方安全工具,如 Docker Bench、Clair 等。
 
Docker Bench 会按照相关安全规范来对容器进行一系列检查。
 
Clair 通过对镜像文件的扫描来发现容器的潜在风险。

4. 总结

本篇文章介绍了容器的基本概念、虚拟化技术、Docker容器相对于传统虚拟化技术的优势,以及Docker容器在企业项目中存在的必要性。
 
我们可以清晰地感受到 Docker 容器在生产环境中带给我们的巨大便利,以及容器对于企业的重要性。

在这里插入图片描述


---------------------
作者:飞向星的客机
来源:CSDN
原文:https://blog.csdn.net/m0_63325890/article/details/124675481
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

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

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

相关文章

微服务:事务管理

几乎所有的信息管理系统都会涉及到事务,事务的目的是为了保证数据的一致性,这里说的一致性是数据库状态的一致性。说到数据库状态的一致性,相信大家都会想到 ACID :原子性(Atomic):在一个事件的…

js - flex布局测试案例:完美居中

<span>I love flex layout!</span><style>body{display:flex;justify-content:center;align-items:center;font-size:3em;color:#00ffff;}</style>![enter image description here][1]<p>与自己为敌&#xff0c;</p><p>与自己为友&a…

操作数据库(对战小游戏)

创建数据库 1 create database duizhan2 go3 use duizhan4 go5 create table duizhan6 (7 Code varchar(20) not null primary key,8 Name varchar(20) not null,9 Sex varchar(20) not null, 10 Blood int, 11 Attack int, 12 Defence int, 13 Mingzhong…

8-Python3从入门到实战—基础之数据类型(集合-Sets)

Python从入门到实战系列——目录 集合的定义 集合&#xff08;set&#xff09;和字典类似&#xff0c;也是一组key的集合&#xff0c;但不存储value&#xff1b;由于key不能重复&#xff0c;所以&#xff0c;在set中&#xff0c;没有重复的key。创建一个set&#xff0c;需要提供…

Redis的那些事:一文入门Redis的基础操作

Redis是什么Redis&#xff0c;全称是Remote Dictionary Service,翻译过来就是&#xff0c;远程字典服务。redis属于nosql非关系型数据库。Nosql常见的数据关系&#xff0c;基本上是以key-value键值对形式存在的。Key-value: 就像翻阅中文字典或者单词字典&#xff0c;通过指定的…

10种提问型爆文标题句式 直接套用

如果你用1天的时间来写篇好文章&#xff0c;那你花掉半天时间想一个好标题都不过分&#xff01; 你是不是觉得我有点言过其实了&#xff1f;没关系&#xff0c;先来问你2个问题&#xff1a; 1、花了很长时间&#xff0c;写了一篇很牛的卖货推文&#xff0c;定稿后&#xff0c…

同域和不同域长啥样

相同域http://www.jiangdou.com/http://www.jiangdou.com/maidou 不同域http://www.jiangdou.comhttp://bbs.jiangdou.comhttps://www.jiangdou.comhttp://www.jiangdou.com:8080转载于:https://www.cnblogs.com/MaiJiangDou/p/6689133.html

2016 China Joy抢先看,文末有彩蛋!

这里只有你想不到的&#xff0c;没有你看不到的。 2016 China Joy开幕在即&#xff0c;天气成了最折磨各种媒体、展商和观众的小妖精&#xff0c;一会艳阳天&#xff0c;一会大暴雨&#xff0c;轩轩现在是这样的&#xff01; 七月底的魔都&#xff0c;热的那叫一个销魂&#x…

JdbcTemplate+PageImpl实现多表分页查询

一、基础实体  MappedSuperclass public abstract class AbsIdEntity implements Serializable {private static final long serialVersionUID 7988377299341530426L;public final static int IS_DELETE_YES 1;// 标记删除public final static int IS_DELETE_NO 0;// 未删除…

消息队列选型手册

前言 消息队列中间件重要吗&#xff1f;面试必问问题之一&#xff0c;你说重不重要。我有时会问同事&#xff0c;为啥你用 RabbitMQ&#xff0c;不用 Kafka&#xff0c;或者 RocketMQ 呢&#xff1f; 他给我的回答&#xff1a;“因为公司用的就是这个&#xff0c;大家都这么用…

Jenkins 持续集成国产嵌入式操作系统 RT-Thread 的CI

我们直接在Jenkins的镜像基础上进行集成RT-Thread 的编译环境&#xff0c; 这样直接使用Shell 命令 最直接了当&#xff0c; 通过 第三方docker等插件&#xff0c; 尝试了计重方案&#xff0c; 没有找到理想中的感觉&#xff0c; 如果其他人有想法可以告知一二。 我们有现成的镜…

codevs原创抄袭题 5960 信使

题目描述 Description•战争时期&#xff0c;前线有n个哨所&#xff0c;每个哨所可能会与其他若干个哨所之间有通信联系。信使负责在哨所之间传递信息&#xff0c;当然&#xff0c;这是要花费一定时间的&#xff08;以天为单位&#xff09;。指挥部设在第一个哨所。当指挥部下达…

VC解析XML--使用CMarkup类解析XML

经过今天尝试MFC解析XML串&#xff0c;也算有了不少收获&#xff0c;总结一下。 我是使用的CMarkup类对XML进行操作。 CMarkup好象都是先从一个xml文件里面把内容读出来&#xff0c;再进行解析&#xff0c;搞得我恨不得要把我的CString写到xml文件里面…

MongoDB精华总结

概述 MongoDB是属于文档型的NoSQL数据库&#xff0c;也就是文档数据库。文档数据库区别于传统的其它数据库&#xff0c;它是用来管理文档。在传统的数据库中&#xff0c;信息被分割成离散的数据段&#xff0c;而在文档数据库中&#xff0c;文档是处理信息的基本单位&#xff0c…

认清性能问题

本文翻译自 Thinking Clearly About Performance 这是我三年前读到的一篇关于性能问题的好文&#xff0c;读完后还觉不过瘾&#xff0c;怕理解的不够遂又翻译了一遍&#xff0c;这也是当年我的第一次翻译。 这几年来每次碰到性能问题&#xff0c;我都会想起这篇文章&#xff0c…

字节也开始缩招了...

阅读本文大概需要6分钟。最近和一个字节技术总监聊天&#xff0c;得知他们公司居然也开始缩招了。这真让人感到意外&#xff0c;毕竟头条这些年是以极速扩张而闻名。搜了搜新闻还真是&#xff0c;这也意味着互联网行业最后一个坚挺的大户也在开源节流了。最近互联网行业的情况真…

实现打字效果

摘自一个表白网站的效果。 方法&#xff1a; substr() 可在字符串中抽取从 第一个参数表示从指定的下标&#xff0c;第二个参数表示抽取指定数目的字符。 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置&#xff0c;两个参数&#xff0c;第一位指定的字符串&…

php优化-》常用到的部分优化

1.循环内部尽可能不要声明变量&#xff1b; 2.在可以用PHP内部字符串操作函数的情况下&#xff0c;尽量不要用正则表达式&#xff1b; 3.foreach效率更高&#xff0c;尽量用foreach代替while和for循环&#xff1b; 4.用单引号替代双引号引用字符串&#xff1b; 5.尽量的少进行文…

简述:分布式CAP理论和BASE理论

目录 一、什么是CAP&#xff1f; Consistency (一致性)&#xff1a; Availability (可用性): Partition Tolerance (分区容错性): 二、取舍策略 三、Base理论 1、基本可用 2、软状态 3、最终一致性 四、常见产品 Ereka Zookeeper 五、总结 一、什么是CAP&#xf…

WinForm(四)一种实现登录的方式

首先声明&#xff0c;这只是一种登录方式&#xff0c;并不是最好的方式&#xff0c;用这个例子为了说明登录窗体和Application的关系。在登录前&#xff0c;定义了用户实体&#xff0c;然后是一个通用的类&#xff0c;存放进程中当前登录的用户&#xff0c;所以CurrentUser是静…