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下的这盘“小”棋相关推荐

  1. 小米携手联芯 是为了下多大一盘棋?

    在小米刚刚举行的发布会上,其实最关键的产品只有两个,分别为一大一小--55英寸小米电视2和红米2A.这其中,红米2A带给市场的冲击更大,毕竟其在米粉节当天的售价只有499元.这意味着小米凭借红米2A直 ...

  2. 如何从Android Studio手中救下你可怜的小C盘_莫韵乐与bug的奇幻冒险

    如何从Android Studio手中救下你可怜的小C盘 在我们使用Android Studio的时候,我们会出现这样的问题 我应该怎么样将Android Studio的用户数据转移到其他盘里面去呢? ...

  3. 最懂商用车的狮桥,在智慧物流上下了一盘什么棋?

    文/陈壹 来源/智能相对论(aixdlun) 智慧物流要由量变走向质变,离不开相关技术的突破,比如5G.大数据.人工智能等,尤其是干线物流中的自动驾驶货车.支线物流中无人机送货等何时能大批量商业化落地 ...

  4. 如何在linux中使用u盘,如何在Linux系统下使用U盘

    如何在Linux系统下使用U盘 Linux系统中U盘被视为SCSI设备, SCSI设备对应的设备文件格式为"sdX" 系统中的第一个SCSI设备表示"sda", ...

  5. 0基础快速开发口袋网盘小程序

    点击观看大咖分享 口袋网盘小程序使用的是小程序的云开发,云开发自带免费的云存储.云数据库,开始时不需要涉及服务器的搭建及运维,也不需要进行域名注册与备案,只需要通过一些简单的API就能实现一个完整项目 ...

  6. 软件:股票小助手/盯盘小助手!

    软件:股票小助手/盯盘小助手 功能: 1.隐蔽,能和常用工作软件融为一体,即使被领导同事看见屏幕,也察觉不了: 2.能实时更新数据,不能有更新频率限制: 3.能设置目标上限,下限价,达到目标后已隐蔽的 ...

  7. xp下u盘安装linux双系统,在XP下用U盘安装Ubuntukylin到硬盘的方法(双系统共存)...

    主要面向对象是内存2G以下的老旧电脑,才用xp系统,新电脑的话都是windows 8.1系统了. 一.首先是磁盘分区: 右键我的电脑--管理--磁盘管理,将xp系统下的硬盘分一个10G左右的空间出来( ...

  8. 为什么程序下在其他盘,c盘空间还是增多了?appdata文件夹有什么用途?

    为什么程序下在其他盘,c盘空间还是增多了? 程序下载安装在其它盘,代表着程序的源代码和运行文件在其它盘,然而你要去调用它,Windows就会在Appdata下去生成这个程序的启动文件夹. 同时wind ...

  9. linux命令行下读取u盘内容_Linux系统下使用U盘的方法

    在linux系统之中, 一切设备皆文件, 所以我们的U盘也是一个文件.磁盘设备被抽象成sda文件, U盘设备被抽象成sdb文件. 1.查看所有的设备文件. 在linux的文件系统中, /dev中存放着 ...

最新文章

  1. lists,tuples and sets of Python
  2. 百胜软件2016年双十一项目正式启动
  3. 全球及中国家电用PET薄膜涂层钢卷市场前景形势与未来竞争规模展望报告2022版
  4. 《刺激战场》正式停服!换了个马甲又来了 开启收费变现模式?
  5. Pure-Ftp:基于虚拟账号的FTP服务器
  6. python方法测试怀孕,Python unittest模拟:是否可以在测试时模拟方法的默认参数的值?...
  7. JavaWeb——jsp原理
  8. 带进度条的Flash多文件上传面板(SwfUploadPanel) (转载)
  9. 关于recycle.exe病毒的查杀
  10. 028_adblock
  11. php文章排序,php实现的常见排序算法汇总
  12. CentOS下查看电脑硬件设备属性命令
  13. 博弈论(初级)——数学知识(C++)
  14. 2020平行驾驶与矿山无人化驾驶
  15. 【matlab教程】18、删除变量
  16. 如何快速干净彻底的卸载Oracle11g
  17. 一篇标准的审稿意见回复(Response to reviewer)是什么样的?
  18. NeatUpload 网络上传大文件的web.config配置问题
  19. r2000s_昭阳R2000S笔记本一键重装win7系统教程
  20. 【无标题】怎么申请3A认证?

热门文章

  1. 使用Ant Design 和Vue,React中后台开发套餐
  2. Linux基础命令---文本显示more
  3. Nginx安装echo模块
  4. Linux下巧妙使用邮件服务器之postfix(认证+web)
  5. Linux+db2+was部署问题总结
  6. oracle rman 跨版本恢复 11.2.0.3- 11.2.0.4
  7. ASP.NET MVC Unobtrusive JavaScript 实现 onfocusout 验证, onfocusin 清除错误
  8. epoll 使用详解
  9. 性能测试中用LambdaProbe监控Tomcat
  10. kafka同一个gruopid下多个consumer订阅同一个topic,只有一个consumer能消费到数据