写点什么

架构师训练营第 5 周学习总结

用户头像
菜青虫
关注
发布于: 2020 年 11 月 22 日
  • 分布式缓存架构

    * Cache v.s Buffer

        * Cache: 数据多次读取时,加快读取速度

        * Buffer: 在读写数据到低速设备时,提升应用性能

    * 缓存数据存储

        * 一般使用Hash表存储

        * 缓存命中率

            * 缓存键集合大小

            * 缓存可使用内存空间

            * 缓存对象生存时间

    * 缓存实现形式

        * 通读缓存

            * 代理缓存

            * 反向代理缓存

            * 内容分发网络

        * 旁路缓存

            * localStorage

            * 本地对象缓存

                * 进程内

                * 同机器

                * 分布式

    * Memcached

        * Share Nothing架构

        * 路由算法:对key进行hash code,然后对服务器数目取余

    * Redis

        * 支持复杂的数据结构

        * 支持多路复用和异步IO

        * 支持主从复制

        * 原生集群和share nothing集群

    * 一致性Hash算法

        * 原始算法实现

            * 构建一致性Hash环,范围0~2^32-1

            * 计算节点的Hash值,放到环上

            * 计算待存储数据Key的Hash值,顺时针查找临近的节点

        * 存在问题

            * 负载可能不均衡

            * 扩容分摊的负载也不均衡

        * 基于虚拟节点的一致性Hash算法

    * 缓存提升性能的原因

        * 存储在内存,速度快

        * 存储数据的最终形态,不需要计算

        * 降低数据库和磁盘的负载压力

    * 缓存的注意事项

        * 频繁修改的数据

        * 没有热点的访问

        * 数据不一致与脏读

        * 缓存雪崩

        * 缓存预热

        * 缓存穿透

  • 消息队列

    * 同步调用 v.s. 异步调用

        * 同步调用:同步等待,阻塞,多个调用的等待时间会叠加

        * 异步调用:通过消息队列来解耦,不用阻塞等待

    * 异步调用架构

        * 点对点模型:一个消息只被消费一次

        * 发布订阅模型:一次生产,多次消费

    * 消息队列的好处

        * 提升处理性能

        * 更容易伸缩

        * 消峰填谷

        * 失败隔离

        * 自我修复

        * 解耦生产者和消费者

    * MQ产品

        * RabbitMQ - 性能好,社区活跃,Erlang开发

        * ActiveMQ - 跨平台,Java开发

        * RocketMQ - 性能好,可靠性高,Java开发

        * Kafka - 分布式的伸缩性好,Scala开发

  • 负载均衡架构

    * 将高并发的用户请求分发给应用服务器集群,分摊负载压力

    * 如何分发请求

        * HTTP重定向负载均衡

            * 性能低:两次网络请求

            * 安全性差:暴露后台服务器

        * DNS负载均衡

            * 不需要自己部署负载均衡服务器

            * 不会增加网络请求

            * DNS域名解析出来的IP是内部LB服务器地址

        * 反向代理负载均衡

            * HTTP应用层协议转发

            * 性能比较差,适合小规模集群

        * IP负载均衡

            * IP层协议转发,性能比较好

            * 在大规模集群中,CPU/带宽可能会成为瓶颈

        * 数据链路层负责均衡

            * 使用同样的虚拟IP地址,LB服务器只修改MAC地址然后转发

            * 应用服务器直接把响应返回给用户

    * 如何选择服务器

        * 轮询/加权轮询

        * 随机/加权随机

        * 最少连接

        * 源地址散列 - sticky session

    * 会话管理

        * Session复制

            * 性能差,所有服务器进行通讯存储所有的会话信息

        * Session绑定

            * 不能保证高可用

        * Cookie记录Session

            * Cookie大小有上限

            * Cookie可能被禁用

        * Session服务器

            * 将Session保存在共享Session服务器集群

            * 应用服务器Share Nothing,无状态



用户头像

菜青虫

关注

还未添加个人签名 2017.11.20 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 5 周学习总结