写点什么

从有到优:百度前端接入技术的升级之路

2016 年 1 月 18 日

在 1 月 16 日,由百度开发者中心和InfoQ 联合主办的“纵谈前端接入技术、SEO 和安全运维”主题沙龙活动中,来自百度开发者中心的资深运维工程师们热情洋溢的分享了百度在前端技术、搜索速度优化和全站使用HTTPS 技术的进展及成果,以及百度在这些方面有哪些宝贵经验可供参考的。演讲嘉宾分别为百度Golang 委员会成员陶春华、专注于网页搜索无线访问速度的工程师许霞,和处理网页搜索可达性、安全搜索等方向事务的主要技术负责人陈曦洋。

Go 语言在 Baidu Front-End 方面的应用实践

Go 语言的广泛流行取决于部署简单、并发性好、良好的语言设计,以及执行性能好。这也是在重写百度前端这一项目上为什么考虑选用 Go 语言的原因所在。陶春华老师介绍说,促使重写 Baidu Front-End 的诱因主要基于以下三点:一是修改成本高。事件驱动的编程模型本身的编码和调试难度都很大;C 语言本身的难度和开发效率有很多限制。二是配置管理方式落后。为单产品线设计,无法支持平台化要求;配置变更(修改、重载、验证)能力差。三是变更和稳定性的矛盾。例如程序出 core 也是比较头疼的事情。

在此前提之下,团队决定使用 Go 语言来重写前端,但是这里也遇到了一些问题,那就是 GC(Gabage Collection)本身难以避免的时间延迟。BFE 的需求是要在 1ms 以内,最大不超过 10ms,一旦超过这个平均值,那么用户体验将大打折扣。而 Go-BFE 实测 100 万连接,400ms GC 延迟。这就需要不断的对 GC 进行优化。

在这里陶老师也介绍了两种优化思路,第一个常见的方法就是将扫描的小对象合并成大对象,利用 Array 来合并一组对象。第二种方法精算性更高一点,可以把消耗内存较多的内容放到 C 里面,因为 Go 语言有一个 CGO 接口,直接通过 Go 调到 C 可以解决这个问题,只不过代价比较大。但是,问题和方案永远是相生相伴的。用 Array 技术重写网络库,所有的 BFE 将永远用 Array 来写,理论上可行。这里的问题又来了,第一风险太大,第二如果 Go 语言升级了,还能不能继续使用下去。

陶老师在这里介绍的解决方法叫做车轮大战。即,在一组工作进程中,进程和服务是等价的,某一个进程跟服务运作到一定时间之后关闭 GC,让它休息,第二个进程代替它服务,以此轮换,构成一个车轮大战的局面。如果在不能直接解决 GC 问题的时候直接关掉服务,然后绕过它。这基本的方案思路也就是关闭继承多进程的轮转战。(如上图)

搜索速度优化的前进之路

在整个百度接入服务里,百度搜索一直秉承提供最基础的三个保障,那就是安全、快速、可靠。许霞首先介绍说,在对速度进行度量之前,先要对数据检测、收集。对客户端数据监测的特点是:可以检测任何对象,成本高,并且监测的指标很固定。JS 埋点检测数据的特点是:可以检测任何指标,甚至可以检测每一条结果的速度。第三方数据检测的特点是:可以定制,并且有一定的海外监测能力,但成本高。

收集数据的意义在于可以很清晰的了解掌握用户的搜索习惯,这对 PV、UV 以及变现收入有很大影响。那么如何贴切搜索引擎的特点做搜索速度的优化?通过三个方面:接入质量提升、后端处理优化和前端渲染优化。接入质量提升主要有两个考察因素:延迟和带宽,对应的也就是优化 RTT 和传输效率。

后端优化其实就是整个搜索引擎的优化了,分为缓存优化和检索优化。缓存优化最基础的方式就是进入、淘汰机制等等,保证淘汰机制是最合理的。检索优化,则需要对硬件以及硬件方案的选择做一些深入考虑。在前端渲染优化方面,除了考虑节省时间之外还要考虑怎样让它定性化。

对优化做决定性决策只是其中的一种方法,还有更聪明的创新方法,那就是关于无线技术。这里面所涉及的内容包括手机终端、机站以及 IP 网络,传输速度当然是跟这三者有密不可分关系的。机站会根据自己能获得多少收益来处理用户的请求,尽量会缩小头部信息,进行一定程度的数据压缩。手机跟机站之间建立连接以维持这种连接关系。但电耗大是很关键的问题。百度搜索做了维持连接的一些机制,当用户页面空闲很长时间或者放在后台,就可以减少电量的消耗。(如上图)

全站 HTTPS 能否确保网站彻底安全?

2015 年 3 月,百度搜索成为国内首家完成全站 HTTPS 改造的大型站点;且目前来看,全站 HTTPS 已经成为百度产品的首要标准;同时,统一接入平台也大幅提升了 HTTPS 的接入效率和性能。陈曦洋老师在开讲前是这样介绍大背景的。全站 HTTPS 的原因是为了让用户保持良好的使用体验,解决反馈较多的劫持和隐私泄露等问题。这些问题的具体 case,包括页面被加上 URL 参数,不停刷新;页面被 DNS 劫持到其他网站;用户手机号码遭泄漏;白页,搜索功能异常等等。正是出于对用户数据的安全保密,维护网站正常运作的考量,百度专门成立了由百度搜索和运维部组成的 HTTPS-SUPPORT 团队,对 HTTPS 进行深入研究,提供完整的服务,保障用户正常访问百度原始产品。

陈曦洋老师在这里详细介绍了全站 HTTPS 改造的成本,这也是很多人都比较关心的焦点问题,这不仅涉及到证书的部署,还会涉及到激增的计算量,需要多次协商和握手,而用户端搜索的延迟将会给 HTTPS 改造需要解决的问题。除此以外,对于一个大型网站而言,架构如何解决多业务部署 HTTPS 的问题,巨大的页面和模板数量,以及如何解决实际部署中的各种问题,让用户无损 / 平滑的完成切换,其实是更具有挑战性的工作。

计算性能涉及到密钥(证书)的长度,1024 和 2048 位在性能有什么差别呢?原来使用 HTTP 协议的时候,假设 cps 可以达到 2w+,而转换成 HTTPS 之后,cps 只能达到 2-3 千;在访问速度方面,使用了 HTTPS 之后,不做任何优化,访问百度的速度可能会恶化 250-500ms, 一些设计比较差的页面可能会恶化 500-1200ms;在架构和产品成本方面,对于百度这样的综合性网站,牵一发而动全身,仅仅是在页面形式上就要改大量的模板,成本相当大。

那么有没有可选的优化方案呢?陈老师认为,性能优化上优先使用 ECC。这里使用 ECC 密钥长度大小要比 RSA 和 DH 密钥长度短。在硬件的优化上则可以使用硬件加速卡,可以做 TLS 的远程卸载 (小型站点在不面对大量的恶意请求时 完全可以通过纯软件卸载, 只需要保证连接复用率)。在访问速度上的优化上,通过复用连接和协议优化可以尽量减少握手次数,就可以让它接近于原始 HTTP 的性能。怎么去减少握手次数?比如 Session cache 和 Session ticket 可以极大的减少用户在一定时间内再次访问时的计算开销,而 HSTS 能在浏览器内部完成 HTTP 到 HTTPS 的跳转,不再经过一次网络传输和浏览器开销。另外还可以用 SPDY-HTTP2 方案,优点是基于单连接,能进一步提升连接复用比例,协议支持 header 压缩,在无线网络下有重要意义,这些都可以提高访问速度。

除了对协议层进行优化之外,也可以在应用层做些优化,预连接就是一个很好的优化方案。比如在网页端或者客户端,用户发起访问请求之前提前把这个握手过程完成,减少延迟,这一点也很重要。另外陈老师建议站点在发展到一定规模时一定要做整体的接入规划,控制域名数量,一些服务需要变成公共的,比如图片,静态资源的存储和访问。

在最后,陈老师也回答了大家普遍比较关心的问题,那就是使用 HTTPS 就代表着绝对安全吗?事实上并没有绝对地安全,代码是人写的,很多问题都是实际的实现上或者依赖的其他环境上出现了漏洞,OpenSSL HeartBlood 就是最典型的案例,甚至连随机数的生成和一些加密算法上也可能有人为埋下的漏洞,CDN 回源这样的路径很多情况下也是使用的 HTTP。百度使用 HTTPS 只能保护用户在浏览百度产品的时候的安全,但是很多手机号的泄露是第三方站点导致的 (它们会通过非法渠道购买识别用户手机号的服务),这个问题并不能通过百度的 HTTPS 解决。但是相对于 HTTP,HTTPS 的安全防范性能更高,增加了坏人的做恶难度。

-------------------------------------------------------------------

百度开发者中心是百度为企业和个人开发者提供学习、交流、合作和服务的开放平台,汇聚了百度所有对外开放的技术、平台和服务,提供产品孵化、研发支持、运维托管、统计分析、分发推广、换量变现等全方位服务和支持。通过百度的技术开放、搜索推广和应用分发能力,助力开发者加速成功,实现开发者、消费者和百度三方共赢。

2016 年 1 月 18 日 19:162210
用户头像

发布了 96 篇内容, 共 30.1 次阅读, 收获喜欢 73 次。

关注

评论

发布
暂无评论
  • 使用 URL Scheme 进行 App 间的唤起和通信

    2019 年 7 月 15 日

  • 为何巨头都倾向选择 QUIC 协议?

    提出了更高要求。kQUIC。已突破千万量级。协议存在的不足,快手是如何进行适配改造的?协议在不同企业、不同场景下该如何应用?

  • 百度开发者大会:愿与开发者合作共赢

    2012年3月23日,百度开发者大会在北京国际会议中心召开。在这次以“应用万象,云创未来”为口号的大会上,百度正式发布了云战略,推出百度开发者中心,建立开发服务、运营服务、渠道推广及变现四大体系,以此联合构建开放的云应用和平台生态系统。同时,还发布了个人云存储、移动云测试中心等面向开发者的一系列新产品与服务。

  • StackOverflow 转向默认使用 HTTPS

    StackOverflow的首席架构师Nick Craver发表了一篇博文,宣布StackOverflow迁移到HTTPS。在该过程中,他们经历了一些技术挑战,包括对数百个域的支持、URL迁移、用户生成内容处理,以及如何达到网站所需的严格性能需求。

  • 百度 App 网络深度优化系列(番外篇):IPv6 下 Happy Eyeballs 的最佳实践

    本文是百度网络优化系列文章的番外篇,该文深入探讨了复杂环境下v4和v6 IP选取的问题。

  • 百度开源项目 brpc 进入 Apache 孵化器

    InfoQ记者从百度开源社区获悉:Apache基金会今日凌晨投票结束,baidu-rpc进入Apache孵化器。

  • 网络优化(中):复杂多变的移动网络该如何优化?

    今天我们一起来看一下,如何让我们的应用在各种的网络条件下都能“快人一步”。

    2019 年 1 月 22 日

  • MIP、PWA、WebGL、HTTPS,来看 Web 生态的领先技术

    作为互联网的基础载体,Web站点具有开放性、跨平台性的优势。4月22日,由百度开发者中心主办,极客邦科技承办的第70期百度技术沙龙圆满结束,沙龙的主题围绕Web技术生态,邀请了百度技术专家现场分享了百度在这方面的技术成果,和最优的实践案例。

  • 手 Q iOS 客户端性能监控和优化实践

    演讲嘉宾罗鑫(rosen),腾讯手Q客户端基础平台团队高级工程师。2015年加入腾讯,一直从事手Q iOS客户端性能相关的监控和优化工作,在卡顿、内存、发热耗电等移动终端性能优化方面有丰富的实践经验,目前负责手Q iOS客户端基础性能监控优化以及编译效率提升的工作。内容介绍随着手Q iOS客户端App越来越庞大,手Q在性能方面面临的挑战也愈发严峻,诸如App越来越卡顿、内存占用越来越大、发热耗电等等这类问题都严重影响着用户体验。为了保证手Q的性能体验,我们针对这几类问题分别进行了深入优化,最终构建了一套比较完整的移动客户端性能监控组件( rainbow ),本次分享将重点介绍我们在实践过程中的干货技术内容。

    2019 年 7 月 24 日

  • HTTP 将死?又拍云布局 HTTPS 护航网页安全加速

    从长远上看, HTTP协议与日益庞大的互联网安全传输需求越发不对等。因此“HTTP将死”的言论甚嚣尘上,而近期chrome浏览器将为全部HTTP网站标注为不安全的传言进一步推动HTTP协议向HTTPS协议迁移的变革。

  • 百度应用层智能网络演进

    从PC时代主要从服务端提升访问质量,到智能调度流量,演进到移动智能时代,将接入控制能力延伸到终端。百度基础技术通过提供完整解决方案,实现了访问全链路优化。

  • 浅谈推进有赞全站 HTTPS 项目 - 工程篇

    本文出自《有赞技术2018年度合集》系列

  • 百度小程序框架性能优化实践

    移动互联网中 Native App(NA) 和 H5 一直处在博弈状态,在性能体验和灵活性上艰难寻找着平衡,单从技术上来说,小程序就是 NA 和 H5 的又一次碰撞。小程序的灵活性已被证实,在性能方面,百度智能小程序从框架启动、小程序包下载、小程序包加载以及渲染等 4 个方面进行了启动速度优化。

  • 爱奇艺 APP 极致体验之路

    演讲嘉宾 陈杉,爱奇艺移动客户端技术总监。 内容介绍 移动互动网的发展已经从早期拼速度,拼商业模式创新进入了拼体验,拼内功的下半场,爱奇艺APP为了能够在激烈竞争的中国移动视频行业脱颖而出,在打造极致用户体验方面投入了极大的精力,通过本次演讲,希望分享爱奇艺APP的一些经验和心得。 演讲大纲 什么是极致的用户体验; 移动开发全程监控; 基础体验 VS 业务开发 ; “动态化”与基础体验的平衡; 移动监控智能化尝试; 爱奇艺APP性能优化实践二三事:功耗,开播速度,包大小等。

    2018 年 9 月 12 日

  • 百度 HTTPS 性能优化经验

    今天将为大家介绍百度在访问速度、计算性能、安全等方面对HTTPS进行优化的经验方法。

  • 如何利用 OAuth 2.0 协议实现服务访问授权?

    在微服务架构下,服务的访问安全常常被开发人员所忽视。而服务访问安全又是一个综合性的话题,涉及设计、授权、认证等多个维度。本课程将系统介绍如何基于OAuth 2.0协议对服务的访问过程进行授权。我们将基于Spring Cloud这一业界主流的微服务开发框架,介绍OAuth 2.0协议的使用方法,并通过案例给出应用实践。讲师介绍郑天民,网名天涯兰,资深技术专家,TGO鲲鹏会会员。日本足利工业大学信息工程学硕士。10余年软件行业从业经验,主持过多个面向研发人员的技术和管理类培训课程。IT畅销书作译者,著有《系统架构设计》《Spring响应式微服务》《微服务设计原理与架构》《向技术管理者转型》等书籍。

    2020 年 10 月 30 日

  • 浏览器优化:如何对 JS-SDK 进行优化?

    2019 年 12 月 26 日

  • Golang 和 HTTPS 在网站前端接入里的作用

    网站前端架构技术一直在不断的优化,而要做到全栈优化,就必须要运维、后端架构研发、前端模板渲染研发、系统和网络等各个部门的协作。同时,安全又是网站建设话题中避不开的梗,从2015年年初开始,HTTPS安全协议就已经遍布各大网站的网址里了,而百度是国内第一家推行全站HTTPS的大型网站,这其中就有很多关于站内优化和站内安全的经验分享。

  • 从有到优:百度前端接入技术的升级之路

    搜索速度直接关系到用户体验的好与坏,安全也是网站建设中避不开的梗,百度作为国内第一家推行全站HTTPS的大型网站,这期间遇到的坑也不少。百度前端专家将从HTTPS协议、优化与提升等方向介绍百度在多年的网站运维方面的经验历程。

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

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

发现更多内容

架构师训练营-食堂就餐卡系统设计

彭灵俊

极客大学架构师训练营

第一次课作业

lai

作业2-学习心得

蒜泥精英

Lesson 1 架构师如何做架构 心得笔记

edd

编程好习惯 极客大学架构师训练营 架构总结

食堂就餐卡系统设计

Acker飏

极客大学架构师训练营

聊聊架构师

Jerry Tse

随笔杂谈 极客大学架构师训练营 作业

架构文档编写

金桔🍊

第一节课的总结

王锟

作业1:食堂就餐卡系统设计(UML)

蒜泥精英

编译运行Zookeeper源码

CoderLi

Java zookeeper 程序员 源码分析 后端

架构师训练营 Week 01 学习总结

Kun

极客大学架构师训练营

架构师训练营第0期-第1周-作业一

极客大学架构师训练营

【第一周】学习总结——架构方法、软件建模与设计文档

三尾鱼

极客大学架构师训练营

什么叫架构师

平淡人生

极客大学架构师训练营

食堂就餐卡系统设计(第一周)

食堂就餐卡系统架构视图

行下一首歌

极客大学架构师训练营

食堂就餐卡系统设计

八两

就餐卡系统设计

平淡人生

极客大学架构师训练营

实例学习绘画UML图

张瑞浩

第一课 架构师的自我修养

Geek_bobo

就餐卡系统架构设计

祝好

架构师训练营第0期-第1周-作业二

极客大学架构师训练营

关于架构师这个角色的感悟

祝好

什么是架构师?

呆呆栋

食堂就餐卡系统架构设计

~就这样~

就餐卡设计文档

chengjing

架构师训练营-学习总结

~就这样~

就餐卡系统(时间太紧张,阅读了很多,我转载的这篇)

王锟

作业一:食堂就餐卡系统设计

独孤魂

极客大学架构师训练营

架构方法学习小结

行下一首歌

极客大学架构师训练营

架构师训练营第01周——UML练习

李伟

极客大学架构师训练营

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

从有到优:百度前端接入技术的升级之路-InfoQ