百万级别网站架构思路

1.运维服务器方面:2台web机器,机器配置是4核,16G的配置,主从,3台mysql,主从加备份数据库,resdis一台机器

2.可以处理1秒钟1000次请求,如果预估是1秒钟4000次请求的话,则需要4台web机器,top命令查询load average如果cpu快达到4了就需要加机器了

3.前端使用cdn加速,JS、CSS打包压缩,使用分布式缓存,读取数据从缓存读取

4.并发量高的话使用队列异步处理

5.数据库做读写分离,百万级别看是读的多还是写的多,读的话做缓存服务器

6.用户登录做中央登录系统,实现单点登录,接口调用必须是100毫秒内返回,否则就抛异常

7.每个接口请求的数量和压力肯定是有的,如果高的话那就限流,到达峰值的话就抛异常

8.对接口限流某个接口的时间窗请求数,限流某个接口的总并发/请求数,我们要对每秒/每分钟的调用量进行限速

9.监控系统搭建

10.系统拆分成应用层、服务层、数据层, 应用层包含商品列表展示、加入购物车、下单、支付,服务层包含账户服务,登录服务

数据层包含数据库服务、缓存服务、文件图片服务、搜索服务

11.静态资源单独部署在一台机器上,主从

服务层:提供可复用的服务

应用层:处理具体的业务逻辑

数据层:数据的存储和访问

11.比如基础类库底层搭建,各业务通过rpc调用,根据业务进行拆分

前端架构
        浏览器优化技术(缓存,压缩,合并减少请求)
        CDN
        静态资源独立部署
        反向代理
        DNS
应用层架构
        并发结构
        负载均衡
        session管理
        动态转静态(访问多,变化少)
        业务拆分
服务层架构
        分布式服务
        分布式消息
        分布式缓存
        分布式配置
存储层架构
        分布式文件系统
        关系数据库分库
        NOSQL
        数据同步
后台架构
        搜索引擎
        数据仓库
        推荐系统
数据采集与监控
        浏览器数据采集
        服务器(业务,性能)数据采集
        系统监控
        系统报警
安全架构
        WEB攻击

        数据保护

重要的高并发技术
  1.负载均衡技术:为了解决服务器集群的高可用及负载,平均分配资源,以减少服务的延时。常用的硬件解决方案如F5;软件解决方案如LVS(工作在4层和7层),Haproxy,Nginx(工作在7层)以及zookeeper等。
  2.CDN技术,这是为了解决静态页面及图片缓存的,提高访问效率
  3.缓存技术
  4.数据库级的高并发技术,如分库、分表,高可用集群等。


消息中间件,分布式缓存,分布式数据库,再加上负载均衡器(包括简单的HTTP/TCP的,也包括其它的像MyCAT这种数据库的)。这些都是实现高并发架构的重要组成部分。

高并发有三个瓶颈:

传输层,大量用户发出请求后,会对网络带宽和web服务器的I/O造成瓶颈;

计算层,将会造成业务服务器的瓶颈;

存储层,会导致数据库和存储的瓶颈。

大型并发架构就是利用负载均衡,缓存,分布式集群等技术,把访问量分散到不同的机器上处理

分层架构是逻辑上的,在物理部署上,三层架构可以部署在同一个物理机器上,但是随着网站业务的发展,必然需要对已经分层的模块分离部署,即三层结构分别部署在不同的服务器上,使网站拥有更多的计算资源,以应对越来越多的用户访问

分层、分隔、异步、分布式、集群、缓存、安全、自动化

分隔:比如在应用层,将不同业务进行分隔,例如将购物、论坛、搜索、广告分隔成不同的应用,有对立的团队负责,部署在不同的服务器上

分布式:分布式应用和服务、分布式数据存储、分布式静态资源、分布式计算

集群:对用户访问集中的模块需要将独立部署的服务器集群化,即多台服务器部署相同的应用构成一个集群,通过负载均衡设备共同对外提供服务。

缓存:具体实现有CDN、反向代理、本地缓存、分布式缓存等。

使用缓存有两个条件:访问数据热点不均衡,即某些频繁访问的数据需要放在缓存中;数据在某个时间段内有效,不过很快过期,否在会因为数据过期而脏读,影响数据的正确性。

自动化:具体有自动化发布过程,自动化代码管理、自动化测试、自动化安全检测、自动化部署、自动化监控、自动化报警、自动化失效转移、自动化失效恢复等

安全:登录、交易需要对网络通信进行加密;为了防止机器人程序滥用资源,需要使用验证码进行识别;对常见的XSS攻击、SQL注入需要编码转换;垃圾信息需要过滤等。

memcacahe作为应用层的缓存,也可以使用redis作为数据库层的缓存。


猜你喜欢

转载自blog.csdn.net/ahjxhy2010/article/details/79854980