互联网架构总结
互联网架构总结
1. 互联网系统面临怎样的挑战
高并发:需要面对高并发用户,大流量访问。日活亿级。
高可用:系统7×24小时不间断服务。
海量数据:需要存储、管理海量数据。日增PB数据。
用户分散/网络情况复杂:许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别。
安全环境恶劣:大型网站几乎每天都会遇到黑客攻击。
需求变更迭代快:互联网产品为快速适应市场,满足用户需求,其产品发布频率也是极高的。有时候一天会发布几十次!
发展是渐进式的:不可能一开始就大跃进搞复杂的技术方案,是随着市场和需求变化进行演进。
2. 应对高并发挑战的两个技术方向
垂直伸缩:通过升级硬件和网络吞吐能力实现垂直伸缩。不需要改变应用架构,但成本呈指数增长,并发量过大时未必可行(存在单机的物理极限)。
水平伸缩:通过增加服务器提升计算能力的一类架构方法。架构更加复杂,但克服了成本和极限的限制。
3. 互联网架构演化
Step 0: 一台服务器走天下,应用程序+文件存储+数据库都在一台设备上。
Step 1:应用数据分离。应用程序、文件服务器、数据库服务器三者分离到不同服务器上。
Step 2:增加缓存改善系统性能。应用程序+本地缓存,增加远程分布式缓存。
Step 3:应用程序 -> 应用服务器集群,前端通过负载均衡分发流量到不同的应用服务器。改善了系统的并发处理能力。
Step 4:数据库读写分离。数据库服务器分主从和读库、写库,应用程序的数据访问模块实现读写逻辑分流。
Step 5:增加反向代理和CDN,加速网站响应。部署在load balance之外,借助运营商/云服务商的CDN和backward proxy能力,对应用架构改变少。
Step 6:文件服务器->分布式文件服务器集群,数据库服务器->分布式数据库服务器集群。
Step 7:使用NoSQL和搜索引擎。应用服务基础模块增加统一数据访问模块,提供对NoSQL、File Systems、DB、search engine的服务调用。
Step 8:业务拆分。应用服务 -> 应用服务A/B/C...,应用服务之间通过MQ通讯。
Step 9:进一步微服务化和中台化
Step 10:大数据和智能化
4.互联网架构模式
架构模式类似于设计模式,是一系列重复问题的可复用方案,是价值经验的总结。
4.1 分层
分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统。
4.2 分割
如果说分层是将软件在横向方面进行切分,那么分割就是在纵向方面对软件进行切分。系统越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护;另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。
4.3 分布式
对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着解决同样的问题可以使用更多的计算机,计算机越多,CPU、内存、存储资源也就越多,能够处理的并发访问和数据量就越大。
4.4 集群
使用分布式虽然已经将分层和分割后的模块独立部署,但是对于用户访问集中的模块,比如网站的首页,还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
4.5 缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段,现代 CPU 越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。
CDN
反向代理
本地缓存
远程缓存
4.6 异步
大型网站架构中,系统解耦合的手段除了前面提到的分层、分割、分布等手段,还有一个重要手段是异步,就是将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。
4.7 冗余
互联网应用需要7×24小时连续运行,但是服务器总有可能会出现故障,特别是服务器规模比较大的时候,服务器宕机是必然事件。要想保证在服务器宕机的情况下网站依然可以继续服务,数据不会丢失,就需要一定程度的服务器冗余运行,数据冗余备份。
4.8 自动化
在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。目前互联网的自动化架构设计主要集中在运维方面。
4.9 安全
互联网的开放特性使得其从诞生起就面对巨大的安全挑战,网站在安全架构方面也积累了许多模式
通过密码和手机校验码进行身份认证;
登录、交易等操作需要对网络通讯进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理;
为了防止机器人程序滥用网络资源供给网站,网站使用验证码进行识别;
对于常见的用于攻击网站的XSS 攻击,SQL 注入,进行编码转换等相应处理;
对于垃圾信息、敏感信息进行过滤;
对转账交易等重要操作根据交易模式和交易信息进行风险控制。
5. 如何衡量一个系统的架构设计(架构的核心要素)
高性能:优化网站性能的手段也非常多,从用户端到数据库,从代码到机房部署,影响用户请求的所有环节都可以进行性能优化。
高可用:主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。
可伸缩:是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。
可扩展:主要手段是事件驱动架构和分布式服务
安全:针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略。
6. 互联网架构技术一览
6.1 前端架构
App 及 Web 开发技术
浏览器及 HTTP 优化技术
CDN
动静分离
图片服务
反向代理
DNS
6.2 网关及应用层架构
网关架构
负载均衡
动态页面静态化
业务拆分
6.3 服务层架构
微服务框架
分布式消息队列
分布式缓存
分布式一致性(锁)服务
6.4 存储层架构
分布式文件
分布式关系数据库
NoSQL 数据库
6.5 后台架构
大数据平台
搜索引擎
推荐引擎
数据仓库
6.6 运维与安全
数据采集与展示
数据监控与报警
攻击与防护
数据加密与解密
评论