写点什么

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:59980

评论

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

怎么填充PPT底色?分享2个办公必备的PPT技巧!

彭宏豪95

职场 PPT PPT模板 办公软件 AI生成PPT

“SelectDB 实时数据仓库解决方案”入围工信部“信息技术应用创新典型解决方案”

SelectDB

数据库 大数据 数据仓库 云原生 信创

Cloud Kernel SIG 月度动态:发布 ANCK 3 个版本,5.10 kABI/kAPI 策略变更

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥社区SIG Cloud Kernel

说说RabbitMQ延迟队列实现原理?

王磊

Java 面试

本周五开讲!AI 时代的运维开发工具 OS Copilot 陪跑班,分享云上最佳实践案例

OpenAnolis小助手

Alibaba Cloud Linux OS Copilot 运维开发工具

企业全历史行为数据助ToB企业决策层开启营销的上帝视角

客户在哪儿AI

ToB营销 ToB增长 ToB销售

Python数据结构:字典详解(创建、访问、修改、字典方法)

我再BUG界嘎嘎乱杀

Python 编程 数据结构 后端 开发语言

玩转 Easysearch 语法

极限实验室

数据库 搜索引擎 easysearch 极限科技 征文系列

优秀Java 开发者都在参与的项目

XIAOJUSURVEY

maven 服务端 springboot Java 8

电商新时代,商家还能怎样赚钱?

自象限

告别 CentOS,开源操作系统与时代同步更需“根”的力量

OpenAnolis小助手

操作系统 龙蜥社区 CentOS 停服

腾讯特别调薪8%,年底十三薪分摊到月薪:福利升级还是另有深意?

王中阳Go

腾讯 面经

JDBC 最佳实践

FunTester

Python的众多包管理器

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言

轻松应用 RapidMiner 内置案例模板实现数据挖掘详解(下篇)

Altair RapidMiner

人工智能 数据挖掘 算法 数据分析 altair

高性能网络SIG月度动态:virtio技术委员会通过flow director提案,netdim调节特性正式合入上游社区

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥社区SIG

阿里云大牛熬夜整理的Python大数据小抄,GitHub星标125K!

我再BUG界嘎嘎乱杀

Python 大数据 编程 后端 开发语言

用这2款AIPPT软件,让你的Markdown生成PPT!

彭宏豪95

人工智能 PPT 在线白板 AIGC AI生成PPT

阶跃星辰启动「繁星计划」开放平台;运动迁移框架 MotionClone 无需训练,一键克隆视频运动丨 RTE 开发者日报

声网

22 位委员参会,第 25 次龙蜥社区运营委员会圆满结束

OpenAnolis小助手

操作系统 龙蜥社区

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