美图开源内部改造的 Twemproxy(Redis/Memcached 缓存代理) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hulk
V2EX    程序员

美图开源内部改造的 Twemproxy(Redis/Memcached 缓存代理)

  • /li>  
  •   hulk
    git-hulk 2018-06-09 12:10:01 +08:00 5230 次点击
    这是一个创建于 2739 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 类似 Nginx 采用 Master-Wokers 的方式来支持多进程
    2. 支持配置在线 reload
    3. 支持 Redis Master-Slave 读写分离
    4. 增加了访问延时(请求和服务响应延时)分布,这个对于定位问题和监控极其重要

    欢迎来拍砖,更欢迎问题反馈和 PR.

    代码地址: https://github.com/meitu/twemproxy

    性能上舔着脸说绝对比当前其他一些解决方案好很多,由于是多进程,内部压测在连接均匀的场景下,随着 CPU 线性增长,最终瓶颈在网卡。内部机器千兆网卡,8 核在小包场景下 QPS 达到 50W/s, 如果网卡有多队列绑定多核性能会更好

    15 条回复    2018-06-11 21:21:19 +08:00
    enenaaa
        1
    enenaaa  
       2018-06-09 12:58:25 +08:00
    与 rediscluster 相比有啥优势
    hulk
        2
    hulk  
    OP
       2018-06-09 13:05:00 +08:00
    @enenaaa 这个问题很好, 第一个是这个东西是针对于 Redis/Memcached 协议的代理,所以 Redis 只是一部分。2. Redis Cluster 功能确实强大(在线扩容,缩容等等),但存在的问题是运维成本高,另外就是客户端在部分语言上没那么成熟。3. 其实对于大部分业务来说,master-slave 远远足够,不太需要 cluster 这种东西

    当然光从 Redis 角度来说,如果有这个能力和资源,上 Redis Cluster 在扩容缩容上很方便,但就是自动化运维部署要跟上,多个业务也不太适合混布(资源隔离问题)
    Mirana
        3
    Mirana  
       2018-06-09 14:45:48 +08:00
    微博也做了一个,我们在长连接场景下解决连接数平均花费了很多功夫
    hulk
        4
    hulk  
    OP
       2018-06-09 14:51:09 +08:00
    @Mirana 微博是指 cacheservice?
    Mirana
        5
    Mirana  
       2018-06-09 15:03:14 +08:00   1
    @hulk
    Showfom
        6
    Showfom  
    PRO
    2018-06-09 15:03:50 +08:00
    支持一下,希望国内的公司能有越来越多这种开源的项目
    hulk
        7
    hulk  
    OP
       2018-06-09 16:39:47 +08:00
    @Showfom 感谢支持,国内很多公司很多开源很多是纯粹是 KPI 指标,经常开完就基本不维护了(不是黑某个公司,哈哈),我们之前也开源过一些东西,都在坚持更新和及时处理问题。
    hulk
        8
    hulk  
    OP
       2018-06-09 16:41:09 +08:00
    @Mirana 赞,今天刚和前同事讨论过 cache service,很多优化很棒,但也背负了很多历史包袱。
    yemoluo
        9
    yemoluo  
       2018-06-09 22:43:26 +08:00
    过来友情支持下,我会说当年面试美图到了副总那面的时候被刷了?

    问题是就是类似.... 答案就是题主你说的这个,我当初懵了,Redis 哪有这个啊,哦,原来是第三方的,然后就刷了

    那个时候啥啥的都还没出,Twemproxy 当时正火者....
    hulk
        10
    hulk  
    OP
       2018-06-09 23:48:42 +08:00
    @GTim 感谢,哈哈,差点就是同事。
    yanaraika
        11
    yanaraika  
       2018-06-10 09:35:40 +08:00 via Android
    不错。但是已经 2018 年了比起主从复制我选择基于 raft 的 redis-cluster,国内的 SRE 体系还是落后先进水平一个身位
    gandofyan
        12
    gandofyan  
       2018-06-10 20:45:37 +08:00
    问题是,即使是 Cluster, 也不能跨越这个坑:"Redis Cluster is not able to guarantee strong consistency."
    hulk
        13
    hulk  
    OP
       2018-06-10 21:12:53 +08:00
    @gandofyan Redis 更多定位是 cache 而是不会 storage,所以才会选择异步复制的方式来提高性能,同时也牺牲了一定的一致性。现在即使是很多 storage 也不不保证强一致,比如 mysql 也是异步复制
    gandofyan
        14
    gandofyan  
       2018-06-11 19:06:56 +08:00
    @hulk 这是 Redis 的思路, 但是如果反向来想一下, 在 Redis 的性能标准之下, 即使做到同步修改对于响应时间的影响也不大, 特别是在实现集群机制之后.

    Mysql 或者其他的关系型数据库的问题, 是基于磁盘的操作, 很难优化成 同步修改.
    而 Redis 这样基于内存的产品, 是有机会可以实现的.
    这一点上, 可以参考 IMDG 的产品. 而不是 Cache 的产品.
    hulk
        15
    hulk  
    OP
       2018-06-11 21:21:19 +08:00
    @gandofyan 这个看你怎么理解了, Redis 本身以高性能著称,如果变成同步写带来除了延时至少翻倍(性能也会倍减)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3263 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 00:03 PVG 08:03 LAX 16:03 JFK 19:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86