高并发网站架构 – 简述

发布于 2018-06-26  290 次阅读


大型网站的特点

01 并发量大,访问量大

02 数据量大

03 用户分布广泛,网络环境复杂

04 稳定性高

05 易于扩展

06 安全性高

基础设施

服务器:塔式服务器,机架式服务器(戴尔 r730,r430),刀片式服务器,虚拟主机,VPS,云主机(参考资料:http://server.zol.com.cn/48/483388.html

网络设备:交换机,防火墙,路由器(参考资料:http://www.feisu.com/bbs/t-874.html

存储设备:SAN,NAS,DAS(参考资料:https://baike.baidu.com/item/das%2Cnas%2Csan?fr=aladdin

IDC 机房:机房,机柜,网络,电源,空调

基本概念

http 协议简述

全称 HyperText Transfer Protocol,超文本传输协议,端口 80,443

http 主流版本为 1.1,相比较 1.0 最大的区别在于支持持久化(长连接)、支持 host 请求头字段

请求方法包括:GET、POST、HEAD、PUT、DELETE、MOVE(参考资料:http://tools.jb51.net/table/http_request_method

常见状态码:200 301 302 304 401 403  404 500 502 503 504

http header:request header,response header,referer,useragent (参考资料:https://kb.cnblogs.com/page/92320/

用户访问网站的过程

用户量浏览器输入网址 -> 本机 DNS 服务器解析域名为 IP -> web 浏览器把请求发送给远程服务器 -> 客户端服务端建立 TCP 连接 -> 传输数据 -> 关闭连接

网站元素解说

MIME (multipurpose internet mail extension): text/html,text/css,application/javascript,text/plain,image/gif

URL 和 URI:https://blog.csdn.net/akkaruta/article/details/51770351

静态网页、动态网页、伪静态:https://blog.csdn.net/wumenglu1018/article/details/62038000

常见 web 服务器软件

Apache、Nginx(tengine)、IIS、Tomcat(各软件市场份额:http://www.sohu.com/a/161411719_324809

量级术语

统计网站访问量

IP:访问你网站的独立 IP

UV:每个客户端表示一个 UV

PV:一共浏览的页面的次数

DAU:日活跃用户数,一般针对 APP

MAU:月活跃用户数,一般针对 APP

这几个参数用来衡量一个网站大小的级别,可以接入第三方统计平台或者通过分析访问日志做统计 awstat

并发连接数,吞吐量

并发数:系统同时处理的请求数

吞吐量:系统在单位时间内处理请求的数量

网站最大并发数

专业工具:loadrunner

临时测试工具:ab

ab 是 apache 自带的一个工具

在这里使用 ab 工具做实验

[root@am-01:~#] yum -y install httpd

[root@am-01:~#] ab -c 100 -n 100 https://www.itwordsweb.com/

This is ApacheBench, Version 2.3 <$Revision: 1430300 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/



Benchmarking www.itwordsweb.com (be patient).....done





Server Software:        NWSs

Server Hostname:        www.itwordsweb.com

Server Port:            443

SSL/TLS Protocol:       TLSv1.2,AES256-GCM-SHA384,2048,256



Document Path:          /

Document Length:        50017 bytes



Concurrency Level:      100

Time taken for tests:   5.829 seconds

Complete requests:      100

Failed requests:        0

Write errors:           0

Total transferred:      5037283 bytes

HTML transferred:       5001700 bytes

Requests per second:    17.16 [#/sec] (mean)

Time per request:       5829.043 [ms] (mean)

Time per request:       58.290 [ms] (mean, across all concurrent requests)

Transfer rate:          843.92 [Kbytes/sec] received



Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:       17  231  28.6    231     318

Processing:   218 3428 1144.5   3648    5338

Waiting:       12 2609 1273.6   2723    4858

Total:        235 3659 1153.5   3892    5655



Percentage of the requests served within a certain time (ms)

  50%   3892

  66%   4344

  75%   4643

  80%   4729

  90%   5038

  95%   5152

  98%   5379

  99%   5655

 100%   5655 (longest request)

#-c 参数指定并发用户数,-n 指定访问次数

#Failed requests 表示失败的请求,Requests per second 可以看成是吞吐量,Time per request 表示每个请求花费的时间

服务器配置的预估

8 核至强 E5,8g 内存的服务器为例

01 纯 php 跑 300 已经很优秀,150 左右响应时间已明显变慢

02 通常说的并发并不单单是动态并发,要包括静态

03 discuz 一个页面里面的静态内容占据 90%以上

04 不同的网站类型动静态所占的比例也不同

05 我们可以大致上以 2:8 原则作为一个评估标准,一个网站的请求里面 80%是静态,20%是动态

06 nginx 支持最高静态并发可达 3w

07 若动态 150,那静态为 600,理论上为 750

08 根据 2:8 原则,网站 80%的 pv 在 20%的时间内完成,24*0.2*3600*150/0.8=340w

09 搜索引擎以及其他非人为访问也可以占到 30%-50%

网站架构角色

简单的网站架构

高并发网站架构 - 简述

复杂的网站架构

高并发网站架构 - 简述

网站架构角色 - web

常用的 web 角色:IIS,Apache,Nginx+php-fpm,Tomcat+jdk,Nginx+uwsgi+python 等

网站架构角色 - db_cache

常用的 db 角色:MySQL/MariDB,PostgreSQL,Oracle,MongoDB

常用的缓存角色:Memcached,Redis

网站架构角色 - 代理

常用的代理角色:Varnish,Squid,Nginx

网站架构角色 - CDN

常用的 CDN 角色:腾讯云,阿里云等

参考:https://blog.csdn.net/coolmeme/article/details/9468743

网站架构角色 - 分布式文件系统(存储)

常用的分布式文件系统(存储):GFS,FastdFS,HDFS,TFS,GlusterFS 等

参考:http://ask.apelearn.com/question/7734

高并发网站架构 - 简述

网站架构角色 - 集群

常用的集群角色:keepalived+lvs,heartbeat+nginx,haproxy,mysql-proxy

高并发网站架构 - 简述

高并发网站架构 - 简述

高并发网站架构 - 简述

高并发网站架构 - 简述

网站架构演变

网站架构演变 - 小型网站

高并发网站架构 - 简述

高并发网站架构 - 简述

网站架构演变 - 中小型网站

高并发网站架构 - 简述

高并发网站架构 - 简述

网站架构演变 - 中型网站

高并发网站架构 - 简述

高并发网站架构 - 简述

网站架构演变 - 中大型网站

高并发网站架构 - 简述

资料参考

web

http://www.apelearn.com/bbs/thread-8644-1-1.html

db

http://www.apelearn.com/bbs/thread-8025-1-1.html

缓存

codis 实现 redis 集群:

http://www.jianshu.com/p/f8e968e57863

magent 实现 memcached 集群:

http://www.cnblogs.com/luotianshuai/p/5088581.html

大型网站架构演变:

http://blog.jobbole.com/87736/

http://blog.jobbole.com/87737/

网站架构优化

架构优化 - 硬件优化

cpu

主频高、更多核 CPU

参考资料:http://product.pconline.com.cn/hot/server_cpu/

内存

主频高内存量大

参考资料:http://product.pconline.com.cn/hot/server_ram/

磁盘

raid、ssd

参考资料:http://product.pconline.com.cn/hot/server_hdd/

网卡

千兆、双网卡绑定

架构优化 - CDN、nginx 调优、内核调优、浏览器缓存、压缩、业务调优、nosql、异步通讯、案例

接入优质 CDN(阿里云、腾讯云、百度云等)

优化 nginx 配置 && 调整内核参数

其中内核优化中的"net.ipv4.tcp_syncookies = 1"很关键,可预防 syn flood 攻击

参考资料:http://blog.chinaunix.net/uid-25266990-id-2985541.html

(为什么不用 apache:http://blog.csdn.net/xifeijian/article/details/17385831

设置浏览器缓存

apache:http://www.apelearn.com/bbs/thread-5357-1-1.html

http://www.apelearn.com/bbs/thread-11450-1-1.html

nginx:http://www.apelearn.com/bbs/thread-11821-1-1.html

启用压缩技术节省带宽消耗

apache:http://www.apelearn.com/bbs/thread-5528-1-1.html

nginx:http://www.111cn.net/sys/nginx/69492.htm

业务划块,可以看网站架构演变相关

不使用或者少使用共享存储

个别的模块和功能用 nosql 替代 mysql:http://blog.sina.com.cn/s/blog_493a84550101e9a1.html

使用异步通信:http://kb.cnblogs.com/page/537753/

小案例(小米抢购系统:http://www.csdn.net/article/2014-11-07/2822545

限流排队:http://my.oschina.net/yonghan/blog/473790

程序优化

在线检测网站元素:http://www.webpagetest.org/

减少 http 请求数(合并 css,js,图片)

记录慢执行/查询日志

将动态内容静态化

图片延迟加载

动静分离

应用无状态(淘宝 session 框架)