一、为什么需要Docker 官方介绍(中文版): Docker 是世界领先的软件容器平台。 开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。...1.2应用之间需要隔离 比如我写了两个应用(网站),这两个应用部署在同一台服务器上,那可能会出现什么问题? 如果一个应用出现了问题,导致CPU占100%。那另一个应用也会受到关联,跟着一起凉凉了。...二、Docker是如何解决上述的问题的 2.1解决环境(切换/配置) 不知道大家有没有装过系统,比如说装Linux虚拟机,重装Windows系统,都是需要镜像的。 ?...比如在Windows下安装的是Docker Toolbox,它需要Oracle Virtual Box来跑Docker 现在,Windows和Mac都已经原生支持Docker了。...,要是我写文章写得不好,我是需要向XX谢罪的。 估计大家都用过虚拟机,虚拟机也能实现对应用的隔离,安装特定的镜像也能跑出我们想要的环境。虚拟机已经发展了很久了,为什么我们还需要Docker呢?
这时候使用程序的人需要在控制台跳动的光标处输入内容,然后按回车确认完成输入。 3....为什么需要 input? 有人要问了: 需要什么值,直接赋值给变量不就好了,干嘛还要用 input?...软件的输入 为什么从没在其他软件中看过这种控制台的输入? 获取用户输入的途径有很多,比较常见的像输入框,按钮,甚至麦克风和摄像头,都是用户在向程序输入信息。...如果想当做数字来进行运算,需要进行类型转换,否则会报错。 这个问题在 Python 2 里有点不同,那时候有两个输入函数:input 和 raw_input。
数据是可以保存在一种物理介质上的,其实, 在“说话”的过程中,空气可以被视为一种短暂的物理介质。...人是会生老病死的,除了口耳相传,人类需要更可靠的数据存储方法与更长久的物理介质。在过去,人类将数据保存在石板、竹简上,后来人类将数据保存在纸上,配合印刷术,使得信息可以大范围长久传播保存。...一些大型游戏,例如荒野大镖客2,,下载时需要确保有156G的储存空间。一些数据库管理程序所生成的数据库文件,经常达到几TB至上百上千TB的大小。...(2) 普通 PC 服务器性价比高,故障率也高,需要在软件层面实现自动容错,保证数据的一致性。 (3) 随着服务器的不断加入,需要能够在软件层面实现自动负载均衡,使得系统的处理能力得到线性扩展。
为什么需要 Elasticsearch? 用数据库,也可以实现搜索的功能,为什么还需要搜索引擎呢?...比如我要搜一门讲过「莎士比亚」的课程,我需要在课程的文稿里进行「相关性匹配」,找到对应的文稿, 你可能觉得一条 sql 语句就可以解决这个问题: select * from course where...貌似es在这里没有提供什么分析能力,然而只要数据存在于es,这些数据的被探索力就比放在数据库里的强,你随时可以在里面挖掘出商机。...关系型数据库,把原本非常形象的对象,拍平了,拍成各个字段,存在数据库,查询时,再重新构造出对象;ES则是文档存储,把对象原原本本地放进去,取出时直接取出。
其实学任何一项技术,首先都要弄明白,为什么需要这项技术。 为什么需要 Zookeeper 正经点来回答,就是我们需要一个用起来像单机但是又比单机更可靠的东西。 下面开始不正经的回答。...而以往的很多ZK教程,上来就是“Zookeeper是开源的分布式应用协调系统”blabla,很多像我这样的小年轻看到就会很费解,到底什么是分布式协调,为什么分布式就需要协调 … 上面只是回答了我自己提出的问题...,为什么需要Zookeeper,或者说,为什么需要分布式协调系统,如果想进一步学习 ZK,你还需要了解下 Zookeeper 的内部实现原理。...再到 ZK 是如何实现高性能的强一致的,即ZAB协议的原理,很多教程上来就开始介绍ZAB协议,很容易让人一头雾水,不知道为什么需要这样一个分布式一致性协议,有了上述介绍的背景,就好懂许多。...这点是我的锅,在写这篇文章时,我还是把 Zookeeper 等价成了分布式协调服务,把为什么需要 Zookeeper 这个问题,等价成了 「为什么需要分布式协调服务」,其实这样是有问题的,因为想做分布式协调服务
服务化,即将传统的“创建服务器->安装操作系统->安装应用软件->使用应用软件”这种使用软件的4步骤流程,通过预先配置好,在需要使用软件的时候一键启用即可,这样4个流程就变成直接使用应用软件(仅一个步骤...前面提到,服务化需要预配置一些通用服务,甚至能够让用户有一些个性化的选择,那么就需要IT部门在设计服务、配置服务上不管改进了。
如果没有没有亲自做过一些项目,直接上手就学spring那样的框架,你可能会觉得莫名其妙,有java就够了呀,为什么要学习这么一个陌生的东西。...CrawlControl2,来实例化TaobaoCrawler 呢,或者我们可以用Service Locator模式,通过中间代理类来实现松耦合,但对象还是要自己去获取管理这些依赖对象,有没有一种方式,使得对象仅仅需要通过构造参数或者属性定义依赖关系...比如你在配置中指定ref='taobaoCrawler',容器帮你做的工作相当于: CrawlControl control = new CrawlControl(new TaobaoCrawler ()); 而你需要做的仅仅是获取装配创建好的对象...写这篇文章主要是告诉大家使用框架之前要明白为什么去用,主要是为了解决什么问题,而不是人云亦云,随大流,你掌握了原理,掌握了基础,自己也可以开发一套框架出来,框架是伴着实际问题,为了解决实际问题而出现的。
为什么 Grafana 需要 OpenTelemetry 翻译自 Why Grafana Needs OpenTelemetry 。...如上所述, Grafana 和 OpenTelemetry 之间存在着互惠关系。...方程式的 Grafana 部分 Grafana 需要适应 OpenTelemetry 用户的需求是多方面的。...“对于不需要任何中间件的情况,您可以将 OpenTelemetry 数据直接发送到 Grafana 云的 OTLP 端点,” Stäber 说。...第二个方面是在用户和客户需要到达的地方——引领可观测性空间并构建工具和技术,这些将变得相关,“Hartmann说。
但这类压缩存在一个致命缺陷,他们都是基于整幅图片下进行的压缩,比如霍夫曼编码等,这样像素和像素之间在解码的过程中存在依赖关系,无法直接实现单个像素级别的解析,这就发挥不了显卡的并发能力,更重要的是问题在于无论是...为什么没有16位的调色板,因为16位的RGB的效果本身就相对不错,所以16位调色板的意义并不大。如下是调色板原理示意。...如下是同一张纹理的效果对比: 调色板方式下还有一个非常明显的优势是风格的变化,只需要更改调色板信息,而不用保存多套纹理,就可以很轻松的实现风格的多样化,这种成本很低,而且还很高效。...而在顶点着色器上,每次都要操作两次(获取索引值,读取调色板对应的颜色),而且调色板也需要作为参数,或指定一个全局的调色板,这样就会存在内存和显存之间的频繁切换,从性能的角度来也不是最优方案。...差值得到的另外两个颜色的公式为:C2= 2/3*C0 + 1/3*C1, C3 = 1/3*C0 + 2/3*C1,这里有一个小技巧,尽管分母是3,但都会近似到2的N次幂,比如2/3约等于5/8,为什么
也有人可能说一些人没有学过理论照样凭着自己的经验做设计,依然做的很好,自己的经验从实践中获得的,中间一定是走了很多弯路才有这样的经验,这样的经验需要花费大量的时间去领悟习得。 ...当然并不是这样做不好,世界上知识那么多,我们也不是专业去做学术研究的,不必去深究理论背后形成的原因,直接拿来使用就即可,当然深层次的理解对我们更有利,这时就需要选择性的去学习了。...为什么我们需要理论? 1. 解释功能 理论提供一个解释,对相关事情进行定义、理清条理和解释。将事情剥开揉碎给人看。理论明事理。 2....你可能需要描述前因后果,背景介绍,可能需要一层层地剥开你要描述的事情。...作为工具 这回事是不是那回事,如何检测和验证这件事,就需要一个‘把手’来衡量。 特别对学术研究来说,每个理论一般都跟着一个模型和测量工具,可用于检测程度和维度缺失。
随着互联网的高速发展,用户规模与业务并发量开始急剧增加,海量的请求需要接收和存储,业务需要中间件来实现削峰填谷;业务也在不断发展,企业内部的系统数量也在不断地增长,不同语言开发出来的系统需要统一的事件驱动...;大数据、AI已经成为很多业务中不可或缺的技术,它们都需要统一的数据源。...有的人可能会问,现在消息队列已经非常成熟了,我们可以使用Kafka、RabbitMQ等满足日常的业务需求,为什么还会出现Pulsar这个消息队列,并且迅速发展呢?...7 流批一体 随着业务的不断发展,流计算和批处理越来越常见,通常我们需要分别维护一套流计算平台和批处理平台以满足不断发展的业务需求。...Broker和一般MQ不同,数据并不直接存储在Broker中,而是保存在最下面的BookKeeper集群中。由于Broker是无状态的,所以它可以很方便地在容器环境中快速扩/缩容。
这就是为什么采用Kaizen原则是一个明智的想法。Kaizen 在日语中意为“变得更好”,被称为随着时间的推移不断进行小改进的方法。某种程度上来说Kaizen 不是一种实际的工具,而是一种心态。...Kaizen 涉及组织中的每个人;因为每个人都是他们部门的专家,所以每个人都可以确定差距在哪里以及需要改进的地方。
达芬奇有很多超前的理论设计,可是限于当时的技术条件,并不能做出来 也有人可能说一些人没有学过理论照样凭着自己的经验做设计,依然做的很好,自己的经验从实践中获得的,中间一定是走了很多弯路才有这样的经验,这样的经验需要花费大量的时间去领悟习得...当然并不是这样做不好,世界上知识那么多,我们也不是专业去做学术研究的,不必去深究理论背后形成的原因,直接拿来使用就即可,当然深层次的理解对我们更有利,这时就需要选择性的去学习了。...为什么我们需要理论? 1. 解释功能 理论提供一个解释,对相关事情进行定义、理清条理和解释。将事情剥开揉碎给人看。理论明事理。 2....你可能需要描述前因后果,背景介绍,可能需要一层层地剥开你要描述的事情。...作为工具 这回事是不是那回事,如何检测和验证这件事,就需要一个‘把手’来衡量。 特别对学术研究来说,每个理论一般都跟着一个模型和测量工具,可用于检测程度和维度缺失。
Why 为什么 React 需要 immutable How 如何在使⽤ React 使⽤ immutable What 带来的收益和结果 为什么要在React 使⽤ immutable ?...要理解 shallowCompare,我们⾸先需要知道 JavaScript 是如何处理对象引⽤的。...如果我们想打印 john 的更新,我们需要浅拷⻉它。这样⼀来,shallowCompare 就会知道道具发⽣了变化。...我们需要在之前克隆 john ,然后更新数组。...我们只需要通过我们改变的路径来创建新的引⽤。 END
小编说:SDN为什么会出现?是什么原因使得学术界提出SDN?我们为什么需要SDN?如果你刚接触SDN方案时,你一定有这样的疑问。...除了从Nick McKeown教授的思路去理解为什么SDN会出现以外,还可以从另外一位SDN创始者Shenker教授的观点中顺藤摸瓜,进一步了解为什么SDN会出现。...“为了让系统更好地工作,早期需要管理复杂性而后期需要提取简单性”是由美国学者唐·诺曼提出的系统设计理念。...这也是为什么需要SDN的原因之一。...归根结底,这两种思路从不同的角度阐述了当下网络需要更多可编程能力的事实,而这也正是为什么需要SDN的真正原因。虽然两位教授的思路不同,但殊途同归,有异曲同工之妙。
要了解智能网卡(SmartNIC) 是什么,我们需要从基本的网络接口卡 (NIC) 开始说起。自 1980 年代中期第一台 PC 出现后不久,网卡就已经上市。...为什么需要智能网卡? 智能网卡减轻了主机服务器 CPU 的负担,比如路由、网络地址转换、遥测、负载均衡、防火墙等。...智能网卡允许更新或升级其固件,让用户可以灵活地添加/修改其提供的功能,并允许在需要时进行安全升级。 智能网卡可以解决哪些问题?...在计算下一个解决方案时,智能网卡可以将区块链和待处理的事务保存在内存中。如果其首个找到解决方案,那么智能网卡会发布该区块并进入下一个区块。
Swapping 也充分利用了该特性,它能够让应用程序看到操作系统内存充足的假象,然而并不知道它使用的部分虚拟内存其实在磁盘上,因为内存和磁盘的读写速度上的巨大差异,这部分虚拟内存的读写非常缓慢,我们在 为什么...我们到现在已经对 Linux 上的 Swapping 有了一定的了解,接下来回到这篇文章想要讨论的问题 — 『为什么 Linux 需要 Swapping』,我们将从以下两个方面介绍 Swapping 解决的问题...图 2 - 直接内存回收 直接内存回收是在 Linux 调用 __alloc_pages_nodemask 申请新内存页时触发的,该函数会先在空闲页列表中查找是否有可用的页面,如果不存在可用页面,就会进入...内存闲置 应用程序在启动阶段使用的大量内存在启动后往往都不会使用,通过后台运行的守护进程,我们可以将这部分只使用一次的内存交换到磁盘上为其他内存的申请预留空间。...Linux 中的 Swapping 机制主要是为内存不足和内存闲置两种常见的情况存在的 Swapping 可以直接将进程中使用相对较少的页面换出内存:当系统需要的内存超过了可用的物理内存时,内核会将内存中不常使用的内存页交换到磁盘上为当前进程让出内存
对于单纯的运算任务来说一条线程依次执行到底肯定是最快速的(因为线程间的调度,通信及资源的共享等都需要额外的开销),在计算机的早期岁月,操作系统没有提供线程概念。...试想一下应用程序得出了目标结果不过却存不进去或传不出去,那是多么的着急,(当然多线程还带了跟多的好处,如应用程序的隔离等)而事实上多线程的应用场景多是什么地方,什么地方必须使用到多线程这些都十分有规律,那些一定会阻塞的操作大部分会使用到多线程,而他们为什么会阻塞...这些都是线程应该具备的一些东西(windows),也就是说创建一个线程就需要创建这样东西,刚刚我说线程切换很难被察觉,可不是线程创建,创建大量的线程的确是需要大量的时间(所以高级的程序框架会提供线程池或类似的东西...不过事实上实际经验发现,由多线程带来的性能消耗或程序业务处理能力的下降都不是由这正常的切换造成的,事实上线程的滥用是导致性能下降直接原因,而这些滥用是普遍存在的,在不该使用多线程的时候使用了它,频繁的创建及销毁线程
我们为什么需要MapReduce? ---- 我们为什么不能使用数据库来对大量磁盘上的大规模数据进行批量分析呢?我们为什么要使用MapReduce?...但数据库系统更新大部分数据时,B树的效率比MapReduce低得多,因为需要使用“排序/合并”来重建数据库。 许多情况下,可以将MapReduce视为关系型数据库管理系统的补充。...MapReduce比较适合以批处理的方式处理需要分析整个数据集的问题,尤其是即席分析。
为什么我们需要Pod? 本文整理于极客时间: 深入剖析 Kubernetes (geekbang.org),侵删。 在前面的文章中,我详细介绍了在 Kubernetes 里部署一个应用的过程。...不过,我相信你在学习和使用 Kubernetes 项目的过程中,已经不止一次地想要问这样一个问题:为什么我们会需要 Pod?...也就是说,Kubernetes 真正处理的,还是宿主机操作系统上 Linux 容器的 Namespace 和 Cgroups,而并不存在一个所谓的 Pod 的边界或者隔离环境。...比如,在我们的这个应用 Pod 中,Tomcat 容器是我们要使用的主容器,而 WAR 包容器的存在,只是为了给它提供一个 WAR 包而已。...但实际上,无论是从具体的实现原理,还是从使用方法、特性、功能等方面,容器与虚拟机几乎没有任何相似的地方;也不存在一种普遍的方法,能够把虚拟机里 的应用无缝迁移到容器中。
领取专属 10元无门槛券
手把手带您无忧上云