搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
代码吟游诗人
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
python调用chat接口_如何用python接入chat
2
【Kubernetes】kubectl top pod 异常?
3
207.【2023年华为OD机试真题(C卷)】小朋友来自多少小区(贪心算法实现-Java&Python&C++&JS实现)_小朋友来自多少个小区python
4
Linux堡垒机Jumpserver安装_jumpserver iptables ipsec
5
18. Vue-element-template白天黑夜模式动态切换_elementui 切换暗黑模式 动画是如何实现的
6
spring boot(2.4.x之前版本)和spring cloud项目中自动装配的监听执行顺序
7
django-rest-framework权限配置问题_default_perrmission_classes. rest_framework
8
基于片段的分子生成网络 (FLAG)使用方法及案例测评
9
架构研究与对比之MVC、MVP、MVVM_android mvvm的缺点
10
使用 Python 和 Moviepy 库拼接视频_moviepy 合并视频
当前位置:
article
> 正文
开发大型高负载类网站应用的几个要点
作者:代码吟游诗人 | 2024-01-31 09:32:19
赞
踩
开发大型高负载类网站应用的几个要点
作者:
nightsailer
来源:
http://www.phpchina.com/bbs/thread-15484-1-1.html
看了一些人的所谓大型项目的方法,我感觉都是没有说到点子上,有点难受。
我也说说自己的看法.我个人认为,很难衡量所谓项目是否大型,
即便很简单的应用在高负载和高增长情况下都是一个挑战.因此,按照我的想法,姑且说是高负载
高并发或者高增长情况下,需要考虑的问题.这些问题,很多是和程序开发无关,而是和整个系统的
架构密切相关的.
数据库
没错,首先是数据库,这是大多数应用所面临的首个SPOF。尤其是Web2.0的应用,数据库的响应是首先要解决的。
一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,
那么,MySQL的效能急剧下降。常用的优化措施是M-S(主-从)方式进行同步复制,将查询和操作和分别在不同的
服务器上进行操作。我推荐的是M-M-Slaves方式,2个主Mysql,多个Slaves,需要注意的是,虽然有2个Master,
但是同时只有1个是Active,我们可以在一定时候切换。之所以用2个M,是保证M不会又成为系统的SPOF。
Slaves可以进一步负载均衡,可以结合LVS,从而将select操作适当的平衡到不同的slaves上。
以上架构可以抗衡到一定量的负载,但是随着用户进一步增加,你的用户表数据超过1千万,这时那个M变成了
SPOF。你不能任意扩充Slaves,否则复制同步的开销将直线上升,怎么办?我的方法是表分区,
从业务层面上进行分区。最简单的,以用户数据为例。根据一定的切分方式,比如id,切分到不同的数据库集群去。
全局数据库用于meta数据的查询。缺点是每次查询,会增加一次,比如你要查一个用户nightsailer,你首先要到
全局数据库群找到nightsailer对应的cluster id,然后再到指定的cluster找到nightsailer的实际数据。
每个cluster可以用m-m方式,或者m-m-slaves方式。
这是一个可以扩展的结构,随着负载的增加,你可以简单的增加新的mysql cluster进去。
需要注意的是:
1、禁用全部auto_increment的字段
2、id需要采用通用的算法集中分配
3、要具有比较好的方法来监控mysql主机的负载和服务的运行状态。如果你有30台以上的mysql数据库在跑就明白我的意思了。
4、不要使用持久性链接(不要用pconnect),相反,使用sqlrelay这种第三方的数据库链接池,或者干脆自己做,因为php4中mysql的
链接池经常出问题。
缓存
缓存是另一个大问题,我一般用memcached来做缓存集群,一般来说部署10台左右就差不多(10g内存池)。需要注意一点,千万不能用使用
swap,最好关闭linux的swap。
负载均衡/加速
可能上面说缓存的时候,有人第一想的是页面静态化,所谓的静态html,我认为这是常识,不属于要点了。页面的静态化随之带来的是静态服务的
负载均衡和加速。我认为Lighttped+Squid是最好的方式了。
LVS <------->lighttped====>squid(s) ====lighttpd
上面是我经常用的。注意,我没有用apache,除非特定的需求,否则我不部署apache,因为我一般用php-fastcgi配合lighttpd,
性能比apache+mod_php要强很多。
squid的使用可以解决文件的同步等等问题,但是需要注意,你要很好的监控缓存的命中率,尽可能的提高的90%以上。
squid和lighttped也有很多的话题要讨论,这里不赘述。
存储
存储也是一个大问题,一种是小文件的存储,比如图片这类。另一种是大文件的存储,比如搜索引擎的索引,一般单文件都超过2g以上。
小文件的存储最简单的方法是结合lighttpd来进行分布。或者干脆使用Redhat的GFS,优点是应用透明,缺点是费用较高。我是指
你购买盘阵的问题。我的项目中,存储量是2-10Tb,我采用了分布式存储。这里要解决文件的复制和冗余。
这样每个文件有不同的冗余,这方面可以参考google的gfs的论文。
大文件的存储,可以参考nutch的方案,现在已经独立为hadoop子项目。(你可以google it)
其他:
此外,passport等也是考虑的,不过都属于比较简单的了。
吃饭了,不写了,抛砖引玉而已。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/article/detail/50125
推荐阅读
article
数组
(一)
--
LC[26]&[80]
删除
有序
数组
中
的
重复
元素
_
删除
有序
数组
的
重复
元素
完整代码...
LeetCode[26]
删除
有序
数组
中
的
重复
元素
,原地
删除
重复
出现
的
元素
,使每个
元素
只出现1/2次,返回
删除
后
数组
的
...
赞
踩
article
【开源】
JAVA
+
Vue
.
js
实现
超市
商品
管理系统
...
随着社会的发展,人们的生活水平不断地提高,
超市
遍布城市各个社区,它们繁荣了社会经济,也便利了人们的生活,是人们生活中不可...
赞
踩
article
Python
Web实战:
Flask
+
Vue
开发
一个
漂亮的
词云
网站...
作者:snowspace@掘金今天就分享
一个
用
Flask
做的
词云
生成网站,非常有意思的小web,适合练手。这是
一个
前端用...
赞
踩
article
动态
规划之
状态
压缩
dp
入门...
状态
压缩
动态
规划(简称状压
dp
)是另一类非常典型的
动态
规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但...
赞
踩
article
react
基本原理---
虚拟
DOM
和
Diff
算法_
react
虚拟
dom
diff
算法原理...
React 更新视图的思想是:只要state 变化就重新渲染视图特点:思路非常清晰问题:组件中只有一个
DOM
元素需要更...
赞
踩
article
80.
删除
排序
数组
中
的
重复
项 II...
学习双指针
的
应用题目描述算法我们使用了两个指针,iii 是遍历指针,指向当前遍历
的
元素;jjj 指向下一个要覆盖元素
的
位...
赞
踩
article
【【
STM32
-
SPI
通信协议
】】_
spi
引脚
配置
miso
上拉输入...
STM32
-
SPI
通信协议
_
spi
引脚
配置
miso
上拉输入
spi
引脚
配置
miso
上拉输入 ...
赞
踩
article
国密
sm2
的
Vue
、
Python
、
Java
互通
使用
_
java
与
vue
使用
sm2
验签...
【代码】python
使用
sm2
加密。_
java
与
vue
使用
sm2
验签
java
与
vue
使用
sm2
验签 ...
赞
踩
article
python
和vue 加解密_
cryptojs
.
enc
.
base64
.
stringify
和pyth...
python
和vue的加解密_
cryptojs
.
enc
.
base64
.
stringify
和
python
base64
cr...
赞
踩
article
React
16
源码
:
React
中
commit
阶段
的
commit
Root
的
主流程
源码
实现...
以上就是整个
commit
Root
的
一个流程, 细节都写在代码注释中了。这个流程当中,这三个循环看起来这么复杂,那么其实...
赞
踩
article
vue
AES
加密(
URLEncode
加密)...
vue
AES
加密(
URLEncode
加密)_
vue
aes
vue
aes 目录 第一步:安装c...
赞
踩
article
软件
文档相关缩写
_
csc
和
csu
...
CSCI : 计算机
软件
配置项(Computer Software Configuration Item)简称HWCI:...
赞
踩
article
zabbix
注册
主机
python
脚本_
zabbix
执行
python
3
脚本...
zabbix
自动发现注册_
zabbix
执行
python
3
脚本
zabbix
执行
python
3
脚本 ...
赞
踩
article
React
与
Vue
的
区别和对比_
react
和
vue
的
区别...
前言JavaScript是世界上最流行
的
语言之一,
React
和
Vue
是JS最流行
的
两个框架。但各有优缺点,本文将详细对比...
赞
踩
article
一
文教你如何
处理
高
并发
...
如何
处理
高
并发
,解决
高
并发
的思路和手段,解决
高
并发
的方法,
高
并发
的解决方案,
高
并发
的解决方式,什么是
高
并发
,
高
并发
详解,...
赞
踩
article
Py
t
hon
实现
开机
自启
代码
及取消(通过修改注册表)_
t
开机
自启
动
代码
...
Py
t
hon
实现程序
开机
自启
完整函数,开箱即用,含参数解释、原理解释,超完整_
t
开机
自启
动
代码
t
开机
自启
动
代码
...
赞
踩
article
React
--》虚拟
DOM
与
Diff
算法
_
react
虚拟dom和
diff
算法
...
React
更新视图的思想是只要state变化就重新渲染视图,而组件只有一个
DOM
元素需要更新时,也得把整个组件内容重新渲...
赞
踩
article
vue
普通
加密
以及国密
SM2
、
SM3
、
sm4
的使用_
vue
sm3
...
sm2、
sm3
加密
_
vue
sm3
vue
sm3
相关网址 s...
赞
踩
article
力扣
Hot100
第一题——两数之
和
(
JAVA
)_用
java
做
力扣
第一题两数之
和
...
给定一个整数数组 nums
和
一个整数目标值 target,请你在该数组中找出
和
为目标值 target 的那 两个 整...
赞
踩
article
记一次
Mysql
数据库诡异锁表解决过程
_
mysql
in
_
use
1 和2...
Mysql
锁表现象1、目前线下业务中心N个,每一个线下业务中心,拥有独立的内网服务器,用于线下业务,部分中心务偶尔性的出...
赞
踩
相关标签
leetcode
算法
数据结构
双指针解法
开源
java
vue.js
开发语言
前端
vue
python
html
nodejs
动态规划
状态压缩
react.js
node.js
虚拟DOM和Diff算法
指针
数组
stm32
嵌入式硬件
单片机