【面试】你是如何认识SpringCloud和Dubbo的?

接触过微服务吗,知道SpringCloud吗?

Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的一些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)。分布式系统的协调导致样板式样,并且使用Spring Cloud开发人员可以快速站起来实现这些样板的服务和应用程序。它们可以在任何分布式环境中正常工作,包括开发人员自己的笔记本电脑,裸机数据中心以及Cloud Foundry等托管平台。


【面试】你是如何认识SpringCloud和Dubbo的?

特征

Spring Cloud专注于为典型的用例和可扩展性机制(包括其他用例)提供良好的开箱即用体验。

  • 分布式/版本化配置
  • 服务注册和发现
  • 路由
  • 服务到服务的呼叫
  • 负载均衡
  • 断路器
  • 全局锁
  • 领导选举和集群状态
  • 分布式消息传递

主要项目

这些项目你可以没有用过,但是最好有一定的了解。相比与一问三不知,还是能知道它是干啥的比较好。

Spring Cloud Config

由git存储库支持的集中式外部配置管理。配置资源直接映射到Spring,支持非Spring应用的使用。

Spring Cloud Netflix

由各种Netflix OSS组件(Eureka,Hystrix,Zuul,Archaius等)集成。

Spring Cloud Bus

事件总线,用于将服务和服务实例与分布式消息传递链接在一起。对于在群集中传播状态更改(例如配置更改事件)很有用。

Spring Cloud Cloudfoundry

将应用程序与Pivotal Cloud Foundry集成。提供服务发现实现,还可以轻松实现SSO和OAuth2保护的资源。

Spring Cloud Open Service Broker

Zookeeper,Redis,Hazelcast和Consul的领导层选举和常见状态模式以及抽象和实现。

Spring Cloud Cluster

使用Hashicorp Consul进行服务发现和配置管理。

Spring Cloud Security

为Zuul代理中的负载平衡的OAuth2其余客户端和身份验证标头中继提供支持。

Spring Cloud Sleuth

Spring Cloud应用程序的分布式跟踪,与Zipkin,HTrace和基于日志(例如ELK)的跟踪兼容。

Spring Cloud Data Flow

针对现代运行时可组合微服务应用程序的云原生编排服务。易于使用的DSL,拖放式GUI和REST-API共同简化了基于微服务的数据管道的总体编排。

Spring Cloud Stream

轻量级的事件驱动型微服务框架,用于快速构建可以连接到外部系统的应用程序。在Spring Boot应用程序之间使用Apache Kafka或RabbitMQ发送和接收消息的简单声明性模型。

Spring Cloud Stream App Starters

Spring Cloud Task App Starters是Spring Boot应用程序,可以是任何进程,包括不会永远运行的Spring Batch作业,它们在有限的数据处理周期后结束/停止。

Spring Cloud Zookeeper

使用Apache Zookeeper进行服务发现和配置管理。

Spring Cloud Connectors

使各种平台上的PaaS应用程序轻松连接到后端服务,例如数据库和消息代理(该项目以前称为“ Spring Cloud”)。

Spring Cloud Starters

Spring Boot风格的启动程序项目可以简化Spring Cloud使用者的依赖关系管理。(作为一个项目停产,并在Angel.SR2之后与其他项目合并。)

Spring Cloud CLI

Spring Boot CLI插件,用于在Groovy中快速创建Spring Cloud组件应用程序

Spring Cloud Contract

Spring Cloud Contract是一个总括项目解决方案,可帮助用户成功实施“消费者驱动合同”方法。

Spring Cloud Gateway

Spring Cloud Gateway是基于Project Reactor的智能可编程路由器。

Spring Cloud OpenFeign

Spring Cloud OpenFeign通过自动配置并绑定到Spring Environment和其他Spring编程模型惯用法为Spring Boot应用程序提供集成。



用过dubbo吗,说说两者间的区别

  • SpringCloud是Http传输,带宽占用较多,与此同时使用JSON报文,这样消耗会更大。
  • SpringCloud下接口协议需要人为强约束,接口的无序升级往往需要采用行政手段来避免。
  • SpringCloud注册中心是Eureka,也可以搭配consul等等,Dubbo注册中心的选择就更多了zookeeper,redis等等
  • SpringCloud的系统结构更简单、“注册+springmvc=springcloud”,而dubbo各种复杂的Url,protocol,register,invocation,dubbofilter,dubboSPI,dubbo序列化...
  • Dubbo具有调度、发现、监控、治理等功能,支持相当丰富的服务治理能力。Dubbo架构下,注册中心对等集群,并会缓存服务列表已被数据库失效时继续提供发现功能,本身的服务发现结构有很强的可用性与健壮性,足够支持高访问量的网站。
  • Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司;Dubbo虽然也是一个非常优秀的服务治理框架,甚至在服务治理,灰度发布等做的比SpringCloud更加出色,但是它的社区活跃性远不如SpringCloud。在Github上可以看出,SpringCloud迭代非常快,功能将更新更稳定。

那么假如现在有个项目给你,你要怎么做微服务选型呢?

  • 微服务由多个服务协同工作,这就需要考虑存在异构系统集成的问题
  • 分析具体的需求,备选的技术框架是否满足
  • Http协议的通信对于应用的负载量消耗会比较大,但是这会不会真正成为短板(Spring Cloud下Thrift、protobuf等高效的RPC、序列化协议同样可以作为Http+JSON的替代方案)
  • 团队技术储备,是否有足够的人力来开发,如果选择Dubbo框架后续能否有一个持续的维护,这些都是需要考虑的。先不论要准备要集成多少功能做多少改造,作为一个支撑所有工程正常运转的基础组件,问题的及时响应与解答、重大缺陷的及时修复能力就已足够重要。



Dubbo优势是有的,但是要结合具体的项目来讲。相比于SpringCloud,为什么你做的这个项目选择了Dubbo来实现这个功能。或者说,从前你用的Dubbo遇到了什么问题,描述下这个发现问题的过程,最后采取了什么样的解决方案。

面试官往往会在面试过程中引导你来说出他心中的答案,他问你,肯定是他心里早就有了答案。

机会往往是留给有准备的人


分享到:


相關文章: