首页 > 其他分享 >名词解释(一)

名词解释(一)

时间:2022-09-05 08:58:28浏览次数:83  
标签:事务 缓存 服务 数据库 MyISAM 名词解释 数据

名词解释总结

微服务相关:

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,若获取失败,则在指定时限内重试。

互联网三高:

  1. 高并发:同时更多人访问
  2. 高性能:响应时间更短,速度更快
  3. 高可用:通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性
  4. 具体理解可查看: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是索引文件

选择:

  1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;
  2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读也有写,请使用InnoDB。
  3. 系统奔溃后,MyISAM恢复起来更困难,能否接受;
  4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。
    原文链接:https://blog.csdn.net/qq_35642036/article/details/82820178

事务(ACID)

  • 原子性:一个事务中的所有操作,要么全部成功,要么全部失败回。事务执行过程中发生错误会被回滚到事务开始前的状态。

  • 一致性:在事务开始前和事务结束后,数据库的完整性没有被破坏。拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

  • 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,比如操作同一张表,数据库为每一个用户开启事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

  • 持久性:事务处理结束后,对数据的修改就是永久的,及时系统故障也不会丢失提交事务的操作。

** 事务的并发问题:**

  1. 脏读:指在一个事务处理过程里读取了另一个未提交的事务中的数据。比如事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。
  2. 不可重复读:指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
    不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。
    例:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
  3. 虚读(幻读):
    系统管理员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

相关文章