Cache缓存项目学习2

项目架构
缓存服务器设计
ETCD使用:

当Server实例初始化时建立ETCD客户端,当server启动时,进行服务注册。

当服务器实例化peeker时,进行服务发现,服务发现分为全量发现与增量发现。增量更新维持一个watch goroutine,监视etcd的变化,如有新的服务变化,更新peeker缓存。

GRPC使用

Server层进行grpc.Server创建,实现了Get/Set/Delete方法。

Group缓存层当本地缓存未命中时,会调用PickPeer,获取远程客户端发起gRPC调用。

对于Peer节点层,PickPeer会使用一致性哈希选择返回对应的client,方便对其进行RPC调用。

Group设计
复制代码
// Group 是一个缓存命名空间
type Group struct {
    name       string
    getter     Getter
    mainCache  *Cache                //缓存空间
    peers      PeerPicker            //选择器
    loader     *singleflight.Group    //单飞设计
    expiration time.Duration // 缓存过期时间,0表示永不过期
    closed     int32         // 原子变量,标记组是否已关闭
    stats      groupStats    // 统计信息
}

// groupStats 保存组的统计信息
type groupStats struct {
    loads        int64 // 加载次数
    localHits    int64 // 本地缓存命中次数
    localMisses  int64 // 本地缓存未命中次数
    peerHits     int64 // 从对等节点获取成功次数
    peerMisses   int64 // 从对等节点获取失败次数
    loaderHits   int64 // 从加载器获取成功次数
    loaderErrors int64 // 从加载器获取失败次数
    loadDuration int64 // 加载总耗时(纳秒)
}
相关推荐
wuyk55517 分钟前
从零吃透Modbus通信|第7章:终极工程整合(模块化架构、双模式主机从机、RTOS适配、量产级模板)
c语言·stm32·学习·架构
一条破秋裤1 小时前
STM32 学习笔记:PWM 驱动 LED 呼吸灯与舵机代码
笔记·stm32·学习
kyrie_sakura3 小时前
python学习笔记11 -- 进程和线程
笔记·python·学习
高亦真4 小时前
今天是学习嵌入式的第34天
linux·学习·算法
2501_931819704 小时前
桂柳方言标注公司错误标注溯源追踪体系搭建诉求落地 桂柳方言标注公司学习信实翻译全链路追踪技术
学习·语音识别
Asum1ta4 小时前
K8s 学习环境搭建:Python 与 PyCharm 开发环境配置指南
python·学习·kubernetes
知识汲取者4 小时前
FastAPI 学习教程(写给想学 FastAPI 的 Java 工程师的)
python·学习·fastapi
程序员黎剑5 小时前
Redis缓存击穿:热点Key过期打崩数据库的3种解决方案
数据库·redis·缓存
一只小阿乐5 小时前
java 语法学习 1
java·开发语言·学习