Kubernetes 可能是分布式架构的大结局了
前两年在爬虫里折腾的太久了,最近快马加鞭追赶分布式架构潮流。
SpringCloud、Dubbo、ServiceComb 刷完,以为分布式架构就是这样了。这批架构可能也就 Java 栈的人会感觉它们特别方便特别强大,其实就那么回事而已。我以为下一代架构应该是 FaaS。相比 d2js,FaaS 的缺陷是不支持函数束,看起来就像一个一个的 Servlet,和 Servlet 相比 FaaS 在容器方面进步挺大,而编程模型却倒退了。 消息驱动的设计也谈不上多出人意料,结合流程编排倒是可以实现点实用的东西。
另外一个思路就是设计一种新的分布式编程语言,将流程拆解到各个容器上执行。这种语言之前构思过,思路还是很有价值。我看到有一个叫 Rockscript 貌似有点眉目。
然后,这两天读 Kubernetes ———— 当时就惊呆了!
这TM才是程序员该干的活!
怎么说呢,
Kubernetes 是一种典型的软件驾驭硬件的设计,它把一种声明式的编排规格自动展开到容器上。真正的程序员都明白,程序不能驾驭硬件只能框在硬件上跑那是没追求。我爬虫框架都有自动起 GCP 实例的设计。
Kubernetes 也是一种透彻的思维方式,Kubernetes 将所有高大上的冠冕堂皇的服务和 hello world 一样,看成是一个个可以容纳在 Docker 里的需要资源的 Service,并为此构造了一个个 Pod 概念。上次遇到这样的颠覆还是在 erlang 里,erlang 构造出名为 Process 的语言实体,透过 Process + Message 的眼光,我能感受到,spawn Process 就是开机!Process 结束就是关机!而参数,就是开机的上下文!!遗憾的是这种透彻的思维方式在 Java 的世界里很少看到,Javaer 津津乐道的 Annotation 在我看来就是一种投机取巧————因为程序语言有这玩意儿我就要把它发挥到极致。
Kubernetes 将软件下沉到以往看来像磐石一样沉默有力的 TcpIP 栈,巧妙的把 DNS 这种互联网世界的事物当做一种内部服务命名策略,让人感到那种真正的程序员所爱玩的把大象卷吧卷吧放冰箱里的快乐。
记得上家公司老板希望推动上 K8S,我当时沉迷于爬虫没有花时间深入。 当时做的爬虫架构里有和 K8s 非常相似的监测 CPU 负载飙到多少自动开机降到多少自动关机的方案,但是只作用于爬虫系统。K8S 的 Label + Selector 也有恰好类似的设计,这也是通透点的思维都会摸到的门吧。当时的业务场景确实不太需要 K8s,毕竟是CPU密集型, 但老板能看到这个技术的价值而我无动于衷也是个固步自封的教训了。
和 Java 的所谓分布式架构不同,Kubernetes 把 Process 和操作系统割开,在二者之间塞入了一个新的调度层或者说容器层,这个设计是对任何操作系统、任何语言的应用都通用。所以,Kubernetes 实际上判了 Java 那些分布式框架死刑。我不知道这些框架还腆着脸凑热闹有什么意义。记得有一次交流时我说过,这些所谓的分布式架构,未来就会像基础设施一样,没人关心它们的存在,到那时也不会有系统架构师这样的岗位————到那时人们会发现,不就是部几台机器吗,是个人就会。
通常,更究极更通透的设计往往也更为灵活开放,Kubernetes 这种在操作系统和进程间插一杠子的做法让 Java、PHP、C、Python、JavaScript 都获得了相同的能力,它们都可以变成自动伸缩的分布式服务而不需要进行任何改造。只有真正的程序员才会做这样的设计:大家都要活的好好的,一齐进入分布式时代。而 Javaer 总喜欢大一统,高大上,充满了包举宇内的雄心壮志,却很少讨人喜欢,Java 真是官僚主义的编程语言啊————或者说 Java 是官僚主义者的大本营。
伴随 Kubernetes 出现一个概念叫 DevOps,这个概念也许有它的价值,但是,计算机不就是跑程序的吗,程序员看着计算机有什么奇怪的。。。。
前段时间感觉 d2js 需要大调整的想法也没有了, d2js 看来还很棒,除了要支持异步(换 vertx)没什么大毛病。分布式不用 d2js 来解决,d2js 不需要傍哪个框架让自己分布式起来。
当然,世界上没有完美的方案,Kubernetes 是否有别的搞法也值得深思。比如 Process + 协议栈 context 是否就足够了?毕竟 docker 之类的技术难免会拉低点性能。这些在后面会有人做,即使以后 Kubernetes 被取代了也无法掩盖 Kubernetes 开创性的光芒。
有了这么多美好的技术,我觉得再造轮子意义没有那么大了,把 d2js 略加改进好好做点自己想做的东西,这才是我的使命。
Kubernetes 可能是分布式架构的大结局了的更多相关文章
- Kubernetes——基于容器技术的分布式架构领先方案,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及运用伸缩
1.Kubernetes介绍 1.1 简介 Kubernetes是什么?首先,它是一个全新的基于容器技术的分布式架构领先方案.其次,它是一个开放的开发平台.最后,它是一个完备的分布式系统支撑平台.Ku ...
- 转载:把你的精力专注在java,jvm原理,spring原理,mysql锁,事务,多线程,大并发,分布式架构,微服务,以及相关的项目管理等等,这样你的核心竞争力才会越来越高
https://developer.51cto.com/art/202001/608984.htm 把你的精力专注在java,jvm原理,spring原理,mysql锁,事务,多线程,大并发,分布式架 ...
- Kubernetes基础概念及架构概述
Kubernetes 架构 Kubernetes是一个全新的基于容器技术的分布式架构,虽然Kubernetes只有三年,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要发展成果.确切的 ...
- 资深P7架构师详解淘宝服务端高并发分布式架构演进之路
1. 概述 本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则. ...
- 服务端高并发分布式架构演进之路 转载,原文地址:https://segmentfault.com/a/1190000018626163
1. 概述 本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则. 特 ...
- Windows平台分布式架构实践 - 负载均衡
概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...
- nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...
- windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...
- Windows平台分布式架构实践 - 负载均衡(下)
概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...
- Windows平台分布式架构实践 - 负载均衡 上
概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...
随机推荐
- [rCore学习笔记 028] Rust 中的动态内存分配
引言 想起我们之前在学习C的时候,总是提到malloc,总是提起,使用malloc现场申请的内存是属于堆,而直接定义的变量内存属于栈. 还记得当初学习STM32的时候CubeIDE要设置stack 和 ...
- dotnet的Lambda表达式 委托泛型(2) Action Func
// 总结:// 泛型:把类,方法,属性,字段做到了通用化// 反射:操作dll文件的一个帮助类库// 特性:就是一个特殊的类 自定义标记属性特性 他就是AOP的另一种实现方式 验证属性// 委托:就 ...
- vue3读取所有的vue文件
- Vue 如何实现组件切换的时候,让组件缓存,不会被销毁
使用场景:我们开发项目的时候,会遇到组件之间的切换,一般都是创建组件销毁组件来回切换 :但是现在需求是切换组件的时候,另一个组件不会销毁: 基于这个需求 ,我们使用 keep-live 组件包裹起来要 ...
- 06 导师不敢和你说的水论文隐藏技巧,顶刊、顶会、水刊的论文读哪个,如何做一个称职的学术裁缝.md
博客配套视频链接: https://www.bilibili.com/video/BV11g41127Zn/?spm_id_from=333.788&vd_source=b1ce52b6eb3 ...
- PostgreSQL 17重磅登场——世界上最成功的数据库
朋友们,万众期待的 PostgreSQL 大版本发布又来了!这一次,PostgreSQL 17 带着全新的性能优化和开发者必备的新功能强势登场.与其说这是一场普通的更新,不如说它是一场专为高并发工作负 ...
- Python3开启简易服务器
nohup python3 -m http.server 3000 2>&1 &
- 关于STL容器的简单总结
关于STL容器的简单总结 转载自 1.结构体中重载运算符的示例 //结构体小于符号的重载 struct buf { int a,b; bool operator < (const buf& ...
- 量子线路设计:减少CNOT和T门的意义。
在量子线路的设计中,我们往往希望减少线路中的CNOT门和T门的数目,原因如下: 一般文献宣称减少T门的数量是为了更高效地执行容错量子计算(fault-tolerant quantum computat ...
- SAM4MLLM:结合多模态大型语言模型和SAM实现高精度引用表达分割 | ECCV'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: SAM4MLLM: Enhance Multi-Modal Large Language Model for Referring Expres ...