栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

redis mysql kafka等中间件

redis mysql kafka等中间件

redis:
内存中的数据结构存储系统,可以用作数据库、缓存、消息中间件。
k-v字典存储系统,跨平台的非关系型数据库。
支持网络、基于内存、分布式、可选持久化。

LRU驱动事件,事务,不同级别的磁盘持久化。
(LRU,Least Recently Used,最近最少使用)算法。缓存中也常使用。。
最近经常被访问的数据,在以后也会经常被访问,经常被访问的数据,需要快速被命中,不常访问的数据,超出容量时要将其淘汰。

缓存穿透:缓存和数据库中都没有的数据,用户不断的发起请求(我们搜索服务应该不存在这种情况)解决方法:对请求接口做校验,不合法的直接拦截。

缓存击穿:缓存没有命中但是数据库中有数据(一般指缓存到期)解决方法:热点数据永不过期(搜索频率很高的设置为不会过期)(并发查一条数据)

缓存雪崩:缓存中数据大量都到了过期时间,查询量大 都查询不到。(很多数据都查不到)
解决方法:热点数据永不过期,过期时间设置随机。

缓存管理策略:
缓存淘汰策略:过期的,最少使用的删除掉。(LRU)

缓存更新策略。保证缓存内容和db数据内容一致。(低峰时期,对缓存内容批量更新)另外,db数据更新,也有一致性策略、保证缓存和db的一致性。(缓存索引非耦合策略,缓存逐步过期,减少不一致的项)

读和写操作都是并发的,没法保证顺序,就会出现缓存和数据库不一致的问题。

redis哨兵(sentinel), 自动分区。

哨兵模式(sentinel):哨兵系统可以监控一个或多个redis master服务,以及从服务,某个master下线后,自动将该master从服务升级为master来代替。


redis发布(publish)-订阅(subscribe), 一种消息通信模式,发送者(pub)发布消息,订阅者(sub)接收消息.
新消息通过PUBLISH命令发送到频道channel中时,这个消息就会被发送给订阅它的所有客户端。
redis stream: 用于消息队列(MQ, Message Queue), 提供消息持久化,主备复制功能,

—————-
MQ(Message Queue),消息队列
分布式项目中,MQ基本都是必备消息中间件。
目的:异步处理,提高系统性能,降低系统耦合。
(异步处理:减小高并发的压力,
消息队列的处理速度快于数据库,消息队列的伸缩性更好,
短时间高并发产生的事务存储在消息队列中,
生产者消费者模式,事件驱动结构。。

系统可用性降低:引入了一个新模块,消息丢失 mq挂掉,
系统复杂性提高:重复消费、消息丢失、消息顺序。。
一致性问题:是异步的。。

常用Kafka优点
核心功能强大,吞吐量高,ms级延迟,高可用可靠性,分布式任意拓展, 存在消息重复消费。。

———-
缓存服务

pika:
360开发的一个类redis存储系统,完全支持redis协议,
pika针对redis的一些问题而进行的优化
(redis内存限制、主从高可用问题、启动恢复时间长、缓冲区容易写满)

pika优势在于多线程, redis单线程性能厉害。

etcd 和 redis都是键值存储库
etcd:核心在于分布式存储,强调各个节点之间通信、同步,确保各个节点上数据和事务的一致性。 服务发现工作更稳定,单节点的读写能力可能并不强。

redis:内存型缓存,节点一致性主要是数据,读写能力很强。qps达10w+

redis:缓存能力很强,mysql缓存、多级缓存,
etcd:主要做一些事务管理,基础架构服务、容器类服务部署。

———————-
mysql:

innodb:是mysql的数据库内部引擎,用了这个才能支持事务。 内存存储引擎, 页是管理数据的最小磁盘单位,b-tree节点就是实际存放表数据的节点, 一个innodb页有7个部分组成:
fil header/fil trailer

page header/page dictionary:页的状态信息
dictionary:存储稀疏索引,

user records:页面里 真正存放行记录的部分,
free space:空余空间。 链表结构(从左到右寻找空白节点插入)
b+树查找, 内存中进行。

索引:mysql索引大大提高检索速度
索引优化,是提高查询性能最重要的手段。(查询时每次只能用1个索引)

索引的作用:大大减小服务需要扫描的数据量,大大加快数据检索速度,随机IO变成顺序IO。

innodb存储引擎:使用b+树建立索引,关系数据库中最常用的
(b+树并不能找到给定键对应的具体值,只能找到数据行对应的页,整个页读入内存,在内存找到具体数据行)
b+树是平衡树,查找任意节点耗费时间都是完全相同的,比较次数就是b+树的高度。
数据库中b+树索引分为聚集索引(clustered index)和辅助索引(secondary index),
聚集索引 存放一条行记录的全部信息。
辅助索引:只包含索引列和一个用于查找对应行记录的书签。
主键 看作是 聚集索引,如果没有创建,系统自动创建一个隐含列为表的聚集索引。

mysql 并发控制:

乐观并发控制(默认不出问题。遇到了问题了就重试,写的时候看是否被其他修改了, 整个过程中就没有枷锁。)乐观锁不会死锁, 但是冲突和重试过多时,增加负担,最好用悲观锁。

响应速度要求很高,并发量很大时,推荐乐观锁。(这时悲观锁会有性能问题。)

悲观并发控制(最常见的方法,就是锁)
共享锁,排他锁,两种实现方式。实现了标准的行级锁。

多版本并发控制

并发控制要考虑:冲突频率、重试成本、响应速度和并发量。

——————
事务相关
一件事情有n个组成单元,一起成功 或者一起失败,n个组成单元放在一起,就是一个事务。。

mysql:一条sql语句就是一个事务。。 默认开启事务并提交事务。。

开启事务,事务提交, 事务回滚。。

事务特性:ACID,
原子性(事务是一个不可分割的单位,全部发生、全部不发生)
、一致性,(事务前后 数据完整性必须保持一致)
隔离性,)多个用户并发访问,一个用户的事务不能被其他用户的事务干扰,互相隔离)
持久性,(事务被提交,对数据的改变是永久性的,即使故障也不能有影响)

事务的四种隔离级别
1.read uncommited,读取尚未提交的数据(哪个问题都解决不了)
2.read commited,读取已经提交的数据(可以解决脏读)
3.重复读取,(解决脏读和不可重复读)mysql默认。
4.串行化,可以解决脏读,不可重复读,虚读,相当于锁表。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/355261.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号