互联网系统架构设计概览
当前技术发展和更新特别快,面临各种新的架构和技术,我们如何选择,并进行设计?不应该是用比较流行和热门的架构和技术来构建我们的系统,而是根据我们当前公司的业务发展过程中遇到的问题,找到满足当前并支持短期内发展的架构、技术的解决方案,并持续进行迭代优化。我们可从下面几个纬度展开讨论
互联网系统面临挑战
高并发,大流量:BAT的PV达到几十亿, 用户数数十亿,交易额达3000亿
高可用:系统7*24小时不间断服务
海量数据:BAT 每天上次照片达数亿,收录网页数达百亿,服务器数百万台
用户分布广泛,网络情况复杂:各运营商互通难,中美光缆数次故障
安全环境恶劣:容易受到攻击,大型网站几乎每天都会遇到黑客攻击情况,重要网站泄漏用户密码
需求快速变更,发布频繁:为快速适应市场,满足用户需求,需每周发布新版本
渐进式发展:互联网都是从一个小网站开始,渐进发展起来
高并发挑战的两大技术方向
垂直伸缩
通过升级硬件和网络吞吐能力可实现垂直伸缩。不需要改变应用架构,是一种最简单的短期伸缩性方案。
i) 使用RAID(独立冗余磁盘阵列)增加I/O吞吐能力
ii) 切换到SSD(固态硬盘)改善I/O访问速度
iii) 增加内存减少I/O操作
iv) 升级或增加网络接口提高网络吞吐能力
v) 更新服务器(更多处理器,更多超线程)
缺点:
i) 成本,业务达到一定量级,增加硬件成本过高
ii) 有一定物理极限
iii) OS、基础中间件、应用程序自身制约垂直伸缩只能到一个临界点
水平伸缩
通过增加服务器提升计算能力的一类架构方法,可增加更多服务器,突破单台服务器的极限。这种服务器可以是廉价的主机,而不需要昂贵的小型服务器。但需要把多台服务器组合成一个整体的可对外提供服务的集群。
互联网架构演化
第0阶段:单体应用
第1阶段:应用数据分离
第2阶段:引入缓存改善性能
第3阶段:应用服务器集群改善并发处理能力
第4阶段:数据库读写分离
第5阶段:引入反向代理&CDN加速网站响应
第6阶段:使用分布式文件系统和分布式数据库系统
第7阶段:引入NoSQL和搜索引擎
第8阶段:业务拆分,应用服务器拆解
第9阶段:微服务及中台化
互联网的架构模式
每一种模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心,试图去解决互联网系统高性能、高可用、易扩展、可伸缩、安全等目标。具体包含:
分层
将系统在横向纬度上切分成几个部分,每一部分负责比较单一的职责,通过上层对下层的依赖和调用组成一个完整系统。
分割
在纵向方面对软件进行切分,形成一个高内聚低耦合的模块单元。有助于软件开发和维护,还便于分布式部署,提高网站的并发处理能力和功能扩展能力。
分布式
解决同样的问题,可使用更多的计算机,也意味着更多计算和存储资源(CPU、内存、存储),能处理的并发访问和数据量就越大。包含分布式应用和服务、分布式静态资源、分布式数据和存储、分布式计算。
集群
分割后的模块独立部署,但对用户访问集中的模块,需独立部署的服务器集群化,由多台服务器部署相同的应用构成一个集群,通过负载均衡设备来统一对外提供服务。
缓存
将数据存放在离用户最近的位置以加快访问速度,达到访问路径最短的原则。现代CPU性能更强一种重要因素就是使用了更多的缓存。缓存包含:CDN,反向代理,本地缓存,远程缓存
异步
系统解耦除了分层、分割、分布等手段,还有一个手段是异步。将业务操作分成多个阶段,各阶段通过共享数据而不是直接调用的方法进行协作。可提高系统可用性、加快响应速度、消除并发访问高峰。
冗余
服务器总会出现故障,在服务器宕机的情况下依然可以保持提供服务、数据不丢失。就需要一定程度的服务器冗余、数据冗余。
自动化
无人值守的情况下服务依然可以正常运行,是一种理想状态。目前在研发流程、运维方面有比较多的这种自动化架构设计。
安全
互联网开放特性带来了巨大的安全挑战,在安全架构方面也积累了许多模式:身份认证、服务鉴权、加解密、加验签、敏感数据保护、验证码、DDos XSS SQL注入攻击防护、编码处理、网络 数据隔离、风控模型等等
架构核心要素---衡量一个系统的架构设计
高性能
用户无法忍受一个响应缓慢的应用,任何架构设计方案都必须考虑可能的性能问题。很多时间性能问题是系统架构升级优化的触发器。优化手段也特别多,从用户端到应用服务端再到数据库,从代码到机房部署,还有网络方面。需要建立全局的端到端的性能进行监控监测,并解决相应的性能瓶颈问题。
高可用
互联网分布式系统使用都是普通的商用服务器,设计之初并不保证高可用,容易出现硬件故障,造成服务器宕机,这是必然出现的。高可用设计的目标就是当服务器宕机时,服务或应用依然可用。主要手段是冗余,在不同的宿主机上部署多台服务器、数据存储在多台服务器上相互备份,任何一台服务器宕机不会影响应用的整体可用、也不会导致数据丢失。
可伸缩
大型互联网应用通过集群将多台服务器组成一个整体共同对外提供服务。可根据用户访问流量可手动或自动的进行动态调整服务器的资源,集群可容纳总的服务器数量无任何限制。
可扩展
关注系统的功能性需求,互联网应用快速发展、功能不断扩展,设计系统的架构如何快速响应需求变化,是可扩展的主要目的。满足新需求情况下,对现有产品透明无影响,且无需改动或较少改动。主要手段有:事件驱动和分布式服务。
安全
互联网是开放的,任何人在任何地方都可以访问服务或应用。系统安全架构就是保护系统不受恶意的访问和攻击,保护重要数据不被窃取。系统安全架构是针对现存和潜在的各种攻击和窃密手段,是否有可靠的应对策略。
互联网架构技术一览
总体介绍
大前端架构
i) Android , iOS端 技术
ii) Web端 技术
iii) 跨平台技术
iv) 网络: DNS , CDN , HTTP
v) 动静分离,图片服务
vi) 反向代理
网关及应用层架构
i) 网关技术:流量调度、资源调度
ii) 负载均衡
iii) 动态页面静态化
iv) 业务拆分
服务层架构
i) 微服务框架
ii) 分布式消息队列
iii) 分布式缓存
iv) 分布式一致性(锁)服务
存储层架构
i) 分布式文件/图片系统、块存储
ii) 分布式关系数据库
iii) NoSQL数据库
后台架构
i) 大数据平台
ii) 搜索引擎
iii) 推荐引擎
iv) 数据仓库
v) 运营平台
运维与安全
i) 数据采集与可视化
ii) 监控&告警
iii) 攻击和防护
iv) 数据加解密,加验签
大型网站技术架构实践
维基百科
用简单的技术架构也可构建全球Top10流量的网站
淘宝
根据业务的发展持续迭代优化架构设计
初创互联网公司
1.0版本
2.0版本
3.0版本
大数据平台架构
版权声明: 本文为 InfoQ 作者【dony.zhang】的原创文章。
原文链接:【http://xie.infoq.cn/article/39c64444e78d7142733534289】。文章转载请联系作者。
评论