浏览器端
:浏览器缓存、使用页面压缩、合理布局页面、CDN、资源动静分离
服务器端
:缓存热点数据(本地缓存、分布式缓存)、异步(消息队列)、集群
代码层面
:改善内存管理、多线程、批处理、SQL优化
数据库
:索引、读写分离、分库分表
目标
:一般需要做到99.99%可用,终极目标时7*24
方案
:冗余,集群、灾备、多活等确保不会因为局部故障导致全局不可用或可迅速恢复;灰度发布确保不停机上线;
目标
:应对大量用户高并发请求、海量数据存储时,方便扩容
方案
:在不影响系统运行情况下,可加入新的机器、缓存、数据库到集群中
目标
:快速响应各种变化的需求,实现功能平滑扩展
方案
:事件驱动架构(消息队列解耦业务)、服务化(分布式、微服务)实现服务服务员和独立扩展
目标
:网络安全、应用安全、数据安全
分层
:横向切分,让每一层职责更独立,便于管理、分工和维护,如MVC
分割
:纵向切分,将复杂系统按业务模块进行高内聚切分,便于开发、维护、分布式部署,如单体应该切分为面向服务应用
分布式
:分布式意味着可以调动更多的机器、CPU、内存、储存资源进行计算和处理,提高系统性能和并发能力
集群
:集群其一是解决单机并发瓶颈,其二是为了实现系统高可用
目的
:缓存就是将数据存在距离计算最近的位置以加快处理速度。
使用场景
:一是数据访问热点不均衡,某些频繁访问数据应该放入缓存;二是数据更新较低频,在某个时间内有效,不会很快过期,否则可能读到过期的脏数据;
使用消息中间件,进行系统异步解耦,提高性能,应对高并发
服务器
:集群,确保7*24服务
数据
:灾备、异地多活数据中心,确保故障快速恢复
目的
:提高效率、减少人为干预故障、确保运维稳定性
方案
:自动化发布(CI/CD)、自动化监控预警
网络安全、应用安全、数据安全
1)单体架构
:业务初期,用户量较少,单体性价比最高
2)应用与数据分离
:业务量上升,一台机器无法满足需要,性能逐步下降,开始进行分离
3)缓存引入
:业务量继续上升,应用性能下降,引入缓存,将热点数据放入缓存服务器,减小数据库压力
4)读写分离
:全部写都访问数据库,越来越多读依然访问数据库,数据库成为瓶颈,拆分为主从读写分离模式
5)集群与分布式
:为应对高并发和保证高可用,扩展集群,同时将单体系统根据业务模块拆分为独立服务部署(如用户服务、订单服务、商品服务)
6)微服务
:引入微服务组件,搭建可以满足大量用户访问与海量数据存储的互联网应用