美文网首页Java高级交流
20171211-15问题整理

20171211-15问题整理

作者: 六月星空2011 | 来源:发表于2017-12-12 19:53 被阅读137次

    总摘要: 读写分离. mysql RR


    2017-12-11

    • 摘要: 读写分离. mysql RR.
    1. 你们数据库做了读写分离吗? 做读写分离,什么情况下要做读写分离呢? 你们判断是否要读写分离是怎么判断的? [上海--海棠]

    广州-小护士<-> 9:14:03
    读写分离看场景.
    Netflix的场景:
    多数据园区,需要园区之间高度同步。需要写同步很快的数据库
    于是选择了写最快的Cassandra, Netflix是面向全球服务的场景.单单是美国就有至少两个园区,东区和西区. Cassandra出名的读很慢, 所以使用了 Memcache.
    成都-梅小西(-) 9:16:34
    读写分离一般是高并发系统优化的第一步
    北京-天空<->
    @上海--海棠 加缓存,简单粗暴
    广州-小护士<-> 9:17:23
    高并发是个相对概念
    上海--海棠(-) 9:17:31
    日订单数量10万算不算
    广州-小护士<-> 9:17:41
    用户请求数 比 接受请求的线程总数
    成都-梅小西(-) 9:17:52
    10万要看是不是集中在某几个小时, 如果是分散的,还算不上高并发. 读写分离是大部分系统优化的第一步。这只能暂时解决, 往后光靠读写分离是不够的.
    上海--海棠(-) 9:22:53
    现在我们系统在搞优化,没什么经验
    广州-小护士<-> 9:23:06
    Netflix栈:
    Cassandra, 写快读慢。解决需求:多数据园区高频同步。
    Memcache,读快写快,缓存技术。解决需求:Cassandra读慢。
    之所以用Memcache 而不用Redis,是由于背后应用架构的选择:微服务,粒度过细的服务.
    广州-小护士<-> 9:24:47
    我还有个案例,我还记得的,交通银行。
    成都-梅小西(-) 9:25:48
    交通银行怎么了
    苏州-winylee(-) 9:26:02
    直接写Memcache,数据会不会丢失
    北京-天空<-> 9:26:07
    在数据库访问这层加缓存@上海--海棠 ,一层不够再加一层
    广州-小护士<-> 9:26:19
    交通银行栈:
    DB2,历史的选择。写慢读慢,但是够稳定,几十年没出事。
    Gemfire,NewSQL,当做缓存。解决需求:DB2写慢读慢的缺点,采用定时异步更新data到DB2
    成都-梅小西(-) 9:26:43
    缓存用gemfire?这玩意好用么
    广州-小护士<-> 9:26:55
    为什么选择Gemfire。场景:
    网络支付,实时转账,给DB2带来很大的压力. Gemfire是Pivotal家的东西。要收费。
    杭州-东子(-) 9:26:53
    加缓存吧, 读者分离先别考虑了
    成都-梅小西(-) 9:28:30
    我的意思是gemfire跟redis,mem这种相比,是不是更牛逼, 招行的技术栈呢
    广州-小护士<-> 9:29:15
    Gemfire提供了类SQL的查询引擎
    广州-Ryan(-) 9:33:55
    读写分离和缓存解决的问题都类似,带来的问题也同样,比如数据一致性,业务上容忍不?出问题的兜底方案怎样?
    想清这些问题就好下手

    2. 问个问题,MySQL RR 解决了幻读?[杭州-微笑]

    广州-天道(-) 10:12:15
    mysql RR解决了幻读的
    杭州-微笑(-) 10:14:07
    好像并不完全?
    比如A 事务先查一次,然后B 事务插入一条记录,A 事务更新该记录,然后再查一次,此时读到了这条新插入的被更新的记录。
    成都-凌落(-) 10:15:56
    RR通过 多版本管理解决了幻读问题的
    深圳-Foxleg(-) 10:16:28
    事务已经遇到平顶了, 继续打通任督二脉啊。
    成都-孤狼(-) 10:16:31
    你这个问题问的,你先去看看RR
    杭州-微笑(-) 10:17:53
    RR 不就是读到的一行数据不变吗
    北京-Shenandoah(-) 10:18:34
    开启事务之后, 其他会话对数据库的操作,让当前会话不可见。
    成都-凌落(-) 10:18:46
    发现有写操作 读操作 看到的就是历史版本
    杭州-微笑(-) 10:20:56
    更新操作操作的是select 操作没查到的数据,更新完,select 里多了,不是幻读吗
    上海-coty(-) 10:22:04
    你可以自己尝试下嘛。
    上海-coty(-) 10:22:09
    比这样问好多啦。
    北京-Shenandoah(-) 10:22:14
    好好搜索一下,建议使用Google
    杭州-微笑(-) 10:23:25
    试验过了
    杭州-微笑(-) 10:23:30
    我就问问,这个算不算幻读



    杭州-微笑(-) 10:25:11
    左边A 事务,右边B 事务,A 事务先做了select,B 事务提交之后,A做了左边的操作
    成都-梅小西(-) 10:26:02
    @杭州-微笑 不会的啊。rr下a还是读的老数据,不会读到b数据
    上海-coty(-) 10:26:14
    commit 事物不是已经提交啦么 ?
    成都-梅小西(-) 10:26:32
    他没说a提交啊
    上海-coty(-) 10:27:05
    a也没读到b的修改啊
    杭州-微笑(-) 10:27:14
    b 做了插入
    杭州-微笑(-) 10:27:32
    a 更新了这条插入的数据,再查就查到了
    成都-梅小西(-) 10:28:17
    a都没查到b插入的时候,如何更新?
    成都-梅小西(-) 10:28:20
    数据
    杭州-微笑(-) 10:29:17
    b 插入了id 14 的记录,a 直接更新id 14 的数据,然后再查就查到了
    杭州-光明消逝(-) 10:30:18
    这个不是数据库事务基础么, 无非就是时间节点, 查询,其它事务提交 (再查询可以查到14,但忽略了),然和14提交
    成都-梅小西(-) 10:31:04
    你自己试过么, 你设置了不要自动提交么
    杭州-微笑(-) 10:32:18
    截图是我实验的结果,都是事务中操作的, A 那边提交完再查又不一样
    杭州-小五(-) 10:34:16
    意思是:首先你得关闭自动提交,再实验
    杭州-微笑(-) 10:37:03
    回头试试,不过直觉和这不会有关系
    成都-梅小西(-) 10:38:56
    我靠,当然有关系啊,你没设置关闭自动提交?
    上海-coty(-) 10:41:00
    必须有关系啊
    上海-coty(-) 10:41:06
    rr 讲的是在一个事物内啊
    杭州-微笑(-) 10:44:11
    取消事务自动提交的结果一样
    杭州-海妖(-) 11:09:31
    mysql RR用gap lock解决了幻读的问题
    深圳-scaler(-) 11:15:16
    你这个B的插入事务都提交了,A当然能看到了
    杭州-微笑(-) 11:15:48
    更新前,是看不到的
    成都-梅小西(-) 11:16:15
    @深圳-scaler 胡说。这是rr。b就算提交了,a也看不到
    杭州-微笑(-) 11:16:31
    是的

    2017-12-13

    • 摘要: zk选举. 问题排查.
    1. zk 选举机制有哪些缺点?zk选举的羊群效应具体是怎么样子的?[广州-小护士]

    广州-小护士9:56:49


    但是我不明白里面说的receive notification,那么谁去通知 leader failed?为了避免羊群效应,整个zk集群节点构成一个双链链表。leader failed 了 谁去通知 leader的next node。让这个next node 去执行 getChildren 从而拿到全部children list ?同时又是怎么保证这个通知可达?
    杭州-微笑(-) 10:03:00
    是监听
    广州-小护士<-> 10:03:09
    是不是还有一个类似 monitor的节点但并非是zk集群中的成员, 这个monitor会轮询监听那个leader是不是failed了
    杭州-微笑(-) 10:03:16
    后一个节点监听前一个, 一个节点变化只会引起后一个节点的动作. 那个curator 里的工具算法是这样的.
    北京-Mr.Win(-) 10:05:20
    我只是建议所以反问你,学东西就应该自己多问问自己,然后再对比一下别人怎么做的,特别是你有疑惑的时候
    广州-小护士<-> 10:31:03
    zk 集群会有脑裂问题吗
    成都-苏连云(-) 10:31:10
    不会 , 选举 n/2+1个才能成为leader
    北京-天空<-> 10:31:28
    会有脑裂啊
    广州-小护士<-> 10:32:10
    出现脑裂,如何处理?n/2+1 election,然后呢?
    成都-苏连云(-) 10:33:58
    如果集群一半宕机,选举不出来leader的
    成都-梅小西(-) 10:36:24
    那就直接宣告集群挂掉, 可以参考下redis哨兵的选举
    广州-小护士<-> 10:40:38
    没看到哪里文档有说zookeeper集群挂一半然后不能找leader. quorum 是法定人数,这个人数就是刚才说的 n/2 + 1 ?不满足条件就取消 leader activation,然后重新选举?
    2. 请问一个面试问题, 没有任何日志的前提情况下, 怎么排查服务器上一个 Java 应用为何莫名其妙的挂掉了呢? [广州-John]

    广州 - Cyan(-) 13:16:40
    没日志 看个啥 . 都是说空话,瞎猜
    广州-John(-) 13:17:49
    嗯 这种感觉 Linux 应该多多少少会留下点蛛丝马迹,Nginx Tomcat Java 这些都没有任何的 log
    深圳-wjc<-> 13:42:22
    没日志应该不是查把。。。应该是猜。。。
    广州-John(-) 13:43:33
    嗯 当时有点蒙 但是后面觉得可以结合 Linux 和 监控 可以反查
    广州-小护士<-> 13:56:53
    实际上, john遇到的问题需要充另外一角度去解决,有点像黑客思维
    广州-小护士<-> 13:57:24
    如果那个进程有对外访问服务的, 可以查对应消费者的日志, 假设那个进程有被消费者定时轮询访问的,可以尝试查查那个消费者的日志
    广州-小护士<-> 13:59:17
    如果宕掉的进程本身是在docker 容器环境下运行的,可以查查docker自身的容器日志, 感觉考察的不是纵向思维,而是发散性思维,考察对各种情况的可能性,有点像 detect
    广州-Ryan(-) 14:00:49
    都是侦探,服务器不挂,进程没有了,先查服务器日志,比如被oom killed了。
    如果没有,看看有没办法看命令操作日志,比如人为的kill。
    上海-story(-) 14:03:00
    我想问下 面试官后面给出答案了吗
    广州-John(-) 14:03:09
    没有

    相关文章

      网友评论

        本文标题:20171211-15问题整理

        本文链接:https://www.haomeiwen.com/subject/lvrnixtx.html