Dubbo
1,Dubbo是什么?
Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架;
RPC:Remote Procedure Call 远程过程调用;

- 服务提供者Provider启动时会向注册中心把自己的元数据注册上去(比如服务IP、端口及需要注册的接口定义等信息);
- 服务消费方Consumer在启动时会从注册中心订阅(第一次订阅会拉取全量数据)服务提供方的元数据;
- 而当注册中心数据发生变更时会推送给订阅的Consumer(比如Provider某个节点Down掉了,又或者服务提供方进行了扩容,增加了节点。);
- 在Consumer获取到元数据后,Consumer可以发起RPC调用(本质其实是Socket通信+动态代理这样的一个实现机制);
- RPC调用前后会向监控中心上报统计信息(比如并发数和调用接口);
2,多个环境共用一套ZK,怎么保证消费不冲突?
服务发布的group设置不同即可,如:
<dubbo:reference id="comm1" timeout="100000" interface="com.acq.facade.CommService" group="comm102" version="1.0.0" retries="0" check="false">
</dubbo:reference>
<dubbo:reference id="comm2" timeout="100000" interface="com.acq.facade.CommService" group="comm103" version="1.0.0" retries="0" check="false">
</dubbo:reference>
3,dubbo telnet命令包含哪些?
telnet 192.201.102.71 8000 进入该服务;
ls :查看该地址和端口下所暴露的服务列表;
ls -l :显示服务详细信息列表;
ls XxxService :显示服务的方法列表;
ls -l XxxService :显示服务的方法详细信息列表;
invoke :invoke XxxService.xxxMethod({"prop": "value"}) 调用服务的方法;
count com.test.DemoService :统计1次服务任意方法的调用情况;
status -l :显示状态列表;
4,Dubbo 可以对结果进行缓存吗?
为了提高数据访问的速度。Dubbo提供了声明式缓存,以减少用户加缓存的工作量
<dubbo:reference cache=“true” />;
缓存算法主要有LRU,ThreadLocal,JCache:
LRU:基于最近最少使用原则删除多余缓存,保持最热的数据被缓存;
ThreadLocal:当前线程缓存;
JCache:可以桥接各种缓存实现;
5,zk集群为何选择奇数台机器?
zookeeper集群一大特性是只要集群中半数以上的节点存活,集群就可以正常提供服务,
2台服务器,至少2台正常运行才行(2的半数为1,半数以上最少为2),正常运行1台服务器都不允许挂掉
3台服务器,至少2台正常运行才行(3的半数为1.5,半数以上最少为2),正常运行可以允许1台服务器挂掉
4台服务器,至少3台正常运行才行(4的半数为2,半数以上最少为3),正常运行可以允许1台服务器挂掉
5台服务器,至少3台正常运行才行(5的半数为2.5,半数以上最少为3),正常运行可以允许2台服务器挂掉
6台服务器,至少3台正常运行才行(6的半数为3,半数以上最少为4),正常运行可以允许2台服务器挂掉
通过以上可以发现,3台服务器和4台服务器都最多允许1台服务器挂掉,5台服务器和6台服务器都最多允许2台服务器挂掉
但是明显4台服务器成本高于3台服务器成本,6台服务器成本高于5服务器成本。这是由于半数以上投票通过决定的。
而2n+1台和2n+2台机器的容灾能力相同,都是允许n台机器宕机。本着节约的宗旨,一般选择部署2n+1台机器,可以解决容错问题;
浙公网安备 33010602011771号