- Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)通常用于通知所有提供者更新缓存或日志等本地资源信息。
总结:在实际应用中查询语句容错策略建议使用默认Failover Cluster,而增删改建议使用Failfast Cluster或者使用Failover Cluster(retries=”0”)策略防止出现数据重复添加等等其它问题。建议在设计接口时候把查询接口方法单独做一个接口提供查询。
2、使用dubbo遇到过哪些问题?
增加提供服务版本号和消费服务版本号
这个具体来说不算是一个问题,而是一种问题的解决方案,在我们的实际工作中会面临各种环境资源短缺的问题,也是很实际的问题,刚开始我们还可以提供一个服务进行相关的开发和测试,但是当有多个环境多个版本,多个任务的时候就不满足我们的需求,这时候我们可以通过给提供方增加版本的方式来区分.这样能够剩下很多的物理资源,同时为今后更换接口定义发布在线时,可不停机发布,使用版本号.引用只会找相应版本的服务,例如:
[](()第三部分. Redis专题
====================================================================================
1.什么是Redis?
答:Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
2.Redis的特点什么是?
-
支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)
-
支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。
-
支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。
-
单进程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。
3.Redis数据类型有哪些?
答:
-
String(字符串)
-
Hash(hash表)
-
List(链表)
-
Set(集合)
-
SortedSet(有序集合zset)
4. Redis的配置以及持久化方案有几种?
答:以下两种
-
RDB方式
-
AOF方式
[](()第四部分. Zookeeper专题
========================================================================================
1. Zookeeper是什么框架
分布式的、开源的分布式应用程序协调服务,原本是Hadoop、HBase的一个重要组件。
应用场景:Zookeeper的功能很强大,应用场景很多,结合我实际工作中使用Dubbo框架的情况,Zookeeper主要是做注册中心用。
基于Dubbo框架开发的提供者、消费者都向Zookeeper注册自己的URL,消费者还能拿到并订阅提供者的注册URL,以便在后续程序的执行中去调用提供者。而提供者发生了变动,也会通过Zookeeper向订阅的消费者发送通知。
2. Zookeeper有哪几种节点类型
-
持久:创建之后一直存在,除非有删除操作,创建节点的客户端会话失效也不影响此节点。
-
持久顺序:跟持久一样,就是父节点在创建下一级子节点的时候,记录每个子节点创建的先后顺序,会给每个子节点名加上一个数字后缀。
-
临时:创建客户端会话失效(注意是会话失效,不是连接断了),节点也就没了。不能建子节点。
-
临时顺序:不用解释了吧。
3. Zookeeper对节点的watch监听通知是永久的吗?
不是。
官方声明:一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。
为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,这太消耗性能了。
一般是客户端执行getData(“/节点A”,true),如果节点A发生了变更或删除,客户端会得到它的watch事件,但是在之后节点A又发生了变更,而客户端又没有设置watch事件,就不再给客户端发送。
在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。
4. Zookeeper集群如果有3台机器,挂掉一台集群还能工作吗?挂掉两台呢?
记住一个原则:过半存活即可用。
集群支持动态添加机器吗?
其实就是水平扩容了,Zookeeper在这方面不太好。两种方式:
-
全部重启:关闭所有Zookeeper服务,修改配置之后启动。不影响之前客户端的会话。
-
逐个重启:顾名思义。这是比较常用的方式。
[](()第五部分. 微服务专题
==================================================================================
1. 为什么要使用微服务跟踪?它解决了什么问题?
1. 微服务调用的现状?
-
微服务的现状:随着业务的发展,单体架构变为微服务架构,并且系统规模也变得越来越大,各微服务间的调用关系也变得越来越复杂。
-
多服务协同工作:在微服务的应用中,一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果。
-
复杂的调用链条容易出错:在复杂的微服务架构系统中,几乎每一个前端请求都会形成一-个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败。
2. 微服务跟踪解决了什么问题?
微服务跟踪其实是一个工具,它在整个分布式系统中能跟踪一个用户请求的过程(包括数据采集、数据传输、数据存储、数据分析、数据可视化) ,捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具。
Spring Cloud S1euth有4个特点:
-
提供链路追踪:通过sleuth可以很清楚的看出一-个请求都经过了哪些服务。可以很方便的理清服务间的调用关系。
-
性能分析:通过sleuth可以很方便的看出每个采样请求的耗时,分析出哪些服务调用比较耗时。当服务调用的耗时随着请求量的增大而增大时,也可以对服务的扩容提供- -定的提醒作用。
-
数据分析,优化链路:对于频繁地调用一个服务,或者并行地调用等,可以针对业务做一些优化措施。
-
可视化错误:对于程序未捕捉的异常,可以在zipkin界面上看到。