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上运行.那么大家(开发者和企业)为 ...
随机推荐
- LeetCode 327. Count of Range Sum 区间和的个数
给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper.区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 ...
- /sys/kernel/debug/binder/目录下主要节点含义
/sys/kernel/debug/binder/目录下主要节点含义 state 显示binder设备的整体状态信息 包括进程数量.线程数量.待处理事务数量等 stats 展示binder操作的统计信 ...
- 读取.raw格式文件(学习记录)
import cv2 #OpenCV包 import numpy as np # 首先确定原图片的基本信息:数据格式,行数列数,通道数 rows=886#图像的行数 cols=492#图像的列数 ch ...
- 分类问题的评价指标AUC
- JDBC后端实现查询功能逻辑
// 包名 package com.zhulx.JDBC; // 导入实例类 import com.zhulx.pojo.Account; import java.sql.*; import java ...
- 云原生周刊:K8s 的 13 个最佳开源监控工具
开源项目推荐 Silver Surfer 该项目旨在检查 Kubernetes 对象的 API 版本兼容性,并为其提供迁移路径,以便为集群升级做好准备. Actions Runner Controll ...
- 再见 Dockerfile,拥抱新型镜像构建技术 Buildpacks
作者:米开朗基杨,方阗 云原生正在吞并软件世界,容器改变了传统的应用开发模式,如今研发人员不仅要构建应用,还要使用 Dockerfile 来完成应用的容器化,将应用及其依赖关系打包,从而获得更可靠的产 ...
- 深度学习入门笔记——Transform的使用
Transfrom是什么? 可以看作是一个图像处理的工具箱,通过查看Transform类可以找到不同的图像处理方法 更准确的说,Transform中有各种类的的定义,我们可以通过继承或者构造这些类,然 ...
- mysql重置id排列重新排序
1.删除表中的原有的主键字段 ALTER TABLE table2 DROP id 2.表中重新创建一个字段 ALTER TABLE table2 ADD id int NOT NULL FIRST; ...
- 【原创】PREEMPT-RT 系统cpu使用率周期CPU飙高问题
PREEMPT-RT 系统cpu使用率周期CPU飙高问题 目录 PREEMPT-RT 系统cpu使用率周期CPU飙高问题 背景 现象 复现条件 原因 解决措施 背景 在22年进行PREEMPT-RT系 ...