分布式系统架构学习总结

发布于: 13 小时前

分布式缓存

什么是缓存?

存储在计算机上的一个原始数据复制集,以便于访问

缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取时用于加快读取速度。

缓存的关键指标 

缓存命中率

影响命中率的指标

  • 缓存键集合大小

  • 可用内存空间

  • 缓存对象生存空间

通读缓存

给客户端返回并在缓存未命中时请求实际数据客户端连的是通读缓存而非原始服务器

旁路缓存

应用会先询问缓存数据是否存在,如果存在使用缓存的数据,如果不存在,会连接数据源获取数据并更新缓存

分布式缓存模型

一致性Hash

基于虚拟节点的一致性Hash

合理使用缓存

  • 频繁修改的数据

  • 没有热点的访问

  • 数据不一致与脏读

  • 缓存雪崩:缓存服务器崩溃导致数据源压力增大而崩溃

  • 缓存预热:提前加载缓存数据

  • 缓存穿透:客户端持续请求不存在的数据,请求先穿过缓存到达数据源,导致服务崩溃,解决办法把不存在的key在缓存中设置为nul

消息队列

同步调用和异步调用

同步调用

异步调用

消息队列构建异步调用架构 

点对点模型

发布订阅模型

消息队列的好处

  • 实现异步处理,提升处理性能

  • 更好的伸缩性

  • 削峰填谷

  • 失败隔离和自我修复

  • 解耦

事件驱动架构EDA

MQ 产品比较

  • Rabbitmq的主要特点是性能好,社区活跃,但是 Rabbitmq用 Erlang开发,对不熟悉 Erlang的同学而言不便于二次开发和维护。

  • Activemq影响比较广泛,可以跨平台,使用Java开发,对Java比较友好。

  • Rocketmq是阿里推出的一个开源产品,也是使用Java开发,性能比较好,可靠性也比较高。

  • Kafka, Linkedin出品的,Scala开发,专门针对分布式场景进行了优化,因此分布式的伸缩性会比较好。

负载均衡

负载均衡架构

HTP重定向负戴均衡

接收到用户的请求之后通过301重定向的方式把不同的真正的应用服务器地址返回给客户端,客户端再去请求应用服务器

DNS 负戴均衡

在dns解析阶段返回不同的应用服务器地址给客户端,从而让应用去请求不同的应用服务器

反向代理负载均衡

反向代理服务器接收来自客户端的请求转发至后端真正的应用服务器,并把应用服务器的响应返回给客户端

IP负载均衡

负载均衡服务器通过NAT把用户请求的目标地址修改为应用服务器的ip地址之后把请求转发给不同的原因服务器,并在接收到应用服务器的响应包之后修改目标地址为客户端的ip把响应发送给客户端

数据链路层负载均衡

负载均衡服务器把请求的MAC地址修改为应用服务器的MAC地址,把请求的包转发到应用服务器,应用服务器处理完请求之后直接把响应发送给请求的源IP地址和端口

负载均衡算法

  • 轮询:所有请求被依次分发到每个应用服务器上,适合于所有服务器硬件都相同的场

  • 加权轮询:根据应用服务器硬件性能的情况,在轮询的基础上,按照配置的权重将请求分发到每个服务器,高性能的服务器分配更多请求

  • 随机:请求被随机分配到各个应用服务器,在许多场合下,这种方案都很简单实用因为好的随机数本身就很均衡。如果应用服务器硬件配置不同,也可以很容易的使用加权随机算法。

  • 最少连接:记录每个应用服务器正在处理的连接数(请求数),将新到的请求分发到最少连接的服务器上,应该说,这是最符合负载均衡定义的算法。

  • 源地址散列:根据请求来源的P地址进行Hash计算,得到应用服务器,该算法可以保证同一个来源的请求总在同一个服务器上处理,实现会话粘滞

SESSION管理

  • SESSION复制

  • SESSION绑定

  • 利用COOKIE记录SESSION

  • SESSION服务器(推荐)

分布式数据库

MySQL复制

主从复制

一主多从复制

  • 分推负载

  • 专机专用

  • 便于冷备

  • 高可用

主主复制

注意事项

  • 主主复制的两个数据库不能并发写入。

  • 复制只是增加了数据的读并发处理能力,没有增加写并发能力和存備能力。

  • 更新表结构会导致巨大的同步延迟。

发布于: 13 小时前 阅读数: 5
用户头像

qihuajun

关注

还未添加个人签名 2009.05.15 加入

还未添加个人简介

评论

发布
暂无评论
分布式系统架构学习总结