某大型政务网站的优化咨询案例(视频点播VOD+GZIP压缩+静态文件CDN+Redis缓存+全文索引)

news2024/11/20 3:25:32

2022年圣诞节到来啦,很高兴这次我们又能一起度过~

这次分享关于一个对某大型政务网站的优化咨询的案例,发生在今年的下半年,已过去一段时间,并取得了良好的成果!*

项目背景

某大型政务网站准备上线,需要应对总共500w左右的流量,首两日预计承受一百万左右的流量。

需求特点:

  • 一些静态文章
  • 一些静态资源
  • 需要播放多个50-100mb左右的视频文件
  • 纯供应商开发的网址
  • 未使用任何cms框架,目前所有资源和请求都是从项目中直接获取

说是要优化,其实不用想,就是假设各种缓存。

缓存设计

在这个场景中,我设计了三重缓存,

  1. 视频点播缓存,这个之前是要合并在CDN的,但是由于有更优的VOD方案,也就是上传视频之后,其他的交给VOD搞定,在文章中用js调用他们的视频播放器,如果简单又美妙的方式,谁不爱。
  2. 静态文件缓存,想js/css/img等资源文件,本质都是可以通过cdn缓存,这样减少服务器的压力,可以更多的去处理需要处理的请求。
  3. 数据缓存,一个是API需要改造支持多节点和多并发,然后就是针对热点数据进行缓存,对于非热点的动态数据则进行数据库查询,并建立合理的索引机制,网址大面积需要文本索引,所以全文索引很重要, 虽然没能改造为ElasticSearch,但是全文索引很加分。
  4. nginx反向代理开启GZIP压缩,压缩网站,减少流量,加快访问。

在这里插入图片描述
技术详解

一、NGINX代理与Gzip

NGINX是很强大的反向代理,使用的时候,可以进行项目分发, 例如有多个后端则设置多ip轮训即可。
然后开启GZIP压缩。

GZIP是网站压缩加速的一种技术,对于开启后可以加快我们网站的打开速度,原理是经过服务器压缩,客户端浏览器快速解压的原理,可以大大减少了网站的流量

Gzip配置参数

gzip on;  #是否开启gzip模块 on表示开启 off表示关闭
gzip_buffers 4 16k;  #设置压缩所需要的缓冲区大小
gzip_comp_level 6;  #压缩级别1-9,数字越大压缩的越好,也越占用CPU时间
gzip_min_length 100k;  #设置允许压缩的最小字节
gzip_http_version 1.1;  #设置压缩http协议的版本,默认是1.1
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;  #设置压缩的文件类型
gzip_vary on;  #加上http头信息Vary: Accept-Encoding给后端代理服务器识别是否启用 gzip 压缩

编辑配置文件

[root@linux /]# vim /usr/local/nginx/conf.d/www.conf
server {
  listen 80;
  server_name www.zhengkai.com;
  root html/bk;
  index index.php index.html;
  access_log /usr/local/nginx/logs/www.log ;
  include /usr/local/nginx/php/www.conf;
  include /usr/local/nginx/wjt/typecho.conf;
  gzip on;
  gzip_buffers 4 16k;
  gzip_comp_level 6;
  gzip_vary on;
  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
}

重载配置文件

/usr/local/nginx/sbin/nginx -s reload

检测Gzip是否开启

[root@linux /]#curl -I -H"Accept-Encoding: gzip, deflate" "https://www.zhengkai.com"

网页GZIP压缩检测

https://tool.chinaz.com/gzips/

二、VOD视频点播

https://cloud.tencent.com/product/vod
云点播(Video on Demand,VOD)为用户提供云端一体化音视频点播服务平台。用户可以通过本地上传/URL 拉取/API 上传/Web SDK/短视频 SDK/直播录制等多种上传方式将视频上传至云端,并对云端视频进行普通转码、极速高清、多码率转码、截图、视频加密、添加水印、识别等处理,处理完成的视频文件可通过腾讯云遍布全球的 CDN 节点完成加速分发。此外,结合云点播的超级播放器的多终端能力,提供完整可靠的数据质量和监控平台,同时云点播用户还可使用腾讯内容公众平台,小程序进行发布和推广,多分发路径使信息更易触达。
在这里插入图片描述

在这里插入图片描述
其实很多VOD平台都有类似的功能,工具需要选择即可。

对应的demo文档可以在https://cloud.tencent.com/document/product/266/58693 这找到

三、CDN静态内容分发

内容分发网络(Content Delivery Network)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。 CDN分担源站压力,避免网络拥塞,确保在不同区域、不同场景下加速网站内容的分发,提高资源访问速度。
在这里插入图片描述

CDN比较烦的就是需要绑定cdn域名,需要拥有域名控制权。

可以在代码里面设置一个开关,针对dev环境使用本地静态资源,针对prod环境使用cdn静态资源。目录结构保持不变即可。

支持js/css/img/png等静态资源文件,甚至一些静态html页面也能放上面,在大访问量的时候可以为网站分流超多的请求。
在这里插入图片描述

四、热点数据缓存

缓存数据库 Redis ,丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
在这里插入图片描述可以针对热点数据,例如电商中对订单/商品/分类数据做缓存,例如CMS网站中对分类/文章做缓存,达到加速的目的,那么访问文章的时候,根据id优先从缓存中加载,某些固定的滚动文章列表,也可以缓存起来(例如可搜索列表但是没有带搜索条件,只有翻页条件,则所有翻页的文章列数据都可以缓存起来,起到无条件默认加速,一旦有条件再进行动态查询。),首页绝大部分数据都可以缓存,这样打开首页的速度就会变得非常快。

缓存更新方面,一旦有文章编辑行为,则刷新对应的文章缓存和列表缓存。但是要注意缓存击穿和缓存雪崩的情况,合理的设置缓存即可。也可以设置定时器,在后半夜对所有缓存进行刷新。

by zhengkai.blog.csdn.net

五、全文索引优化

有ElasticSearch当然好,全文索引强大,但是没有也不用怕,在针对商品详情和文章详情这种情况,做个合理的全文索引优化就可以了,

全文索引(Full-Text Search)是将存储于数据库中的整本书或整篇文章中的任意信息查找出来的技术。它可以根据需要获得全文中有关章、节、段、句、词等信息,也可以进行各种统计和分析。

在早期的 MySQL 中,InnoDB 并不支持全文检索技术,从 MySQL 5.6 开始,InnoDB 开始支持全文检索。

在已创建的表上创建全文索引语法如下:

CREATE FULLTEXT INDEX full_index_name ON table_name(col_name);
MATCH(col1,col2,...) AGAINST(expr[search_modifier])
search_modifier:
{
    IN NATURAL LANGUAGE MODE
    | IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
    | IN BOOLEAN MODE
    | WITH QUERY EXPANSION
}

全文搜索使用 MATCH() AGAINST()语法进行:

  • MATCH() 采用逗号分隔的列表,命名要搜索的列。
  • AGAINST()接收一个要搜索的字符串,以及一个要执行的搜索类型的可选修饰符。

全文检索分为三种类型:自然语言搜索布尔搜索查询扩展搜索,我们默认采用Natural Language自然语言搜索将搜索字符串解释为自然人类语言中的短语。

SELECT
    count(*) AS count 
FROM
    `fts_articles` 
WHERE
    MATCH ( title, body ) AGAINST ( 'MySQL' );

上述语句,查询 title,body 列中包含 ‘MySQL’ 关键字的行数量。上述语句还可以这样写:​​​​​​​

SELECT
    count(IF(MATCH ( title, body ) 
    against ( 'MySQL' ), 1, NULL )) AS count 
FROM
    `fts_articles`;

上述两种语句虽然得到的结果是一样的,但从内部运行来看,第二句SQL的执行速度更快些,因为第一句SQL(基于where索引查询的方式)还需要进行相关性的排序统计,而第二种方式是不需要的。

还可以通过SQL语句查询相关性:​​​​​​​

SELECT
    *,
    MATCH ( title, body ) against ( 'MySQL' ) AS Relevance 
FROM
    fts_articles;

相关性的计算依据以下四个条件:

  • word 是否在文档中出现
  • word 在文档中出现的次数
  • word 在索引列中的数量
  • 多少个文档包含该 word

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/112268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

08-Golang中的运算符

[TOC](Golang中的运算符运算符介绍算数运算符基本介绍细节说明关系运算符(比较运算符)基本介绍细节说明逻辑运算符基本介绍细节说明赋值运算符基本介绍细节说明运算符优先级运算符介绍 运算符是一种特殊的符号,用来表示数据的运算、赋值和比较 1.算数运…

Vue事件处理的基本使用

前言 事件处理在vue中也是非常重要的一项技术,它类似于js的事件处理,但是也有不同,下面就简单介绍一下在vue中如何进行事件使用以及一些要点 1 事件基本使用 在这里我们使用单击事件为例,简单讲讲在vue中单击事件的编写以及细节…

最近面试遇到一个算法题,简单写一点。

第⼀题(必答) 请针对有重复数字的数组设计⼀个快排算法,⽐如:[34, 34, 89, 1, 1, 20, 12],排序后结果为 [89,34,34,20,12,1,1] 第⼆题(必答) 请利⽤Redis 实现⼀个通⽤分布式锁,并…

技术进步、研发计划启动及政策支持 共促我国合成生物学市场容量加速扩张

合成生物学是对生物体进行有目标的设计、改造乃至重新合成,这一名词最早出现于DNA重组技术发展的上世纪70年代。合成生物学汇聚并融合了生命科学、工程学和信息科学等诸多学科,在天然产物合成、化学工业、生物能源、生物医药等诸多领域有广泛的应用前景。…

【Animejs】——Anime.js照片墙案例实现

目录 一、实现的效果&#xff1a; 二、实现js的具体步骤 1、需要实现的逻辑梳理 2、切换风格的逻辑 三、完整代码&#xff1a; 用js编写使用animejs实现图片复杂的切换效果 一、实现的效果&#xff1a; 点击——> <——箭头&#xff0c;实现不同动画效果的炫酷切换 …

【小5聊】C++ 输入矩阵数字,然后回环方式输出

C 输入矩阵数字&#xff0c;然后回环方式输出 1、题目内容 输入 第一行是两个m和n&#xff0c;分别代表矩阵的行数和列数。 第二行开始输入对应矩阵 输出 第二行回转输出。 相邻的两个整数之间用一个空格分开&#xff0c;行尾无空格 样例输入 5 6 4 8 9 4 5 6 1 2 5 6…

控制算法-PID算法总结-从公式原理到参数整定解析

目录 一、控制系统 1.1控制系统的分类 1.2 性能指标 二、PID算法的起源及特点 三、PID应用 四、PID公式原理 五、PID源码 六、PID整定方法 6.1 经验法 6.2 衰减曲线法 6.3 响应曲线法 参考文献&#xff1a; 一、控制系统 1.1控制系统的分类 分为开环控制、闭环控制和…

Java 8 Stream 从入门到进阶——像SQL一样玩转集合

0.阅读完本文你将会 了解Stream的定义和它的特征了解Stream的基础和高阶用法 1. 前言 在我们日常使用Java的过程中&#xff0c;免不了要和集合打交道。对于集合的各种操作有点类似于SQL——增删改查以及聚合操作&#xff0c;但是其方便性却不如SQL。 所以有没有这样一种方式…

【每日一题Day66】LC1754构造字典序最大的合并字符串 | 贪心 双指针模拟

构造字典序最大的合并字符串【LC1754】 You are given two strings word1 and word2. You want to construct a string merge in the following way: while either word1 or word2 are non-empty, choose one of the following options: If word1 is non-empty, append the fir…

10.2、Django入门--前台管理

文章目录1、URLconf 路由管理展示首页2、视图函数处理业务逻辑展示书籍的详细页3、模板管理实现好看的HTML页面3.1 模板引擎配置3.2 模板语法&#xff1a;变量3.3 模板语法: 常用标签3.4 主页与详情页前端HTML设计常用的HTML编写基础标题标签列表标签图片标签链接标签表格标签表…

耗时二周,万字总结Maven简明教程,与君共勉!

什么是Mavne Maven 是一个项目管理工具&#xff0c;它包含了一个项目对象模型 (POM&#xff1a;Project Object Model)&#xff0c;一组标准集合。由于 Maven 使用标准目录布局和默认构建生命周期&#xff0c;开发团队几乎可以立即自动化项目的构建基础设施。在多个开发团队环…

代码随想录训练营第60天|LeetCode 84.柱状图中最大的矩形

LeetCode 84.柱状图中最大的矩形 双指针 注意&#xff0c;双指针解法可行&#xff0c;但是在力扣上提交会超时。 以heights[i]为中心&#xff0c;用两个指针向两边扩散&#xff0c;直到heights[left]和heights[right]小于heights[i]为止&#xff0c;这样就构成了以left和rig…

第11章_数据库的设计规范(理论了解)

第11章_数据库的设计规范 范式 2.3键和相关属性的概念 范式的定义会使用到主键和候选键&#xff0c;数据库中的键(Key)由一个或者多个属性组成。数据表中常用的几种键和属性的定义: 超键︰能唯─标识元组的属性集叫做超键。候选键︰如果超键不包括多余的属性&#xff0c;那…

基于HOG+LBP完成特征工程,基于机器学习模型同时完成人脸识别+表情识别

这周前两天有时间我写了一篇博文&#xff0c;基于LBP和HOG实现人脸好表情特征的提取计算&#xff0c;之后分别训练了人脸识别模型和表情识别模型&#xff0c;在推理阶段实现了单张图像一次性人脸识别和表情识别的计算分析&#xff0c;但这个我前面就说了这个还是间接的实现方式…

关于GC原理和性能调优实践,看这一篇就够了

前言 本文介绍 GC 基础原理和理论&#xff0c;GC 调优方法思路和方法&#xff0c;基于 Hotspot jdk1.8&#xff0c;学习之后你将了解如何对生产系统出现的 GC 问题进行排查解决。 正文 本文的内容主要如下&#xff1a; GC 基础原理&#xff0c;涉及调优目标&#xff0c;GC 事…

Redis原理篇—数据结构

Redis原理篇—数据结构 笔记整理自 b站_黑马程序员Redis入门到实战教程 底层数据结构 动态字符串SDS 我们都知道 Redis 中保存的 Key 是字符串&#xff0c;value 往往是字符串或者字符串的集合。可见字符串是 Redis 中最常用的一种数据结构。 不过 Redis 没有直接使用C语言中…

Python圣诞树

目录 一、前言 二、创意名 三、效果展示 四、实现步骤 五、编码实现 一、前言 一年一度的圣诞节又要来喽~在这么浪漫的节日里怎么能少的了一个浪漫的程序员呢~让我们一起画个圣诞树&#xff0c;送给你喜欢的那个人吧~ 二、创意名 Python浪漫圣诞树&#xff0c;具体源码见&…

嘿ChatGPT,来帮我写代码

最近 ChatGPT 发行了&#xff0c;这是由 OpenAI 开发的AI聊天机器人&#xff0c;专门研究对话。它的目标是使AI系统更自然地与之互动&#xff0c;但是在编写代码时也可以为您提供帮助。您可以让 ChatGPT 做你的编程助理&#xff0c;甚至更多&#xff01;在过去的几天里&#xf…

腾讯云轻量应用服务器使用 SRS 应用镜像搭建个人直播间、视频转播、本地录制!

SRS 是一个开源的流媒体集群&#xff0c;主要应用在直播和 WebRTC&#xff0c;支持 RTMP、WebRTC、HLS、HTTP-FLV 和 SRT 等常用协议。 轻量应用服务器提供了 SRS 应用镜像&#xff0c;使您无需再关注繁杂的部署操作&#xff0c;即可通过该镜像在轻量应用服务器上一键搭建个人…

安卓/华为手机恢复出厂设置后如何恢复照片

绝大多数安卓用户都会经历过手机恢复出厂设置&#xff0c;部分用户可能没有意识到手机恢复出厂设置可能会导致数据丢失。但是&#xff0c;当您在 云盘上进行备份或在设备上进行本地备份时&#xff0c;情况就会有所不同&#xff0c;并且当您将 安卓手机恢复出厂设置时&#xff0…