大型互联网应用面临的挑战
随着网络的发展,大型的互联网应用被越来越多的人使用,只要面临着如下的挑战:
- 用户多,分布广,在网络全球化的今天,大型的互联网应用需要为全球的用户提供服务,用户分布范围广;
- 要解决大量用户同时在线的高并发问题;
- 更严峻的存储挑战,需要存储用户的大量数据;
- 高可用的挑战,提供高可用的服务保障
大型应用的发展历程
好的互联网产品都是渐进式发展的,一开始只是一个好的想法,开始的用户也不是很多,单一的服务器就可以满足需求,早期可以通过垂直伸缩提高服务器性能来解决应用的性能问题。
随着产品用户越来越多,单一服务器已满足不了需求,此时通过水平扩展,通过增加服务器将应用和数据库、文件系统分离的方式提高应用服务器的计算和吞吐能力。
随着用户的再次增长,单台应用服务器也达到了负载的极限,此时可以搭建简单的应用服务器集群来进一步提高系统的性能,随着发展的需要出现了分布式的文件服务,分布式数据库等等。
发展到今天,通过业务拆分微服务的方式,构建业务中台和数据中台,使得应用可以为全球数亿的用户提供高质量的服务。
互联网系统架构核心要素
高性能
性能是互联网的一个重要指标,除非是没得选择,否则用户无法忍受一个响应缓慢的应用。一个打开缓慢应用会导致严重的用户流失,很多时候系统性能问题是系统架构升级优化的触发器。可以说性能是互联网系统架构设计的一个重要方面,任何架构设计方案都必须考虑可能会带来的性能问题。
高可用
因为互联网分布式系统使用的服务器硬件通常是普通的商用服务器,这些服务器的设计目标本身并不保证高可用,也就是说,很有可能会出现服务器硬件故障,也就是俗称的服务器宕机。大型互联网系统通常都会有上万台服务器,每天都必定会有一些服务器宕机,因此系统高可用架构设计的前提是必然会出现服务器宕机,而高可用设计的目标就是当服务器宕机的时候,服务或者应用依然可用。
可伸缩
大型互联网应用通过集群的方式将多台服务器组成一个整体共同提供服务。所谓伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
可扩展
不同于其他架构要素主要关注非功能性需求,扩展性架构直接关注系统的功能需求。互联网应用快速发展,功能不断扩展,如何设计系统的架构使其能够快速响应需求变化,是系统可扩展架构主要的目的。
安全
互联网是开放的,任何人在任何地方都可以访问系统。系统的安全架构就是保护系统不受恶意访问和攻击,保护网站的重要数据不被窃取。
互联网架构技术
前端架构
- App及Web开发技术
- 浏览器及Http优化技术
- CDN技术
- 动静分离
- 图片服务
- 反向代理
- DNS
网关及应用层架构
- 网关架构
- 负载均衡
- 动态页面静态化
- 业务拆分
服务层架构
- 微服务框架
- 分布式消息队列
- 分布式缓存
- 分布式一致性服务
存储层架构
- 分布式文件
- 分布式关系型数据库
- NoSql数据库
后台架构
- 大数据平台
- 搜索引擎
- 推荐引擎
- 数据仓库
运维与安全
- 数据采集与展示
- 数据监控与报警
- 攻击与防护
- 数据加密与解密