-
Notifications
You must be signed in to change notification settings - Fork 51
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
开源之夏-SOFADashboard 整体功能细分 #59
Comments
1、可以暂时不考虑对于 ark 部分的支持,如果在实际的开发过程中,有影响,可以将 ark 部分能力关闭掉(功能要支持插件化) |
对于缓存的探讨目前的服务信息数据是从SOFARegistry中通过rest api获取数据,然后存入缓存中。 当运行时和检测到数据变化时,都会再通过rest api再获取一次然后存入缓存中。 这个缓存的大概实现是用3个ConcurrentHashMap实现 private Map<String, RpcService> serviceMap = new ConcurrentHashMap<>();
private Map<String, List<RpcConsumer>> consumerMap = new ConcurrentHashMap<>();
private Map<String, List<RpcProvider>> providerMap = new ConcurrentHashMap<>(); 也就是说当前的实现方法是直接把 数据存储到项目内存里面。 好处是:存取速度快 吞吐量大 坏处是:
解决办法保留通过 rest api 从SOFARegistry获取数据,在此基础上,抛弃了之前存入ConcurrentHashMap的方法。我们可以直接把数据封装后存入redis里面。 接口压力测试采用jemeter 对/api/service/all-service?query接口进行测试,该接口是获取所有的服务列表。 测试分别采用了1个服务1个生产者1个消费者和1个服务1000个生产者1000个消费者的模式。 1个服务1个生产者1个消费者未使用redis:
使用了redis:
1个服务1000个消费者1000个提供者未使用redis:
使用了redis:
分析并总结在第一个1个服务1个消费者1个生产者模型中,可以看到两者的异常率和吞吐量是差不多的,原先内存缓存级别的会比用了redis的速度稍微更快一点 在第二个模型中,两者的差别明显变大了。在吞吐量中,原先的缓存比采用redis的高了10倍左右。我的测试环境用的是redis单机测试的,如果采用redis集群可能会更好,而且redis跟项目是一起运行的,电脑带不动2个。但我们也非常明显看得出原先的缓存方法确实在速度上是远超redis。 总结: |
@ashlee618 我的意见是不绑定到具体的实现上去,可以在接口层面提供好扩展,redis 作为存储的一种实现,基本 map 的 mem 存储也是一种实现,当然也可以扩展其他存储 |
https://summer.iscas.ac.cn/#/org/prodetail/210170198
The text was updated successfully, but these errors were encountered: