千万级流量

全链路的视角上进行高性能的设计

前端优化

减少请求次数、页面静态化、边缘计算。

减少请求次数

  • 增加缓存控制:前端研发同学经常会设置 HTML 的缓存控制头部(Cache-Control 头),这样浏览器在请求同一个文件时,只访问本地保存的资源副本,从而加速文件的访问速度。

  • 减少图像的请求次数:你可能经常会发现,大部分网站会将所有用到的多张图片拼成一张,这样多张图片只需要下载一次,然后再通过 CSS 中的 background-image 和 background-position 来定位目标位置选择显示哪一张图片。

  • 减少脚本的请求次数:通用的做法就是 CSS 压缩和 JavaScript 压缩,将多个文件压缩成一个,目的是减少传输文件的大小,而更重要的是减少请求数。

而页面静态化就是缓存的一种方式

通常是将页面文件事先存储在 CDN 节点中,比如将商品详情页做静态化,就是将商品详情页的页面元素存储在 CDN 节点,然后所有请求就可以直接以由 CDN 来提供服务,就不会到达后端服务了,就减少了对后端服务的压力。

后端优化

基础设施层面、网络层面、架构层面

高性能设计中的“道”

清楚认知系统的硬性性能指标

四个系统设计的思考步骤

  • 明确指标: 比如当系统小于 100 万并发用户时,要保证系统的 TP 99 = 2s 。

  • 保护系统: 当系统的并发用户数量超过 100 万,要做到保证有 100 万用户的 TP 99 = 2s ,然后保护系统,并拒绝其他用户的连接请求。

  • 用户体验: 为了用户体验,要给系统承载容量外的用户提供优雅的体验,比如服务器排队机制,并附加具体、明确的信息提示。

  • 快速扩容: 这一步很容易被一些同学忽略,如今系统的性能指标还有一点就是贵在快速反应,比如能承诺出现流量压力时,可以在 3 分钟内完成扩容,并保证扩容后能承载的并发用户数量的 TP 99 = 2s。

 

  • 做好系统限流: 通过流量控制来保证系统的稳定性。当实际并发压力超过系统性能设计指标的时候,就拒绝新的请求的连接,让用户进行排队。

  • 做好快速扩容: 对于扩容能力,一般要储备额外的计算资源,用于不时之需,也就是事先通过预估流出一部分资源池。

  • 做好系统优化: 就是我在上面讲的前后端优化的技术点,我要再补充一点,对系统设计者来说,性能设计要贯穿于系统建设的始终。

 

  • 先落实到技术上,比如结合业务场景,识别系统最关键的服务,然后针对性地为关键服务进行性能设计与测试,确保关键服务没有问题,然后为非关键服务提供降级和熔断处理方案。

  • 再深化自己对于技术的理解,你要记住,任何复杂问题都可以按时间(系统建设周期)和空间(系统设计分层)拆解为简单的问题,然后逐一攻克,这样你才能有的放矢,这其中体现出来的思维能力才是每一个技术人的安身立命之本。

 

posted @ 2023-03-15 11:43  jiaozg  阅读(43)  评论(0)    收藏  举报