Google下的这盘“小”棋
1
2008年的时候,我接触到了Google App Engine(简称GAE),它允许你用自己喜欢的语言如Java, Python来开发应用程序,然后部署到GAE上运行,完全不用考虑应用程序的伸缩问题,GAE可以帮助你从0扩展到全球规模。
你只需要关注你的业务逻辑,而无需关心底层的基础设施,也不用考虑防火墙等安全功能,并且可以按使用付费,用多少,付多少,这就是激动人心的PaaS (Platform as a Service)。
国内的新浪和百度也迅速跟随推出了自己的产品,Sina App Engine, Baidu App Engine。
事实证明,这种模式并没有发展起来,为什么呢?
市场需要的是更加“低级”的产品:计算,存储,数据库,队列,或者是虚拟机。这应该是IaaS(Infrastructure as a Service)层面的东西, 于是亚马逊的AWS反而发展起来了,吸引了很多应用程序的入驻。
大家都去用AWS,Google的Cloud该怎么办呢?
这个时候Docker出现了, Build Once , Run Anywhere , 使用Docker可以让应用程序在任何地方以相同的地方运行,因为它把代码和依赖的运行环境打包,放到了一起。
这是个非常美妙的特性,应用程序可以在服务器之间迁移,那也可以在云之间进行迁移,不用被某个云锁定了。
但是,仅仅是单个Docker是搞不了什么事情的,尤其是在微服务架构的情况下,需要很多Docker协作,编排,扩展。
于是Google下了一步棋, 搞了一个叫做Kubernetes (k8s) 的东西来做这些工作,经过一番争斗,干翻了Mesos,Swarm等竞争对手,成了事实的标准。
应用程序所需要的基础设施层被Google搞定:k8s + docker, 应用程序可以在微软的云,亚马逊的云,Google的云,IBM的云之间迁移, 只要支持k8s, 大家站在了同一起跑线上,就看谁提供的服务更稳定,更高效。
2
前面提到了微服务, 微服务想有效地运行起来,还需要很多的基础设施:服务发现,降级限流,负载均衡等等。 在这方面搞得最好的是Netflix这个网络视频点播的公司。
Netflix不但在生产环境大规模使用微服务, 还为Spring Cloud贡献了大量的、著名的开源组件,包括Eureka, Hystrix, Zuul ,Ribbon 等,可以说是功勋卓著。
在Spring Cloud似乎已经统治了微服务市场的时候,不断翻新的IT界又冒出了新的概念: Service Mesh 。
Service Mesh 说:现在在微服务的执行过程中,需要一个依赖库,实现微服务的发现,监控和保护, 这个依赖库和和业务密切绑定,例如Hystrix,Java语言写的, 别的应用想用的话还得再重复开发一份。
Service Mesh 提出了新的方式,把依赖库和业务剥离开,让业务代码清清爽爽。把依赖库的功能放到一个叫做代理的模块中,两个微服务之间不再直接通信,而是通过这个代理来通信:
这绝对是个釜底抽薪的办法,这是要革Spring Cloud的命啊!
Google趁机落子,和IBM等大佬提出了一个Service Mesh的框架,叫做Istio, 大有后来居上,收割成果之势。
除了Istio, Google还有gRPC来进行微服务之间的调用,支持多语言,多种平台,并且面向HTTP/2 (也是Google搞出来的,一会详细说)。
在跨越网络调用远程服务的时候,Python对象,Java对象,C++对象必须序列化才可以跨越网络的千山万水,可以把这些对象变成文本,如JSON/XML,还可以把变成二进制的数据。
Google提出的序列化协议是Protocol Buffers,这个序列化机制也是语言中立,平台中立的,性能高,数据传输过程中压缩得比较小。
3
从基础设施到应用框架,Google 都落下了自己的棋子,最后,Google把眼光移向了底层的通信协议。
Google先是对HTTP1.1动手,做了一个叫做SPDY协议的实验,非常成功,成为了HTTP 2的基础。
HTTP 2把基于文本的协议改成了基于二进制的,把HTTP请求和响应变成数据帧,这样就实现了多路复用:在一个TCP连接上可以“混合”着发送多个HTTP的请求和响应,效率大大提高。
(来源: https://www.slideshare.net/lmacvittie/http2-changes-everything)
然后,Google对传输层协议开刀,搞出了一个新的传输层协议QUIC,解决了TCP了诸多问题,有望把TCP给替换掉。基于QUIC,新的HTTP协议,即HTTP/3正在制定当中。
刚开始的时候我还在想,为什么是Google在折腾这些协议? 有那么多实力强大的公司,他们怎么不去做?
后来突然想到,Google干这件事情是比较合适的,因为他有浏览器Chrome,自己还提供了很多服务(Gmail,google.com....), 既然浏览器端和服务器端都掌握了,那修改一下中间的协议做做试验是很自然的事情,普通用户才不管这些,只要觉得网速变快了就行。
4
好了,Google现在搞定了基础设施(Docker+ K8s),搞定了微服务框架(gRPC+protobuf),甚至改进了底层的协议(HTTP/2 , QUIC, HTTP/3),正在用Istio对微服务的降级限流,服务发现等这些依赖库进行精准打击,有望成为下一代微服务的基础架构。
Google是在下棋吗?我也不知道,我能看到的这家公司把重要的点都给占住了,实在让人佩服。估计在相当长的一段时间内,都会对后端开发产生重大影响,甚至占据统治地位,大家可以关注一下。
Google下的这盘“小”棋相关推荐
- 小米携手联芯 是为了下多大一盘棋?
在小米刚刚举行的发布会上,其实最关键的产品只有两个,分别为一大一小--55英寸小米电视2和红米2A.这其中,红米2A带给市场的冲击更大,毕竟其在米粉节当天的售价只有499元.这意味着小米凭借红米2A直 ...
- 如何从Android Studio手中救下你可怜的小C盘_莫韵乐与bug的奇幻冒险
如何从Android Studio手中救下你可怜的小C盘 在我们使用Android Studio的时候,我们会出现这样的问题 我应该怎么样将Android Studio的用户数据转移到其他盘里面去呢? ...
- 最懂商用车的狮桥,在智慧物流上下了一盘什么棋?
文/陈壹 来源/智能相对论(aixdlun) 智慧物流要由量变走向质变,离不开相关技术的突破,比如5G.大数据.人工智能等,尤其是干线物流中的自动驾驶货车.支线物流中无人机送货等何时能大批量商业化落地 ...
- 如何在linux中使用u盘,如何在Linux系统下使用U盘
如何在Linux系统下使用U盘 Linux系统中U盘被视为SCSI设备, SCSI设备对应的设备文件格式为"sdX" 系统中的第一个SCSI设备表示"sda", ...
- 0基础快速开发口袋网盘小程序
点击观看大咖分享 口袋网盘小程序使用的是小程序的云开发,云开发自带免费的云存储.云数据库,开始时不需要涉及服务器的搭建及运维,也不需要进行域名注册与备案,只需要通过一些简单的API就能实现一个完整项目 ...
- 软件:股票小助手/盯盘小助手!
软件:股票小助手/盯盘小助手 功能: 1.隐蔽,能和常用工作软件融为一体,即使被领导同事看见屏幕,也察觉不了: 2.能实时更新数据,不能有更新频率限制: 3.能设置目标上限,下限价,达到目标后已隐蔽的 ...
- xp下u盘安装linux双系统,在XP下用U盘安装Ubuntukylin到硬盘的方法(双系统共存)...
主要面向对象是内存2G以下的老旧电脑,才用xp系统,新电脑的话都是windows 8.1系统了. 一.首先是磁盘分区: 右键我的电脑--管理--磁盘管理,将xp系统下的硬盘分一个10G左右的空间出来( ...
- 为什么程序下在其他盘,c盘空间还是增多了?appdata文件夹有什么用途?
为什么程序下在其他盘,c盘空间还是增多了? 程序下载安装在其它盘,代表着程序的源代码和运行文件在其它盘,然而你要去调用它,Windows就会在Appdata下去生成这个程序的启动文件夹. 同时wind ...
- linux命令行下读取u盘内容_Linux系统下使用U盘的方法
在linux系统之中, 一切设备皆文件, 所以我们的U盘也是一个文件.磁盘设备被抽象成sda文件, U盘设备被抽象成sdb文件. 1.查看所有的设备文件. 在linux的文件系统中, /dev中存放着 ...
最新文章
- lists,tuples and sets of Python
- 百胜软件2016年双十一项目正式启动
- 全球及中国家电用PET薄膜涂层钢卷市场前景形势与未来竞争规模展望报告2022版
- 《刺激战场》正式停服!换了个马甲又来了 开启收费变现模式?
- Pure-Ftp:基于虚拟账号的FTP服务器
- python方法测试怀孕,Python unittest模拟:是否可以在测试时模拟方法的默认参数的值?...
- JavaWeb——jsp原理
- 带进度条的Flash多文件上传面板(SwfUploadPanel) (转载)
- 关于recycle.exe病毒的查杀
- 028_adblock
- php文章排序,php实现的常见排序算法汇总
- CentOS下查看电脑硬件设备属性命令
- 博弈论(初级)——数学知识(C++)
- 2020平行驾驶与矿山无人化驾驶
- 【matlab教程】18、删除变量
- 如何快速干净彻底的卸载Oracle11g
- 一篇标准的审稿意见回复(Response to reviewer)是什么样的?
- NeatUpload 网络上传大文件的web.config配置问题
- r2000s_昭阳R2000S笔记本一键重装win7系统教程
- 【无标题】怎么申请3A认证?
热门文章
- 使用Ant Design 和Vue,React中后台开发套餐
- Linux基础命令---文本显示more
- Nginx安装echo模块
- Linux下巧妙使用邮件服务器之postfix(认证+web)
- Linux+db2+was部署问题总结
- oracle rman 跨版本恢复 11.2.0.3- 11.2.0.4
- ASP.NET MVC Unobtrusive JavaScript 实现 onfocusout 验证, onfocusin 清除错误
- epoll 使用详解
- 性能测试中用LambdaProbe监控Tomcat
- kafka同一个gruopid下多个consumer订阅同一个topic,只有一个consumer能消费到数据