V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dan2001go
V2EX  ›  程序员

虚心求教几个大并发 redis 承载的问题和微服务概念的问题

  •  
  •   dan2001go · 2018-01-12 22:35:15 +08:00 · 5590 次点击
    这是一个创建于 2507 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天被一个大概小我一圈的人给弄懵了,问了几个问题我没答好,最后又被教育了一下。也没办法……

    有几个问题我大概这辈子也不会碰到,也不知道怎么答,有会的 V 友能解答一下么。

    一个是 redis 和 memcached 有什么不同? 我说的是两个差不多,redis 在功能上更加丰富一点,有集合队列什么的。可能 memcache 稍稍快一些。 不过他说想问的不是这个,我也不知道了,因为 memcache 基本上不用。是在内核数组结构算法的实现上面有不同吗? 这个问题已经被问到过两次了,很郁闷。

    一个是 REDIS 怎么处理大数量并发下未命中的问题。 这个……我也真是没碰到过这么大的量。似乎对方的意思是就算是简单的 key value 结构,在一定规模的并发下面,会出现取值 Miss 的问题?(好吧……这个似乎以前别人也问到过。我还真没碰到过。)

    一个是 REDIS 的吞吐量的上限是多少(还是平均吞吐量……有点没记住)?最大访问量是可以到多少的请求。

    一个是微服务方面的内容,他问了一堆很专业的术语,真没听到过,现在回过头来一下子也没记住。我估计可能是书或是别的技术文章里的术语。应该不是很常见的那种吧,因为之前看一些文章也没碰到。这个问题很难求解了,不过换个说法就是有没有比较有深度的文章或是比较好的书籍可以作深入了解的。

    我对微服务也就是停留在弄个 RPC 或是 HTTP 上面,保证请求的一致性什么的。kubernetes 现在特别火,可是实在是没精力去看(光看程序书就已经要疯掉了,根本没有时间,而且大部分看了就忘忘了再看,去年已经看熟的 springmvc,这两天花了整整一个星期才重新捡起来。。。)。如果有深入浅出的文章或书的话也求推一下。

    RPC 和 HTTP 的最本质的不同(协议不同这还是知道。。)和应用场景也被问了,随便答了一下,感觉也可能说得比较浅吧,如果有深入了解的朋友也求解惑一下.

    谢啦~

    22 条回复    2018-01-14 01:04:15 +08:00
    byteli
        1
    byteli  
       2018-01-12 22:55:53 +08:00 via iPhone
    就我知道的一些浅显的理解,仅针对单机

    不同:进程模型不同,数据结构支持不同,持久化支持不同
    大并发问题:我所理解的的 redis 这种顺序执行的不受并发影响吧,非说影响就是超时?可能需要看下协议才知道
    holyghost
        2
    holyghost  
       2018-01-12 23:03:01 +08:00
    我回答下第一个吧,抛个砖:

    Redis 支持的数据类型更丰富一些,基于各种数据类型可以做出类似于 top K 列表、连续 N 天签到、等等功能;
    Redis 支持数据持久化(但是很鸡肋,一般持久化的 KV 会用 LevelDB );
    Redis 支持主从和 sharding
    最新的 Redis 企业版支持基于 CRDT 的分布式多主集群
    misaka19000
        3
    misaka19000  
       2018-01-12 23:51:10 +08:00
    Redis 是单线程,mm 是多线程,miss 这个没懂什么意思,至于最大吞吐量自己写个程序就能测出来了

    微服务的书就那几本,翻翻就大概了解是怎么回事了,但是深入理解还是需要大量实践
    chinvo
        4
    chinvo  
       2018-01-12 23:52:54 +08:00
    个人认为微服务还是不要考虑 Java 了,一点都不“微”
    chenqh
        5
    chenqh  
       2018-01-13 00:00:02 +08:00
    至于 redis miss 那个,他估计是要问你怎么处理雪崩效应的,就是假如并发有 1K,请求 keyA,但是 keyA 失效了,这个时候要到数据库去取 keyA 的值,
    Mirana
        6
    Mirana  
       2018-01-13 00:01:27 +08:00
    1. 我觉得他可能想问 redis 支持持久化
    2. redis 大并发下未命中,意思是只让一个请求穿透到 DB 层?
    3. redis 吞吐量上限是 10W
    4. rpc 是指远程调用是一个抽象的概念,http 是一个具体的协议
    misaka19000
        7
    misaka19000  
       2018-01-13 00:08:06 +08:00 via Android
    @chinvo 为什么不能考虑 Java?
    q397064399
        8
    q397064399  
       2018-01-13 00:47:42 +08:00
    RPC 跟 HTTP 最本质的不同,,啥本质?
    一个是 可以自己定义的私有协议( RPC 叫做远程过程调用,你可以自己在 TCP 上 定义一层自己的报文协议,简单点的 你可以直接把请求序列化成 Json 然后 送到另外一边,,然后 json 结果传回来 这也算是 rpc ),
    一个是标准协议 ,有标准的报文格式,

    @chenqh #5 这不是缓存击穿么?
    q397064399
        9
    q397064399  
       2018-01-13 00:51:03 +08:00
    redis 和 memcached 有什么不同,, 名字不同,下一题
    REDIS 怎么处理大数量并发下未命中的问题 ,, 缓存击穿,压力直接到 DB 下一题
    REDIS 的吞吐量的上限是多少 ,,for (int i = 0 ; i < count ; i ++){ new Thread().run( getRedisConnAndReadValue() )} 这个代码 什么时候崩了 ,Redis 的吞吐就是多少了, 话说这玩意不是 还可以做集群么?
    afpro
        10
    afpro  
       2018-01-13 00:51:48 +08:00
    @chenqh akka 大法好
    zhx1991
        11
    zhx1991  
       2018-01-13 01:24:07 +08:00
    缓存 miss 说的还是穿透到 db 的问题吧

    上限靠压测, 不同机器配置明显不一样
    lolizeppelin
        12
    lolizeppelin  
       2018-01-13 01:26:19 +08:00 via Android
    rpc 和 http 本质区别?
    如果是指 http 和 mq 的区别的话

    http 一旦访问失败就丢失了 mq 可以直接 cast 出去。。等接受端上线
    lolizeppelin
        13
    lolizeppelin  
       2018-01-13 01:31:17 +08:00 via Android
    还有 http 虽然支持长链接 但本质上还是不安全的 执行时间略长的都不适合通过 http 发送

    所以一般 rpc 都尽量少用 http
    所以一般 http 生成异步 request id
    chenqh
        14
    chenqh  
       2018-01-13 01:32:36 +08:00
    @afpro 这和 akka 有什么关系?
    jimzhong
        15
    jimzhong  
       2018-01-13 01:43:09 +08:00
    memcached 和 redis 都是 in-memory key-value database. 目前 redis 更流行。缓存 miss 只能查询数据库咯。redis 是单线程的,吞吐量和 CPU 单核性能相关。
    Immortal
        16
    Immortal  
       2018-01-13 02:23:28 +08:00
    粗略的回答下,太深入的也没有研究过,后面大佬跟上
    1 redis 支持的数据结构更为丰富,经过几种数据结构的组合使用,能让一些原来复杂的业务轻松实现,而 memcache 则比较单一.在可持续化上,我个人并不认同前面说的比较鸡肋,redis 的落地方案有多种可选,实在不济,怕落地导致性能问题,可以直接启个从库专门做落地,主库完全不落地来解决
    2 看你的意思应该是 redis 缓存 miss,被击穿到 db 层.我没遇到过这么大的量,遇到了我第一反映是增加从库和分片,理论上这个是可以无限横向扩展的,加机器就好
    3 redis 的单机上限我记得 redis 直接有工具提供可以压测,虽然和实际你使用上性能会有偏差(比如数据类型等种种因素),但也是可数据化的
    4 微服务还没学到可以给人解答的地步,不乱说了
    afpro
        17
    afpro  
       2018-01-13 03:56:16 +08:00
    @chenqh 把高并发同时 miss 一个 key 之后读数据库的操作放到一个 actor 上 简单粗暴有效
    leekafai
        18
    leekafai  
       2018-01-13 08:40:56 +08:00 via Android
    redis 功能其实也不丰富啊……起码在这么多 nosql 里面我感觉 redis 属于超轻量化的,但是支持的数据结构,做缓存很爽
    suyuanhxx
        19
    suyuanhxx  
       2018-01-13 11:40:08 +08:00   ❤️ 1
    1. 他应该是想问缓存击穿处理方式,一是要做 load db 的回写,二是要防止大量请求落到数据库上,防止雪崩(可以使用服务降级处理方式)
    2. 微服务的核心是功能职责明确化。一个服务只完成一个功能(模块),降低服务之间依赖。微服务 A 宕掉之后不影响 B 服务。我们项目中使用微服务一点都不“微”,依赖还是很强,还是会产生雪崩。
    3. rpc 和 http 理解不多,上面说的有一点非常中肯,一个是报文格式,一个是协议
    dan2001go
        20
    dan2001go  
    OP
       2018-01-13 12:12:33 +08:00
    @suyuanhxx load db 的回写是?我就知道 redis 回写到磁盘。

    没向数据库击穿方面去想,一直在纳闷 Redis 怎么会有读已存的数据会有 MISS 的情况但是我从来没看到别人说起过。。
    singer
        21
    singer  
       2018-01-13 16:33:49 +08:00 via Android
    @Mirana 我记得之前读过文章说 redis 吞吐量是 10w,但忘记哪里看到了。
    然后前段时间,有人问这个问题,我说了 10w,一哥们说根本不止。看在他多年工作的经验上也不好反驳。
    请问,相关文章是否可以提供参考一下?
    Mirana
        22
    Mirana  
       2018-01-14 01:04:15 +08:00
    @singer 实际场景中算是共识把,其实跟压测的 key size,value size,网卡带宽都有关系,极限就在 10W,一般业务使用也就到 3~5W
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2421 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:08 · PVG 10:08 · LAX 18:08 · JFK 21:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.