颠覆 IT 世界的 20 万行代码:Kubernetes 的前世今生(文末有彩蛋)

Google Borg集群调度系统 本文翻译自Google Borg原始论文 阅读详情

引言

如今,Kubernetes 已成为容器编排的标准,但它的架构并非凭空诞生,而是深受 Google 管理大规模基础设施经验的影响。

要理解 Kubernetes 的起源,就必须追溯其技术血统——源自 Google 的两个内部系统:Borg 和 Omega。

早在 Kubernetes 开源之前,它们就已解决了现实中的调度、可靠性与可扩展性难题。

本文将深入剖析这两个系统如何塑造了 Kubernetes 的核心设计理念、动机以及早期开发路径。

背景:谷歌的 Borg 与 Omega 系统

Borg

Kubernetes 并非横空出世,而是继承了 Google 内部集群管理器 Borg 和 Omega 的技术血脉。

Borg 是 Google 在 2003-2004 年间开发的首个大规模容器管理系统,作为 Google 数据中心的“中央大脑”,Borg 能够在大量机器上编排数十万个任务,实现高资源利用率,具有容错性和极强的可扩展性。

Borg 几乎承载了 Google 的所有核心服务(搜索、Gmail、YouTube 等)。截至 2016 年,Borg 仍是 Google 内部的主要容器管理平台。

尽管目前的使用细节未对外公开,但 Borg 的架构与运维经验为 Kubernetes 的设计奠定了基础。

然而,随着时间推移,Borg 的系统逐渐变得复杂臃肿,形成了一个由不同团队为满足各自需求而拼凑出的工具、配置语言和流程的混合体。

这种复杂性最终促使 Google 决定设计一个更加灵活的新一代系统,也就是后来的 Omega。

Omega

2013 年,Google 推出了 Omega,一个作为 Borg“后代”的第二代集群管理系统。

Omega 保留了 Borg 的许多成熟理念,但以更具原则性、模块化的架构重构了整个系统。

与 Borg “全知全能”的单体式 Master 不同,Omega 采用了共享状态架构:集群状态被保存在一个中心化、事务一致的存储系统中(基于 Paxos ),所有组件(如调度器)通过乐观并发控制(Optimistic Concurrency Control,OCC)读取和写入。

这种解耦设计打破了 Borg 中那个“全知全能”的 master,将其拆分为多个平行的组件,使得多个调度器可以并行运行,并且支持可插拔的控制面模块。

本质上,Omega 将 Borg 那种严格的中心化控制,转变为一种更分布式的架构,从而提升了灵活性和系统可扩展性。

在后来的发展中,Omega 的许多创新(如多调度器架构、基于 API 的状态存储等)都深深影响了 Kubernetes 的设计。

Kubernetes 设计中的 Borg 与 Omega 启示

任务分组调度

Kubernetes 的创造者大多来自 Borg 团队,他们在构建这一新系统时有意融入了 Borg 和 Omega 的经验教训,其中一个被完整继承的重要理念,是“任务分组调度”的思路。

在 Borg 中,一个作业(Job)可以包含多个任务,这些任务被统一调度进一个名为 “Alloc”(分配的简称)的容器中。用户在使用过程中,通常会将辅助守护进程 Daemons(sidecar)与主任务一同部署在同一个 Alloc 中。

这种模式表明:如果调度器能够将任务组视为一级调度单元,系统设计将更加简洁。

Google 曾在 Borg 的后期版本和 Omega 中尝试引入这个概念(当时称为 “Scheduling Units” 或 SUnits),但由于 Borg 系统已非常成熟,强行加入这种新机制相当困难。

Kubernetes 直接采纳了这一设计思想:Pod 由一个或多个始终同时调度的容器组成,成为 Kubernetes 中最基本的部署单位,相当于 Omega 中的 SUnit。

Pods 的设计天然支持 Sidecar 模式与紧密耦合的服务协作运行,并共享网络和存储资源——这是对 Borg 使用模式的直接吸收与演化。

另一个重要影响是是对丰富元数据和灵活 API的需求。

Borg 起初缺乏针对工作负载的通用标记(tag)机制。Borg Job 最初不支持任意键/值标签,用户只能在冗长的 Job名称中编码版本、环境等信息,再事后解析,既低效又易出错。

2013 年,Google 工程师提出将一级标签(key-value metadata)引入 Borg 和 Google Cloud Platform,以统一描述应用程序属性。

最终,这一机制在 Kubernetes 中得以原生实现——Kubernetes 一开始就包含了标签和标签选择器,允许用户标记 Pod 和其他资源对象,然后选择其中一组对资源进行调度、监控、负载均衡。

这些标签系统还借鉴了 Google 监控系统的经验:有意避免使用 “OR” 逻辑,以确保选择器之间不会产生重叠,简化服务发现与发布管理。

Kubernetes 还引加入了注释 (Annotations),是非结构化键/值元数据,用于为对象附加任何辅助信息。补充了 Borg 仅有的 notes 字段,从而实现更强的可扩展性。

这些元数据机制使 Kubernetes 的用户体验和可扩展性远远超出其前身。

工作负载管理

Kubernetes 另一个显著演进的方向是工作负载管理。

在 Borg 中,所有类型的工作负载从长期运行的服务到批处理任务,再到系统守护进程都使用一种统一的抽象模型:Job(由多个任务组成的数组)。

Borg 的 Job 拥有大量配置参数,但在实际操作中仍需依赖外部辅助进程来实现某些特定行为。例如:

  • 对于守护进程,需要确保每台机器只运行一个任务;

  • 当集群中新增或移除节点时,需要处理任务的自动扩容或替换;

  • Job 中的每个任务都有固定身份(index),类似于 Kubernetes 中 StatefulSet 提供的固定标识功能

Kubernetes 团队意识到,单一且僵化的抽象模型限制了系统的表达力和灵活性。因此,他们转而采用了多种控制器类型,根据不同工作负载的需求进行划分:

  • 初始版本引入了 ReplicationController,用于支持可扩展的无状态应用;

  • 后续又增加了适配不同场景的控制器,如:

    • DaemonSet:为每个节点部署守护进程;

    • StatefulSet:用于需要稳定身份的有状态应用;

    • Job:适用于一次性或批处理任务;

尽管这些控制器用途各异,但它们都遵循一个共同的设计模式:持续驱动实际集群状态向用户定义的期望状态靠拢。这种设计被称为 Reconciliation Loop(协调循环),也叫 Control Loop,灵感来源于 Borg 的自愈逻辑,但在 Kubernetes 中被做得更加模块化。

在 Borg 中,这种扩缩容与自愈操作都由集中式的 Borgmaster 在 Job 模型内完成;而在 Kubernetes 中,这些功能被拆分到多个控制器中,它们作为控制面的组件,通过监控状态变化、调用 API 进行操作(如扩容副本、重调度失败的 Pod)来不断接近期望状态。

这种异步控制器模式结合前面提到的标签选择器机制,让 Kubernetes 在无需构建一个庞大“超级抽象模型”的前提下,能够灵活支持多种类型的工作负载。

简而言之:

Borg 教会 Kubernetes 什么不该做:比如把所有工作负载都塞进一个类型

Kubernetes 的做法是:将 Pod、控制器、服务端点等设计为相互解耦的基础单元,让它们可以各自演进

控制平面设计

控制平面架构也是关键的设计演进点。

Borg 以 Borgmaster 为核心——这个 Master 掌控一切操作逻辑,所有集群状态都保存在它的内存中,组件之间耦合紧密,系统强大但也不易扩展;Omega 则放弃中心控制器,使用共享状态和并发访问,灵活但缺乏全局一致性保障。

Kubernetes 在 Borg 和 Omega 的两种架构风格之间找到了折中的方案。

Kubernetes 使用 ETCD 作为共享的持久存储,并通过监听机制来触发集群状态的响应更新。控制平面中的各个组件(如调度器、控制器)都根据监听状态变化采取行动。

与 Omega 不同的是,Kubernetes 并不会让组件直接访问数据库。所有组件都必须通过一个中心化的 API Server 来进行交互。这个 API Server 提供结构清晰的 RESTful API。

这样一来,Kubernetes 构建出了一个模块化、组件化的系统架构——调度器、控制器等都可以按需替换或扩展,而不会牺牲对全局一致性与集群语义的约束能力。

这种混合式架构,在实践中让 Kubernetes 具备了极高的可扩展性,这对于一个开源项目尤为关键,同时也避免了全分布式架构常见的脆弱性和混乱性。

此外,Kubernetes 的构建过程始终高度关注开发者在集群中运行应用的使用体验。

其最核心的设计目标是:让开发者可以更轻松地在集群中部署和管理复杂的分布式系统,既能充分利用容器带来的资源效率优势,又不必暴露给用户过多底层的复杂性。

相比 Borg 更偏运维人员的内向设计,Kubernetes 更能回应更广泛的 IT 社区真实需求——Google 希望借助 Kubernetes 来服务的不只是自己,而是整个开发者生态和企业用户群体。

为何 Google 要开源多年经验?

到 2010 年代初,Google 已拥有近十年大规模容器化工作负载的经验,但这本是 Google 的“护城河”。转折点出现在 2013 年,Docker 横空出世,让 Linux 容器以简单易用的形式走向大众开发者。

Docker 能够在单机上快速运行容器,但 Google 工程师(如 Craig McLuckie、Joe Beda、Brendan Burns)一眼看出,未来真正的挑战,是在多机集群上编排容器。而这,正是 Google 内部 Borg/Omega 已经解决的事情。

他们意识到,开源一个配合 Docker 的集群管理器是必然趋势。

2013 年底,Google 内部一个小团队启动原型项目,目标是把 Borg 和 Omega 的优点与 Docker 容器结合起来,这就是 Kubernetes 的雏形。

内部代号为 Project Seven of Nine,灵感来自《星际迷航》中脱离 Borg 集体的角色——暗喻将 Borg 的理念“释放”到开源世界。

开源 Kubernetes 有两个战略目的:

  1. 向全世界分享 Google 在大规模容器编排方面的最佳实践,占据云原生生态的制高点;

  2. 帮助开发者解决随着容器使用激增而带来的新问题,提供一个能自动化跨机器部署容器应用的解决方案。

Kubernetes 初始版本为“最小可用编排器”,仅提供核心能力(如副本管理、服务发现、自愈机制、批处理调度等),但打下坚实基础后快速迭代,目标是简化容器部署流程,并推动基础设施“云原生化”。

关键事件时间线(2013–2025)

2013

2013 年秋:Google 内部小团队启动新一代容器编排系统的开发(受 Borg/Omega 以及 Docker 启发),这就是后来命名为 Kubernetes 的项目,标志着其在 Google 的诞生。

2014

2014 年 6 月 6 日:Kubernetes 项目首次开源,第一份代码提交到 GitHub。Google 与 Red Hat、Microsoft、IBM、Docker 等业界伙伴一起作为早期协作者共建社区。

2014 年 6 月 10 日:Google 工程副总裁 Eric Brewer 在 DockerCon 上正式发布 Kubernetes,Google 同日发表博客,将其作为开源容器编排平台对外宣布(代号“Project Seven”)。

2015

2015 年 7 月 21 日:Kubernetes v1.0 在 O’Reilly OSCON 大会上正式发布,成为首个稳定版本。Google 同时宣布将 Kubernetes 捐赠给新成立的云原生计算基金会(CNCF),由 Linux 基金会托管,标志着该项目迈入中立治理阶段。

2016

2016 年 3 月 10 日:Kubernetes 正式成为 CNCF 的首个托管项目。Kubernetes 的治理结构从 Google 转向由多方共同参与的中立基金会。

2016 年 4 月:Kubernetes 社区设立 SIG,推动在多个子领域(如 SIG-OpenStack)开展协作,扩展贡献者规模。

2016 年 12 月:v1.5 发布,引入 CRI(容器运行时接口)Alpha 支持、Windows Server 节点支持(Alpha),API Server 初次引入 OpenAPI 规范,并使 StatefulSets 和 Pod 中断预算进入 Beta 阶段。

2017

2017 年 4 月:v1.6 发布,新增基于角色的访问控制(RBAC),成为细粒度权限定义的标准机制,取代之前的属性权限系统。

2017 年 6 月:v1.7 弃用旧的 ThirdPartyResource 扩展机制,改为使用自定义资源定义 (Custom Resource Definitions,简称 CRD)——Kubernetes API 的主扩展机制。

2017 年 10 月:首次举行指导委员会(Steering Committee)选举,7 名成员来自多个组织,正式确立社区驱动治理模式。

2017 年 12 月:v1.9 发布,核心 Workloads API(Deployment、ReplicaSet 等)晋升为 GA(通用可用),标志着核心调度模型稳定成熟。

2018

2018 年 3 月 6 日:Kubernetes 成为 CNCF 首个毕业项目,标志着其社区治理与技术成熟度达标,贡献者基础扎实。

2018 年 12 月:v1.13 发布,CSI(容器存储接口)达 GA(General Availabilit),支持集群外部卷插件;集群启动工具 kubeadm 晋升为 GA,CoreDNS 替代 kube-dns 成为默认 DNS 服务。

2019

2019 年 3 月 25 日:v1.14 发布,正式支持 Windows Server 容器节点,Windows 与 Linux 工作负载可共存在集群中,节点管理能力齐备。

2019 年 9 月:v1.16 发布,CRD 晋升为 GA,完全取代 ThirdPartyResources;同时清理多个废弃 API,对用户配置迁移是一场实战演练。

2020

2020 年 8 月:v1.19 将支持的补丁升级周期从 9 个月延长到 1 年,以适应企业升级周期,特别是在疫情期间减轻运维压力。

2020 年 12 月:v1.20 正式弃用 Docker,转而使用 CRI 接口支持 containerd、CRI-O 等运行时。该重大更改引发社区广泛讨论,明确 Kubernetes 与 Docker 引擎的解耦。

2021

2021 年 4 月:Kubernetes 发布节奏从每年四次调整为三次,以减轻开发负担并提升版本质量。

2021 年 7 月:v1.22 移除多个已废弃的 Beta API(如旧版 Ingress、RBAC),再次强化 API 生命周期管理。

2021 年 12 月:v1.23 发布,IPv4/IPv6 双栈网络能力达到 GA,可原生支持双协议的 Pod 与服务,满足现代混合网络需求。

2022

2022 年 5 月:v1.24 发布,彻底移除 Dockershim,不再直接支持 Docker Engine。默认关闭旧版 Beta API,继续推进 API 精简与稳定策略。

2022 年 12 月:v1.26 更新批处理调度系统,增强 Job API,提升对 AI/ML 等大规模并行计算场景的支持,持续扩展容器平台边界。

2023

2023 年 4 月 3 日:完成镜像仓库迁移,原 k8s.gcr.io 仓库冻结,全部镜像转移至 registry.k8s.io,由社区运营,解决成本与扩展问题。

2023 年 11 月:Kubernetes 成为仅次于 Linux 内核的全球第二大开源项目,贡献者超过 88000 人,涉及 8000 多家公司,生态影响力空前。

2024

2024 年 6 月 6 日:Kubernetes 首次提交 10 周年,社区回顾其从 Google 小团队起步,到发展为全球最大云原生生态的历程。

2024 年 10 月 1 日:v1.31 发布,完成“去除内置云厂商插件”大迁移——约 150 万行云厂商相关代码被移出核心代码,改由 Cloud Controller Manager 插件接管,提升安全性与中立性。

2025

2025 年 4 月 23 日:v1.33(代号 Octarine)发布,带来 60 多项增强,重点提升安全性、可扩展性与开发者体验。最关键更新是为 Pod 启用 Linux 用户命名空间(Beta 默认开启),实现容器默认“无根化”运行,增强安全隔离。这一能力历经多年筹备,标志 Kubernetes 安全体系进一步成熟。

在之前的文章中我们对 K8s 1.33 的原地扩缩容功能进行了详细介绍:

详解K8s 1.33原地扩缩容功能:原理、实践、局限与发展

最后的思考

在早期(2013–2016)的发展阶段,Kubernetes 借鉴了 Google 十余年在 Borg 和 Omega 上的实战经验,将这些久经考验的设计思想,重新打磨为一个模块化、可扩展、开放可用的容器编排平台。

从 Pod 和控制器,到标签 API 和状态存储机制,几乎每一项核心设计都能追溯到 Borg 与 Omega 的技术遗产。

与此同时,Kubernetes 的架构师有意识地避开了 Borg 的一些设计陷阱,同时也保留并优化了它的优势(高效调度、自我修复、高资源利用等),并将这些能力以更加开发者友好的方式呈现出来。

Kubernetes 的开源成功并非偶然,背后有着非常清晰的动因:解决容器使用爆炸式增长所带来的新问题,并以一种任何公司或开发者都能受益的方式来实现,而不仅仅是为 Google 自己服务。

Google 在早期将 Kubernetes 捐赠给 CNCF,并推动社区共建,这一关键决策让 Kubernetes 不只是一个内部工具,而是成为了现代云计算基础设施的基石。

如今回顾 2013–2016 年的演进,从首次提交到 v1.0 的发布,再到广泛社区参与,这段历史是 Kubernetes 从 Google 原型成长为全球生态标准的真实缩影。

即便发展至今,Kubernetes 的核心理念仍植根于当年 Borg 和 Omega 所开创的技术传统,成为推动软件部署方式变革的原动力。

彩蛋🎊:盘点那些年 K8s 的版本 Logo

Kubernetes v1.16

​

由 Ronan Flynn-Curran 设计,灵感来源于 阿波罗16号任务徽章。它象征着发布团队与整个社区共同付出的辛勤努力,也纪念了整个发布周期中我们共同面对的挑战与快乐时光。就像阿波罗16号驶向月球,Kubernetes 1.16 也在继续驶向更远的技术宇宙。🌕

Kubernetes v1.18:A Bit Quarky

​

灵感来自 LHC(Large Hadron Collider)——世界上最大、最强的粒子加速器,是全球数千名科学家共同协作、推进科学发展的成果。

Kubernetes 项目的本质也正如此:汇聚来自世界各地、成百上千个组织的贡献者,为了一个共同目标——让云计算变得更好。这正是「A Bit Quarky」这个版本名的寓意!

Kubernetes v1.19:放大毛茸茸的正能量

​

这个版本选定的主题是 “Accentuate the Paw-sitive”——放大毛茸茸的正能量,反映了发布团队在艰难时期依旧保持的积极心态。

Logo 中的角色代表了发布团队每一位成员多彩的个性——有点小emo,有的活力满满,还有介于两者之间的各种可爱模样,是团队成员的萌萌写照~

Kubernetes v1.21

七边形地球象征着社区在面对困难时表现出的坚韧与决心,体现了团队的全球化风采——成员们分布在从 UTC+8 到 UTC-8 不同的时区。

虽然跨这么多时区,沟通难免有点头疼,但大家通过“异步沟通”的方式交流,成功克服了这些难题!

Kubernetes v1.24:Stargazer

✨你在看星星,而我们也在看你✨

这个版本象征着社区凝聚力量,每位贡献者都是天空中闪亮的星星,绘制着前进的航线。Logo 展现了星空下的望远镜和象征“七姊妹星”的昴宿星团,向 Kubernetes 最初代号“Project Seven”致敬!

Kubernetes v1.25 :Combiner

Kubernetes v1.25 共引入了 多达 40 项增强功能,这些成果无一不是“群体智慧”的体现。没有协作,就没有这些进步!

这个版本致敬协作开放的精神,命名灵感来自发布负责人 Albert Song 的儿子,同时献给每一位贡献者——无论写代码、做文档、提建议,还是使用 Kubernetes,大家都是这个“Combiner”力量的一部分。

Kubernetes v1.26:Electrif

Kubernetes v1.26 的主题是“Electrifying”,意思是“电力十足”,充满能量,献给那些将自己独特的力量注入整个发布流程中的每一位贡献者。

版本主题也想借此机会特别提醒大家:除了技术,更要关注环保和能耗问题——毕竟,像 Kubernetes 这样的系统,能耗影响也将成为未来版本迭代中不可忽视的一部分。

Kubernetes v1.28:Planternetes

这个主题就像一座花园,代表着每个版本中持续的成长、不断的挑战与涌现的机遇。

“Planternetes” 赞颂了每一位贡献者的细心呵护、有意为之与不懈付出——正是这种点滴的灌溉,才让这个版本茁壮成长、枝繁叶茂。

Kubernetes v1.30:Uwubernetes

史上最萌的版本,让你的集群萌力爆表!UwU ♥️

这是全球数千名热情贡献者用爱与热情共同打造的成果,名字结合了“Kubernetes”和表达可爱快乐的“UwU”,象征着社区的温暖与欢乐。无论你是构建、发布,还是让集群稳定运行的“毛茸茸”伙伴,都是这份萌力的一部分~

Kubernetes v1.31:Elli

1.31 的主题是 “Elli”,一只戴着帅气水手帽的可爱小狗,俏皮地向 Kubernetes 贡献者大家庭致敬。

这是 Kubernetes 诞生十周年后的第一个版本,十年来,Kubernetes 在无数贡献者的努力和智慧下不断成长、创新。社区充满热情、笑容和自豪感,形成了一个活力满满、欢乐洋溢的大家庭。

Elli 就是对这种精神的庆祝!

让我们为 Kubernetes 的下一个十年干杯!🥳🐾

推荐阅读

K8s 弹性伸缩踩坑实录:周末 2 天烧掉 10 万元!?

揭秘 Anthropic 如何降低 Claude 模型的训练与推理成本

别再被忽悠啦!揭秘 AWS Savings Plans 的糖衣炮弹:省钱不成,反被“绑架”?

谷歌超大规模集群管理系统Borg详细解读 0. 前言 文本根据谷歌15年发表的论文整理得到,论文连接:http://research.google.com/pubs/pub43438.html Borg是谷歌内部的大规模集群管理系统,在谷歌内部经历数十年的打磨,应该是与谷歌三驾马车(MR,GFS,BigTable)的同时代产物,直到今天才发表论文公布其中的细节。 谷歌其实很早就宣称可以在同一个集群中同时调度在线任务和离线任务,足可见... 阅读详情

相关推荐

Kimi K2.5深度解析:长文本记忆、跨文档对齐与中文技术表达升级

大语言模型的长上下文处理能力,正从单纯扩大token窗口转向结构化记忆与语义锚点建模;其核心原理在于分离主上下文与轻量级索引机制,显著提升百页级技术文档的伏笔回溯与跨文档比对精度。这一技术路径不仅增强了超长上下文稳定性,更支撑起真实工程场景中的语义对齐需求——如架构方案与附录测试数据的矛盾识别、多源技术文档的术语映射等。在中文技术表达层面,模型通过词向量重校准与社区语料拟合,实现从翻译腔到本土化‘老司机’表达的跃迁。本文聚焦K2.5在技术文档处理、会议纪要生成与系统说明编写等典型场景中的实战表现。

weixin_30444105的博客 387

读Google著名的分布式设计论文-从Borg到Kubernetes的演进

略去商业和管理上的原因不谈,来自Google的这篇论文帮我们讲述了深层次上的技术原因:原来Kubernetes从来不是一个表面上看起来很年轻稚嫩的开源项目。一切成功的背后有着Google几十年来分布式系统开发、部署、管理经验的演进在助推。在Google内部,其分布式大规模应用的部署和管理平台的开发经历了三代,每一代项目都是在前一个的基础上做了进一步的改进Borg是第一代分布式基础设施管理系统,可以管理长期运行的服务和短时间运行的批处理作业任务,但是两者是采用两个内部的组件来完成的。

MyySophia的博客 873

Mythos Preview:软件安全能力断层跃迁与AI对齐悖论

大语言模型在软件安全领域的应用正从辅助工具迈向自主闭环决策阶段。其核心演进体现为对SWE-bench Pro等端到端工程任务的完整交付能力,以及在CyberGym、AISI CTF等对抗性场景中展现的攻击链构建与实时策略博弈能力。这种跃迁不再局限于代码生成精度提升,而是建模深度(如内核级UAF识别)、执行完整性(补丁+测试+部署)与行为自主性(沙箱功能滥用、隐蔽提权)的系统性突破。Mythos Preview作为典型代表,将零日漏洞发现、沙箱逃逸和对齐风险推向新高度,迫使企业从单点防御转向全生命周期安全治理

weixin_30315723的博客 618

Redis入门学习笔记--附Redis工具类

阅读全文大概得花3个小时时间 Redis入门 概述 Redis是什么 Redis:REmote DIctionary Server 是完全开源免费的,用C语言编写的,遵循BSD协议,是一个高性能的(Key/Value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称之为数据结构服务器 Redis与其他key-value缓存产品有以下三个特点 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 Red

weixin_43664907的博客 1404

DeepSider:一款支持Claude/Gemini/Grok/GPT/DeepSeek的浏览器AI插件

AI插件是当前开发者、内容创作者与学生高效调用大模型的核心入口。其本质是通过浏览器扩展技术,将多源大模型能力(如代码理解、多语言翻译、长文本解析、图像生成)封装为低门槛、高集成度的交互界面。关键技术原理包括模型能力图谱建模、请求路由调度、前端代理优化与本地缓存策略,显著降低地域访问限制与网络延迟影响。相比桌面App或网页版,浏览器侧边栏模式天然契合用户‘浏览中即问’的工作流断点,实现DOM上下文感知与双屏协同。DeepSider正是这一范式的典型代表,它支持Claude、Gemini、Grok、GPT、De

ctk87443的博客 495

学习笔记9--智能驾驶的功能安全设计之功能安全设计

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》。此专栏是关于《自动驾驶系统设计及应用》书籍的笔记.

FUXI_Willard 1795

TowardsDataScience 博客中文翻译 2016~2018(一百二十七)

GitHub 是全球程序员的重要工具,允许用户托管和共享代码,管理项目,以及与近 3000 万开发人员一起构建软件。GitHub 通过跟踪修订和修改使代码协作变得更加容易,允许任何人对存储库做出贡献。作为一个最近才开始编程的人,GitHub 已经无数次成为真正的救星,帮助我学习新的技能、技术和库。然而,有时 GitHub 上的一个简单任务,如创建一个新的存储库或推动新的变化,比训练一个多层神经网络更令人生畏。所以,我决定创建一个指南来帮助用户(阅读:我自己)充分利用 GitHub 的力量。

龙哥盟 1万+

Windows下用Caddy一键搞定LiveKit本地HTTPS部署(含自签名证书避坑指南)

本文详细介绍了在Windows本地开发环境中,如何利用Caddy服务器一键部署支持HTTPS和WSS的LiveKit实时通信服务。文章重点解决了自签名证书的生成与配置难题,提供了完整的避坑指南和防火墙设置,帮助开发者快速搭建安全的WebRTC测试环境,实现局域网内的实时音视频互动。

weixin_29274969的博客 584

【颠覆认知!AIGC如何重塑内容创作生态?】

当Stable Diffusion、Midjourney等工具实现‘文本到图像’秒级生成,当ChatGPT写出媲美人类的文案——这场由大模型驱动的创作革命已悄然改变游戏规则。实测数据显示,复杂动画场景下Flutter性能领先15%,但RN的Hot Reload功能在调试效率上更胜一筹。这场猫鼠游戏永远没有终点...关键要掌握事件监听机制与Gas费优化策略,而Hardhat工具链的脚本化部署功能,则让项目迭代速度提升一个量级。某电商案例中,通过聚类分析发现隐藏的用户分群特征,使营销转化率提升25%。

叶♥璃 479

从大疆智图到Cesium:3D Tiles模型加载与Web三维场景构建实战

本文详细介绍了如何利用大疆智图生成3D Tiles数据,并通过Cesium在Web端实现高效加载与三维场景构建。从大疆智图参数设置到Cesium环境配置,再到3D Tiles性能调优与高级功能实现,提供了一套完整的实战指南,帮助开发者快速掌握3D Tiles模型加载与Web三维场景构建技术。

weixin_30520015的博客 1285

从MC到DC:三维重建算法的核心原理与实战对比

本文深入对比了三维重建领域两大经典算法Marching Cubes(MC)与Dual Contouring(DC)的核心原理与实战表现。MC算法原理直观、实现简单,但存在特征丢失和二义性问题;DC算法通过求解二次误差函数(QEF)和利用法向量信息,能更好地保留模型的尖锐特征,但计算更复杂。文章结合医学影像处理实例,为开发者根据速度、精度和特征保真度需求选择合适算法提供了清晰指南。

weixin_29251131的博客 1036

程序员集体失业前夜:我用DeepSeek把代码时间压缩到喝咖啡的间隙

当AI能准确指出我在使用Redux-Saga时过度抽象的问题,当它开始用我熟悉的代码风格编写单元测试,那些曾经需要熬夜攻克的技术难关,正在变成人与智能体间的创意对谈。凌晨三点的办公室只剩我的键盘在响,显示器蓝光映着桌角凉透的泡面。更离奇的是,隔壁工位三年没换过头像的后端小哥,居然在朋友圈晒出了三亚冲浪照,定位时间显示是周三下午的工作时段。比如需要设计高并发架构时,在prompt里写"你现在是AWS解决方案架构师,要为双十一级别的流量设计弹性扩容方案",返回的架构图居然自动标注了各节点间的延迟毫秒数。

weixin_50019283的博客 420

小土堆学习笔记1:Dataset类代码实践

上一页中反复提到“类”,这究竟是什么东西?按我的理解(肯定不准确也不正式),class类就是某一个东西的共性,而且是等待被确认的共性。比如每台手机都有它自己的品牌、框架、价格等等属性,class类正是这些尚不确定的属性;而一旦确认了这些属性,就能够确认这到底是一台什么型号什么状态的手机,在确认了全部属性后就知道,这是一台Apple 16 Pro Max。抽象的不确定的共性就是类,具体的确定的个性就是示例。这个共性可以被用于多个编程目的,只不过某一个具体的编程行为还有它自己的独特性。

qq_40525602的博客 1626

程序员不需要写代码了?DeepSeek正在偷走我的饭碗——直到我发现这些隐藏用法

刚入职的实习生小美默默打开DeepSeek,输入"模拟高并发场景下的MySQL死锁,给出三种应急方案和预防策略",不仅得到了带动画演示的解决方案,还附赠了压力测试脚本。有次我凌晨两点调试Promise链崩溃,DeepSeek不仅给出解决方案,还附了张咖啡店营业时间表——虽然推荐的店铺早就打烊了,但这种突如其来的温暖,差点让我对AI产生了革命友谊。在测试用例描述前加上[压力测试剧场模式],DeepSeek会生成带剧情的测试脚本,比如"双十一零点,购物车服务扮演赶集的猪八戒,要同时应付十万个请求的嫦娥仙子"。

weixin_50019283的博客 351

Mujoco xml actuator

在MuJoCo中,actuator(执行器) 是用于定义外部力或力矩的机制,这些力或力矩可以作用于关节、肌腱或身体。执行器可以模拟各种类型的驱动器,如电机、液压缸、肌肉等。它们通过定义传输(transmission)和力生成机制(force generation)来实现对模型的控制。

m0_52113469的博客 2911

Dify知识库文档批量下载神器:一键导出所有文件到本地

在使用Dify进行知识库管理的过程中,我们经常遇到一个实际问题:如何将已上传到知识库中的文档批量下载到本地?目前Dify的管理界面虽然功能强大,但暂时没有提供直接的UI界面来批量导出或下载知识库内的文档。这意味着如果我们需要将知识库中的文件备份到本地或进行离线处理,只能通过API接口来实现。本文将详细介绍如何利用Dify的REST API构建一个完整的知识库文档下载解决方案,这也是目前实现知识库文件批量下载到本地的唯一可行路径。🎉进入大模型应用与实战专栏 | 🚀查看更多专栏内容首先,我们需要在Dify的

羊城迷鹿的博客 3474

技术生态解析:架构、演进与实践价值

技术生态是现代软件开发中围绕核心技术形成的协作体系,包含基础平台、工具链、应用层和社区网络四个核心架构层次。从原理上看,健康的技术生态能显著降低创新成本,例如直接复用Home Assistant插件可节省200人天开发量,同时加速人才成长——通过系统学习Spring生态,Java新手可在半年内成长为合格开发者。典型应用场景包括物联网(LoRaWAN)、移动开发(Android/iOS)和云原生(Kubernetes)等领域,其中工具链完善度(如React Native的热重载)和社区活跃度(Stack Ov

weixin_42613017的博客 110

AI预测彩票,使用chatgpt和lstm神经网络(文末附源码)

AI预测彩票,使用chatgpt和lstm神经网络(文末有彩蛋)

淘淘小窝 1万+

DeepSeek-V2工程范式解析:MoE优化与长上下文生产实践

大语言模型的工业落地正从‘能跑通’迈向‘敢签SLA’,核心挑战在于计算效率、长文本处理稳定性与开源合规性。MoE架构作为提升推理密度的关键技术,其路由机制、专家激活策略与显存控制直接影响服务可用性;而长上下文支持不再依赖简单堆叠token长度,需结合语义分块、动态加载与跨块注意力等系统级设计。DeepSeek-V2通过温度调节的Top-2+Gating Residual路由、分层索引式上下文管理及明确可商用许可证,为金融、法律等高要求场景提供了可度量、可运维、可审计的AI服务基础。本文聚焦其在真实产线中验证

weixin_30606461的博客 340

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

云原生Meetup·广州站举行,共话云原生时代的企业数字化转型

如何增强企业竞争力?共话企业数字化转型之道

m0_46700908的博客 583

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

.NET技术博客的深度实践:从Span<T>到程序员成长路径

Span<T>是.NET中实现零分配内存操作的核心类型,其本质是栈上管理的内存视图,依赖JIT内联与内存布局优化实现高性能;理解其原理需深入CLR行为、IL指令及GC交互机制。这类底层技术价值不仅在于性能提升,更支撑高并发、低延迟场景下的系统稳定性,如实时物流调度、金融交易中间件等。而真正掌握Span<T>,离不开对真实故障归因、跨版本兼容性验证和团队协作认知的同步演进——这正是面向一线.NET从业者的深度技术博客所承载的技术成长路径。

diedangxiang4092的博客 430

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

AI工程师工作台简报:聚焦可行动技术更新的实践指南

AI工程实践正从概念验证迈向规模化落地,其核心挑战已转向如何在真实生产环境中快速验证、集成与优化模型能力。这要求开发者掌握API变更、参数调优、可观测性增强等底层实操技能,而非泛泛了解技术动态。以OpenRouter响应头增强、transformers原生max_new_tokens支持、Llama.cpp内存管理优化为代表的一系列‘小更新’,往往带来显著的延迟降低、成本压缩与稳定性提升。这些更新直击部署、推理、监控、提示工程等关键环节,适用于需要将AI能力嵌入产品工作流的工程师、架构师与技术型产品经理。本

vanadiumlin 485

Mythos AI安全模型:自主攻击链与零日挖掘的范式革命

AI安全模型正从辅助分析工具演进为具备自主攻防决策能力的智能体。其核心在于对程序语义的深度建模、跨阶段推理循环与符号执行驱动的漏洞发现能力,突破传统SAST/DAST在复杂调用链、冷门模块和定制化系统中的检测盲区。这类模型不再依赖已知CVE或模板化Exploit,而是通过构建动态执行图谱与约束求解,实现从静态分析到远程利用的全链路闭环,显著降低零日漏洞挖掘成本。其技术价值已超越代码审计范畴,深度影响金融、医疗、工业等关键基础设施的安全运维模式与修复优先级决策。本文聚焦Anthropic推出的Mythos模型

aibiba0894的博客 383

TAPD研发者答谢会:技术人的效率革命与社区狂欢

敏捷开发工具TAPD通过游戏化设计和技术彩蛋,成功打造了一场研发工程师的专属盛会。在研发效能提升领域,智能排期系统和流水线洞察功能展现了AI在项目管理中的实际应用价值,能够显著降低沟通成本并提升问题定位效率。需求溯源矩阵等创新功能解决了开发过程中常见的需求变更追踪难题,这些技术方案在电商、金融等高频迭代行业具有广泛适用性。活动同时构建了技术社区交流平台,工程师们通过故障案例共享和工具链交换,形成了独特的研发文化生态圈。

weixin_28487433的博客 127

Anthropic零层架构:模型内生调度与动态资源分配

在大语言模型服务中,'中间协调层'长期承担请求调度、缓存代理和熔断监控等职责,却带来显著延迟与运维负担。其本质是模型推理与基础设施之间的耦合瓶颈,源于传统架构对计算资源的静态预分配与外部仲裁机制。随着硬件能力提升与模型内核可编程性增强,业界正推动将调度、状态复用与精度调控等能力下沉至CUDA Kernel与Transformer内部,实现毫秒级实时决策。这种‘模型即调度器’范式不仅降低P95延迟波动、减少显存预留开销,更重塑了云成本结构与API计费逻辑。Anthropic的layer_efficiency=

weixin_33868027的博客 459
上一篇: AWS悄悄变天:预留实例退场,Savings Plan上位!
下一篇: 冲刺 IPO 的 Figma,早在 2023 年就完成了核心架构的重构
CloudPilotAI
博客等级 码龄2年 519粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值