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层java
服务接口层:服务提供方根据业务需求编写接口和实现,服务调用方使用接口调用服务
配置层:配置参数
服务代理层: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技术实现快速部署。
服务治理
说说大家是怎么实现服务治理的
谈服务治理要从几个方面来讲spring
服务的注册和发现,经常使用的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的好处在于
能够极大缩短交付时间,由于只须要交付相应的函数
能够灵活伸缩,不用再担忧容量问题
下降成本,能够不用关心基础设置的管理