大型网站优化指南:打造流畅的在线体验
大型网站
大型网站是指具有高并发、大流量、高可用性、海量数据处理能力,并能提供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…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...

Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

表单设计器拖拽对象时添加属性
背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...