前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一种跨环境Tars调用的实现思路

一种跨环境Tars调用的实现思路

原创
作者头像
claudeliang
修改2019-08-26 11:10:10
1K0
修改2019-08-26 11:10:10
举报
文章被收录于专栏:奔跑的老肥羊奔跑的老肥羊

导语

Tars是腾讯开源的高性能RPC开发框架,详细介绍见Tars框架介绍。跨环境Tars调用的需求(两个不同系统,或两个不同环境系统的打通)时有发生,本文提供的是一种在不同Tars环境间,让服务可以通过registry互相调用的思路。既满足跨环境Tars调用的需求,又不失去Tars框架自带的服务发现、服务路由、负载均衡功能,并尽可能减少对业务代码的侵入。

Tars服务交互

这里我简单的总结概述一下服务的交互流程如下:

tars.png
tars.png
  • 用户在web管理平台上发布服务,上传发布包至patch服务,并通过registry服务下发发布命令至具体节点的node服务上,node服务负责拉起server并定期将server的心跳转发给registry服务,由registry服务来统一维护服务的路由和管理
  • 当客户段服务client调用server时,client通过obj名字到registry服务拉取server的可用ip端口信息,然后根据ip端口信息以tcp或udp的方式访问server
  • Tars还支持一种直连模式,client通过在obj名字后@ip端口信息来调用server,此时client会忽略obj名字也不会去registry服务查询,直接通过写死的ip端口来进行服务调用

实现思路

要实现跨环境Tars调用,容易想到以下两种思路:

  • 通过上面说到的直连模式调用
  • 与Tars框架无关,被调方开放web接口供调用方访问

这两种思路分别存在一些问题:

  • 通过直连模式调用,就失去了通过registry服务路由的能力,设想一下被调方的server迁移了节点ip端口发生了变化,而调用方不知道,就会发生调用异常影响服务的使用
  • 被调方提供web接口,则需要被调方侵入业务代码进行服务提供方式的改造,相应的调用方的调用方式也要进行改造

这里我们的方案是将上述两种思路结合起来,如图:

tars2.jpg
tars2.jpg
  • client调用server_obj@proxy_client的ip端口,这样会走直连模式请求到proxy_client代理服务,这里clientproxy_client都是调用方自己部署的服务,走直连也是相对可控的
  • proxy_client通过https的方式访问proxy_server的域名,同时带上client请求时的obj名等信息,这里被调方只要保持域名接口不变,内部服务可自由迁移
  • proxy_server在收到请求后,通过obj名字查询环境2的registry服务,然后进行服务调用,这时无论server如何迁移都可以通过registry服务来进行路由
  • 整个调用过程clientserver都无须改动一行代码,只需要在client端配置调用obj名字时@上代理的地址即可

结语

本文中的方案最初是在笔者所在腾讯某内部服务上云时使用,来满足IDC机房和云机房间不同环境间的服务调用。当前实现的初衷是满足不同环境Tars服务间的调用,但我想无论是什么框架思路是相通的,希望能在你遇到类似场景时,给你提供一些灵感😊。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导语
  • Tars服务交互
  • 实现思路
  • 结语
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档