大型互联网应用系统的技术方案和手段(训练营第四课)
作业:
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
综述
典型的大型互联网应用系统,通常需要应对大流量、高并发的网络请求,并满足高可用、高性能、低延迟、可伸缩、易扩展等特性。为了达到目标,分布式、分层、分割等技术方案应运而生,并结合缓存、异步、冗余等手段来针对性的解决实际问题。
单机垂直伸缩
通常来说,单机可以解决的问题,应该优先考虑单机解决。
通过垂直伸缩的技术方案,采用更高性能、更大存储、更高带宽等物理手段、并结合软件优化等技术手段,从而达到快速解决问题、并降低后期的维护复杂度和维护成本。
分布式水平伸缩
然而对于典型的互联网企业,由于海量的客户请求和数据通常是大大超过了单个机器所能承受的上限;不得不通过分布式的水平伸缩的思路,并结合分层、分割等架构设计和缓存、异步等手段来解决问题。
通常的技术架构如下所示:
其中用到了下面的一些技术方案和手段。
分层
解决复杂系统的常用方案。通过分层,使得每层负责的职责更加清晰、设计更加明朗,并使得团队合作更加容易、更加有的放矢。降低了开发的难度以及后期维护复杂度,为快速迭代和发布提供了可能。
分割
通过把不同的功能和业务分割成不同的模块,使得单个模块由小团队来负责成为一种常态。结合架构设计,可以比较容易地开发出 高内聚低耦合的 系统。
此外,由于不同的功能模块和业务的侧重点和要求也并不完全相同,分割可以使得不同的模块可以根据自己的需求来进行设计、开发、部署、维护,提高了系统的可扩展性、可维护性。
分布式
采用大量的普通计算机、通过分布式的技术方案来解决单机无法避免的能力极限的问题。并引导人们通过易扩展地引入更多的 CPU、内存、存储、以及带宽等资源来解决复杂的问题。
通用的分布式技术方案一般包括:
分布式应用和服务
分布式静态资源
分布式数据和存储
分布式计算
前端架构
前端架构一般应用下面一些技术和手段来解决问题。
DNS、CDN、图片服务等
主要用来解决用户分布广泛、网络情况复杂等问题,并把一些访问量大的静态资源委托给 CDN、图片服务等服务方,从而提高了用户的访问速度和系统的可用性、并降低系统的压力。
反向代理和动静分离
通过反向代理和动静分离技术,减少非必要的应用服务访问和处理,提高了整体系统的响应速度和吞吐量,间接地提高了系统的性能和可用性。
网管和应用层架构
主要有下面一些技术。
负载均衡
避免单点故障问题、并通过负载均衡来动态地调整不同机器和部署的访问量和流量,间接地提高整体系统的可用性。
此外,负载均衡可以方便应用实现动态部署、蓝绿部署等需求。
网关架构
通过网关来控制不同业务访问的流向,避免了非必要的模块访问和处理,节省系统资源并提高模块处理能力。
此外,网关在保护系统安全层面,提供了必要的防护和支持。
业务拆分
解决业务间耦合度高不利于开发、维护等问题;避免大业务大模块带来的系列问题。
服务层架构
微服务架构
通过拆解大系统为微服务,使得业务功能更加清晰、功能划分更加明朗,软件架构高内聚、低耦合等。
本地缓存和分布式缓存
缓存可以有效地降低数据库的访问压力,并提高数据的访问速度,从而提高了系统的并发量和 QPS 等指标。
分布式消息队列
提供了异步处理的能力,解决了同步带来的高延迟问题,提高了系统的性能和稳定性。
存储层架构
分布式文件
提高了系统存储的容量,并可以通过分布式文件系统来提高文件的安全性(多备份)。
读写分离、主从互备
提高数据库的吞吐量,以及系统的可用性,降低系统的故障率(特别是单点故障)
NoSQL 数据库
满足不同业务对非关系型数据的存储、访问需求。
后台架构
数据仓库和大数据平台
数据仓库、数据分析、数据挖掘能力
搜索引擎和推荐引擎
搜索能力
推荐能力
安全和运维
主要提供下列一些能力
数据采集
数据监控
攻击与防护
加密和解密
评论