【干货】整理分布式技术框架常用的算法及策略

将一些零散的知识点进行整理, 以便加深理解,方便查阅,也希望能帮到大家。

通过系统随机函数,根据后端服务器列表的大小值来随机选择其中一台进行访问。由概率统计理论可以得知,随着调用量的增大,其实际效果越来越接近于平均分配流量到每一台后端服务器,也就是轮询的效果。

先将后端服务器列表(如:按照地址IP)计算出哈希值,然后映射到HASH环上(如果服务器实例节点较少可以增加虚拟节点),当接收请求时,根据请求的信息(如请求的客户端IP、用户ID等)计算出哈希值,最后将请求信息的哈希值映射到HASH环上,按顺时针方向,确定落在哪个区间中,则选择区间的下一个服务器节点作为处理此次请求的服务器。

由于后端服务器的配置不尽相同,对于请求的处理有快有慢,根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前请求,尽可能地提高后端服务器的利用效率,将负载合理地分流到每一台机器。

计数器算法是使用计数器在周期内累加访问次数,当达到设定的限流值时,触发限流策略。下一个周期开始时,进行清零,重新计数。

滑动窗口算法是将时间周期分为N个小周期,分别记录每个小周期内访问次数,并且根据时间滑动删除过期的小周期。

令牌桶算法是程序以r(r=时间周期/限流值)的速度向令牌桶中增加令牌,直到令牌桶满,请求到达时向令牌桶请求令牌,如获取到令牌则通过请求,否则触发限流策略。

可参见网上文章:

先进先出,淘汰最先缓存的数据,新加入的缓存数据最迟被淘汰,完全符合队列。

最近最少使用,淘汰一定时期内被访问次数最少的缓存数据,以次数作为参考。

最近使用次数最少,淘汰最长时间未被使用的页面,以时间作为参考。

2Q算法有两个缓存队列,一个是FIFO队列,一个是LRU队列。当数据第一次访问时,2Q算法将数据缓存在FIFO队列里面,当数据第二次被访问时,则将数据从FIFO队列移到LRU队列里面,两个队列各自按照自己的方法淘汰数据。

应用在查询数据的时候,先从缓存Cache中读取数据,如果缓存中没有,则再从数据库中读取数据,得到数据库的数据之后,将这个数据也放到缓存Cache中。如果应用要更新某个数据,也是先去更新数据库中的数据,更新完成之后,则通过指令让缓存Cache中的数据失效。

应用要读数据和更新数据都直接访问缓存服务,缓存服务同步的将数据更新到数据库,在应用的眼中只有缓存服务。

应用要读数据和更新数据都直接访问缓存服务,缓存服务异步的将数据更新到数据库(通过异步任务)

在缓存数据过期前,能自动的刷新缓存数据(在缓存过期前剩余时间区间内【可自定义】取数据时,缓存先将之前缓存的结果返回给外部应用程序,然后异步的再从数据库去更新缓存中的值,以尽可能的保证缓存的值是最新的。如果取数据的的时候超过了缓存的过期时间,就安装read-through的方式执行)

​ 可参见网上文章:

Original: https://www.cnblogs.com/yanglang/p/13155850.html
Author: 杨浪
Title: 【干货】整理分布式技术框架常用的算法及策略

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/554232/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ReadWriteLock接口详解

    ReadWriteLock 接口详解 这是本人阅读ReadWriteLock接口源码的注释后,写出的一篇知识分享博客 读写锁的成分是什么? 读锁 Lock readLock(); …

    技术杂谈 2023年7月24日
    087
  • 技术管理进阶——如何在面试中考察候选人并增大入职概率

    原创不易,求分享、求一键三连 前段时间有个粉丝抱怨了一个问题: 小钗,我最近面试遇到个非常不尊重人的面试官,全程咄咄逼人,语气轻蔑,可把我气坏了! 虽然面试就是评价候选人,但并不意…

    技术杂谈 2023年6月1日
    0100
  • 分析了2020年3万多条的微博热搜,我看到了什么

    前言 2020年是艰难的一年,但即使再难,也都过去了。 分析一下2020年的新闻热搜,可以大致了解网民都在关注什么。 微博热搜以娱乐为主,头条的热搜更偏向民生与时事。今天,我们先分…

    技术杂谈 2023年7月25日
    082
  • 阿里云一面:并发场景下的底层细节-伪共享问题

    最近看书看到的伪共享问题,直接触碰到知识盲区了,之前确实没听说过这个东西,打开百度就像吃饭一样自然。 虽然面经上出现的次数不多,不过我觉得还是很重要的一个问题,而且不难,花个五分钟…

    技术杂谈 2023年7月25日
    073
  • Centos7 安装 MPICH

    CentOS 7.9下安装mpich 下载源代码到当前目录 wget https://www.mpich.org/static/downloads/4.0.2/mpich-4.0….

    技术杂谈 2023年7月10日
    086
  • Nine—pytorch学习—拼接与拆分/运算统计

    pytorch学习(6) 拼接与拆分 cat stack split chunk cat() 连接给定维度中给定的张量序列 所有张量必须具有相同的形状(拼接维度除外)或为空 tor…

    技术杂谈 2023年6月21日
    0108
  • Pthread并发编程(一)——深入剖析线程基本元素和状态

    Pthread 并发编程(一)——深入剖析线程基本元素和状态 前言 在本篇文章当中讲主要给大家介绍 pthread 并发编程当中关于线程的基础概念,并且深入剖析进程的相关属性和设置…

    技术杂谈 2023年7月24日
    076
  • GPS的调试与报文解析

    GPS的调试与报文解析 来源 https://zhuanlan.zhihu.com/p/450203417 1.驱动与软件 直接用串口助手的话,可看到GPS发送的信息。当然串口可以…

    技术杂谈 2023年5月30日
    0112
  • maven的安装和仓库的种类和彼此关系

    ; ; Maven软件的下载 为了使用Maven管理工具,哦我们首先要到官网去下载他的安装软件,通过百度搜索Mav嗯如下: 点击Download连接,就可以直接进入到Maven软件…

    技术杂谈 2023年6月21日
    0109
  • oracle查看版本

    查看oracle版本可以通过查询三个内置表来达到目的。 1.v$instance表,这个表可以查看实例和版本信息。 2.product_component_version表。 3….

    技术杂谈 2023年6月1日
    091
  • 关于HttpClient上传中文乱码的解决办法

    使用过HttpClient的人都知道可以通过addTextBody方法来添加要上传的文本信息,但是,如果要上传中文的话,或还有中文名称的文件会出现乱码的问题,解决办法其实很简单: …

    技术杂谈 2023年5月31日
    078
  • 机器学习常用指标

    一、机器学习常用指标 对于一个分类任务,我们预测情况大致如下面混淆矩阵所示: 预测为正样本预测为负样本 标签为正样本 TP FN 标签为负样本 FP TN 1、accuracy a…

    技术杂谈 2023年6月21日
    094
  • mybatis整合springboot 以及需要注意的细节

    具体怎么整合的网上有很多优秀的博客介绍,这里就直接引用一篇个人觉得非常详细的教程: https://blog.csdn.net/winter_chen001/article/det…

    技术杂谈 2023年7月11日
    075
  • 一些代码规则

    一些关于底层的代码问题 进制换算的代码 进制(在数字前加对应字母):二进制0b十进制无八进制0十六进制0x 调试 可以进行对单一代码进行运算确认是否有bug 最好完全避免使用浮点数…

    技术杂谈 2023年6月21日
    0101
  • acme.sh官方中文说明文档

    转载自:https://github.com/acmesh-official/acme.sh/wiki/说明 acme.sh 实现了 acme 协议, 可以从 letsencryp…

    技术杂谈 2023年5月30日
    093
  • 从URL到页面显示

    从URL到页面显示 1.解析 URL 浏览器第一步要做的就是解析 URL,从而生成发送给 Web 服务器的请求信息。 URL 元素组成 http: + // Web服务器 + [/…

    技术杂谈 2023年7月25日
    071
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球