Chen
Chen
我把这个加入到开箱即用计划中,有兴趣的话,可以认领一下 我们目前希望通过社区去开发sofa-registry,改变我们是单一开发主体的现状 @zwm325715
assigned to you, @ZLBer you are well welcomed for joining SOFARegistry Any questions, problems we could talk in this channel Thanks
最早是V5的时候,有watcher、publisher和subscriber等概念,作为几种不同类型的客户端,存储在不同的“Store”里面,这么设计也是最初V5使用了多个线程池,通过task对象进行解耦,所以,将元信息封装在“model”对象中。 而V6我们改版时候,经过压测等手段,发现异步解耦有如下问题: 1. 实战下来,过度地一步解耦导致对象之间的关系不明确,很容易混淆,加之没有单测,很容易出现问题 2. 性能大坑,无法很好处理IO类任务和计算类任务,以及优先级问题 后来,针对异步队列进行了解耦,但是留下了原有的对象,存储。 再后来,对象本身好像被加了一些定义,这个 @bjxiaojian 比较清楚
> > 最早是V5的时候,有watcher、publisher和subscriber等概念,作为几种不同类型的客户端,存储在不同的“Store”里面,这么设计也是最初V5使用了多个线程池,通过task对象进行解耦,所以,将元信息封装在“model”对象中。 > > 而V6我们改版时候,经过压测等手段,发现异步解耦有如下问题: > > > > 1. 实战下来,过度地一步解耦导致对象之间的关系不明确,很容易混淆,加之没有单测,很容易出现问题 > > 2. 性能大坑,无法很好处理IO类任务和计算类任务,以及优先级问题 > > > > 后来,针对异步队列进行了解耦,但是留下了原有的对象,存储。 > > 再后来,对象本身好像被加了一些定义,这个 @bjxiaojian 比较清楚 > > 1. 如果缺少单测应该补充单测,我觉得这个不是问题...
`.setRegistryEndpoint("192.168.0.15")` 这个192.168网段我理解从你本地应该是联不通的,除非是本地和SOFA Registry的session都是192.168网段的 你可以先ping一下看看是否网络可通
I send a PR and see if it works for what you guys are expecting for
可以参考下之前的配置,有需要的话,微调: ```shell -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -XX:ConcGCThreads=2 -XX:ParallelGCThreads=6 -XX:ZCollectionInterval=120 -XX:ZAllocationSpikeTolerance=5 -XX:+UnlockDiagnosticVMOptions -XX:-ZProactive -Xlog:safepoint,classhisto*=trace,age*,gc*=info:file=/home/admin/logs/gc-%t.log:time,tags:filecount=5,filesize=50m -Dlog4j2.AsyncQueueFullPolicy=Discard -Dlog4j2.DiscardThreshold=ERROR -Dlog4j2.is.webapp=false -Dlog4j2.enable.threadlocals=true -Dlog4j2.garbagefree.threadContextMap=true -DAsyncLogger.RingBufferSize=49152 -DAsyncLoggerConfig.RingBufferSize=49152 ```
首先几个基础的问题: 1. Redis 不支持高版本向低版本同步 2. Redis Cluster 和 多组Redis Master-Slave构成的集群是不存在同步的可能性的。 3. Sentinel是用于Master-Slave架构下,主从切换的,你用云厂商的Redis通常自带哨兵。 阿里云的实现是Tair,是支持Redis原生同步协议的,腾讯云的你要问下他们客服,是否支持Redis原生通信。 我建议是你把背景写的更详细一些,比如为什么有多个版本,不同云厂商你是怎么用的,同步是为了解决什么问题?这些其实和x-pipe关系不大,倒是和解决你的问题比较有关。 @callmedba
@callmedba 哨兵不是必须的,但是如果云厂商有哨兵的话,会导致切换以后,备机房的Redis会从keeper(x-pipe同步组件)的slave,切换成master,从而无法同步数据。 2. 关于回滚这个话题,感觉你可能只能双写高低版本两个集群,才有回滚的可能性,但是双写无法保证单次业务写入两个集群的事务性,理论上集群之间数据有可能不一致,你可以通过业务上的数据巡检等方式做数据补偿。
@callmedba 那可能不太行,问题的本质在于full sync的RDB文件无法向下兼容 比如Redis 5.0的RDB version是10,Redis 2.X的RDB version是8,所以,如果用Redis version2.X作为slave 去同步Redis version 5.x的master,就会导致同步连接无法建立。 解决方案是你找一个Redis RDB的解析、转换工具,而且还需要改造xpipe,让xpipe的keeper拉取完RDB之后,可以完成从高版本到低版本的转换,才可以redis 5.x 同步给 redis 2.x。