云端架构演变浅谈

架构原始阶段:万能的单机
1
2
3
一般5万PV到30万PV访问量,结合内核参数调优、web应用性能参数、数据库调优等。
一台ECS服务器搞定一切,传统官网、论坛等。
对应web服务器、数据库、静态文件资源等都可以部署到一台服务器上。
架构基础阶段:Web和数据库分离
1
2
访问量在50万PV到100万PV
将Web应用和数据库分离单独部署,可解决对应性能问题。如ECS+RDS
架构动静分离阶段:静态缓存+对象存储
1
2
3
4
5
6
访问量在100万PV到300万PV
此时前端web服务器就会出现性能瓶颈,大量web请求被阻塞,同时服务器CPU、磁盘IO、带宽等都有压力。
这时一方面要将网站图片、js、css、html及应用服务器文件等存储在OSS中进行静态资源集中管理,另一方面通过CDN将静态资源分布式缓存在各个节点实现就近访问。
架构采用:CDN+ECS+OSS+RDS

注意点:将静态资源采用独立二级域名集中部署在OSS中,方便后续架构扩展,也方便CDN回源请求加速。
架构分布式阶段:负载均衡
1
2
3
4
5
6
访问量达到300万PV到500万PV
虽然动静分离有效分离了静态请求压力,但此时动态请求的压力当前服务器已扛不住。最直观的表现就是前端访问堵塞、延迟、服务器进程增多、CPU100%,并且出现502、503、504等错误码。
单台web服务器已不满足需求,需要通过负载均衡技术增加多台web服务器。
架构采用:CDN+SLB+ECS+OSS+RDS

注意点:采用七层SLB即可满足绝大多数应用场景及业务压力;但在高并发场景下还是优先考虑四层SLB,但这会增加架构运维管理工作量。
架构数据缓存阶段:数据库缓存
1
2
3
4
5
6
访问量达到500万PV到1000万PV
此时会发现数据库出现压力瓶颈,常见的现象就是RDS的连接数增加并且堵塞、CPU100%、IOPS飙升。
通过数据库缓存,有效减少数据库访问压力。
架构采用:CDN+SLB+ECS+OSS+云Redis/Memecache+RDS

注意点:数据库缓存需要业务代码改造及支持,那些热点数据需要缓存这需要业务方面重点规划。
架构扩展阶段:垂直扩展
1
2
3
访问量达到1千万PV到5千万PV
虽然通过分布式文件系统OSS已解决了文件存储的性能问题,也通过CDN解决了静态资源访问的性能问题,但是此场景下web服务器和数据库仍然是瓶颈。
此时通过垂直扩展,进一步切分web服务器和数据库压力,解决性能问题。
1
2
3
4
5
6
垂直扩展
a、业务拆分,把不同功能模块拆分到不同的服务器上进行单独部署。比如用户模块、订单模块、商品模块等拆分到不同服务器上部署。
b、读写分离,如果结合数据库缓存后数据库压力还是很大。那可通过读写分离的方式进一步切分及降低数据库的压力。
c、分库分表,在数据库层同样可以把用户模块、订单模块、商品模块所涉及的数据库表等,拆分出来分别存放到不同数据库中。

架构采用:CDN+SLB+ECS+OSS+云Redis/Memcache+RDS读写分离的形式
1
2
3
注意点:
架构中后期业务瓶颈往往集中在数据库层面,业务层通过负载均衡实现水平扩容解决业务服务器处理压力。
业务请求有压力建议采用四层SLB,虚拟主机、证书配置等七层功能需放在后端服务器ECS搭建的nginx上来控制。
架构分布式+大数据阶段:水平扩展
1
2
访问量达到5千万PV以上
此时数据量达到TB级别以上,显然已达到传统关系型数据库处理的极限。读写分离仅解决读的压力,面对高访问量在写上达到瓶颈。
1
2
3
4
5
6
7
水平扩展
a、增加更多的Web服务器,在将业务垂直拆分分布部署在不同服务器后,当后续压力进一步增大时可增加更多的webserver进行水平扩展。
b、增加更多的SLB,单台SLB也存在单点故障风险并且存在性能极限。如七层SLB的QPS最大值为5w。可通过DNS轮询,将请求轮询转发至不同可用区的SLB上实现SLB的水平扩展。(同一DNS解析到不同SLB的IP)
c、采用分布式缓存,采用redis集群等,缓存有最大吞吐峰值。
d、Sharding+NoSQL,面对高并发、大数据的需求,传统的关系型数据库已不再适合。采用DRDS(mysql sharding分布式解决方案)+ OTS(基于列存储的分布式数据库)对应的分布式数据库从根本上解决问题。

采用架构:CDN+DNS轮询+SLB+ECS+OSS+云Redis+DRDS+OTS

-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。