【第四周】学习总结——架构演进、模式、技术和案例分析
互联网系统面临多种挑战:
高并发、大流量
高可用
海量数据
用户分布广泛,网络环境复杂
安全环境恶劣
需求快速变更,发布频繁
渐进式发展
应对高并发的两个技术方向:
垂直伸缩
水平伸缩
一、架构演进
第零阶段,最简单的互联网应用架构
单服务器。业务应用,数据库,文件存储都在一台服务器上。
第一阶段,应用和数据分离
业务应用,数据库,文件存储各一个服务器。服务器变多,能够提供的并发访问能力也变强了。
第二阶段,使用缓存改善性能
大量的用户访问都是读操作,数据都是走数据库,数据库压力就会比较大。这时候对某些业务场景或热点数据采用缓存策略,减少对数据库的访问压力。
第三阶段,使用集群改善系统并发处理能力
单台服务器的系统资源是有限的,比如cpu的处理能力,能创建的线程数等,所以能处理的并发请求能力是有限的。当更多用户来访问的时候,就会出现访问超时和服务拒绝等,这时候可以使用集群来改善并发处理能力。
通过增加机器,提升系统资源,从而服务更多用户并发。
通常已能够满足很多场景。
第四阶段,数据库读写分离
用户访问继续变大,数据库的写入压力也越来越大,而数据库的读取,虽然一部分进行了缓存,但还是会有很多访问到达数据库。这时候可以进行数据库读写分离,比如主从复制模式,以提高系统负载压力。
可采用的模式有:主主复制,主从复制,一主多从复制
第五阶段,使用反向代理和CDN加速响应
反向代理和CDN可以解决静态资源的快速访问问题,以减少后台服务器的压力。
具有某些行业特点的场景,这个阶段的升级可能会先于第四阶段。因为数据库资源和静态资源是独立的两部分资源,主要看哪部分会先成为系统瓶颈。
第六阶段,使用分布式文件系统和分布式数据库系统
数据库主服务器还是只有一台,写压力不能承受的时候,就需要采用分布式数据库。比如十亿用户,拆分成一百片,每一片存储在不同的服务器,每个服务器就只有一千万用户数据。
假如商品又几十亿,每个商品又几十个图片,这样几百亿个图片,也是一样分布式存储在几百台服务器。有分布式小文件系统和大文件系统,技术方案又不一样。
如果能垂直伸缩,还是可以先考虑垂直伸缩,增强单服务器资源和处理能力。比如淘宝早期使用小型机和Oracle。
第七阶段,使用nosql和搜索引擎
用户量继续增加
数据库查询效率比较低,特别是某些场景,而且数据库资源是比较宝贵的。那么有些数据可以索引到搜索引擎,通过搜索引擎进行查找。
有些数据没有事务要求,数据访问量也比较大,可以使用nosql进行存储访问。
第八阶段,业务拆分
用户量继续增加
比如淘宝可以拆分买家,卖家,还可以继续拆,如首页,搜索,列表,详情,订单,购物车等。系统之间可以通过url,消息队列等进行跳转和协助。每个业务都可以有自己的系统及资源架构。
淘宝发展到上万人开发,也不能都开发一个应用,自然拆分成很多细分业务进行开发,由不同研发部门进行负责,每个页面都有一个团队,甚至多个团队来完成。
第九阶段,微服务及中台化
项目越来越大,其中会有很多共用的业务,比如用户jar包,大家都会需要,当不满足时就会进行定制,依赖管理会越来越复杂,版本也不可控,每个应用也会变得很大。
这个时候就可以演进成微服务方式,服务是可复用的,不再依赖jar包,最后演化构建成一个中台。
第十阶段,大数据和智能化
有的应用是以大数据和智能化做延申的,有的应用是以大数据和智能化为核心的,像今日头条就是围绕着大数据和智能化去构建系统。
二、互联网架构模式
分层
网关》微服务(内部分层)》基础设施(缓存、消息队列、数据库)
分割
分层是横向切分,分割是纵向切分
系统越大,功能越复杂,每块业务切分出来,切分成高内聚低耦合的单元
一方面有助于软件开发维护,另一方面有助于分布式部署,提高并发处理和功能扩展能力
分布式
切分的系统进行分布式部署,分布式意味着更多的计算机,更多的系统资源,能处理更多的并发和数据量就越大。
分布式应用和服务
分布式静态资源
分布式数据和存储
分布式计算
集群
拆散的每一块再做集群,通过负债均衡对外提供服务,系统资源将变得更加庞大。
缓存
就近获得数据,减轻数据库压力
CDN
反向代理
本地缓存
远程缓存
异步
一般采用消息队列
提高系统可用性
加快系统响应速度
消除并发访问高峰
冗余
互联网系统7*24小时运行,避免不了服务器故障或宕机,如果要保证系统继续服务,就需要进行服务器冗余运行和数据冗余备份。
自动化
主要体现在运维方面
安全
防丢失,防泄密,防攻击,交易风险控制
三、架构核心要素
满足功能需求,满足非功能需求
非功能性有五个方面
高性能
高可用
可伸缩
可扩展
安全
四、互联网架构技术
前端架构
App及Web开发技术
浏览器及HTTP优化技术
CDN
动静分离
图片服务
反向代理
DNS
网关及应用层架构
网关架构
负载均衡
动态页面静态化
业务拆分
服务层架构
微服务框架
分布式消息队列
分布式缓存
分布式一致性(锁)服务
存储层架构
分布式文件
分布式关系数据库
NoSQL数据库
后台架构
大数据平台
搜索引擎
推荐引擎
数据仓库
运维与安全
数据采集与展示
数据监控与报警
攻击与防护
数据加密与解密
五、案例分析学习
维基百科
淘宝
略
微博
略
五、小结
很多知识点或多或少有一些认知了解,但要进行整体贯通,进行体系的讲解,还是有很大难度,如果要深入就更难了,所以还要再进行复习梳理。
版权声明: 本文为 InfoQ 作者【三尾鱼】的原创文章。
原文链接:【http://xie.infoq.cn/article/d9740807f79ce1aba9c87549e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论