读者文摘 心情日记 >心情随笔 > 正文

阿里云构建千万级别架构演变之路

2018-10-29 16:28:14精选文摘 我要评论(0)

 

刚开始做架构设计,我们不可能全方位的考虑到架构的高性能、高扩展性、高安全等各方面的因素。

如淘宝网、Facebook等大型网站的架构,无不从一个小型规模架构,不断进化及演变成为一个大型网站架构。

在云端如何构建千万级架构,本文主要结合阿里云最佳实践经验,向大家分享如何从一个小型网站逐步演变到千万级架构的过程。

架构原始阶段:万能的单机

传统官网、论坛等应用,只需要一台ECS。对应的web服务器、数据库、静态文件资源等,部署到一台ECS上即可。

架构采用单台ECS:

7fb0002c94ed26d8672

 

当访问压力达到50万pv到100万pv的时候,部署在一台服务器上面的web应用及数据库等服务应用,会对服务器的CPU/内存/磁盘/带宽等系统资源进行竞争。

这里的架构采用ECS + RDS:

7fc0002c96e0b84742d

 

当访问压力达到100万pv到300万pv的时候,我们看到前端web服务出现性能瓶颈,大量的web请求被堵塞,同时服务器的CPU、磁盘IO、带宽都有压力。

通过将动态请求、静态请求的访问分离(“动静分离”),有效解决服务器在磁盘IO、带宽方面的访问压力。

架构分布式阶段:负载均衡

最直观的现象是,前端访问堵塞、延迟、服务器进程增多、cpu100%,并且出现常见502/503/504的错误码。

因而告别单机的时代,转变分布式架构的阶段。

架构数据缓存阶段:数据库缓存

这个时候我们发现,数据库出现压力瓶颈,常见的现象就是RDS的连接数增加并且堵塞、CPU100%、IOPS飙升。

架构采用CDN + SLB + ECS + OSS + 云数据库memcache + RDS :

7fc0002c96fff0610f5

 

当访问量达到1000万pv到5000万pv,虽然这个时候我们可以看到通过分布式文件系统OSS已经解决了文件存储的性能问题,CDN也已经解决静态资源访问的性能问题。

“何为垂直扩展,按照不同的业务(或者数据库)切分到不同的服务器(或者数据库)之上,这种切分称之为垂直扩展。”

垂直扩展第一招:业务拆分

 

在数据库层,当结合数据库缓存,数据库压力还是很大的时候。我们通过读写分离的方式,进一步切分及降低数据库的压力。

垂直扩展第三招:分库

所涉及的数据库表:用户模块表、订单模块表、商品模块表等,分别存放到不同数据库中,如用户模块库、订单模块库、商品模块库等。然后把不同数据库分别部署到不同服务器中。

架构分布式+大数据阶段:水平扩展

比如,读写分离仅解决“读”的压力,面对高访问量,在数据库“写”的压力上面“力不从心”,出现性能瓶颈。

但单表的数据量达到TB级别以上,显然已经达到传统关系型数据库处理的极限。

水平扩展第一招:增加更多的web服务器

 

单台SLB也存在单点故障的风险,即SLB也存在性能极限,如QPS最大值为50000,通过DNS轮询,将请求轮询转发至不同可用区的SLB上面,实现SLB水平扩展。

水平扩展第三招:采用分布式缓存

所以我们部署多台云数据库memcache版,可以在代码层通过hash算法将数据分别缓存至不同的云数据库memcache版中。

水平扩展第四招:sharding + nosql

架构采用 CDN + DNS轮询 + SLB + ECS + OSS + 云数据库memcache + DRDS + OTS:

7da00074de38dc21390
http://blog.51cto.com/13505030/2072543

精选文摘:http://www.xinqq163.com 转载请保留链接!