阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

评论

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

技术招聘常被吐槽,企业应该考虑好这一点

李忠良

28天写作

28天瞎写的第二百二十六天:TechCrunch Hackathon 的故事

树上

28天写作

项目管理系列(8)-从0到1搭建PMO(一)

Ian哥

28天写作

2050年的一次出游 (28天写作 Day15/28)

mtfelix

自动驾驶 28天写作 科幻写作

【高并发】ReadWriteLock怎么和缓存扯上关系了?!

冰河

并发编程 读写锁 高并发 ReadWriteLock 签约计划第二季

共识算法的简单理解(一)

石君

28天写作

关于“为更新而更新”的一种新的理解

Nydia

HTML(六)——html表单

程序员的时光

程序员 大前端 七日更 28天写作

史上最全!阿里巴巴2021年最新最全500道Java后端面试大全(值得收藏)

Java 编程 程序员 面试

week9-conclusion

J

5G最核心的本质是能力可被编排及开放

JiangX

5G 数字化转型 28天写作

soul 数据同步(三)http长轮询 同步策略

xzy

产品质量管理活动流程

L3C老司机

历史上的今天

IT蜗壳-Tango

七日更

大数据知识专栏 - Hadoop的资源管理 Yarn介绍

小马哥

大数据 hadoop YARN 七日更

惊悚,单个java进程占用700%的CPU

万里无云

Java 后端 cpu

深度 | 阿里云蒋江伟:什么是真正的云原生?

阿里巴巴云原生

云计算 容器 运维 云原生 k8s

2020 总结 | VoltDB的亮点,你了解多少?

VoltDB

数据库 物联网 VoltDB

用docker-compose快速部署ChirpStack

远鹏

Docker-compose IoT ChirpStack LoraWan Go 语言

无代码、Excel与Airtable

lidaobing

低代码 Excel 无代码开发 28天写作 Airtable

厉害!腾讯T3-2都还在学的微服务+MySQL+Kafka+boot2.x+虚拟机PDF

Java架构之路

Java 程序员 架构 面试 编程语言

一个系统小BUG修复投产居然花了3个小时来处理(上)

罗小龙

28天写作 投产事故 解决思路

人设崩塌的美国生物实验室

脑极体

从零开始学java第一天(为报训练营做准备)

落曦

疫情闭关修炼半个月,我竟把JDK源码都读懂了!

996小迁

Java 编程 架构 面试 程序人生

Windows AD 是否开启或者关闭了UAC服务

BigYoung

windows Windows 10

你有多久没去看海了呢「幻想短篇 15/28」

道伟

28天写作

如何开发一个完善的Kafka生产者客户端?

码农架构

kafka 架构 中间件 消息中间件

week9-homework

J

【并发编程的艺术】JVM内存模型

程序员架构进阶

架构 Java内存模型 Java虚拟机 28天写作

区块链数字货币钱包系统软件开发|区块链数字货币钱包APP开发

系统开发

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