RPC 您所在的位置:网站首页 如何实现一个rpc框架结构 RPC

RPC

2024-03-08 13:09| 来源: 网络整理| 查看: 265

1.1 网友一:

这里注册中心信息是保存在本地文件中,如果保存在数据库,就要用数据库锁,或者zookeeper、redis的分布式锁。

网友二回复: 数据库和文件不一样吧?为啥数据库也要锁?

TBD

1.2 网友三:

请教下老师,如果要实现一个可供生产环境大规模集群使用的注册中心,JDBC协议是不是就不太合适了?这种情况下一个注册中心要满足哪些要求呢?个人盲猜:可多台部署、基于tcp协议最好也是netty实现、彼此之间要保证数据一致性(好像也不用强一致),不知道理解对不对

作者回复: 大致的要求就是: 可用性:不能因为某个节点故障导致注册中心不可以; 数据一致性:能保证顺序一致性一般就可以满足需求了。 性能:server节点状态变更后,能尽快更新。 另外,大规模集群情况下,需要考虑业务系统上下线时,注册中心的性能问题。比如:一个几千个节点的微服务上线,会重启几千个Server节点,这时候注册中心需要更新大量的数据。

1.3 如果服务端挂掉了,怎么通知NameService呢?

作者回复: 这个问题在我们的demo中并没有解决。实际在生产环境中,有些注册中心会定期检查服务端的状态,但是即使这样也不能保证注册中心中维护的状态和服务端实际的状态实时同步。 解决这个问题,更多的是依靠rpc框架客户端的自动重试策略,比如,请求某个服务端实例超时后,立即换一个实例自动重试。

1.4 关于通过反射获取调用方法的性能损耗

Method method = serviceProvider.getClass().getMethod(rpcRequest.getMethodName(), String.class); 每次请求都用反射获取method,有没有性能损耗,是不是存起来,请问老师这部分生产级别怎么处理的?

作者回复: JVM对反射的优化已经很好了,这部分的性能损耗并不是很大,所以一般不用特别的优化。

另外网友回复:

之前看过部分dubbo的代码,里面对反射有做优化,建议可以去看看

扩展问题:

PHP语言的反射特性与Java的有什么异同? 

另外性能损耗如何,是否推荐使用?

1.5 RPC框架中有涉及到client和server,如果是不同服务调用,在服务器上是如何部署代码的呢?

TBD

1.6 DriverManager是怎么知道加载哪个JDBC驱动的呢? 代码里并没有把驱动的类名传过去呀

作者回复: JDBC 4.0 已经支持SPI机制了,只要把驱动放在classpath里面就会自动加载的。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有