架构师训练营第四周作业

发布于: 3 小时前
架构师训练营第四周作业

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。

大型互联网应用系统为了应对高并发大流量高可用海量的数据存储、用户分布广泛,网络情况复杂、安全环境恶劣、需求变化快,发布频繁、根据不同的成长阶段主要会采用以下技术方案和手段针对不同阶段去解决不同的问题。

一、用户规模达到十万级阶段

应用服务器与数据库分离动静分离(动态请求与静态图片文件资源分离)、分布式缓存负载均衡服务器集群提升系统性能。

(应用服务器与数据库服务器分离)主要是通过垂直伸缩的手段提升应用性能。

动态请求与静态资源分离 由于静态图片文件等资源通常都比动态请求返回给客户端的数据量更大,且占用的带宽更高,如果在同一个服务器同一个网络出口会对动态请求响应产生很大的影响。

分布式缓存 通过缓存将应用程序的一部份对数据库读操作的压力分散到缓存服务器,减少数据库CPU压力。因为数据库的数据数据是存在磁盘上的,访问数据库需要花费更多的时间,而缓存中的数据只是存储在内存中的,访问时间更短;并且缓存的就是这个对象,不需要进行对象的计算,这样就减少了计算的时间,

缓存主要有分布式缓存本地缓存两种 通常的作法是先访问 本地缓存->分布式缓存->数据库

服务器集群 通过将应用部署在多台服务器,利用负载均衡 来分担单台服务器压力,提高应用并发处理能力。

二、用户规模达到百万级阶段

通过增加 CDN反向代理数据库读写分离 进一步提升系统访问和计算能力。

CDN 用户规模不断的增长,用户分布也更加广范。为了提升用户体验、快速响应客户请求,我们需要将静态资源部署在离用户最近的机房中,这时候就需要利用 CDN反向代理 的方案来提升应用性能。

数据库读写分离 当用户越来越多数据库将会成为瓶颈,因为用户的访问虽然可以从缓存中读取,但是还有一部分读操作在缓存中找不到,还需要访问数据库,而且所有的写操作几乎都要访问数据库,这时候数据库就会成为瓶颈。单一的数据库不能够承受这么大的访问压力,所以需要对数据库进行改造。采用读写分离方案 将一个数据库通过数据复制的方式,分裂为两个数据库,主数据库主要负责数据的写操作,所有的写操作都复制到从数据库上,保证从数据库的数据和主数据库数据一致,而从数据库主要提供数据的读操作。

三、用户规模达到千万级阶段

通过增加 分布式数据库分布式文件系统 进一步提升系统访问和计算能力

分布式数据库 数据库永远都会是为瓶颈,随着用户的不断增加,系统的数据量也在爆发式增长,主从数据库也不能够承受这么大的访问压力和存储容量要求,这时候就需要对数据库做进一步水平伸缩,这个时候就使用分布式的数据库,通过数据分片的方式,将一张表的数据分布在多个物理服务器上,以减少单一数据库的服务器访问压力。通过这样的手段可以进一步的提升系统的处理能力。

分布式数据库 主要的手段 分片分组

分片(sharding) 数据分片是按照某个维度将存放在单一数据库中的数据分散地存放至多个数据库或表中以达到提升性能瓶颈以及可用性的效果。 数据分片的拆分方式分为垂直分片水平分片 。

垂直分片 将数据按照业务进行拆分的方式即是专库专用。即多表进行归类存储,将原来在同一个库中的不同表,按照业务的不同存储在不同库中,来减少单库的访问压力。

水平分片 是对于单表数据进行拆分,拆分标准也不再基于业务逻辑,而是将字段根据某种规则将数据分散到不同的表或库中。每个分片只存储一部分数据,常见的是根据主键分片 如:奇数放0库,偶数放1库。

分组(group) 分组解决可用性问题,分组通常通过是一主多从,或者多主多从。

分布式文件系统 当用户上传的海量文件数据、或者系统收集的用户行为数据,这类海量的数据都需要分布式文件系统来进行管理。

四、用户规模达到亿级阶段

NoSql和搜索引擎分布式消息队列服务分布式服务微服务中台化 等手段来提升系统访问和计算能力。

NoSql 分为:KV型 、搜索型、列式、文档型、时序型。

KV型 如:Redis 通常用来做为分布式缓存服务器,基于内存的存储容量有限。

搜索型 如:Elasticsearch 通常用来解决海量数据条件过滤或者全文检索、分库分表后多表全量聚合查询等问题。

列式 如:Hbase 海量数据无限存储,PB级别数据随便存,底层基于HDFS(Hadoop文件系统),数据持久化。读写性能好、水平扩展很容易、成本低、高可用、可存储结构化或者半结构化的数据。通常用来存储商品信息、交易快照、订单详情 之类的弥补KV型不足的方案。

文档型 如:Mongodb 是一种没有Schema特型的关系型数据。通常我们可以将 操作日志、冷数据(如订单历史数据)存储在Mongodb中以减小Mysql数据库的压力。

分布式服务 随着业务的增加,很多的业务都有一些重复的服务功能需要复用,这时候可以使用分布式的服务去解决服务的复用问题。

分布式消息队列服务 随着业务的增加不同的服务之间不同的应用之间,它们的耦合关系会使得系统更加复杂。这时候使用分布式消息队列服务,将不同的应用服务器进行解耦,使它们之间的关系变得低耦合,通过消息进行连接,而不是服务调用的方式或者应用调用的方式进行连接,使服务变得更加的简单,使系统的处理能力和扩容能力变得更加的强大。

微服务 是利用容器技术、编排框架等按单一责职原则进行最小化粒度拆分,通过api 对外提供服务的一种模式,并且具有隔离性、高可用弹性可伸缩可替代的特点。例如:会员注册这个功能,原来可能是放在会员系统中的一个功能,突然某一天用户注册成井喷式增长,产生大量的并发请求,这样会造成会员系统中其他功能不可用造成更大面积的影响。如果会员注册这个功能采用微服务的方式组织,当突然产生大量的并发请求时,不会造成其他功能影响,同时可以通过容器技术、编排框架 进行扩容提升处理能力,当访问量下降后可以自动释放空闲的资源。

注:

要解决各个介段的问题时,需要遵循一个原则:渐进式发展思路 不可 一上来就设计一个高并发、分布式、微服务架构的应用,并且 如果当某个问题通过 垂直伸缩 所需要成本(时间、人力) < 水平伸缩 所需要成本(时间、人力)就最好用 垂直伸缩 ,互联网应用都是从一点点由小做到大,由大做强的;所以我们的系统架也应遵循由简到繁的过程

用户头像

Bruce Xiong

关注

熊大 2017.10.18 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第四周作业