1.SpringCloud与Dubbo的区别两者都是现在主流的微服务框架,但却存在不少差异:
SpringCloud:Spring公司开源的微服务框架,SpirngCloud定位为微服务架构下的一站式解决方案。
SpringCloudAlibaba
SpringCloud的功能很明显比Dubbo更加强大,涵盖面更广,而且作为Spring的旗舰项目,它也能够与SpringFramework、SpringBoot、SpringData、SpringBatch等其他Spring项目完美融合,这些对于微服务而言是至关重要的。
使用Dubbo构建的微服务架构就像组装电脑,各环节选择自由度很高,但是最终结果很有可能因为一条内存质量不行就点不亮了,总是让人不怎么放心,但是如果使用者是一名高手,那这些都不是问题。
而SpringCloud就像品牌机,在SpringSource的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外的东西,就需要对其基础原理有足够的了解。
Dubbo框架默认采用Dubbo自定义通信协议,与Http协议一样底层都是TCP通信。但是Dubbo协议自定义了Java数据序列化和反序列化方式、数据传输格式,因此Dubbo在数据传输性能上会比Http协议要好一些。
不过这种性能差异除非是达极高的并发量级,否则无需过多考虑。
Dubbo采用自定义的Dubbo协议实现远程通信,是一种典型的RPC调用方案,而SpringCloud中使用的Feign是基于Rest风格的调用方式。
1)Rest风格
REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。
Rest的风格可以完全通过HTTP协议实现,使用HTTP协议处理数据通信。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
SpringCloud中的Feign就是Rest风格的调用方式。
2)RPC
RemoteProcedureCall,远程过程调用,就是像调用本地方法一样调用远程方法。RPC一般要确定下面几件事情:
数据传输方式:多数RPC框架选择TCP作为传输协议,性能比较好。数据传输内容:请求方需要告知需要调用的函数的名称、参数、等信息。序列化方式:客户端和服务端交互时将参数或结果转化为字节流在网络中传输,那么数据转化为字节流的或者将字节流转换成能读取的固定格式时就需要进行序列化和反序列化因为有序列化和反序列化的需求,因此对数据传输格式有严格要求,不如Http灵活
Dubbo协议就是RPC的典型代表。
我们看看Dubbo协议和Feign的调用区别:
3.Eureka和Zookeeper注册中心的区别SpringCloud和Dubbo都支持多种注册中心,不过目前主流来看SpringCloud用Eureka较多,Dubbo则以Zookeeper为主。两者存在较大的差异:
从集群设计来看:Eureka集群各节点平等,没有主从关系,因此可能出现数据不一致情况;ZK为了满足一致性,必须包含主从关系,一主多从。集群无主时,不对外提供服务CAP原则来看:Eureka满足AP原则,为了保证整个服务可用性,牺牲了集群数据的一致性;而Zookeeper满足CP原则,为了保证各节点数据一致性,牺牲了整个服务的可用性。服务拉取方式来看:Eureka采用的是服务主动拉取策略,消费者按照固定频率(默认30秒)去Eureka拉取服务并缓存在本地;ZK中的消费者首次启动到ZK订阅自己需要的服务信息,并缓存在本地。然后监听服务列表变化,以后服务变更ZK会推送给消费者。4.SpringCloud中的常用组件有哪些?SpringCloud的子项目很多,比较常见的都是Netflix开源的组件:
SpringCloudConfig集中配置管理工具,分布式系统中统一的外部配置管理,默认使用Git来存储配置,可以支持客户端配置的刷新及加密、解密操作。
SpringCloudNetflixNetflixOSS开源组件集成,包括Eureka、Hystrix、Ribbon、Feign、Zuul等核心组件。
SpringCloudConsul基于HashicorpConsul的服务治理组件。
SpringCloudSleuthSpringCloud应用程序的分布式请求链路跟踪,支持使用Zipkin、HTrace和基于日志(例如ELK)的跟踪。
SpringCloudTask用于快速构建短暂、有限数据处理任务的微服务框架,用于向应用中添加功能性和非功能性的特性。
SpringCloudZookeeper基于ApacheZookeeper的服务治理组件。
SpringCloudGatewayAPI网关组件,对请求提供路由及过滤功能。
5.微服务调用关系复杂,如何做监控和错误排查?企业中对于微服务监控有一套东西,叫做APM。比如:SpringCloudSeluth+Zipkin,Pinpoint、Skywalking,可以实现性能监控、链路跟踪(精确到某个代码,某条sql)、CPU运行情况,链路运行耗时。
当然,还可以借助于分布式日志管理系统。把项目运行的日志收集,形成统计报表,放入elasticsearch,便于搜索查看。比如:ELK技术栈、GrayLog
6.Hystix的作用是什么?Hystix是Netflix开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败。比较常用的手段就是线程隔离和服务熔断。————————————————
一.SpringCloud
1.简介
2.组织架构
springcloud子项目包括:
SpringCloudConfig:配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。
SpringCloudBus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与SpringCloudConfig联合实现热部署。
SpringCloudNetflix:针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。
NetflixEureka:云端负载均衡,一个基于REST的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移。
NetflixHystrix:容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
NetflixZuul:边缘服务工具,是提供动态路由,监控,弹性,安全等的边缘服务。
NetflixArchaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
SpringCloudforCloudFoundry:通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。
SpringCloudSleuth:日志收集工具包,封装了Dapper,Zipkin和HTrace操作。
SpringCloudDataFlow:大数据操作工具,通过命令行方式操作数据流。
SpringCloudSecurity:安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。
SpringCloudConsul:封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。
SpringCloudZookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。
SpringCloudStream:数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。
SpringCloudCLI:基于SpringBootCLI,可以让你以命令行方式快速建立云组件。
3.特点
1)约定优于配置
2)开箱即用,快速开启
3)适用于各种环境
4)轻量级的组件
5)组件支持丰富,功能齐全
二.Dubbo
Dubbo框架设计一共划分了10个层:
配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心。
服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton。
服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心。
集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心。
远程调用层(Protocol):封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。
信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心。
网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心。
1)连通性
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
注册中心和监控中心都是可选的,服务消费者可以直连服务提供者
2)健状性
监控中心宕掉不影响使用,只是丢失部分采样数据
数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
注册中心对等集群,任意一台宕掉后,将自动切换到另一台
注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
服务提供者无状态,任意一台宕掉后,不影响使用
服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复
3)伸缩性
注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心
服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者
4)升级性
当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力。