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上运行.那么大家(开发者和企业)为 ...
随机推荐
- CMake 属性之目标属性
[写在前面] CMake 可以通过属性来存储信息.它就像是一个变量,但它被附加到一些其他的实体上,像是一个目录或者是一个目标.例如一个全局的属性可以是一个有用的非缓存的全局变量. 在 CMake 的众 ...
- ftrace irqs跟踪器
当中断被关闭(俗称关中断)了,CPU就不能响应其他的事件,如果这时有一个鼠标中断,要在下一次开中断时才能响应这个鼠标中断,这段延迟称为中断延迟.向current_tracer 文件写入 irqsoff ...
- 如何理解 .Net 中的 委托
// 委托 // 一种方法的声明和定义,也就是方法的占位符 // 一般使用在 参数 和 属性中 int Add(int a,int b) { return a + b; } // 定义委托的三种方法 ...
- Awesome-Visual-Captioning
目录 Table of Contents Paper Roadmap ACL-2021 CVPR-2021 AAAI-2021 ACMMM-2020 NeurIPS-2020 ECCV-2020 Vi ...
- kotlin集合——>集合操作概述、集合转换
1. 集合操作概述: Kotlin 标准库提供了用于对集合执行操作的多种函数.这包括简单的操作,例如获取或添加元素,以及 更复杂的操作,包括搜索.排序.过滤.转换等 1.1 扩展与成员函数 集合操作在 ...
- KubeSphere 使用 OpenLDAP 进行统一认证完全指南
作者:申红磊,青云QingCloud 容器解决方案架构师,开源项目爱好者,KubeSphere Member. 背景 在实际使用中,会有一些用户,在不同场景中经常碰到 OpenLDAP 对接问题: 能 ...
- JavaScript网页设计案例
1.引言 在前端开发中,JavaScript 无疑是一个非常重要的语言.它不仅可以用于表单验证.动态内容更新,还能实现复杂的交互效果和动画.通过 JavaScript,网页变得更加生动和富有互动性.本 ...
- IPV6改造 华为云如此简单
现在很多企业都在搞这个IPV6改造,说实话这个IPV6改造我这边也不是特别精通,也是通过查阅各种资料来了解IPV6这个东西,下面是我查的一些资料大家可以借鉴一下. IPv6改造三步曲--Vecloud ...
- Linux 基础-文件及目录管理
本文大部分内容参看 <Linux基础>一书,根据自己的工程经验和理解加以修改.拓展和优化形成了本篇博客,不适合 Linux 纯小白,适合有一定基础的开发者阅读. 一,概述 在 Linux ...
- 《使用Gin框架构建分布式应用》阅读笔记:p251-p271
<用Gin框架构建分布式应用>学习第14天,p251-p271总结,总21页. 一.技术总结 1.Docker & Docker Compose version: "3. ...