《后端技术面试 38 讲》学习笔记 Day 07
21丨分布式架构:如何应对高并发的用户请求
原文摘抄
当同时访问系统的用户不断增加的时候,需要消耗的系统计算资源也不断增加,需要更多的 CPU 和内存去处理用户的计算请求,需要更多的网络带宽去传输用户的数据,需要更多的磁盘空间去存储用户的数据。当消耗的资源超过了服务器资源的极限的时候,服务器就会崩溃,整个系统无法正常使用。
垂直伸缩与水平伸缩
传统的行业,比如银行、电信这些企业的软件系统,主要是使用垂直伸缩这种手段实现系统能力的提升,在服务器上增强,提升服务器的硬件水平。
所谓的水平伸缩,指的是不去提升单机的处理能力,不使用更昂贵更快更厉害的硬件,而是使用更多的服务器
分布式架构是互联网企业在业务快速发展过程中,逐渐发展起来的一种技术架构,包括了一系列的分布式技术方案:分布式缓存、负载均衡、反向代理与 CDN、分布式消息队列、分布式数据库、NoSQL 数据库、分布式文件、搜索引擎、微服务等等,还有将这些分布式技术整合起来的分布式架构方案。
另一方面,数据库中的数据是以原始数据的形式存在的,而缓存中的数据通常是以结果形式存在
心得体会
- 分布式架构,就是一堆更高吞吐量、更低延迟的支持分布式协议的中间件集群搭配干活的方案,按需引入。
工作体验
- 技术就是遇到瓶颈时的推动,kylin的查询性能优势主要体现在聚合查询,在千万级的明细级查询性能已经不够满足其号称的亚秒级了。而我们系统采取将数据再在ElasticSearch再存一份,明细查询路由到es中。而在kyligence 4.5之后,kylin 引入了clickhourse作为其明细级的查询引擎,称为分层储存。
22 | 缓存架构:如何减少不必要的计算?
原文摘抄
一般说来,缓存可以分成两种,通读缓存和旁路缓存。
通读(read-through)缓存,应用程序访问通读缓存获取数据的时候,如果通读缓存有应用程序需要的数据,那么就返回这个数据;如果没有,那么通读缓存就自己负责访问数据源,从数据源获取数据返回给应用程序,并将这个数据缓存在自己的缓存中。
旁路(cache-aside)缓存,应用程序访问旁路缓存获取数据的时候,如果旁路缓存中有应用程序需要的数据,那么就返回这个数据;如果没有,就返回空(null)。应用程序需要自己从数据源读取数据,然后将这个数据写入到旁路缓存中。
但是缓存也不是万能的,如果不恰当地使用缓存,也可能会带来问题。首先就是数据脏读的问题,缓存的数据来自数据源,如果数据源中的数据被修改了,那么缓存中的数据就变成脏数据了。
主要解决办法有两个,一个是过期失效,另一个办法就是失效通知
如果缓存的数据没有热点,写入缓存的数据很难被重复读取,那么使用缓存就不是很有必要了。
心得体会
- 通读,就是缓存中间件来读取实际数据,往往都是静态的。
- 旁路,应用控制读取实际数据。
工作体验
- 工作中主要是使用redis,或者本地缓存。全都是旁路缓存。并且遵循旁路设计,即使缓存异常、宕机,也不影响请求实际数据。