今天被一个大概小我一圈的人给弄懵了,问了几个问题我没答好,最后又被教育了一下。也没办法……
有几个问题我大概这辈子也不会碰到,也不知道怎么答,有会的 V 友能解答一下么。
一个是 redis 和 memcached 有什么不同? 我说的是两个差不多,redis 在功能上更加丰富一点,有集合队列什么的。可能 memcache 稍稍快一些。 不过他说想问的不是这个,我也不知道了,因为 memcache 基本上不用。是在内核数组结构算法的实现上面有不同吗? 这个问题已经被问到过两次了,很郁闷。
一个是 REDIS 怎么处理大数量并发下未命中的问题。 这个……我也真是没碰到过这么大的量。似乎对方的意思是就算是简单的 key value 结构,在一定规模的并发下面,会出现取值 Miss 的问题?(好吧……这个似乎以前别人也问到过。我还真没碰到过。)
一个是 REDIS 的吞吐量的上限是多少(还是平均吞吐量……有点没记住)?最大访问量是可以到多少的请求。
一个是微服务方面的内容,他问了一堆很专业的术语,真没听到过,现在回过头来一下子也没记住。我估计可能是书或是别的技术文章里的术语。应该不是很常见的那种吧,因为之前看一些文章也没碰到。这个问题很难求解了,不过换个说法就是有没有比较有深度的文章或是比较好的书籍可以作深入了解的。
我对微服务也就是停留在弄个 RPC 或是 HTTP 上面,保证请求的一致性什么的。kubernetes 现在特别火,可是实在是没精力去看(光看程序书就已经要疯掉了,根本没有时间,而且大部分看了就忘忘了再看,去年已经看熟的 springmvc,这两天花了整整一个星期才重新捡起来。。。)。如果有深入浅出的文章或书的话也求推一下。
RPC 和 HTTP 的最本质的不同(协议不同这还是知道。。)和应用场景也被问了,随便答了一下,感觉也可能说得比较浅吧,如果有深入了解的朋友也求解惑一下.
谢啦~
1
byteli 2018-01-12 22:55:53 +08:00 via iPhone
就我知道的一些浅显的理解,仅针对单机
不同:进程模型不同,数据结构支持不同,持久化支持不同 大并发问题:我所理解的的 redis 这种顺序执行的不受并发影响吧,非说影响就是超时?可能需要看下协议才知道 |
2
holyghost 2018-01-12 23:03:01 +08:00
我回答下第一个吧,抛个砖:
Redis 支持的数据类型更丰富一些,基于各种数据类型可以做出类似于 top K 列表、连续 N 天签到、等等功能; Redis 支持数据持久化(但是很鸡肋,一般持久化的 KV 会用 LevelDB ); Redis 支持主从和 sharding 最新的 Redis 企业版支持基于 CRDT 的分布式多主集群 |
3
misaka19000 2018-01-12 23:51:10 +08:00
Redis 是单线程,mm 是多线程,miss 这个没懂什么意思,至于最大吞吐量自己写个程序就能测出来了
微服务的书就那几本,翻翻就大概了解是怎么回事了,但是深入理解还是需要大量实践 |
4
chinvo 2018-01-12 23:52:54 +08:00
个人认为微服务还是不要考虑 Java 了,一点都不“微”
|
5
chenqh 2018-01-13 00:00:02 +08:00
至于 redis miss 那个,他估计是要问你怎么处理雪崩效应的,就是假如并发有 1K,请求 keyA,但是 keyA 失效了,这个时候要到数据库去取 keyA 的值,
|
6
Mirana 2018-01-13 00:01:27 +08:00
1. 我觉得他可能想问 redis 支持持久化
2. redis 大并发下未命中,意思是只让一个请求穿透到 DB 层? 3. redis 吞吐量上限是 10W 4. rpc 是指远程调用是一个抽象的概念,http 是一个具体的协议 |
7
misaka19000 2018-01-13 00:08:06 +08:00 via Android
@chinvo 为什么不能考虑 Java?
|
8
q397064399 2018-01-13 00:47:42 +08:00
RPC 跟 HTTP 最本质的不同,,啥本质?
一个是 可以自己定义的私有协议( RPC 叫做远程过程调用,你可以自己在 TCP 上 定义一层自己的报文协议,简单点的 你可以直接把请求序列化成 Json 然后 送到另外一边,,然后 json 结果传回来 这也算是 rpc ), 一个是标准协议 ,有标准的报文格式, @chenqh #5 这不是缓存击穿么? |
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 的吞吐就是多少了, 话说这玩意不是 还可以做集群么? |
11
zhx1991 2018-01-13 01:24:07 +08:00
缓存 miss 说的还是穿透到 db 的问题吧
上限靠压测, 不同机器配置明显不一样 |
12
lolizeppelin 2018-01-13 01:26:19 +08:00 via Android
rpc 和 http 本质区别?
如果是指 http 和 mq 的区别的话 http 一旦访问失败就丢失了 mq 可以直接 cast 出去。。等接受端上线 |
13
lolizeppelin 2018-01-13 01:31:17 +08:00 via Android
还有 http 虽然支持长链接 但本质上还是不安全的 执行时间略长的都不适合通过 http 发送
所以一般 rpc 都尽量少用 http 所以一般 http 生成异步 request id |
15
jimzhong 2018-01-13 01:43:09 +08:00
memcached 和 redis 都是 in-memory key-value database. 目前 redis 更流行。缓存 miss 只能查询数据库咯。redis 是单线程的,吞吐量和 CPU 单核性能相关。
|
16
Immortal 2018-01-13 02:23:28 +08:00
粗略的回答下,太深入的也没有研究过,后面大佬跟上
1 redis 支持的数据结构更为丰富,经过几种数据结构的组合使用,能让一些原来复杂的业务轻松实现,而 memcache 则比较单一.在可持续化上,我个人并不认同前面说的比较鸡肋,redis 的落地方案有多种可选,实在不济,怕落地导致性能问题,可以直接启个从库专门做落地,主库完全不落地来解决 2 看你的意思应该是 redis 缓存 miss,被击穿到 db 层.我没遇到过这么大的量,遇到了我第一反映是增加从库和分片,理论上这个是可以无限横向扩展的,加机器就好 3 redis 的单机上限我记得 redis 直接有工具提供可以压测,虽然和实际你使用上性能会有偏差(比如数据类型等种种因素),但也是可数据化的 4 微服务还没学到可以给人解答的地步,不乱说了 |
18
leekafai 2018-01-13 08:40:56 +08:00 via Android
redis 功能其实也不丰富啊……起码在这么多 nosql 里面我感觉 redis 属于超轻量化的,但是支持的数据结构,做缓存很爽
|
19
suyuanhxx 2018-01-13 11:40:08 +08:00 1
1. 他应该是想问缓存击穿处理方式,一是要做 load db 的回写,二是要防止大量请求落到数据库上,防止雪崩(可以使用服务降级处理方式)
2. 微服务的核心是功能职责明确化。一个服务只完成一个功能(模块),降低服务之间依赖。微服务 A 宕掉之后不影响 B 服务。我们项目中使用微服务一点都不“微”,依赖还是很强,还是会产生雪崩。 3. rpc 和 http 理解不多,上面说的有一点非常中肯,一个是报文格式,一个是协议 |
20
dan2001go OP @suyuanhxx load db 的回写是?我就知道 redis 回写到磁盘。
没向数据库击穿方面去想,一直在纳闷 Redis 怎么会有读已存的数据会有 MISS 的情况但是我从来没看到别人说起过。。 |