java开发面试问答----微服务篇

1,171 阅读5分钟

RPC

  • rpc即远程过程调用,它的出现是为了解决分布式系统中多个应用之间的调用关系,使调用其他应用的方法的过程像本地调用一样方便。
  • rpc和restful的区别:rpc是一种编程模型,一种调用思想,而restful是具体的一种实现方式,通常rpc设计时是面向过程的,而restful是结合了http动词面向资源的,rpc的底层实现可以使用restful封装
  • rpc和rmi的区别:同样,rmi只是java的一种访问远程对象协议,rpc可以使用rmi来实现
  • rpc的实现可以用以下模型来解释

- client application是调用方,server application是被调用方 - client stub是代理对象,他看起来是server端的类,其实内部是用rpc的代理类,他的作用是将调用的方法及参数进行序列化,并在结果返回时对结果进行反序列化 - run-time library就是实现各种通信的库包,如java的Socket,restful等等 - 最后是底层网络通信数据通信 - server stub将请求参数反序列化,通过反射找到本地类和方法,调用本地方法获取结果并序列化然后返回给client端

dubbo实现原理

dubbo是阿里巴巴开源的分布式服务框架,采用层次结构设计,共分为10层

  • 服务接口层:服务提供方根据业务需求编写接口和实现,服务调用方使用接口调用服务
  • 配置层:配置参数
  • 服务代理层:stub,根据服务接口生成的本地代理
  • 服务注册层:封装服务地址的注册和发现
  • 集群层:封装多个服务提供者的路由及负载均衡
  • 监控层:监控服务的调用次数和耗时
  • 远程调用层:封装rpc,Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用。
  • 信息交换层:封装请求响应模式,同步转异步
  • 网络传输层:抽象mina和netty为统一接口
  • 序列化层:封装的序列化方式和工具

怎么理解RESTful

rest的意思是表现层状态转换,即uri表示资源,http的操作方法表示行为:post表示增加,delete表示删除,put表示修改,get表示查询,返回的状态码表示结果,restful就是具有rest风格的架构规范。

什么是SOA,SOA和微服务的区别是什么

  • soa的意思是面向服务架构,他的思想是单个系统相对独立,通过网络进行相互通信并对外提供整体服务,谈到soa一般都会说esb企业服务总线,esb的作用就在于集成不同协议的不同服务,做消息转发,路由的工作。
  • 而微服务的理念是soa的升华,他是彻底的组件化和服务化,将soa中的单个系统拆成多个提供单一服务的组件并去除esb,借由docker技术实现快速部署。

服务治理

说说你们是怎么实现服务治理的

谈服务治理要从几个方面来说

  • 服务的注册和发现,常用的dubbo,spring cloud套件
  • 服务的限流和熔断,dubbo自带了降级功能,而spring cloud套件支持降级和熔断,当然也可以使用单独的sentinel
  • 服务的监控,dubbo和spring cloud套件都有服务的监控功能,如果要用到完整的链路追踪可以使用skywalking

说说service mesh和serverless

  • service mesh 服务网格是微服务框架的进一步进化,他的理念是使用边车模式将服务治理和业务实现完全解耦合,将与业务代码无关的服务注册,限流,安全验证等全部抽离到proxy中。第一代Service Mesh的代表为Linkerd和Envoy,主要专注于做proxy,而第二代Service Mesh主要改进集中在更加强大的控制面功能,典型代表有Istio和Conduit。
  • Istio 主要架构由四部分组成
    • Envoy继续扮演边车的角色,实现服务注册发现,限流等功能
    • Mixer接收Envoy的流量,前置条件检查(ACL白名单),遥测上报(日志监控),配额管理(解决资源冲突)
    • Pilot相当于envoy的超级边车,负责envoy的生命周期,管理envoy路由,熔断限流等策略
    • Istio-Auth则负责服务的安全验证,流量加密和证书管理
  • serverless 无服务器架构,意思并不是不需要服务器,而是开发人员不需要关心代码在服务器上的运行情况,可以理解成将原来的整个应用拆分成一个个执行不同任务的函数,这样可以更细粒度的控制业务运行情况,提供FaaS函数即服务,serverless的好处在于
    • 可以极大缩短交付时间,因为只需要交付相应的函数
    • 可以灵活伸缩,不用再担心容量问题
    • 降低成本,可以不用关心基础设置的管理