文章分类 -  后台中间件

1
摘要:1.分布式锁 现在的系统都是微服务模型,即各种组件单独运行在逻辑独立的机器中,之间通过rpc等方式调用并完成服务。 也因此数据的保存和数据的计算往往不在同一个地方,需要一个分布式框架的“全局锁”。其余所有系统都需要通过它获取锁。 实现分布式锁功能的,可以是redis这样的缓存数据库,也可以是MySQ 阅读全文
posted @ 2022-02-23 16:36 Cheung-10
摘要:1. 并发竞争 当有大量对同一数据的并发请求时。会产生写竞争。 解决思路: 1)如果并发量比较低,则采用数据库事务隔离(数据库锁等) 2)通常后台会引入消息队列来进行削峰,但并不能提升性能。 3)可以在缓存(redis)中保存数据,并加锁来保证数据幂等性。如果使用悲观锁,则可能造成响应等待时间较长。 阅读全文
posted @ 2022-02-23 13:20 Cheung-10
摘要:1.雪崩效应 目前的后台服务通常是由多个组件完成,或者多个服务会被实现为多个微服务。用户发情请求后,会出现多个服务的链式调用来完成整个操作。(如 检查参数->查询缓存->查询数据库) 当调用链的某一步失效时,可能导致流量穿透到下一个服务,导致下一个服务崩溃(如缓存击穿导致数据库崩溃),最终导致整个后 阅读全文
posted @ 2022-02-21 16:43 Cheung-10
摘要:大量消息积压在MQ里,一般是因为服务器(消费端)挂掉,或者突然收到大量请求,远超预期。 首先要明确的是,如果是收到了DDOS之类的攻击,或者本来项目的预计规模不够大,是无法很好地处理消息积压的。只能一段时间临时停机。 1)临时扩容,快速消费掉积压消息 先修复消费端的问题。然后估计积压消息的规模。如果 阅读全文
posted @ 2022-02-21 15:43 Cheung-10
摘要:数据从生产者除产生,发往MQ,缓存一段时间后再发往消费者。 1.生产者向MQ写数据时出错。 解决方法: 1)使用事务机制,若消息未被成功接收,则会收到异常信息,并可回滚事务和仅需重发。缺点是需要阻塞等待,降低性能。(同步方案) 2)开启confirm模式。所有消息会分配一个唯一ID,当MQ保存后会返 阅读全文
posted @ 2022-02-21 14:49 Cheung-10
摘要:1.数据过期策略 定期删除+惰性删除 定期删除即每隔固定时间(100ms),随机抽取一些设置过期时间的key检查是否过期,若过期则删除。(避免定期大量检查的消耗) 惰性删除即在收到查询请求,获取key时检查是否过期,若过期则删除。 2.内存淘汰机制 仅仅使用定期+惰性删除,可能出现大量过期数据占用内 阅读全文
posted @ 2021-10-26 23:25 Cheung-10
摘要:消息队列的高可靠性来自其处理消息的速度和响应速度。 1.RabbitMQ RabbitMQ是主从模式,有单机模式、普通集群模式、镜像集群模式。 普通集群模式 消息队列的queue数据保存在集群中的某一个节点上,所有节点均拥有全部元数据。 若消费者从其他节点获取数据,则由该节点从queue所在的节点拉 阅读全文
posted @ 2021-10-26 23:11 Cheung-10
摘要:1.Work Queues 多个消费端一起消费同一个队列的消息可以提高处理速度。 rabbitMQ采用轮询方式将消息发给消费者。消费者处理完消息后才会收到下一条消息。 2.发布/订阅 每个消费者监听自己的队列,生产者将消息发给broker,exchange会将消息转发到所有需要的队列。 因此所有订阅 阅读全文
posted @ 2021-10-26 20:14 Cheung-10
摘要:参考博客: https://www.jianshu.com/p/79ca08116d57 https://www.cnblogs.com/williamjie/p/9481774.html 1.rabbitMQ的特点 可靠性:使用持久化(持久化至本地,重启节点时读取)、传输确认、发布确认机制来确保可 阅读全文
posted @ 2021-10-26 19:50 Cheung-10
摘要:1.消息队列的应用场景 消息队列是生产者-消费者模型。 解耦,避免各种系统之间进行复杂的调用,所有系统只需要向消息队列推入消息和获取消息即可。(试想若n个微服务间互相调用,需要(n*(n-1))/2种不同连接,每一种都需要进行一次编码……) 异步,将非必要业务逻辑异步允许,加快响应速度。例如避免微服 阅读全文
posted @ 2021-10-26 16:15 Cheung-10
摘要:在使用分布式缓存的时候,可以将数据分区保存在不同节点上,以扩大存储能力。 另外一种思想是不同节点备份相同数据,以提高读响应速度(如redis主从模型)。 以下是集中分片策略(算法) 1.range Based算法 按照关键值将数据划分到不同区间,每个缓存节点保存一个区间内的数据,需要保证关键值的连续 阅读全文
posted @ 2021-10-26 15:32 Cheung-10
摘要:1. 缓存和数据库模型下的数据读写流程 读模型 1)判断缓存是否有数据,若有则返回。 2)判断数据库是否有该数据,若无则返回为空。 3)若数据库有数据,则写入缓存,随后(由缓存)返回数据。 写模型 写模型的策略各有不同,不过一般认为应当先更新数据库再更新缓存,这是因为需要先将数据持久化保存,来确保数 阅读全文
posted @ 2021-10-26 10:08 Cheung-10
摘要:nginx选择反向代理服务器以达到负载均衡的策略(UpStream配置) 具体策略: 1. 轮询 依次将请求发送给列表中的服务器,针对服务器性能相同的情况。 2. 权重轮询 按权重发送请求给服务器,权重高的得到的请求更多,针对性能不平等的情况。 3. ip_hash 计算请求ip的hash(并取模到 阅读全文
posted @ 2021-10-25 23:43 Cheung-10
摘要:1.什么是网络容器 设想服务器接受到请求后的处理逻辑: a.接受请求并进行预处理(建立连接、组装网络报文切片、取出报文头和报文体、编码转换) b.按照请求启动对应服务的线程,服务线程处理业务逻辑,返回结果 c.结束服务线程,封装结果(包括异常处理),处理编码后发回给客户端 其中a和c在不同的网络服务 阅读全文
posted @ 2021-10-25 23:22 Cheung-10
摘要:参考博客: https://blog.csdn.net/lishaojun0115/article/details/53200629 https://zhuanlan.zhihu.com/p/230829571 1.代理服务器 nginx的一个重要功能是作为反向代理服务器。 在代理服务器模型中,客户 阅读全文
posted @ 2021-10-25 21:52 Cheung-10
摘要:1. 数据持久化的步骤 一次完整的数据从客户端到达服务端磁盘的过程如下: a. 客户端执行向服务端发送数据的写操作(数据保存在客户端内存中,忽略拷贝时经过内核和网卡缓存/缓冲,因为情况可能不完全相同) b. redis服务器接受到数据(数据被redis接收并保存在内存用户空间中,此处忽略网卡和soc 阅读全文
posted @ 2021-10-25 17:45 Cheung-10
摘要:参考博客:https://www.cnblogs.com/leffss/p/11993646.html redis有多种常见的使用和配置方式,包括: 单机模式、主从模式、哨兵模式、集群模式、第三方模式 1.单机模式 仅有一个redis节点,无备用节点和备用副本,无数据持久化和备份策略,适用于可靠性要 阅读全文
posted @ 2021-10-22 23:27 Cheung-10
摘要:1. redis 特点 高性能的No-SQL数据库,这意味着具有ACID(一致性、原子性、持久性、隔离性); 支持数据持久化,支持在不同节点间进行数据备份(以主从模式进行); 提供string、list、hash、set、zset等数据结构,并提供相对复杂的元素操作机制; 支持订阅/发布等新特性; 阅读全文
posted @ 2021-10-22 17:34 Cheung-10
摘要:详细内容可以参考 https://www.runoob.com/redis/redis-data-types.html 1. string 字符串元素(包括基本类型,整型、浮点、字符串等) 常用命令: incr(自加)、decr(自减)、incrby(加)、decrby(减) string的底层实现 阅读全文
posted @ 2021-10-21 11:31 Cheung-10
摘要:redis作为一种NoSQL数据库,其作用是将数据库数据缓存在内存中,向到来的请求快速返回结果,减轻数据库压力。 即:从数据库读取数据后,将数据缓存到内存中,下次读取直接从内存获得并返回,可以有效降低数据库请求(降低磁盘读取需求)。 在大量请求到来时,可能产生三种问题: 1. 缓存雪崩 某个时刻缓存 阅读全文
posted @ 2021-10-21 10:48 Cheung-10

1