名词解释总结
微服务相关:
SpringCloud各个组件:
- Eureka 服务发现框架
- Ribbon 进程内负载均衡器
- Open Feign 服务调用映射
- Hystrix 服务降级熔断器
- Zuul 微服务网关
- Config 微服务统一配置中心
- Bus 消息总线
服务雪崩:(服务A—调用—>服务B—调用—服务C ) 假设因为某些原因服务C顶不住了,这就会有大量请求在服务C阻塞,服务C阻塞了还好,毕竟只是一个系统崩溃了。但是请注意这个时候因为服务C不能返回响应,那么服务B调用服务C的的请求就会阻塞,同理服务B阻塞了,那么服务A也会阻塞崩溃,这就是服务雪崩。
服务熔断:服务熔断就是服务雪崩的一种有效解决方案,当指定时间窗内的请求失败率达到设定阈值时,系统将通过断路器直接将此请求链路断开
服务降级:降级是为了更好地用户体验,当一个方法调用异常时,通过执行另一种代码逻辑来给用户有好的回复。比如有一个热点新闻,会有多个用户查询该新闻详情,大量用户访问可能会导致系统崩溃,那么久进行服务降级,一些请求会做一些降级处理,比如当前人数太多请稍后查看等。
负载均衡:Ribbon和Nginx
-
Nginx是一种集中式的负载均衡器,简单理解就是将所有请求都集中在起来再进行负载均衡;Ribbon是先在客户端进行负载均衡才进行请求的。
-
Nginx负载均衡算法使用的是轮询和加权轮询,而Ribbon默认使用轮询(RoundRobinRule)策略,并且可以更换默认的负载均衡算法,只需要在配置文件中修改即可。
名词解释:
轮询:Ribbon 默认采用的策略,若经过一轮轮询没有找到可用的provider,其最多轮询10轮,若最终还没有找到,则返回null。
加权轮询:根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
随机策略:从所有可用的provider中随机选择一个。
重试策略:先按照轮询策略获取provider,若获取失败,则在指定时限内重试。
互联网三高:
- 高并发:同时更多人访问
- 高性能:响应时间更短,速度更快
- 高可用:通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性
- 具体理解可查看:https://baijiahao.baidu.com/s?id=1645114193257795762&wfr=spider&for=pc
Redis相关:
转载自:https://www.cnblogs.com/xiaobaibuai/p/13810519.html
持久化:把内存中的数据写到磁盘中去,防止服务宕机了内存数据丢失
持久化机制(两种):RDB(默认的)和AOF机制
- RDB:按照一定的时间将内存的数据以快照的形式保存到硬盘中。
- AOF:将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。
过期策略:指当Redis中缓存的key过期了,Redis如何处理。
- 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期数据,对内存友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。
- 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除,该策略可以最大优化的节省CPU资源,却对内存非常不友好。极端情况可能会出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。
- 定期过期:每隔一定的时间,会扫描一定数量的数据的expires字典中一定数量的key,并清除其中已过期的key。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。
缓存异常(重点)
1、缓存雪崩:指缓存同一时间大面积的失效,所以后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。
2、缓存穿透:指缓存和数据库中都没有的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。
3、缓存击穿:指缓存中没有但数据库中有的数据(一把是缓存时间到期),这是,由于并发用户特别多,同时读缓存没读到的数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。和缓存雪崩不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库
4、缓存预热:系统上线后,将相关的缓存数据直接加载到缓存系统,这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!
5、缓存降级:当访问量剧增,服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使有损服务,系统可用根据一些关键数据进行自动降级,也可以配置开关实现人工降级。
数据库相关:
MySQL存储引擎区别比较(主要说MyISAM和InnoDB):
总结的不多,具体可查看:https://blog.csdn.net/keil_wang/article/details/88392433
MyISAM
优点:访问速度快
特点:不支持事务、外键
每个myisam在磁盘上存储为3个文件,文件名和表名相同,扩展名分别是
frm -------存储表定义
MYD --------MYData,存储数据
MYI --------MYIndex,存储索引
InnoDB
MySQL5.5之后默认存储引擎
选择:如果应用对事务的完整性有较高的要求,在并发条件下要求数据的一致性,数据操作中包含读、插入、删除、更新,InnoDB是最好的选择
优点:提供了居右提交,回滚,崩溃回复能力的事务安全,支持外键
缺点:相较于MyISAM,写的处理效率差一点,并且会占用更多的磁盘空间来存储数据和索引
Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了
InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁
Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI
Innodb:frm是表定义文件,ibd是数据文件
Myisam:frm是表定义文件,myd是数据文件,myi是索引文件
选择:
- 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;
- 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读也有写,请使用InnoDB。
- 系统奔溃后,MyISAM恢复起来更困难,能否接受;
- MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。
原文链接:https://blog.csdn.net/qq_35642036/article/details/82820178
事务(ACID)
-
原子性:一个事务中的所有操作,要么全部成功,要么全部失败回。事务执行过程中发生错误会被回滚到事务开始前的状态。
-
一致性:在事务开始前和事务结束后,数据库的完整性没有被破坏。拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
-
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,比如操作同一张表,数据库为每一个用户开启事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
-
持久性:事务处理结束后,对数据的修改就是永久的,及时系统故障也不会丢失提交事务的操作。
** 事务的并发问题:**
- 脏读:指在一个事务处理过程里读取了另一个未提交的事务中的数据。比如事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。
- 不可重复读:指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。
例:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。 - 虚读(幻读):
系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
事务的隔离级别: (主要是为了解决上面的脏读,不可重复读,幻读这几个问题)
- 读未提交(READ UNCOMMITTED)
- 读提交 (READ COMMITTED)
- 可重复读 (REPEATABLE READ) MySql默认级别
- 串行化 (SERIALIZABLE)
从上往下,隔离强度逐渐增强,性能逐渐变差。采用哪种隔离级别要根据系统需求权衡决定。
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | 是 | 是 | 是 |
读提交 | 否 | 是 | 是 |
可重复读 | 否 | 否 | 是 |
串行化 | 否 | 否 | 否 |
只有串行化的隔离级别解决了全部这 3 个问题,其他的 3 个隔离级别都有缺陷。
标签:事务,缓存,服务,数据库,MyISAM,名词解释,数据 From: https://www.cnblogs.com/hhs-5120/p/16656833.html