大型网站优化指南:打造流畅的在线体验
大型网站
大型网站是指具有高并发、大流量、高可用性、海量数据处理能力,并能提供7*24小时不间断服务的网站。
这些网站通常面临用户分布广泛、网络情况复杂、安全环境恶劣等挑战。
同时需要快速适应市场变化和用户需求,通过渐进式的发展策略运营成大型网站。
大型网站的目标包括提供快速访问体验、高安全性、可扩展性,以及通过硬件的增加或减少来提高处理能力或降低成本。
名词解析
- pv (
page views
) 即页面浏览量;用户每1次对网站中的每个网页访问均被记录1次 - uv (
unique visitor
) 是指不同的、通过互联网访问、浏览这个站点的自然人 - ip 指访问某个站点的不同IP地址的数量
通过名词定义:大型网站一般是指
24小时内
,pv值
达到百万或千万级别,uv值
十万以上,ip值
十万以上的网站
大型网站的问题
大并发
在同一个时间点,有大量的客户来访问我们的网站,如果访问量过大,就可能造成网站瘫痪。
解决方案: 浏览器与服务器之间采用负载均衡 ,负载均衡有硬件:NetScaler
、F5
(效果好,价格昂贵),软件有:LVS
、Nginx
大流量
有大量的图片,视频,flash
, 这样就会对流量要求高,需要更多更大的带宽。
解决方案:
- 可以启用
apache
自带的数据压缩机制(gzip
,deflate
) - 使用
CDN(内容分发网络)
服务
CDN(内容分发网络):大型网络巨头公司在全世界都分布有CDN节点(阿里、腾讯),你购买他们的服务,然后别人要访问你服务器上的数据,比如是北京网友访问,他先找北京周边的CDN服务节点,看他上面有想要的资源没有,第一次是没有的,然后北京CDN就再到你的服务器上下载内容,并保存起来、这样,下一次有人再来访问你的资源,就可以直接在CDN上读取,速度更快
注意:防止黑客的DDOS攻击:肉鸡、最有效的办法就是CDN,因为不同地区的IP访问的都是他们当地的 CDN,就算再大的流量也不怕
大存储
海量数据需要存储。大量的数据读写操作,数据库可能无法响应
大型网站架构
分层+负载均衡+集群(简单来说就是通过增加服务器来分流)。服务器与数据库之间:读写分离、主从同步
优化
使用缓存技术
- 内存缓存:
redis
,memcache
,mysql数据库(memory引擎)
- 页面缓存: 页面静态化
页面静态化
因为很多动态网址,要访问数据库,这样造成访问速度慢,因为我们可以把动态页面,改成静态页面,从而减少对数据库的访问次数,提速。
数据库优化
表的设计满足3NF
1NF
指表的属性(列)具有原子性, 即表的列的不能再分了,不能有重复的列
2NF
所谓2NF,就是指我们的表中不能有完全重复的一条记录(行).一般情况下通过设置一个主键来搞定,而且该主键是自增的。
3NF
所谓3NF就是指,如果列的内容可以被推导(显示推导,隐式推导)出,那么我们就不要单独的用一列存放。
所有的规则都是建立在实际上面的,一般设计是遵循3NF的,有时也会反3NF比如学生表的总金额,班级的总金额
开启慢查询
#慢查询开启,后面的文件路径是可以更改的
log_slow_queries="D:/log/mysql_slow.log"
#1定位超过多少秒为慢查询
long_query_time=1
#上面的语句的意思是,超过1秒钟的语句,会被记录在D:/log/mysql_slow.log这个文件中
需要去里面看是那一条语句有问题# Time: 180922 18:20:16 #语句执行的时间
# User@Host: root[root] @ localhost [127.0.0.1] #数据库的用户和域名
# query_time: 执行时间 #lock_time:等待时间
# Query_time: 1.693957 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 1
SET timestamp=1537611616;
#执行的语句
delete news,news_content from news left join news_content on news.news_id = news_content.news_id whe
开启慢查询牺牲sql的执行效率
一般是项目上线前一个月开启
还有就是项目运行一年之后开启一个月
分析sql查询语句
# 在查询语句前面加上explain用于分析语句,看查询了多少条,用没有用到索引
explain SELECT * from emp where ename="odAsmf";# 查询出来的数据有
selecp_type:查询类型(slmple:简单查询)
type :all 表示全表查询
possible_keys :表示有什么索引可以用key: 当前用到的索引
rows:扫描了多条数据
根据分析结果,看如何添加索引
索引的原理:二叉树,平衡二叉树
索引的优缺点
索引的缺点:
增删改速度慢..
优点:
查询速度快…
索引一般使用最左匹配:就是复合索引,只能匹配最左边的
常用索引
主键索引primary
唯一索引unique用在身份证 用户名等等普通索引normal在不能用使用上面两种情况下使用
搜索功能的时候,一般where后面字段需要添加索引
数据类型的选择
-
小于255个用varchar(255)
-
大于255用text
-
数字用int tinyint
-
价格 decimal 元 int 分
-
手机号 varchar(20)
-
时间 int 时间戳
-
md5加密 varchar(32)
一般情况,不参于运算都可以用varchar的
总结
在考虑优化大型网站的时候一般按照如下步骤优化:
1.静态资源用CDN加速
2.优化数据库
- 表的设计要合理(满足
3NF
) - 添加索引(主键索引|全文索引|唯一索引|普通索引|空间索引)
- 优化
sql
语句 - 分表( 水平分表,垂直分表),分区
mysql
数量级 千万 字段复杂 百万 - 读写分离
- 优化
my.ini
配置 - 软件硬件应当升级
3. 优化慢查询
-
开启慢查询
-
explain
分析SQL
语句 -
合适地方添加索引(主键 -> 唯一 -> 普通)
4. 优化缓存
结合 redis
做缓存处理
5. 考虑分库分表
主从同步 读写分离
采取 分表 10G
或 1000W
才考虑
查询的时候,where
后面的字段一般要索引
6. 增加物理设备
– 欢迎点赞、关注、转发、收藏【我码玄黄】,gonghao同名
相关文章:

大型网站优化指南:打造流畅的在线体验
大型网站 大型网站是指具有高并发、大流量、高可用性、海量数据处理能力,并能提供7*24小时不间断服务的网站。 这些网站通常面临用户分布广泛、网络情况复杂、安全环境恶劣等挑战。 同时需要快速适应市场变化和用户需求,通过渐进式的发展策略运营成大型…...

Redis变慢了?
Redis变慢了? 什么是Redis?测定Redis变慢?最大响应延迟平均响应延迟设置Redis慢日志 分析Redis变慢bigkeysbigkey的危害bigkey优化 写在最后 什么是Redis? 作为一个技术人员来说,大家用的最多的可能就是Redis了&#…...

11.6.k8s实战-节点扩缩容
目录 一,需求描述 二、集群缩容-节点下线 1,节点下线案例说明 2,查看现有节点 3,查看所有名称空间下的pod 编辑4,驱逐下线节点的pod 5,驱逐后再次查看pod 6,驱逐pod后再次查看节点信息…...

相亲交友APP系统|婚恋交友社交软件|语音聊天平台定制开发
在现代社会,婚恋交友已经成为了人们日常生活中的一项重要任务。为了方便用户进行相亲交友活动,各种相亲交友APP系统和婚恋交友社交软件应运而生。本文将介绍相亲交友APP系统、婚恋交友社交软件的开发以及语音聊天平台的定制开发的相关知识和指导。 一、…...

2005-2022年款福特福克斯维修手册和电路图线路图接线图资料更新
经过整理,2005-2022年款福特福克斯全系列已经更新至汽修帮手资料库内,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对…...

nodejs爬取小红书图片
昨天的文章已经描述了可以抓取评论区内容, 抓取图片内容和抓取评论区的内容基本一致 我们可以看到接口信息中含有图片链接,我们要做的就是爬取图片链接然后下载 这边要用到的模块为const downloadrequire(download) 将爬到的图片链接存放到images数组…...

MySQL从5.7升级到8.0步骤及其问题
MySQL从5.7升级到8.0步骤及其问题 前言 本文源自微博客,且以获得授权,请尊重版权。 一、需求背景 Docker环境下,MySQL5.7升级到8.0,数据迁移时使用的是mysqldump方式迁移。 二、迁移步骤 数据备份: docker exec -i 1…...

中年帕金森:守护健康,从容面对生活挑战
在快节奏的现代生活中,中年人群面临着越来越多的健康挑战。其中,帕金森病作为一种常见的神经系统疾病,逐渐引起了人们的关注。帕金森病不仅影响患者的身体健康,还对其日常生活造成极大的困扰。那么,我们该如何应对中年…...

oracle块跟踪
1.查询块跟踪 select status,filename,bytes from v$block_change_tracking;2.打开块跟踪 ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE /home/oracle/block_change_tracking.log;3.关闭块跟踪 ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;4.解释 Oracle数据…...

【机器学习】第3章 K-近邻算法
一、概念 1.K-近邻算法:也叫KNN 分类 算法,其中的N是 邻近邻居NearestNeighbor的首字母。 (1)其中K是特征值,就是选择离某个预测的值(例如预测的是苹果,就找个苹果)最近的几个值&am…...

求和 最大值 最小值 reduce Math.min Math.max
let arr [ 8,4,3,9,2]let sum arr.reduce((a,b) > ab)console.log(sum) // 求和 26let max arr.reduce((a,b) > a>b?a:b)console.log(max) // 最大值 9console.log(Math.max(...arr))let min arr.reduce((a,b) > a<b?a:b)console.log(min) // 最小值 2co…...

MyBatis 源码分析--获取SqlSession
前言: 前文我们从源码层面梳理了 SqlSessionFactory 的创建过程,本篇我们继续分析一下 SqlSession 的获取过程。 初识 MyBatis 【MyBatis 核心概念】 案例代码: public class MyBatisTest {Testpublic void test() throws IOException {/…...

Upload-Labs:Pass - 1(JS前端白名单)
Pass_1 1. 上传测试2. 代码审计**获取文件输入的值**:**检查是否选择了文件**:**定义允许的文件类型**:**提取文件的扩展名**:**检查文件类型是否允许上传**:**构建错误消息并提醒用户**: 3.绕过思路3.1 将…...

vue大作业-实现学校官网
vue大作业-实现学校官网 基于vue2实现的学校官网 项目展示 学校官网介绍 欢迎访问我们学校的官方网站,这里为您提供了全面的信息和资源,帮助您更好地了解我们的教育理念、教学资源和学术活动。 首页 首页是您了解我们学校的起点。这里展示了学校的最…...

24面试记录002
文章目录 12、brpc的优化2.1 brpc网络有啥降级? 3、移动语义4、python协程 二、1. mq怎么保障数据的顺序?3.brpc中上下游通信,怎么测评新增字段大小,对耗时的影响? 1 1、brpc和grpc区别,为啥选择brpc? gr…...

cocos 按钮
1、创建按钮 2、创建脚本 3、将脚本挂载到其他节点上 4、将节点和按钮绑定 即可实现点击按钮触发脚本。 在触发的脚本函数里面设置按钮节点的位置,将其移除屏幕,可以实现点击消失按钮的效果。...

文件扫描工具都有哪些?职场大佬都在用的文本提取工具大盘点~
回想起刚毕业初入职场那阵子,领导让帮忙把纸质文件扫描提取为文本时,还只会傻乎乎地一点点操作,属实是费劲得很! 好在后面受朋友安利,找到了4个能够快速实现文件扫描文字提取的方法,这才让我的办公效率蹭蹭…...

【学习】程序员资源网站
1 书栈网 简介:书栈网是程序员互联网IT开源编程书籍、资源免费阅读的网站,在书栈网你可以找到很多书籍、笔记资源。在这里,你可以根据热门收藏和阅读查看大家都在看什么,也可以根据技术栈分类找到对应模块的编程资源,…...

游戏缓存与异步持久化的完美邂逅
1、问题提出 游戏服务器,需要频繁的读取玩家数据,同时也需求频发修改玩家数据,并持久化到数据库。为了提高游戏服务器的性能,我们应该怎么处理呢? 2、针对读——使用缓存 缓存,是指应用程序从数据库读取完数据之后,就将数据缓存在进程内存或第三方内存(例如redis)。…...

MySQL 高级 - 第十二章 | 数据库的设计规范
目录 第十二章 数据库的设计规范12.1 为什么需要数据库设计12.2 范式12.2.1 范式简介12.2.2 范式都包括哪些12.2.3 键和相关属性的概念12.2.4 第一范式(1st NF)12.2.5 第二范式(2nd NF)12.2.6 第三范式(3rd NF…...

【Python】AJAX
AJAX基础 一、AJAX1.1 概述1.2 XMLHttpRequest对象1.3 AJAX请求六部曲1.4 图解AJAX请求步骤 二、jQuery与AJAX2.1 jQuery.get()2.2 jQuery.getJSON()2.3 jQuery.post()2.4 jQuery.ajax() 三、Django使用AJAX3.1 请求类型3.2 PUT与PATCH的区别3.3 接收及响应JSON3.3.1 接收JSON3…...

scikit-image安装报错
scikit-image安装报错: pip install scikit-image0.21.0 报错信息: Collecting PyWavelets>1.1.1 (from scikit-image0.21.0) Installing build dependencies … error error: subprocess-exited-with-error 解决方法: 提前安装好PyWave…...

STM32(七)———TIM定时器(基本and通用)
文章目录 前言一、通用定时器TIM简介1.STM32F10X系列总共最多有八个定时器:2.三种STM32定时器的区别:3.STM32 的通用定时器功能:4.计数器模式 二、基本定时器1.基本定时器的结构框图2.定时时间的计算3.定时器的结构体和库函数 总结 前言 一个…...

Spring中网络请求客户端WebClient的使用详解
Spring中网络请求客户端WebClient的使用详解_java_脚本之家 Spring5的WebClient使用详解-腾讯云开发者社区-腾讯云 在 Spring 5 之前,如果我们想要调用其他系统提供的 HTTP 服务,通常可以使用 Spring 提供的 RestTemplate 来访问,不过由于 …...

那些年我为了考PMP踩过的坑.....
说到考PMP我尊嘟很难过且伤心,众所周知,报考PMP都是要报机构的而且还是PMI认证的机构,所以在报考PMP过程中选的机构我可以说踩过了很多坑了...... Q:包过吗? 大家千万不要信某某机构说的包过噱头,真的很坑…...

邦芒解析:新人入职后存在的三种职场心理误区
多数职场新人会认为自己工作不快乐,不能正确处理职场人际关系。尤其是新人入职后在处理人际关系方面更明显,下面简述新人入职后主要存在的三种职场心理误区。 误区一:面对对上司的恐惧 学会和上司沟通,新人要采用上司容易接受…...

MFC案例:利用SetTimer函数编写一个“计时器”程序
一、希望达成效果 利用基于对话框的MFC项目,做一个一方面能够显示当前时间;另一方面在点击开始按钮时进行读秒计时,计时结果动态显示,当点击结束时读秒结束并保持最后结果。 二、编程步骤及相关代码、注释 1、启动VS…...

2. 音视频H264
视频软件基本流程 1.什么是H264 H.264是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准 H265又名高…...

烽宇团队回报社会,走进贵州山区公益行
贵州省——在一片美丽的黔山秀水间,烽宇团队成员用实际行动诠释了“取之于民,用之于民”的公益精神。作为在科技和商业领域取得显著成就的团队,烽宇团队不仅在商业上取得了辉煌的成绩,还积极投身于社会公益事业,回报社会。 取之于民,用之于民 近年来,烽宇团队在多位行业领袖的…...

硬盘格式化NTFS好还是exFAT好 U盘存储文件用哪个格式好? 硬盘用exfat还是ntfs mac不能读取移动硬盘怎么解决
在计算机世界中,文件系统是数据管理的基石,而NTFS和exFAT无疑是这块基石上的两大巨头。它们各自拥有独特的特点和优势,并在不同的使用场景中发挥着重要作用。 什么是文件系统 文件系统提供了组织驱动器的方法。它规定了如何在驱动器上存储数…...