一个典型的大型互联网应用系统使用了哪些技术方案和手段(四)
一个互联网的应用系统的架构师随着用户量增加,系统规模的增加,系统复杂度的增加而进行演进。架构演进的过程通常的技术手段包括:
数据/对象缓存
数据库读写分离
反向代理,CDN内容分发
分布式数据存储(文件与数据库)
业务拆分,数据分库。
微服务,业务中台。
引入大数据平台
数据/对象缓存
互联网大部分的系统是一个读多写少的系统,如果用户的量达到一定的程度的,数据库读的性能达不到系统访问要求是,可以对数据的查询结果进行缓存的,通常称为对象缓存。
数据库读写分离
由于数据库在写入数据的时候,会进行锁表, 导致数据读的速度变慢。同时,由于读多写少的特点,当写达到一定量之后,数据库读的需求其实更大。
通过数据库读写分离,写操作在主库,读操作在读库;即使写入压力大,读还是正常提供服务的。
但是,由于读库与写库的的数据同步会有延迟,所以要实现多写分离时,要考虑读刚写入的数据有可能读不到的情况。
反向代理与CDN内容分发
当发送给用户的数据改变较少的时候,通常可以直接返回结果缓存起来,如果不同的用户请求相同的内容,就不需要应用服务器从数据库获取,而是直接从缓存中获取返回。反向代理服务器可以根据http协议缓存内容,直接返回个用户。这样的话,应用服务器的访问量就会减少很多。而另一方面,由于反向代理服务器缓存的业务逻辑比较单一,所以通常可以获得单机很高的QPS。
考虑到网络的因素,对于不太变化的内容,即使在反向代理服务器缓存起来了,但由于全世界不同的用户的通过网络到达反向代理服务器的物理距离也会限制用户获取内容的速度。为了缩短反向代理服务器与用户的物理距离,可以反向代理服务器部署在用户相同或者相近的城市,这样,用户到反向代理服务器之间的带宽和响应速度会更好。这样把可以缓存内容的反向代理服务器部署到不同的城市、机房的技术,就是CDN内容分发。
分布式数据存储(文件与数据库)
当用户的访问量对于单个库的访问需求超管数据扩本身的能力之后,就需要对数据库的本身的能力进行扩大,通常是进行数据库设计改成分布在不同的计算机的方案叫做分布式数据库。比如mysql 一主多从;mongodb的cluster模式,将数据、计算分散到不同的计算机,达到数据库本身的存储与访问能力扩大的目的。
同理,文件系统达到了容量与访问量的限制之后,需求进一步的扩展,将文件存储与访问分散到不同的计算机,这就是分布式文件系统。如HDFS。
业务拆分,数据分库
当数据达到了访问瓶颈后,也可以把不同的业务拆分到不同的数据库中,这样也可以达到扩大系统访问能力的目的。业务拆分一方面要进行定义好业务的边界,防止在通过跨数据库级别访问。
微服务,业务中台
当业务拆分成为一定的粒度之后,防止业务之间互相影响,就将不同的业务单独部署一个服务,每个服务的功能都比较单一,这就是微服务。
随着业务拆分,微服务数量增加,微服务的管理就会成为一个问题,需要对微服务进行治理。
将一些复用度高的服务集中起来,形成中心化的服务群,用来解决企业中一些核心的业务问题,这就是业务中台。
大数据平台
随着业务的发展,业务数据越来越多,越来越复杂,对数据收集,分类,汇总,统计,分析的需求会越来越多。传统的应用系统与技术处理大规模数据的能力无法支持业务发展的需要,需要一个处理数据,分析数据更高效的架构,这就是大数据平台。大数据平台通常包括,数据收集清洗、数据仓库、数据分析、数据可视化。
评论