如今,Kubernetes 已经成为分布式集群管理系统和公有云/私有云的事实标准。实际上,Kubernetes 是一个分布式操作系统,它是 Google 在分布式操作系统领域十余年工程经验和智慧的结晶,而 Google 一直以来都管理着世界上最大的分布式集群,在分布式操作系统领域的研究和认识领先于全世界。因此,2014年发布的 Kubernetes 能在短短几年时间内就超越了诸多前辈,大获成功。

作为分布式操作系统,Kubernetes(包括其前代产品 Google Borg)的出现远远晚于 UNIX、Linux、Windows 等著名的单机操作系统,Kubernetes 架构设计自然地继承了很多单机操作系统的珍贵遗产,微内核架构就是这些遗产中最重要的一份。在本文接下来的部分,我们将专注于微内核(microkernel)这个概念及其对 Kubernetes 架构的影响。

什么是微内核?

在介绍微内核的时候,我们有必要同时回顾一下单机操作系统的历史,以理解其价值所在。本章中以「操作系统」指代「单机操作系统」。

UNIX 的兴起

电子计算机诞生之后,在上个世纪70年代以前,出现过许许多多的操作系统,DOS、OS/360、Multics 是其中的知名代表,这是操作系统领域的拓荒时代。20年来的拓荒孕育出了伟大的成果:随着 CPU 技术的发展,UNIX 于1969年诞生了,这是一个真正意义上的分时操作系统。

 

UNIX

 

 

图片来源:维基百科

借助新的 CPU 技术的支持,UNIX 将软件系统划分为**内核(kernel)用户态程序(userland programs)**两部分。内核是一组中断处理程序的集合,把硬件的能力封装为操作系统功能调用(system calls),用户态程序通过系统调用使用硬件功能,用户态程序运行于各自的进程中,所有用户态进程都共享同一个内核,每当系统调用或中断发生,UNIX 便陷入(trap)内核,内核执行系统调用,与此同时,内核中的分时调度算法将决定把 CPU 交给哪个进程,并管理进程的上下文切换。另外,UNIX 把(几乎)所有硬件都封装为文件。UNIX 还提供了一个特殊的用户态程序 shell,供用户直接使用系统,通过内核提供的进程间通信能力,shell让 用户可以把一系列应用程序组合起来,处理复杂的需求,作者称这个设计思想为「KISS」(Keep It Simple and Stupld)。UNIX 的所有设计思想在当时是都是非常了不起的创举。

UNIX 不但自身对业界产生了巨大的直接贡献,还成为所有现代操作系统的蓝本,两位作者 Ken Tompson 和 Dennis Ritchie 因此荣获1983年度的图灵奖。

UNIX 诞生于贝尔实验室,该实验室属于美国国家电信电报公司(AT&T),见识到 UNIX 的强大威力之后,AT&T 做出了一个看似无私的决定:将 UNIX 开源(初期只对大学开源),这使得所有现代操作系统得以诞生。虽然 AT&T 最终被分拆,辉煌不再,但这个决定对人们的贡献绵延至今。在21世纪20年代的今天,无论是 MacOS、Windows、Linux,都直接受到 UNIX 的影响,而 iOS 来自 MacOS,Android 来自 Linux,因此 UNIX 的灵魂仍然活在每个人的手机中、活在每个手机 App 后台的服务中。

此外,UNIX 诞生之时,还附送了一项比操作系统本身价值更大的副产品:Dennis Ritchie 为开发 UNIX 设计了C语言,C语言成为了所有流行的现代编程语言的主要设计来源,不仅如此,C语言在其诞生近40年后的今天,仍然是最重要的编程语言之一。

值得一提的是,当时 UNIX 的主要开放对象是伯克利、卡内基梅隆等研究型大学,文理学院规模较小,没有研究生项目,不属于 AT&T 的主要开放目标,因此 Olivet College 毕业的一位小哥未受到 UNIX 思潮的影响。这位名叫 David Cutler 的软件天才于1975年在 DEC 设计了 VMS 操作系统,VMS 和最初的 UNIX 一样,运行在 PDP-11 上,但并不是基于 UNIX,而是独立设计的。VMS 在业界没有掀起大浪,以兼容 UNIX 告终。后来 David Cutler 离开 DEC,加入微软,在那里谱写了属于他自己的传奇。有趣的是,乔布斯也曾在文理学院就读,看来美国文理学院的学生是不走寻常路的。

微内核的兴起

UNIX「一切皆文件」的设计带来了用户程序设计的很多便利,但它要求所有对硬件的封装都要在内核态,因此内核中模块的 bug 会让整个系统受到影响,比如说,如果某个设备驱动有内存泄漏,所有使用该设备的用户态进程都会有内存泄漏,如果某个内核模块有安全漏洞,整个系统的安全性将不再可控。

为了解决这类问题,上个世纪70年代,操作系统研究者们开始发展「微内核」的概念,微内核的本质是让操作系统的内核态只保留内存地址管理、线程管理和进程间通讯(IPC)这些基本功能,而把其它功能如文件系统、设备驱动、网络协议栈、GUI 系统等都作为单独的服务,这类服务一般是单独的用户态 daemon 进程。

用户态应用程序通过 IPC 访问这些服务,从而访问操作系统的全部功能,如此一来,需要陷入内核的系统调用数量将大大减少,系统的模块化更加清晰。同时系统更加健壮,只有内核中的少量系统调用才有权限访问硬件的全部能力,如设备驱动的问题只会影响对应服务,而不是影响整个系统。和 micro kernel 相对,UNIX 的设计被称为 monolithic kernel。

UNIX 开放后,AT&T 继续着版本迭代,而各大学基于 AT&T 的 UNIX 开发了很多新的操作系统内核,其中较为知名的有:

  1. BSD,monolithic,由伯克利的传奇人物 Bill Joy 于1974年发布(据说 Bill Joy 花三天便完成了 BSD 内核的第一个版本开发,Bill Joy 的作品还包含第一个 TCP/IP 协议栈、vi、Solaris、SPARK 芯片等等)。该内核对业界影响非常之大,后来发展为 FreeBSD、OpenBSD、NetBSD 等分支。现代操作系统如 Solaris、MacOS X、Windows NT 对其多有借鉴。
  2. Mach,微内核,由卡内基梅隆大学于1984年发布,主要作者是 CMU 的两位研究生 Avie Tevanian 和 Rick Rashid。该内核对业界影响也很大,GNU Hurd、MacOS X 对其多有借鉴,但该项目本身以失败告终。
  3. MINIX,微内核,由阿姆斯特丹自由大学(Vrije Universiteit Amsterdam)的 Andrew Tanenbaum 教授于1987年发布。无数计算机系学生通过 MINIX 及其配套教材掌握了操作系统的设计原理,Linux 的初始版本就是基于 MINIX 复刻的。MINIX 虽然著名,但主要用于教学,从未在工业界获得一席之地。

微内核的沉寂

从上世纪90年代至本世纪10年代,UNIX 和 VMS 的后裔们展开了一场混战,从结果来看,微内核的概念虽然美好,但现实非常残酷:

  1. MINIX 仅限于教学,而基于 MINIX 设计的 Linux 是 monolithic 系统,反而大获成功。Mach 对业界影响深远,但本身并未得到大规模应用,其继承者 GNU Hurd 一直在开发中,从未能应用。
  2. Windows 的 NTOS 内核是 David Cutler 基于他原来在 DEC 独立设计的系统 VMS 设计的(VMS 和 UNIX 无关)。NTOS 借鉴了微内核的思想和 BSD 的一些代码,但最终 David Cutler 决定将所有服务(如 GUI)都放到内核态而非用户态,因此 Windows NT 在软件架构上和微内核一致,而实际运行和 monolithic 内核一致,被称为 hybrid kernel。
  3. MacOS X 基于 NextStep OS 设计,NextStep 是 Avie Tevanian 设计的,Avie Tevanian 是 Mach 的主要设计者,博士毕业后,盖茨和乔布斯都邀请过他,他去了 Next,他在 CMU 的好友 Rick Rashid 则去微软作为 David Cutler 的首席助手,据说 Avie Tevanian 在 Next 每天用计算器算自己没去微软而损失的股票增值。跟乔布斯回到苹果后,Avie 基于 NextStep 和 BSD 的代码设计了 OS X,巧的是,OS X 也采用了 hybrid kernel 的架构,最终大获成功,还能在 PowerPC 和 x86 两种指令架构间无缝切换。

在几位操作系统技术巨擎中,除 Linus Torvalds 外,无论是 David Cutler 和 Andrew Tanenbaum,还是 Avie Tevanian 和 Rick Rashid,都是微内核架构的领袖级人物,但最终他们都没有将微内核彻底落地,这是有原因的。

微内核操作系统访问系统服务的效率比 monolithic 操作系统要低得多,举例而言,在 Linux 中,系统调用(比如 open)只要陷入内核一次,也就是先切换 CPU 到高权限模式,再切回低权限模式。如果在一个微内核操作系统中,用户调用 open 就需要先拼装一条 IPC 请求消息,发送给对应的文件系统服务进程,随后从文件系统服务进程获取IPC响应消息并解包,拿到调用结果,这样一来,消息带来的数据拷贝和进程上下文切换都会带来很多开销。消息需要拷贝是因为用户态进程间不能相互访问内存地址,而内核的代码可以访问任何用户态进程的任何内存地址。 正是因为性能原因,OS X 和 Windows 都选择了 hybrid kernel 的架构,NTOS 甚至在内核中集成了 GUI 子系统,以带来更好的用户体验。

简单来说,在电脑性能不佳的情况下,我们会发现 Windows 的鼠标箭头更加“跟手”,即使系统接近死机,Windows 系统的鼠标箭头仍然可以活动。Windows XP 能在 Windows 98 这样「珠玉在前」的上代产品后获得更大的成功,和 NTOS 对性能的密切关注是分不开的,相比之下,苹果固然在1980年代中期就有初代 Machintosh 这样的壮举,但因为乔布斯无法说服销售团队换一根更强的内存条,因此初代 Mac 的性能较差,运行程序非常之慢,未能获得应得的蓝海成功。

Kubernetes 和微内核

性能问题对单机操作系统来说可能是至关重要的,但对分布式操作系统并非如此,分布式操作系统作为「幕后功臣」,不需要直接面对用户,而单机性能上的小小损失可以用更多机器来弥补,在这个前提下,更好的架构往往更加重要。

Borg 的诞生

在单机操作系统大战快要分出胜负之时,Google 这家行业新宠正准备 IPO,用现在的话来说,Google 那时是一家「小巨头」:已经初露锋芒,不容小觑,但巨头们彼时正陷入战争泥潭,无暇顾及之。2003年,为了更好地支持新版本的搜索引擎(基于MapReduce),使其能服务好亿万用户,Google 开始了大规模集群管理系统的开发,这个系统叫做 Borg,它的目标是管理以万台为单位的计算机集群。虽然刚开始只有3、4个人的小团队,但 Borg 还是跟上了 Google 的飞速发展,证明了它的潜力,最终 Google 的全部机器都由 Borg 管理,MapReduce、Pregel 等著名系统都建立于 Borg 之上。从操作系统的角度来看,Borg 是一个 monolithic 系统,任何对系统的功能升级都需要深入到 Borg 底层代码来修改支持。在 Google 这样成熟的技术型公司中,有很多优秀的工程师,因此这个问题在内部系统中并不算严重。但如果是公有云,必然要接入许多第三方应用的需求,一家公司的工程师团队再强大,也无法把业界所有其他系统都接入 Borg,这时系统的可扩展性将非常重要。

在2010年左右,随着 Google 中国部门的撤销,很多优秀的 Google 工程师加入了 BAT 等中国公司,其中一部分加入了腾讯搜搜。这些前 Googler 加入腾讯后,复刻了 Google 的许多系统,技术上也很出色,其中 Borg 的复制品叫做 TBorg,后来改名为 Torca。Torca 在搜搜的广告业务中起到了非常重要的作用,后来由于腾讯业务调整,搜搜与搜狗合并,Torca 在腾讯内部失去用户,逐渐停止了维护。

在 Borg 上线几年后,Google 意识到 monolithic 架构的问题和瓶颈,于是又一支小团队开始了 Omega 系统的研发。Omega 系统继承的是微内核的思想,新的功能升级几乎不需修改底层代码就能完成,它比 Borg 更加灵活,有更好的伸缩性。但因为当时 Google 的全部系统已经搭建在 Borg 之上了,由于 Borg 的 monolithic 特性,MapReduce 等系统都紧密绑定到 Borg 核心代码,不但无缝迁移到 Omega 系统是不可能的,迁移还要花巨大的人力、时间和试错成本,因此即使核心成员坚持不懈地推动,Omega 系统在 Google 仍未能取得成功。

有趣的是,Omega 项目的核心成员之一 Brendan Burns 的职业轨迹和操作系统领域的大前辈 David Cutler 有不少相似之处。

  1. 他们同样毕业于文理学院:David Cutler 毕业于 Olivet College,Brendan Burns 毕业于 Williams College。
  2. 他们同样在毕业后加入了一家传统行业的巨头:David Cutler 毕业后加入杜邦,Brendan Burns 毕业后加入汤姆森金融。
  3. 正如教父所说,一个男人只能有一种命运,Cutler 和 Burns 在这两家传统巨头学会了写代码,也许就是在那时,他们发现了自己在软件上的天分,发现了自己的命运是构建新一代操作系统。因此他们同样在第二份工作中选择了当时最炙手可热的科技巨头:David Cutler 加入 DEC,Brendan Burns 加入 Google。
  4. 他们同样在微软到达了职业生涯的顶峰:Brendan Burns 现如今已是微软的 Corporate VP,而 David Cutler 老爷子早已是微软唯一的 Senior Technical Fellow,据传微软甚至有条规定,Cutler 的技术职级必须是全公司最高的,任何人升到 Cutler 的 level,Cutler 就自动升一级。

Kubernetes 的诞生

在单机操作系统时代,hybrid kernel 盛行一时,这证明了微内核在软件架构上的成功,但因为性能问题,又没有任何一个成功的内核采用「纯粹的」微内核架构,因此微内核从实用角度上来说是失败的。

和单机操作系统时代中微内核架构的失败原因不同,Omega 在 Google 公司内部的失败和性能问题无关,只是历史遗留问题的影响。对开源社区和大部分公司来说,尚无能和 Borg 相媲美的系统,也没有历史负担,因此几年后,Google 决定开源 Omega 这一超越 Borg 的新一代分布式操作系统,将其命名为 Kubernetes。

为了介绍清楚 Kubernetes 和微内核的关系,以及微内核架构为 Kubernetes 带来的优势,这里有必要引入一些技术细节。

上文中提到,单机操作系统的系统调用需要「陷入」内核,所谓的陷入(trap)也叫做中断(interrupt),无论内核是什么类型,单机操作系统都需要在启动时将系统调用注册到内存中的一个区域里,这个区域叫做中断向量(Interrupt Vector)或中断描述符表(IDT,Interrupt Descriptor Table)。当然,现代操作系统的中断处理非常复杂,系统调用也很多,因此除了IDT之外,还需要一张系统调用表(SCV,System Call Vector),系统调用通过一个统一的中断入口(如 INT 80)调用某个中断处理程序,由这个中断处理程序通过 SCV 把系统调用分发给内核中不同的函数代码。因此 SCV 在操作系统中的位置和在星际争霸中的位置同样重要。对微内核架构来说,除了 SCV 中的系统调用之外,用户态服务提供什么样的系统能力,同样需要注册到某个区域。

与此类似,Kubernetes 这样的分布式操作系统对外提供服务是通过 API 的形式,分布式操作系统本身提供的 API 相当于单机操作系统的系统调用,每个 API 也需要能够注册到某个位置。对 Kubernetes 来说,API 会注册到 ectd 里。Kubernetes 本身提供的相当于系统调用的那些 API,通过名为 Controller 的组件来支持,由开发者为 Kubernetes 提供的新的 API,则通过 Operator 来支持,Operator 本身和 Controller 基于同一套机制开发。这和微内核架构的思想一脉相承:Controller 相当于内核态中运行的服务,提供线程、进程管理和调度算法等核心能力,Operator 则相当于微内核架构中 GUI、文件系统、打印机等服务,在用户态运行。

 

Kubernetes

 

 

图片来源:mapr.com/products/ku…

因此,Kubernetes 的工作机制和单机操作系统也较为相似,etcd 提供一个 watch 机制,Controller 和 Operator 需要指定自己 watch 哪些内容,并告诉 etcd,这相当于是微内核架构在 IDT 或 SCV 中注册系统调用的过程。

以 Argo 为例,Argo 是个 Operator,提供在 Kubernetes 中执行一个 DAG 工作流的能力。用户在使用 kubectl 命令提交 Argo 任务时,实际是让 kubectl 将 Argo 的 yaml 提交给 Kubernetes 的 API Server,API Server 将 yaml 中的 Key-Value 数据写入 etcd,etcd 将会提醒那些正在 watch 指定 Key 的服务。在我们的例子中,这个服务也就是 Argo。这正像是微内核架构里用户进程请求用户态服务的过程。

Argo 得到 etcd watch 的 http 请求,去 etcd 读出 yaml 中的数据并解析, 然后知道要去启动什么容器,并通过 API 要求 Kubernetes 启动相应的容器。Kubernetes scheduler 是一个 Controller,在收到启动容器请求后,分配资源,启动容器。这是微内核架构中用户进程通过系统调用启动另一个进程的过程。

当然,Kubernetes 和单机操作系统也有不同之处:Kubernetes 没有明确的「陷入」过程,而微内核架构的单机操作系统在访问系统调用时需要陷入,在访问用户态服务时则不需要陷入。但是,Kubernetes 可以为不同的服务设置不同的权限,这一点在一定程度上类似于单机操作系统中内核态和用户态的 CPU 权限的区别。

微内核在架构上的优势在 Kubernetes 中显露无遗:在 Borg 中,开发者想要添加新的子系统是非常复杂的,往往需要修改 Borg 底层代码,而新系统也因此会绑定到 Borg 上。而对 Kubernetes 来说,开发者只需要基于 Kubernetes 提供的 SDK 实现一个 Operator,就能够添加一组新的 API,而不需要关注 Kubernetes 的底层代码。Argo、Kubeflow 都是 Operator 的应用。任何已有软件都可以方便地通过 Operator 机制集成到 Kubernetes 中,因而 Kubernetes 非常适合作为公有云的底层分布式操作系统,正因如此,Kubernetes 在2014年年中发布,经过2015年一年的成长,在2016年便成为业界主流,对于没有历史负担的公司,也将 Kubernetes 作为内部云的底层系统使用。

尾声

在这篇文章中,我们介绍了单机操作系统的发展简史,介绍了微内核架构在这个历史进程中从兴起到衰落的过程,也介绍了微内核架构在 Kubernetes 中重新焕发生机的过程。总的来说,显著超前于时代的技术虽然未必能在被提出的时代取得成功,但一定会在多年后,在时代跟上来之后,拿回属于自己的荣耀。微内核架构在单机操作系统的时代和云计算的时代的不同遭遇证明了这一点,深度学习在低算力时代和高算力时代的不同遭遇也证明了这一点。

值得一提的是,在 Kubernetes 之后,Google 推出了 Fuchsia 作为 Android 可能的替代品。而 Fuchsia 基于 Zircon 内核开发,Zircon 基于 C++ 开发,正是微内核架构。在算力井喷的现代,除了在分布式操作系统领域,微内核能否也在手机/物联网操作系统领域复兴,让我们拭目以待。

原文:https://juejin.im/post/5f1177e96fb9a07eb04d7ce6

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

相关文章

  1. halcon部分算子——提取轮廓

    1.read_image() 函数原型:read_image(:Image:FileName:) 功能:加载图片,可以读取有不同文件格式的图像。 参数: Image:是Hobject(输出参数) FileName:是所读入的图像路径,图像格式可以是TIFF, GIF, BMP, JPEG, JPEG-2000, PNG, PCX, SUN-Raster, PGM, PPM, PBM 和 X…...

    2024/4/15 8:20:10
  2. 牛客网--字节跳动面试题--万万没想到之抓捕孔连顺

    牛客网--字节跳动面试题--万万没想到之抓捕孔连顺 博客说明文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!来源 链接:万万没想到之抓捕孔连顺 来源:牛客网 题目 我叫王大锤,是一名特工。我刚刚接到任务:在…...

    2024/4/12 9:45:42
  3. (四面)阿里中间件:底层+算法+微服务+数据库+架构!面经分享

    每个人都拥有大厂梦,我也不例外,在小公司待久了,感觉人会荒废掉,太轻松,没有压迫感。在众多大厂中,最终选择了阿里。“年轻、活力、富有激情”是我听到得最多对它的形容词,所以毅然决然,希望自己能够在这个舞台上展示出自己。 以下分享这次面试阿里中间件和蚂蚁的面试题…...

    2024/4/8 23:48:15
  4. 真的玩ROS 就顺便弄了C++ QT

    真的玩ROS 就顺便弄了C++ QTROS上的编程IDE就是QT creator一举多得的东西为什么不弄弄。正好通过一个具体的项目来熟悉C++ OpenCV对吧。OpenCV的编程我看也是C++的,经常看到:而且有的嵌入式招聘要求会opencv。...

    2024/4/20 5:40:24
  5. cocos2d-js实现网页全屏心得

    1.如果是H5全屏,使用cc.screen里面的接口就可以完成判断全屏:cc.screen.isFullScreen()打开全屏:cc.screen.requestFullScreen(document.documentElement,function(){});关闭全屏:cc.screen.exitFullScreen();2.如果是浏览器全屏(F11)使用上面办法就无法判断是否全屏,只…...

    2024/4/20 5:03:09
  6. 向微服务最深处进军!自动化测试和质量管理全解析,继续强化锤炼

    写在前边微服务应用程序的另一个好处是更快且更容易更新。当开发者对一个传统的单体应用程序进行变更时,他们必须做详细的QA测试,以确保变更不会影响其他特性或功能。但有了微服务,开发者可以更新应用程序的单个组件。微服务在带来好处的同时,同样也带来了挑战,具体可以总…...

    2024/4/8 23:48:12
  7. 018 java 容器都有哪些?

    018 java 容器都有哪些? 答: List、Set、Map看到最后的帮忙点个赞👍🙏 谢谢,这个对我真的很重要!...

    2024/4/20 5:15:02
  8. MySQL:事务的概念、事务的隔离级别

    文章目录一、事务的基本概念和操作流程事务的特征(ACID)二、事务的隔离级别2.1 读未提交2.2 读已提交2.3 可重复读 一、事务的基本概念和操作流程Transaction 通常情况下在某些业务:如银行转账等,这样的业务他不是由一个SQL语句构成而是多个或多组的SQL构成,那么这样的一个…...

    2024/4/12 6:43:58
  9. Ceph简介概述个人理解

    一 Ceph简介 Red Hat Ceph是一个分布式的数据对象存储,系统设计旨在性能、可靠性和可扩展性上能够提供优秀的存储服务。分布式对象存储是存储的未来,因为它们适应非结构化数据,并且客户端可以同时使用当前及传统的对象接口进行数据存取。例如:本地语言绑定接口(C/C++, Java…...

    2024/4/8 22:44:50
  10. 第六周

    1 自建yum仓库,分别为网络源和本地源。 1.使用安装光盘建立本地yum源。 备份默认yum源配置文件。 [root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# mkdir back [root@localhost yum.repos.d]# mv *.repo back/挂载光盘。 [root@localhost yum.repos.…...

    2024/4/17 12:30:15
  11. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第14篇]什么是基于线性对的密码学

    这是最新的一期密码学52件事.我们基于前几周介绍一种"对"的概念. 对的定义 给定三个循环群G1,G2,G3,它们的基为q,生成器分别为g1,g2,g3.我们说一个函数e:G1G2→G3是一个密码对如果下面的等式都成立. [双线性]∀A,B∈G1,C,D∈G2:e(A+B,C)=e(A,C)⋅e(B,C),同时e(A,C+D)…...

    2024/4/19 11:22:25
  12. PAT 1115 Counting Nodes in a BST

    原题链接:1115 Counting Nodes in a BST (30分) 关键词:BST A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less than or equal to the node’s key. …...

    2024/4/15 21:22:06
  13. git本地库恢复远程库

    git本地库恢复远程库 主要步骤: 1.远程创建空项目,比如my-new-git; 2.修改本地库的git目录中config文件,用新库的地址替换原来的地址,比如url = git@ip/my-new-git 3.推送本地库代码到新库,注意需要putty密钥,可通过目标->远端->管理设定。在远端设置对话框中也可…...

    2024/4/19 20:38:29
  14. SpringCloud 消息中间件组件、链路跟踪之【Stream && RabbitMQ、Sleuth】

    什么是Spring Cloud Stream 官方定义Spring Cloud Stream是一个构建消息驱动微服务的框架。 应用程序通过inputs或者outputs来与Spring Cloud Stream中binder对象交互(我们主要就是操作binder对象与底层mq交换)。通过我们配置来binding(绑定),而Spring Cloud Stream的binde…...

    2024/4/15 14:34:10
  15. Android里判断车牌照的格式是否正确

    传入车牌照看看当前车牌照是否正确 public static boolean isCarnumberNO(String carnumber) {/** 车牌号格式:汉字 + A-Z + 5位A-Z或0-9 (只包括了普通车牌号,教练车和部分部队车等车牌号不包括在内)*/String carnumRegex = "[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}…...

    2024/4/20 3:45:48
  16. 运行vue.js项目时报‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序问题

    在运行vue.js项目时报vue-cli-service 不是内部或外部命令,也不是可运行的程序 或批处理文件提示,是因为没有node_modules运行npm install命令npm install但是下载非常慢,还可能会下载失败;我建议使用淘宝镜像来运行cnpm install下载好了之后,在运行npm run serve这样在浏…...

    2024/4/16 1:23:16
  17. mac jenkins 环境搭建

    1.安装jenkins参考官网用brew安装:https://www.jenkins.io/download/lts/macos/用命令行安装,可能会出现卡在Updating Homebrew...很久的情况,这时ctrl+Z先停止然后再次执行brew install jenkins-lts2.启动服务brew services start jenkins-lts浏览器打开http://localhost:8…...

    2024/4/17 15:51:15
  18. ## JS与衍生工具两者之间的联系

    一、JS ECMAScript+BOM+DOM组成了JS语言,被称为原生JS,要知悉原生JS的功能和特性、局限和能运用的范围,JS运用的程度是衡量前端开发从业者基本能力的重要指标。 二、工具(node、MongoDB、express、Vue等) 这些工具包装的函数里定义了一些方法,而这些方法的语法采用ECMASc…...

    2024/4/8 23:48:04
  19. 693 交替位二进制数

    题目描述: 给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。 示例 1: 输入: 5 输出: True 解释: 5的二进制数是: 101 示例 2: 输入: 7 输出: False 解释: 7的二进制数是: 111 示例 3: 输入: 11 输出: False 解释: 11的二进制…...

    2024/4/8 23:48:03
  20. Java大厂面试题合集---自我总结

    文章目录Java基础1.ArrayList和LinkedList 和ArrayList的扩容方式2.StringBuffer和StringBuilder的区别3. ConcurrentHashMap和HashMap的区别,怎么解决线程不安全?有做什么优化么4. HashMap怎么解决哈希冲突和哈希碰撞5. Double和float为什么不能互相转义6. 序列化7. Java的锁…...

    2024/4/8 23:48:03

最新文章

  1. 【运维篇#2】查看每个docker的日志量并且清除多余日志

    文章目录 清除日志查看现在每个docker容器中的日志量 清除日志 #!/bin/bash echo " start clean docker containers logs " logs$(find /var/lib/docker/containers/ -name *-json.log) for log in $logsdoecho "clean logs : $log"cat /dev/null > $l…...

    2024/4/20 7:33:48
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 算法打卡day29

    今日任务: 1)1005.K次取反后最大化的数组和 2)134.加油站 3)135.分发糖果 1005.K次取反后最大化的数组和 题目链接:1005. K 次取反后最大化的数组和 - 力扣(LeetCode) 给定一个整数数组 A&…...

    2024/4/15 22:23:27
  4. 解析大语言模型训练三阶段

    大语言模型的训练过程一般包括3个阶段:预训练(Pre-training)、SFT(有监督的微调,Supervised-Finetuning)以及RLHF(基于人类反馈的强化学习,Reinforcement Learning from Human Feedb…...

    2024/4/17 22:18:45
  5. AI小程序的创业方向:深度思考与逻辑引领

    随着人工智能技术的快速发展,AI小程序逐渐成为创业的新热点。在这个充满机遇与挑战的时代,我们有必要深入探讨AI小程序的创业方向,以把握未来的发展趋势。 一、目标市场定位 首先,我们要明确目标市场。针对不同的用户需求&#x…...

    2024/4/19 15:01:34
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满&#xff…...

    2024/4/19 19:02:10
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/4/19 11:51:49
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...

    2024/4/19 11:33:34
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...

    2024/4/19 11:52:08
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...

    2024/4/19 2:38:12
  11. 【Objective-C】Objective-C汇总

    方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/4/20 7:01:14
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...

    2024/4/19 11:52:49
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/4/19 18:52:15
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...

    2024/4/19 23:08:02
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/4/20 0:22:23
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/4/19 23:04:54
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/4/20 1:12:38
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/4/19 3:53:57
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...

    2024/4/19 19:50:16
  20. --max-old-space-size=8192报错

    vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...

    2024/4/20 1:43:00
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...

    2024/4/19 11:54:11
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...

    2024/4/19 23:35:17
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...

    2024/4/19 10:00:05
  24. python django 小程序图书借阅源码

    开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图&#xff0…...

    2024/4/20 6:45:17
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/4/20 3:28:04
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57