2018年刚开始接触 sprig cloud
的时候,还不知道 分布式计算
的概念,只知道 Netflix
开源了一套 微服务框架
,里面有不少组件组成:程序员
组件名称 | 做用 |
---|---|
eureka | 服务注册与发现 |
zuul | 网关路由、反向代理 |
feign | 客户端侧负载均衡 |
hystrix | 熔断降级 |
seluth & zipkin | 链路追踪 |
config | 配置管理 |
... | ....... |
当时按照书上所教的,搭建一个微服务 demo
,就觉得 微服务
不过如此。兴冲冲跑去面试,结果遇到一个阿里出来的大佬,他说“只会问你懂的东西,不会问我懂你不懂的东西”,结果就被大佬问到 分布式锁
、分布式事务
和 分布式任务调度
要怎么解决?问得我哑口无言,只能灰溜溜地回去。。。面试
后面通过多番的学习,才知道 分布式计算
是个很是庞大的体系,spring cloud
这套微服务开发框架所包含的知识点只不过是很小的一部分。说到 分布式计算
,就不得不提 拜占庭将军问题
,业界基于这套理论衍生出不少组件:redis
中间件名称 | 做用 |
---|---|
redis | 分布式锁 |
zookeeper | 分布式锁/同步 |
RocketMQ | 分布式事务 |
xxl-job | 分布式任务调度 |
elastic-job | 分布式任务调度 |
... | ....... |
说了这么多,事实上只涵盖 分布式计算
很小的一部分,但对于一个普通的 Java Web
开发人员来讲,掌握这点知识点已经足够他在北上广深拿一两万工资,过过普通日子。spring
然而即使如此,在实际的开发流程中,Spring Cloud
这套框架仍是暴露出它的致命弱点:sql
首先说说 Spring Cloud
侵入性的一面,强侵入性致使了在将之前单体应用改造为模块化的微服务遇到很是多的麻烦,其中最大的问题是 微服务化改造
过程很是耗时耗力,却没有给公司带来任何短时间收益,并且占用本来的产品研发的人力物力。面对这种状况,通常的公司都会选择一边交付新功能,一边改造旧服务的策略。docker
其次,提及 异构应用
,不得不说“明日黄花” PHP
和 “后起之秀” NodeJS
。数据库
过去不少公司会采用 PHP
开发 Web应用
,然而随着 NodeJS
不断崛起,业界流行起 先后端分离
浪潮,PHP
生态虽然受到必定的冲击,但不致命。后端
然而,一波未平一波又起,业界又兴起 微服务化
的浪潮,不一样于之前的是,此次 PHP
完全掉队了。网络
以前我在面试的时候,遇到一个惟品会出来的10年开发经验的 PHP
程序员。听他说,前几年公司招了一个技术老总,中层管理大换血,公司的主要技术栈也从 PHP
转向 Java
,他也转向 Java
开发,然而仍是逃不过被裁人的命运。。。负载均衡
这里脑洞大开一下:若是 Spring Cloud
支持 异构应用
,或许 惟品会
就不须要付出巨大代价用 Java
重写 PHP
应用,PHP
程序员也不用面临大规模裁人的困境。
Spring Cloud
不支持 异构应用
这一特色,就是一把双刃剑,虽然干掉宿敌 PHP
,但并不表明 Java
开发人员就能够高枕无忧。
Spring Cloud
的高光时刻已通过去了,黑暗即未来临:先是 Eureka
和 Zuul
闭源,后面虽然有 Nacos
和 Gateway
等代替品,但依旧没解决 侵入性强
和 不支持异构应用
的致命缺陷。
所以面对即未来临的 云原生时代
,Java
根本就没有准备好!
过去的 2019年
能够说是 云原生
元年。
这一年里,Kubernetes
击败了 Docker Swarm
、Docker Compose
和 Mesos
等一众对手,坐稳 容器编排
的 第一把交椅
这一年里,Istio
击败了 对手 Linkerd
,成为 Service Mesh
的一哥,剑指曾经的大佬 Spring Cloud
,大有取而代之的趋势。
提及 Istio
不得不提 Service Mesh
,Service Mesh
中文意思就是 服务网格
。而在谈以前,还须要讨论一下 Docker
。
早在 2015 年,我就据说 Docker
的大名。那时候我还在上大学,每次由于课程做业或毕业设计的缘故须要安装数据库,而 SQL Server
和 MySQL
二者常常发生冲突,每次冲突都只能经过重装系统解决,每一个学期重装一次系统都是屡见不鲜。虽然想过装虚拟机,但那个时候的固态硬盘和内存都特别贵,装完虚拟机后就卡得要死。
当听到 Docker
的时候,我就想用它来代替虚拟机,然而 Docker
并不支持 Windows
,还须要安装 Linux
虚拟机才行,因此后面就不了了之。
我敢打包票,即使到了如今依然不少人就跟当年的我同样认为 Docker
就是一个轻量级的虚拟机,因此在 容器
里运行 MySQL
性能会远低于 原生
Mysql,这实际上是一个天大的 误会
!
然而,即使到了 2019 年,Docker
已经支持 Windows
容器,我终于能够运行 容器化
的 SQL Server, 然而在 Windows
上运行 Docker
仍是须要安装一个轻量级 Linux
虚拟机。
缘由就是 Docker
运行容器的时候,容器之间须要 共享
宿主OS,因此没有 Linux
虚拟机,根本跑不了 Linux
容器。
那么在 Windows
上运行 Windows容器
是否是就不用安装 Linux
?答案是并无。缘由是 docker
在运行时须要运行守护进程 docker daemon
等监控维持容器运行的组件,因此仍是须要运行 Linux
虚拟机。
连以兼容 类Unix
著称的 Mac OS
,在运行 docker
的时候,都必须安装虚拟化软件 Virtual Box
,更遑论 以封闭著称的Windows
。
好了,聊太多题外话,如今回归正题。
在实践 spring cloud
和 docker
的微服务框架时,最多见的问题,无非就是用 docker
部署 eureka
集群,常常遇到 注册中心
和 微服务
组件网络不通的问题。
这时候,见多识广的人会提议使用 compose
或 swarm
来部署,这不过是还抱有 Docker 是虚拟机
那种错误认识的人的无奈之举。
随着微服务数量的不断增多,单纯的手工部署和功能羸弱的 compose
和 swarm
已经没法胜任愈来愈复杂的容器编排工做。
这时候,体量稍微大一点的公司都会招聘专业的运维来搞定容器编排的事情,就轮到 kubernetes
闪亮登场了。
许多连 docker
都没整利索的开发人员,一看到 kubernets
就内心发虚,这就又是个什么玩意?
但公司新来的技术总监,又给老总吹嘘:硅谷的互联网巨头都开始使用 DevOps
模式来管理研发,它能够缩短产品的迭代周期,提升公司竞争力等等。
老总听完,说开发整了个 Spring Cloud
以后,每天搞重构,产品研发进度严重滞后,你就别给我添乱了。
技术总监是何等人物? 只见他眉头一挑,说道:Spring Cloud已经落伍了,改用Istio,就不用重构之前的 PHP
项目,新出的 NodeJS
也支持。
老总被说服了,反正如今被 Spring Cloud
整得不上不下的,就死马当作活马医吧。
因而,公司上下一会儿又活跃起来:开口 流水线
,闭口 滚动升级
。
那么,k8s
到底是何方神圣?下面我就拿 K8S
以及 Istio
的概念和 Spring Cloud
对比一下:
k8s概念 | spring cloud概念 | 功能 |
---|---|---|
pod | container | 部署的基本单位 |
service | eureka | 服务注册与发现 |
ingress | zuul | 网关路由、反向代理 |
dns server | feign | 负载均衡 |
config map | config | 配置管理 |
istio envoy | hystrix | 熔断降级 |
istio envoy | seluth & zipkin | 链路追踪 |
deployment | 灾备扩容 | |
StatefullSet | 有状态集群 |
以上的比较并不充分体现二者的差别,也不彻底准确,仅供参考。
到这里,基本上就是大多数人公司和开发掉进坑里的地方。Istio
虽然好,但如何落地依然是不少人心头的一块大石。
前面提到, 2019年不少公司刚从 Spring Cloud
的坑里爬出来,又遇到 Istio
的这个拦路虎。
然而,时代的滚轮不断向前,不会由于任何一我的或者组织团体而停下
营销大师 马云
提出 中台
就是 云原生
的终极形态,忽悠了一大批互联网企业的高管。一时间,中台
成为互联网行业的 皇帝新衣
,问谁都说知道 中台
是什么,但深究起来,却没几我的能准确回答上来。
后面大佬们回过神来,原来 中台
就是 云原生时代
的 应用商店
。不愧是互联网界的忽悠大师!
随之而来,还有 边缘计算
,折腾大半年得出一个由 K8S
阉割而来的 K3S
,美其名曰 轻量级K8S
。
2020开年就是一场突如其来的疫情,转眼间 2020年 已通过了大半,互联网行业能炒做的噱头都炒完了,只剩下 Serverless
这个后浪还能坚持到最后。
Serverless
出来到如今,都跟 中台
概念同样,人人都在谈,但没有人可以准确地说 Serverless
究竟是什么,直到后起之秀 NodeJS
祭出终极大杀招 WASM
,一时间几乎全部语言生态都想分一杯羹。纷纷放出将自家的 WASM转换
工具,亚马逊也宣布旗下开源的 Serverless
运行时 firecracker
支持 WASM
。
至此,业界才知道谁才是真正的 后浪
。