SOFA Weekly | SOFAMeetup#4杭州站活动报名,QA 整理

2021/03/19 17:00
阅读数 41
SOFA WEEKLY | 每周精选,筛选每周精华问答
同步开源进展,欢迎留言互动
SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,也是在金融场景里锤炼出来的最佳实践。
SOFAStack 官网: https://www.sofastack.tech
SOFAStack: https://github.com/sofastack

  每周读者问答提炼  

欢迎大家向公众号留言提问或在群里与我们互动
我们会筛选重点问题通过 
" SOFA WEEKLY " 的形式回复

1@明惑 提问:

请教一下:JRaft 的 StateMachine 的 onApply 方法是线程安全的吗?如果在 onApply 里面有一些耗时操作的话,整个应用吞吐会下降很明显吧。

A:是,对于同一个 st,onApply 必须由 JRaft 的单线程去执行,因为 raft 算法本身需要保证 raft log 被顺序 apply,所以这里没有线程安全问题;把结果同步了就好了,计算别放里头。

SOFAJRaft:https://github.com/sofastack/sofa-jraft


2@孙军超 提问:

请教个问题:我现在直接跑 jraft-example 的 rheakv 的测试代码 PutExample,第一次调用 Rocksdb put 函数总会先阻塞整整 5 秒钟,server 端也没有任何报错。

A:猜测是 DefaultChannelId 里的 getProcessId() 太慢了,或者是 NetUtil 里获取 loopback 地址太慢,有一个办法可以证实:在 main 方法最开始提前 Class.forName 去加载这俩个类,应该会先卡住 5 秒,等到 rheakv 的逻辑执行时就不会卡住了;试一下我上面说的方法,猜测就是这两个类其中之一导致的:https://stackoverflow.com/questions/33289695/inetaddress-getlocalhost-slow-to-run-30-seconds;配 etc/hosts 生效后可以解决。

SOFAJRaft:https://github.com/sofastack/sofa-jraft


3@明惑 提问:

请教一下:状态机中 onApply 和 onSnapshot 的方式是线程安全的吗,我在这两个方法中操作同一个数据,会不会出现并发问题呢?

A:onSnapshot 会暂停其他线程;不会有影响,onApply 又是单线程执行的。

SOFAStack:https://github.com/sofastack/sofastack.tech


4@胡志奇 提问:

Snapshot 的 save/load 方法都将阻塞状态机,应该尽力优化,避免阻塞。Snapshot 的保存如果可以做到增强备份更好。

onSnapshotSave 需要在保存后调用传入的参数 closure.run(status) 告知保存成功或者失败,推荐的实现类似:

 @Override

   public void onSnapshotSave(SnapshotWriter writer, Closure done) {

      // 同步获取状态机的当前镜像状态 state

      // 异步保存 state

      // 保存成功或者失败都通过 done.run(status) 通知到 jraft

   }

官网上说的,异步保存也会阻塞?

A:没有问题,安全的;你截取的内容其实已经说得很清楚了,异步是指存储操作,同步是指获取当前状态机的镜像必须是同步操作;就是说:你必须在状态机被后续的 raft log 更改之前,拿到镜像,也就是拿镜像和 apply 是串行操作,一旦拿到镜像,你可以用异步的方式把镜像保存的磁盘上,甚至再压缩一下。

SOFAJRaft:https://github.com/sofastack/sofa-jraft


5@闫文超 提问:

问下大佬,SOFABoot 启动服务端暴露两个接口,但是 nacos 注册中心只注册了一个 RPC 端口,客户端调用接口报错

A :SOFARPC + NACOS 有实践案例:https://www.sofastack.tech/projects/sofa-rpc/registry-nacos/ 如果还是解决不了可以上传一个可以复现问题的 demo 工程到 GitHub。

SOFARPC:https://github.com/sofastack/sofa-rpc


6@游侠 提问:

请教一下:在 SOFAJRaft,Learner 这种复制器,怎么理解?表示这个节点,只读?

A :learner 不参与选举,可理解为冷备。

SOFAJRaft:https://github.com/sofastack/sofa-jraft


  本周推荐阅读  


   活动报名    

SOFAStack 开源社区将于 03 月 21 日(周日) 14:00 在杭州举办 SOFAMeetup:ServiceMesh 的落地实践与展望,邀请了蚂蚁、美团等有实际规模化落地经验的公司,旨在带来业界在 Service Mesh 领域的最新生产实践和对未来的展望,帮助大家更好得理解并落地云原生技术,报名请点击“阅读原文”。



本文分享自微信公众号 - 金融级分布式架构(Antfin_SOFA)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部