网站初级架构
一般网站,刚开始的做法,是三台服务器,一台部署应用,一台部署数据库,一台部署 NFS 文件系统。
这是前几年比较传统的做法,之前见到一个网站 10 万多会员,垂直服装设计门户,N 多图片。
使用了一台服务器部署了应用,数据库以及图片存储。出现了很多性能问题,如下图:
但是,目前主流的网站架构已经发生了翻天覆地的变化。一般都会采用集群的方式,进行高可用设计。
至少是上面这个样子:
使用集群对应用服务器进行冗余,实现高可用。(负载均衡设备可与应用一块部署)
使用数据库主备模式,实现数据备份和高可用。
系统容量预估
预估步骤:
注册用户数-日均 UV 量-每日的 PV 量-每天的并发量。
峰值预估:平常量的 2~3 倍。
根据并发量(并发,事务数),存储容量计算系统容量。
根据客户需求:3~5 年用户数达到 1000 万注册用户,可以做每秒并发数预估:
每天的 UV 为 200 万(二八原则)。
每日每天点击浏览 30 次。
PV 量:200*30=6000 万。
集中访问量:24*0.2=4.8 小时会有 6000 万*0.8=4800 万(二八原则)。
每分并发量:4.8*60=288 分钟,每分钟访问 4800/288=16.7 万(约等于)。
每秒并发量:16.7万/60=2780(约等于)。
假设:高峰期为平常值的三倍,则每秒的并发数可以达到 8340 次。
1 毫秒=1.3 次访问。
没好好学数学后悔了吧?!(不知道以上算是否有错误,呵呵~~)
服务器预估:(以 Tomcat 服务器举例)
按一台 Web 服务器,支持每秒 300 个并发计算。平常需要 10 台服务器(约等于);[tomcat 默认配置是 150],高峰期需要 30 台服务器。
容量预估:70/90 原则
系统 CPU 一般维持在 70% 左右的水平,高峰期达到 90% 的水平,是不浪费资源,并比较稳定的。内存,IO 类似。
以上预估仅供参考,因为服务器配置,业务逻辑复杂度等都有影响。在此 CPU,硬盘,网络等不再进行评估。
网站架构分析
根据以上预估,有几个问题:
需要部署大量的服务器,高峰期计算,可能要部署 30 台 Web 服务器。并且这三十台服务器,只有秒杀,活动时才会用到,存在大量的浪费。
所有的应用部署在同一台服务器,应用之间耦合严重。需要进行垂直切分和水平切分。
大量应用存在冗余代码。
服务器 Session 同步耗费大量内存和网络带宽。
数据需要频繁访问数据库,数据库访问压力巨大。
大型网站一般需要做以下架构优化(优化是架构设计时,就要考虑的,一般从架构/代码级别解决,调优主要是简单参数的调整,比如 JVM 调优;如果调优涉及大量代码改造,就不是调优了,属于重构):
业务拆分
应用集群部署(分布式部署,集群部署和负载均衡)
多级缓存
单点登录(分布式 Session)
数据库集群(读写分离,分库分表)
服务化
消息队列
其他技术
网站架构优化
业务拆分