大型互联网应用的发展和未来
典型的大型互联网应用
特点
典型的大型互联网应用具有以下特点
高并发,大流量
高可用
海量数据
面对的网络环境复杂
易受到攻击
迭代快
渐进式发展
应对技术方向
应对高并发问题的技术策略:
垂直伸缩
通过升级硬件和网络吞吐能力可以有效的提升系统性能。常见的方法有
使用RAID增加I/O吞吐能力
使用SSD提升I/O访问速度
增加内存减少I/O操作
升级/添加网络接口提升网络吞吐能力
更换服务器,使用更好的CPU提升处理能力
垂直伸缩的缺点:
达到某个程度之后花费代价太高
存在物理极限
操作系统设计或者应用本身设计制约垂直伸缩只能达到某个点
水平伸缩
水平伸缩就是通过增加服务器来提升性能。
水平伸缩很好的解决了垂直伸缩花费代价大和单台服务器极限的问题。
水平伸缩在初始阶段花费比垂直伸缩高,但是达到一定程度之后水平伸缩更具有优势。
核心要素
典型的大型互联网应用核心要素包括:性能,可用性,扩展性,伸缩性和安全性
大型互联网架构演进
典型的大型互联网应用主要经过了以下几个阶段:
早期的单服务阶段。这个系统架构均部署在同一台的服务器上,此时系统面对的请求和用户很少,这样的部署更加快速高效和低成本
应用数据分离阶段。随着用户量增加,整个系统存储的数量开始大量增加,这个时候就需要将数据存储和应用分离,一般这个阶段会部署三台主机,分别部署应用,文件存储系统和数据存储系统。
使用缓存提升性能阶段。系统访问满足二八定律:80%的业务访问集中在20%的数据上;大量请求集中在少数优质商品上;活跃用户占总量的部分。因此使用缓存将这些数据缓存起来,减少数据库访问能提升整体性能。
集群部署阶段。通过负载均衡调度使用多台服务器部署集群去处理高并发和海量数据是一个很有效的办法,因为单台服务器的性能和承载量都是有上限的
数据库读写分离阶段。大型应用中读请求远远多于写请求,即使用了缓存将热点数据缓存起来之后,应用中的写请求也远远多于写请求,通过读写分离的架构可以将读写压力隔离,读请求分摊到多个从节点去,从而提升整体数据读写性能。
反向代理&CDN加速阶段。反向代理和CDN都是通过它们的缓存提升系统整体性能的,它们的区别是CDN是将静态资源缓存在运营商的服务器上,而反向代理是将静态资源缓存在了反向代理服务上。
分布式文件系统&分布式数据库系统阶段。当大型互联网应用系统业务持续增长之后,任何单台服务器都无法满足业务扩展的需求了,因此在这个阶段出现了分布式文件系统和分布式数据库用来处理海量的文件存储和数据存储。
NoSQL&搜索引擎阶段。随着业务越来越复杂,单一类型的数据库越来越无法高效的应对业务数据存储和检索需求,因此采用了一些非关系型数据库例如MongoDB、K-V存储、图数据库等,同时引入了非关系数据库查询技术,例如搜索引擎。
业务拆分阶段。面对日益复杂的业务场景,从业务场景的角度对业务进行拆分,通过单一内聚的业务职责划分,让单个业务场景的子系统更容易升级维护。
微服务&中台化阶段。微服务相比于烟囱型架构基于提升效能,消除重复,职责聚焦的视角。而来中台化是平台化的自然演进,以进一步通过改变组织阵型提升效能、数据化运营、更好支持业务发展和创新。
未来阶段。从当前的发展趋势来看,未来可能会朝着服务网格、无服务器化和人工智能架构的方向发展。服务网格(Service Mesh)是服务间通信的基础设施层,负责服务之间的网络调用、限流、熔断和监控。无服务器架构说白了就是ALL in cloud,就是服务器端逻辑仍然由应用程序开发人员编写,但是与传统体系结构不同,它运行在无状态计算容器中,这些容器是事件触发的短暂的,并且完全由第三方管理。目前人工智能发展火热,各种新型架构如春竹涌出,机器学习框架,深度学习框架等等,未来AI还将有很大的发展,不久的将来会深深的影响整个软件行业。
互联网架构模式
分层
分层是最常见的一种架构模式,将系统在横向维度分成几个职责较单一的模块,然后通过上下层直接的依赖调度组成一个完整的系统。最常见的分层是将系统分成:展示层、应用层、服务层和存储层。
分割
分割和分层相比,就像是从纵向进行分层,将业务拆分成多个独立的应用,这些应用无论是物理上还是逻辑上都是独立的。例如将商城切分成会员、商品、商家、订单等。
分布式
分布式的目的是使用更多的服务器来处理同一个功能,分层和分割的最终目的也是为了实现分布式部署。常见的分布式方案有:
分布式应用和服务
分布式静态资源
分布式数据存储
分布式计算
集群
分布式是指系统内的多个模块物理隔离部署,而集群是指单个模块的多服务器部署,即多台服务器部署相同的应用构成一个模块集群。
缓存
缓存可以理解为两种快速:
1、访问路径最近,数据返回快速;例如CDN和反向代理,这两种缓存就是通过将数据存放在离请求者更近的请求路径上而加快响应返回的。
2、数据I/O快速。例如本地缓存和分布式缓存,这两种缓存方式是通过I/O读写速率的提高来提高响应速度的
异步
异步最常见的方式就是使用消息队列,其作用如下:
提高系统可用性
加快系统响应速度
消除并发高峰
冗余
冗余的目的是保障系统的高可用,也就是通俗的7 X 24 小时连续运行。常见的方式有:主备、多机房和异地多中心
自动化
自动化的目的是在无人值守的时候系统也可以平稳的运行。大型互联网系统可包含的自动化包括:
自动化发布
自动化代码管理
自动化测试
自动化安全检查
自动化部署
自动化监控
自动化失效转移
自动化失效恢复
自动化降级
自动化伸缩
安全
互联网应用的安全方法有
使用应用防火墙
网站用户身份认证
数据加密传输
对用户行为日志记录和分析,做风控管理
非正常请求的监测、过滤和阻断
合理的站点规划和分割
使用负载均衡和负载保护策略
有容灾备份和恢复方案
规范化的管理规章制度
互联网架构技术
互联网架构技术分层情况如下:
各类架构技术细分如下:
总结
为了能让应用系统在庞大复杂的互联网环境上高效、平稳和安全的运行,为了能让业务快速适应互联网的发展,为了满足大型互联网系统的核心要素,整个互联网行业在不断的探索前行,互联网发展历程中的每种架构模式,每个技术方法都见证了历史,即使在当前数据爆发的情况下,每个模式,每种技术方法也都还有勇武之地。伴随着AI、云服务和架构理念的发展,未来的互联网应该是一个海量数据的,智能的,基于云和服务网格的时代。
版权声明: 本文为 InfoQ 作者【拈香(曾德政)】的原创文章。
原文链接:【http://xie.infoq.cn/article/d71ab9da56cf657e368df5287】。文章转载请联系作者。
评论