写点什么

HTTP/2 in GO(五)-- 大结局

  • 2019-11-18
  • 本文字数:1859 字

    阅读完需:约 6 分钟

HTTP/2 in GO(五)--大结局

本章作为一个收尾,我来谈一些自己对 HTTP/2 的理解,以及 HTTP/2 的应用前景展望。


通过前边四章,我们了解了 HTTP/2 的特性,以及如何在 Go 中利用 HTTP/2 的相关特性进行一些开发工作。本章作为一个收尾,我来谈一些自己对 HTTP/2 的理解,以及 HTTP/2 的应用前景展望,个人观点,不一定对,欢迎大家留言讨论。


先回顾下:

HTTP/2 新特性

  • 二进制分帧(HTTP Frames)

  • 多路复用

  • 头部压缩

  • 服务端推送(server push)


HTTP/2 通过多种多种技术手段(如:多路复用,头部压缩,优先级等),极大的优化了 HTTP 的 C/S 双端的数据交互体验,解决很多以往 HTTP/1.1 协议本身不能解决的问题。

HTTP/2 的优势

  • 低延迟的内容传输(多路复用,优化 RTT)

  • 带宽占用减小(头部压缩,编码,HPACK)

  • 连接数减少(多路复用,二进制分帧)


先来看下带宽和延迟对页面加载的影响,数据来源:HTTP/2 is here, let’s optimize! - Velocity SC 2015



  • 在 5M 以下的带宽内,对页面加载速度影响较大,5M 以上的带宽,对页面加载速度影响较小。

  • 延迟的减少对页面加载时间的提升呈线性增长


目前国内及一些发达国家,家庭带宽普遍也能达到 5M 以上了,所以 HTTP/2 即使减小了带宽占用,对我们 WEB 业务来说,提升也非常有限,收益不可观。但如果换一个角度来说,HTTP/2 减小了带宽占用,那么对国内的网络基础设施,甚至是跨洋光纤来说,要求都会降低,也相当于变相提升了网络基础设置的品质。对那些像 CDN 这种靠带宽来收费的场景来说,减小带宽也会减小成本(特定场景,不一定所有的 CDN 场景都能减小带宽占用)。


RTT 的优化导致延迟的减少,应该能极大程度上提升一些用户体验,这点看起来收益应该会比较明显,可事实又会怎样呢?程序猿们的智慧不可小觑,在 HTTP/1.1 阶段虽然不能通过多路复用来减少 RTT,但是我们可以用连接并发啊。页面内的资源链接放到不同的域名下,单个域名连接数有限制就用泛域名分散-Domain sharding 下。如果是 icon 这种小图标,资源太多又导致页面内链接太多,那就用雪碧图-CSS Sprites 啊。所以,经过这么一折腾,HTTP/2 减少 RTT 的优势也不存在了。


最后一点就是连接数的减少,这个是有绝对的优势了,之前 HTTP/1.1 甚至都通过增加连接数来优化页面性能。但这点优势也无非就是减少一些服务端的压力,对用户体验没有什么提升。对于不差钱的互联网公司门来说,减小的那一点压力还不至于去大动干戈。


HTTP/2 的 Server Push 功能,看起来能加速资源的获取速度,可是在目前的互联网环境下,大家都是把静态资源放到独立的域名,利用 CDN 进行加速,不会占用自己的服务带宽;CDN 拥有更多的服务节点,比服务本身能提供更好的接入和访问效果,所以目前看起来 Server Push 也没有很好的用武之地。即使要使用 Server Push,服务端也要关注客户端的 Cache,避免重复推送,浪费带宽,这点也还没有很好的服务端生态来解决。


另一个是关于 HTTP/2 服务的七层反向代理,当我们希望在一些网关对业务进行一些基础逻辑的处理时,需要使用这个。但由于 HTTP/2 引入了 Stream States,这个流程略显复杂,相当于针对客户端和服务端要维护两套不相同的状态,使得这个七层代理的实现也有一些难度。Nginx 官方也暂时不计划在 Proxy Module 中支持 upstream 的 HTTP/2,因为他们认为 HTTP/2 在性能的提升上,对 proxy 上的使用没有收益,甚至可能有反作用; 而且实现该功能,需要重写 upstream 模块,没有收益 + 工作体量大,就更没有必要去做了。nghttp2 应该是当前最完善的 HTTP/2 相关的组件了,但是其实现的代理 nghttpx 对 HTTP/2 代理也只实现了部分功能,无法代理实现 Server Push。


下图是通过配置了 nghttpx 的 http2-proxy 后,通过我们前边的 GO 代码实例,访问/push,返回的不支持 Server Push:



最后做个总结,我个人的意见是:HTTP/2 有优势,但其优势对现在通过应用层优化后的 HTTP/1.x 来说,优势没有那么大,并且,如果要发挥 HTTP/2 的优势,就必须将之前在 HTTP/1.x 阶段做的很多事情进行"回退",这种吃力并且讨不到什么好处的事情,大家没有动力去做。所以,可以预见的是,短时间内,HTTP/2 还是不会得到大范围的应用。但是随着国外一些互联网巨头们的带动,提供越来越多的可以便捷的使用 HTTP/2 的生态工具,HTTP/2 终究还是会发展起来的,毕竟它的优势还是存在的。


当前时间:2018 年 08 月 25 日 21:36:22,给 BAT 三家的首页截了个图,可以看到,都还是 HTTP/1.1,并没有启用 HTTP/2.(但起码都是 HTTPS 了>_>)





本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/qaqN4Eqndjg95TPBOC4d_g


2019-11-18 22:59707

评论

发布
暂无评论
发现更多内容

递归算法的三个定律是什么?

InfoQ IT百科

计算单链表的长度。

InfoQ IT百科

国厂自研的操作系统都有哪些?

InfoQ IT百科

什么是完全二叉树?

InfoQ IT百科

阿里云数字化安全生产平台 DPS V1.0 正式发布!

阿里巴巴云原生

阿里云 云原生 数字化 安全生产平台

EventBridge 集成云服务实践

阿里巴巴云原生

阿里云 云原生 事件总线 EventBridge 事件源

玩转小程序压测

阿里巴巴云原生

小程序 阿里云 云原生 压测 PTS

在Windows中,当一个应用程序窗口被关闭,该应用程序将会保留在哪里?

InfoQ IT百科

什么是“哈希算法”?

InfoQ IT百科

给定两个字符串s和t,判断这两个字符串中的字母是不是完全一样。

InfoQ IT百科

进程主要由哪几个部分组成?

InfoQ IT百科

单调栈与栈的区别是什么?

InfoQ IT百科

输入一个链表,输出该链表中倒数第k个结点。

InfoQ IT百科

动态重定位需要由什么来实现?

InfoQ IT百科

netty系列之:netty中常用的对象编码解码器

程序那些事

Java Netty 程序那些事 4月月更

CPU散热器是电脑标配吗?

InfoQ IT百科

中关村e谷为产业搭台:中关村论坛(空天专场)黑科技亮相现场

联营汇聚

数组去重的5种方法是什么?

InfoQ IT百科

加密算法有哪几种?

InfoQ IT百科

微服务架构设计实践

鲁米

微服务架构

消息传递通信的实现方式?

InfoQ IT百科

计算机操作系统最基本的特征是什么?

InfoQ IT百科

什么是满二叉树?

InfoQ IT百科

如何判断两个字符串是否互为回文?

InfoQ IT百科

易捷行云EasyStack 加入龙蜥社区,共同打造多样化算力创新云平台

OpenAnolis小助手

云计算 开源 龙蜥社区 CLA 易捷行云

Plato Farm 的MARK 处于永远通缩,经济模型解析

西柚子

大咖说 X 对话开源|论数据库人才发展战略

大咖说

数据库 阿里云 科技

图数据库|如何从零到一构建一个企业股权图谱系统

NebulaGraph

数据库 知识图谱

算法的五大特征是什么?

InfoQ IT百科

易周金融观点 | 个人养老金制度正式出炉;居民贷款延期还款政策密集落地

易观分析

银行 养老金制度

企业知识管理平台的作用及功能

小炮

企业知识管理

HTTP/2 in GO(五)--大结局_文化 & 方法_付坤_InfoQ精选文章