解决“最后1公里”问题
配置中心-UI
配置中心-意义 修改配置,无需上线代码,无需重启服务 配置实时生效,快速回滚,灵活控制 支持配置引用,一处修改,多域生效 灰度发布,更多玩法,更多可能性 隐藏关键配置,保障信息安全
PHP接入困难 请求结束,内存释放 php-fpm php脚本 调用慢 配置中心 php脚本 重复获取
重复获取 - 缓存 进程内存,持久存在 php-fpm php脚本 php扩展 配置中心 缓存
调用慢 - 代理 php-fpm php脚本 php扩展 本机通讯 agent 配置中心 轮询刷新 2级缓存 1级缓存
最终架构 2级cache 2级cache 2级cache 2级cache php-fpm-1 dogx-agent ormosia 其他语言SDK 1级cache
dogx内部设计
agent设计概要 配置中心 冷数据淘汰 定时轮询key1 定时轮询key2 定时轮询domain1 请求处理器 配置缓存 HTTP客户端 HTTP服务 文件备份
agent核心设计 - 缓存 k-v级锁粒度,保障高并发 cache 冷数据删除 … channel传输k-v副本 k1-v1 k2-v2 | v channel传输k-v副本 dumper (goroutine) refresher (goroutine) http client 配置中心 缓存过期 无锁访问只读副本
agent核心设计 - 冷查询排队 … 缓存k-v wait queue sdk 3 sdk 2 sdk 1 http client 配置中心 缓存k-v 排队等待 不存在的key
dogx-agent配置 { "log.level": 5, "log.directory": "./logs", "cache.refreshInterval": 30000, "cache.gcInterval": 900000, "cache.waitTime": 2000, "cache.dump.interval": 60000, "cache.dump.directory": "./.cache/", "http.server.listen": "unix: ./dogx.sock", "http.server.read.timeout": 5000, "http.server.write.timeout": 5000, "client.retries": 3, "client.timeout": 5000, "client.concurrency": 1000, "client.ormosia.service": "http://service-ormosia-itoamms.smzdm.com:9080" }
php API Ormosia::get_by_keys(["user.mysql.smzdm", "user.mysql.smzdm", "user.notExist"]) 按配置名获取 Ormosia::get_by_domain("user") 按域名获取
php sdk配置 [dogx] dogx.agent.mode = local dogx.agent.host= 127.0.0.1 dogx.agent.port = 10087 dogx.agent.socket = /data/dogx/dogx.sock dogx.agent.timeout = 1500 dogx.cache.ttl = 50000
压测 - SDK缓存30秒
压测 - SDK无缓存
https://gitlab-team.smzdm.com/smzdm/dogx 代码浅析 https://gitlab-team.smzdm.com/smzdm/dogx