分布式架构服务调用

服务调用

与传统的单体架构相比,分布式多了一个远程服务之间的通信,不管是SOA 还是微服务,他们本质上都是对于业务服务的提炼和复用。那么远程服务之间的调用才是实现分布式的关键因素。

实现方式

HTTP应用协议的通信框架

  • HttpURLConnection:基于http协议,支持get、post、put、delete等各种请求方式
  • Apache Common HttpClient:实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)支持 HTTPS 协议,支持代理服务器等
  • OKhttp3:当前主流的网络请求的开源框架, 用于替代HttpUrlConnection和Apache HttpClient
    支持http2.0,对一台机器的请求共享一个socket。
    采用连接池技术,可以有效的减少Http连接数量。
    无缝集成GZIP压缩技术。
    支持Response Cache,避免重复请求
    域名多IP支持
  • RestTemplate: Spring 提供的用于访问 Rest 服务的客户端
    面向 URL 组件,必须依赖于主机 + 端口 + URI
    RestTemplate 不依赖于服务接口,仅关注 REST 响应内容
    Spring Cloud Feign

RPC 框架:remote procedure call(远程过程调用),借助RPC可以做到像本地调用一样调用远程服务,是一种进程间的通信方式

  • Java RMI(Romote Method Invocation):是一种基于Java的远程方法调用技术,是Java特有的一种RPC实现
    在这里插入图片描述

  • Hessian:Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据
    在这里插入图片描述

  • Dubbo:Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
    在这里插入图片描述

  • gRPC:gRPC是由Google公司开源的一款高性能的远程过程调用(RPC)框架,可以在任何环境下运行。该框架提供了负载均衡,跟踪,智能监控,身份验证等功能,可以实现系统间的高效连接
    在这里插入图片描述

跨域调用

跨域:在分布式系统中,会有调用其他业务系统,导致出现跨域问题,跨域实质上是浏览器的一种保护处理。如果产生了跨域,服务器在返回结果时就会被浏览器拦截(注意:此时请求是可以正常发起的,只是浏览器对其进行了拦截),导致响应的内容不可用. 产生跨域的几种情况有一下:

当前页面URL当前页面URL是否跨域原因
http://www.baidu.comhttp://www.baidu.com/index.html同源(协议, 域名, 端口号相同)
http://www.baidu.comhttps://www.baidu.com/index.html跨域协议不同(http/https)
http://www.baidu.comhttp://www.taobao.com跨域主域名不同(baidu/taobao)
http://www.baidu.comhttp://abc.baidu.com跨域子域名不同(www/abc)
http://www.baidu.com:8008http://www.baidu.com:8090跨域端口号不同(8080/8090)

常见的解决方案:

  • 使用jsonp解决网站跨域;缺点:不支持post请求,代码书写比较复杂
  • 使用HttpClient内部转发
  • 使用设置响应头允许跨域——>response.setHeader(“Access-Control-Allow-Origin”, “*”); 设置响应头允许跨域.
  • 基于Nginx搭建企业级API接口网关
  • 使用Zuul搭建微服务API接口网关:Zuul是spring cloud中的微服务网关。网关: 是一个网络整体系统中的前置门户入口。请求首先通过网关,进行路径的路由,定位到具体的服务节点上。可以使用zuul的过滤器的请求转发去解决跨域问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值