架构训练营——第四周学习总结
系统架构
互联网系统面临的挑战
高并发 大流量
高可用
7x24 小时不间断提供服务
海量数据
用户分布广泛 网络情况复杂
一些强依赖国外用户的大型网站,不得不在海外建立数据中心
安全环境恶劣
大型网站几乎每天都会遭到黑客攻击
需求快速变更 发布频繁
渐进式发展 小步快跑
高并发挑战
高并发场景下真正的问题,在于每个请求都需要消耗系统资源(包括内存、CPU、磁盘 IO、网络带宽),并发量较大时系统资源会达到瓶颈
应对高并发问题,本质上就是要增加服务的计算资源,同时减少大量请求对于计算资源的消耗
解决方案
垂直伸缩
提升单台服务器的计算资源
通过升级硬件来实现垂直伸缩
使用 RAID(独立冗余磁盘阵列)提升 I/O 吞吐能力
将机械硬盘升级到 SSD(固态硬盘)提升磁盘 I/O 访问速度
增大内存以减少磁盘 IO 次数
升级网络接口或者增加网络接口以提高网络吞吐能力
更新服务器,使用更多处理器或者更多超线程
由于不需要改变整体技术架构,因此垂直伸缩通常被认为是最简单的短期优化方案
缺点
达到某个临界点后,成本的投入和服务能力的提升就是非线性的了
垂直伸缩有物理极限
受操作系统和应用程序的制约,垂直伸缩效果可能并不理想
水平伸缩
通过增加服务器的数量来提升计算能力
水平伸缩可以克服垂直伸缩带来的单位计算成本随计算能力增加而迅速飙升的问题
一般来说,水平伸缩总是可以增加更多服务器,不受单台服务器瓶颈的限制
我们学习的各种分布式技术,就是用来解决多台服务器如何构成一个集群对外提供服务,以满足高并发的用户访问
互联网架构演化
阶段零:单体应用
应用程序、文件系统和数据库部署在同一台服务器上
当并发量较高时,不同应用程序会争用服务器资源,最终导致资源耗尽
阶段一:应用数据分离
应用程序、文件系统和数据库服务独立部署
仅需对单体应用简单改造,即可提升整体服务能力
虽然处理方式比较简单,但是体现了互联网架构演化的一个基本思路:将大量的请求分摊到不同的服务上去执行
阶段二:使用缓存改善系统性能
本地缓存
远程分布式缓存
单台应用服务器无法满足高并发访问需求
阶段三:使用应用服务器集群改善系统的并发处理能力
通过负载均衡调度服务器,将用户请求分发到不同的应用服务器
每台应用服务器只分摊一部分用户请求
数据库的读写能力成为整个系统瓶颈
数据库的读写能力成为整个系统瓶颈
阶段四:数据库读写分离
主库处理读写请求
从库处理读请求
阶段五:使用反向代理和 CDN 加速网站响应
CDN:内容分发网络,CDN 服务器部署在网络运营商的数据中心,本质上是一个缓存服务
我们自己的应用服务部署在我们自己的数据中心
我们可以将自己应用服务的数据缓存在网络运营商的 CDN 服务器中,这样当用户请求我们的应用时,CDN 服务器就可以直接返回结果,大大减轻我们自己应用的负载
CDN 可以选择距离请求用户最近的服务器
通常可以将视频、图片、HTML 网页等静态资源缓存在 CDN 中
反向代理服务器是代理我们自己整个数据中心的服务
CDN 和负载均衡服务器会拦截掉大量的静态资源请求
数据库的存储容量和主库的写操作是瓶颈
阶段六:分布式文件系统和分布式数据库
关系型数据库分片集群
分布式文件系统
分布式缓存
无法应对复杂维度的搜索和查询
阶段七:使用 NoSQL 和搜索引擎
分布式 NoSQL 集群
分布式搜索引擎
阶段八:业务拆分
阶段九:微服务与中台化
阶段十:大数据与人工智能
大数据采集与分析
用户画像 千人千面
智能推荐
架构模式
模式是对于一系列重复发生的问题的通用解决方案
模式的关键在于可重复性:问题与场景的可重复性带来解决方案的可重复使用
常用架构模式
分层
在横向上对软件进行切分
分层后,不同层次的模块可以部署在不同的服务器集群上,实现分布式的分层结构
分割
在纵向上对软件进行切分
分布式
在进行横向分层、纵向分割后,系统就被划分成了一个个独立的模块,每个模块可以独立开发、部署和维护
将不同的模块部署在不同的服务器上,模块之间通过远程调用进行通信
集群
多台服务器部署相同的应用,构成一个集群,通过负载均衡服务,以整体的形式统一对外提供服务
缓存
缓存的本质,就是将数据存放在距离计算最近的位置,以加快响应速度
缓存是改善软件性能的第一手段
典型的缓存服务
CDN
反向代理
应用本地缓存
远程分布式缓存
异步
事物之间越少直接关联,那么就越少被彼此影响,越可以独立发展
异步的目标就是解耦
异步的优势
提升系统可用性
加快网站响应速度
削平并发访问高峰
冗余
冗余是保证服务可用性和数据可靠性的重要手段
服务冗余
数据冗余
自动化
目前互联网的自动化架构设计主要集中在运维方面
安全
通过手机号、验证码进行身份验证
登录、交易等操作,对网络通信进行加密
图片验证码防止机器人恶意刷
防止 XSS 攻击,SQL 注入
对敏感信息进行加密存储
对垃圾信息进行过滤
对支付、交易等重要操作进行风控
互联网系统架构的核心要素
高性能
很多时候,性能问题是系统架构优化升级的触发器
任何架构设计方案都必须考虑性能问题
高可用
高可用是硬指标
高可用的主要手段就是冗余
可伸缩
衡量伸缩性的标准:是否容易向集群中添加新的服务器,且提供的服务在功能上与原来无差别
分布式关系数据库的伸缩性就差一些,相对来说 NoSQL 的可伸缩性就很好
可扩展
主要关注功能性需求
衡量伸缩性的标准:是否容易向集群中添加新的服务器,且提供的服务在功能上与原来无差别
可扩展架构的主要手段是事件驱动架构和微服务架构
安全
架构技术概览
前端架构
APP 及 WEB 开发技术
浏览器与 APP 相关技术
CDN
动静分离
图片服务
反向代理
DNS
网关及应用层架构
网关架构
负载均衡
动静页面分离
业务拆分
微服务架构
微服务治理
分布式缓存
分布式消息
分布式一致性
存储层架构
分布式文件系统
分布式关系型数据库
分布式 NoSQL 数据库
基础设施架构
大数据平台
搜索引擎
推荐引擎
数据仓库
数据中心和机房硬件架构
安全架构
数据采集与监控架构
维基百科技术架构
十几个人的团队,维护了全球第六大的互联网应用
GeoDNS
基于地理位置的 DNS 服务
根据用户请求所在的 ip 地址,返回距离用户最近的负载均衡服务器的 ip 地址
维基百科在全球部署了 3 个数据中心,GeoDNS 提供了用户就近访问的能力
LVS
负载均衡服务
Squid Caching Layers
Squid:网站静态资源缓存代理服务
Application Servers
PHP 应用服务集群
部署在 Apache 服务器上
Distributed Object Cache
基于 Memcached 分布式缓存服务
Core Database
MySQL 主从集群
Image Server
Lighttpd
Search Engine
基于 Lucene 的搜索引擎
Invalidation Notification
失效通知服务
当词条被修改时,通知 Squid 缓存失效
淘宝业务发展及技术架构
是业务的发展,驱动了技术的发展。技术是为业务服务的。
评论