相比于使用HTTP协议的常规方案,TARS首先提供的特性就是异步长连接的RPC调用方式:

发起一个异步调用之后,当前线程并不会被阻塞而是继续执行,当收到服务端响应之后在回调线程池中通过回掉函数来执行结果的处理。这样所有的处理线程都一直处于工作的状态中,而不会挂起导致线程资源的浪费。整体上提升了服务的处理能力。

TARS的异步能力主要是通过两个部分的异步来实现的,首先是网络首发包的异步,TARS的网络层实现采用了Reactor模型,通过nio提供的事件IO实现基于事件的异步网络IO。第二是线程模型的异步,我们从线程模型上来看TARS如何是做到异步调用的: 
 
TARS的主要通过上图的过程来完成异步调用,首先主调线程发起异步调用,主调线程将请求内容加入网络线程池的发送队列中,之后该线程继续执行。网络线程池使用Reactor模型实现,通过nio提供的Selecter实现事件IO,所以所有网络线程均是事件驱动的异步IO,当监听到对应连接的写事件后将请求发送,等待监听到读事件后读取响应并交给回调线程处理响应。这样所有的线程都避免了IO阻塞达到了更高的利用效率。

解决SpringCloud服务端基于同步线程模型的稳定性问题

TARS提供了纯异步化编程,和服务端过载保护的能力,在服务端保证收到大量的请求也能够保证服务的正常处理效率,其次因为主调方采用长连接和异步调用,避免了大量新建连接和阻塞带来的资源浪费从而提升了服务的整体稳定性。

此外,如果服务端收到过量的请求往往会导致服务端的线程竞争,让服务端的处理能力低于正常的处理水平,在TARS则通过队列来进行过载保护。我们来看TARS的线程模型:

在网络线程收到请求后,TARS会将请求先加入请求队列,工作线程从请求队列中获取请求进行处理,如果短时间内大量请求到达只会被缓存到请求队列中并不会影响工作线程池的处理能力。如果工作线程池从队列中取到请求发现其已经超时则会直接丢弃请求避免处理无效的请求。

场景.异步调用,避免阻塞,提升性能 
假如我们在Spring Cloud中存在这样一个调用关系,A服务需要调用B服务,而B服务需要依赖处理耗时远大于是B服务的C服务。比如在通常的业务场景中,如果API接口需要调用一个订单生成的服务,而订单生成服务只需要生成订单ID计算量相对较小,但是他还需要依赖一个订单写入服务,应为涉及到库存修改、订单写入需要一系列的事务处理,整体耗时远远大于订单ID的生成,所以订单服务大量的线程资源浪费在了等待订单写入服务上。在这种情况下可以使用TARS改造订单服务和写入服务,从而使用异步调用写入服务来提升资源利用率,采用TARS提供的异步RPC能力来进行跟深度的改造:

Tars协议的几点创新之举相关推荐

  1. 【TARS】TARS协议的编解码

    目录 0.现有编解码方式 1.编解码 2.TARS底层协议 3.TUP 3.1TUP是什么 3.2TUP能做什么 3.3TUP不能做什么 3.4依赖和约束  4.TARS协议的序列化与反序列化调用的函 ...

  2. TAF(Total Application Framework) 基础通信协议 Tars协议

    数据编码基本结构 每一个数据由两个部分组成,如下图: | 头信息 | 实际数据 | 而其中头信息包括以下几个部分: | Type(4 bits) | Tag 1(4 bits) | Tag 2(1 b ...

  3. 生态 | 战略签约,人大金仓携手同联公司签署战略协议共同开创信息化创新发展新篇章!...

    合作背景 推行电子政务是党的十七大作出的重要决策,电子政务发展水平是衡量一个地区.一个部门管理水平与公共服务能力的重要指标,办公自动化系统建设是电子政务的基本内容,是党政机关提升行政办公效率,降低行政 ...

  4. TARS 斩获 2018 年最佳原创开源软件奖

    最近在开源中国举办的开源年终盛典上,开源项目 TARS 获得了年度最佳原创开源软件奖. 谈到微服务,人们往往会提起Spring Cloud和Service Mesh. 目前带服务治理的微服务框架中,S ...

  5. 独家:沪上三大律师解读“三驾马车”下的数据合规与上海数商体系创新​

    引 言 当下,数据已是继技术.劳动力.资本.土地之外的"第五要素".去年,美国数据交易量高达2700亿美元,我国则在545亿人民币左右.但不可忽视,全球20%的数据量由中国创造,数 ...

  6. 微服务开源框架TARS的RPC源码解析 之 初识TARS C++服务端

    作者:Cony 导语:微服务开源框架TARS的RPC调用包含客户端与服务端,<微服务开源框架TARS的RPC源码解析>系列文章将从初识客户端.客户端的同步及异步调用.初识服务端.服务端的工 ...

  7. 【TARS】理解RegistryServer

    目录 0.说明 1.入门简介 1.1 功能 1.2 源码,可执行程序及启动 1.3 相关命令  1.4 分析方向 2.观察与分析 2.1 配置文件展示 2.2 RegistryServer线程观察 2 ...

  8. 思科中国创新中心总部正式落户广州

    广州国际科技创新枢纽建设又有新进展!思科中国创新中心总部正式落户广州.广州将联手思科共同打造思科(广州)智慧城项目.项目毗邻广州大学城,集"产.学.研.商.居"于一体,是国内首个以 ...

  9. CEO 赠书 | 打破创新神话,揭示创新本质

    弱者群居,于是有了芸芸众生 强者求变,方才见证出类拔萃 相比勤奋,更重要的是深度思考的能力 它藏着你走过的路,读过的书 本期荐书 <创新的神话> 豆瓣评分:8.4 作者简介 斯科特•伯尔昆 ...

最新文章

  1. Linux KVM虚拟网络的桥接
  2. flex tree 展开树节点
  3. 支持向量机ModuleNotFoundError: No module named ‘sklearn.datasets.samples_generator‘
  4. Redis的发布订阅模式以及在SpringBoot中的使用
  5. QT的QPlaceContent类的使用
  6. LeetCode MySQL 569. 员工薪水中位数(over窗口函数)
  7. linux 编译字符设备驱动错误,linux字符设备驱动框架及编写流程
  8. python获取命令行参数_Python获取命令行参数的正确方法,案例详解
  9. 利用ptrace和memfd_create混淆程序名和参数
  10. JAVA导入导出Excel
  11. hdu--1869--见过最好听的题名附送1870
  12. 【设计模式】-工厂模式->抽象工法模式(源码与类图解析)
  13. 使用Python第三方库requests和bs4 爬取必应首页的图片,并存储到系统对应位置
  14. java各位数字补位,左边补0
  15. 芝诺数解|「十六」绿水青山就是金山银山——重庆环保
  16. oracle18c默认sid,Oracle 18c-可伸缩序列(Scalable Sequence)
  17. java中的相对路径和绝对路径,获取一个文本上每个字符出现的次数
  18. Chrome安装插件提示 出现错误 image decode failed
  19. C++ 三维空间的点(继承)
  20. migo获取header sap_SAP Migo增强 105时通过提货单号自动带出批次和生产日期

热门文章

  1. linux 触摸屏驱动中断下半部实现-工作队列
  2. TOUGH2系列建模方法及在CO2地质封存、水文地球化学、地热、地下水污染等领域中的应用
  3. 虚拟机在客户端和服务器之间存在时间,Server 2012 Domain Controller上出现“客户端和服务器之间存在时间和/或日期差异”错误...
  4. 蓝桥杯 题1557 聪明的美食家 C++
  5. 1.人工智能早期知识表示方法
  6. camera face
  7. 用微软工具做一个纯净的系统启动盘(图文教程)
  8. PyCharm汉化:简单两步搞定!PyCharm怎么设置中文简体,为什么我的pycharm搜不到中文语言包(Chinese ​(Simplified)​ Language Pack)
  9. 【机器人基础】机器人学精简笔记-空间描述和变换
  10. java 围棋_Java.awt实现一个简单的围棋