sidecar模式对Mesh性能影响与分析

对于考虑实施mesh的用户而言,“mesh带来多大的性能开销”是个常见的话题,在这个文章中,我们先定性的讨论下哪些因素能对性能可以产生影响,然后针对bookinfo在vm部署的这个例子做一些定量的分析。

影响Mesh的性能的因素

首先我们定性的分析哪些因素可能对Mesh的性能产生影响。需要知道的是,性能的影响并非一定是“降低性能”,无论是把Mesh作为应用架构里新的元素,还是作为基础设施的新的元素,Mesh是可以带来应用性能的提升的。

Mesh提升应用性能的环节

在Flomesh团队看来,Mesh除了提供这个图里列出的功能,对于应用而言,还提供了如下两部分通常和开发相关的功能:

  • Mesh提供了传统上属于开发框架里的一些功能
  • Mesh提供了传统上属于lib的一些功能

举个例子,比如加密解密,传统上采用一些加密解密SDK,在应用里实现,有了Mesh之后,这部分功能被转移到Mesh中实现;同样的还有签名和验证签名。在Mesh上实现这些,有利于在分布式环境里构建统一的能力:比如在一个PHP的程序里做的加密,在另外一个Java程序做解密,因为相同加密算法在不同SDK的差异,可能会调试非常麻烦,增加了开发难度。但是在Mesh层面提供统一的能力,就能极大的降低开发应用的复杂度和难度,进而提高开发效率,使“应用更关注业务逻辑”。

相似的例子还有:Mesh可以根据配置,缓存一些API调用的结果,比如一个通用的商品查询请求,结果被缓存在Proxy里,这样可以提升后续请求相同资源的效率。这个场景下,Mesh带来的是性能改进,而不是“降低性能”。

还有这样的例子:在跨地域使用Mesh的时候,我们可以人为的设定流量走特定的链路,比如“从北京请求上海走XX数据中心网关”,这样可以选择优化的链路,提供更好的访问质量。

所以我们认为,在如下几个方面,Mesh的使用可能是提升应用性能的(相比不使用Mesh的方案):

  • 替代框架和SDK/lib中的一些常见算法和通用功能可能提升性能。Mesh的代理通常采用底层开发语言,一般会有更好的性能。比如Flomesh的sidecar网关采用C++开发。并且,网关可以持续优化,通常SDK在给定版本下是不变的
  • 缓存的使用、长连接的使用,都可以带来性能的改善。应用自身维护长连接的代价比较大,所以一般应用不使用长连接
  • 通过Mesh给应用选择优化的链路,可以改进性能

针对第一点,用mesh的能力替代框架和sdk能力,不仅仅是性能的优化,对整个开发效率和管理,都是有好处的

Mesh降低应用性能的环节

接下来我们看下在Mesh中哪些环节可能是“降低性能”的。Flomesh团队在实践中,把如下的一些“降低性能”的环节和因素做了总结:

  • 代理的引入。Mesh的核心原理是在服务消费者和服务生产者之间插入了代理,这个代理是在部署时期加入的;在运行期,代理可以实现各种策略,完成网络以及管理功能。以istio为例,在部署时期,会动态的插入两个代理,在消费者端插入outbound proxy,在服务生产者端插入inbound proxy。应用到代理和代理到服务建立连接需要开销,经过代理也会引入网络延迟。本文后续的测试中,就可以看到引入代理带来的延迟

相比与istio采用双代理(dual proxies)的方式,Flomesh提供更宽泛的选择,可以根据实际需要的功能以及性能要求,最小可以采用“单代理(single proxy)”的模式,也可以采用双代理,甚至多代理(proxy chain)的模式。这里有一个专门关于proxy模式的介绍

  • 流量拦截。为了在部署期和执行期,在不对应用做改动的情况下,强制流量通过代理,需要拦截流量。这个工作通常是采用iptables来做。为了实现一个拦截,比如“把访问80端口的流量,定向到代理的88端口,然后代理再转发给原生80端口所在的程序”,通常需要多条iptables的规则。iptables是链式过滤包的,所以当大量的iptables规则同时存在的时候,性能是有显著影响的。感兴趣的可以参考这个讨论:为什么用bpf替代iptables

相比istio基于iptables的流量拦截方式,Flomesh还提供了其他额外的流量拦截方案,比如基于socks代理的方式

通常我们在考虑和考察一个方案时候,希望引入的组件、模式,最理想对性能的影响是常量的,常量的话非常适合云和微服务这种强调横向扩展能力的模型;其次是线性的,线性的虽然随着规模会增加,但是增幅是可预测的,可以确定“适用范围”;最不理想的是“指数型增长”和“不规律变化”

  • 规则在proxy里的处理。比如访问控制(ACL),需要根据请求的特征判断是否允许一个访问。假设我们需要判断请求中某一个key是否在给定的集合里,也就是一个hash表查询是否包含某个key。一种做法是把所有的key都放在内存里,放在hash表里,这种做法会大量的使用内存;一种做法是在把key放到某个外置的进程里,比如redis,然后在执行时候去访问redis,这种情况会产生额外的网络请求开销(访问redis)。更为复杂的场景是访问控制是由一段规则表达式决定的,会带来额外的计算开销

  • 规则下发和更新带来的性能损失。通常情况下,规则是随着运行环境变化而变化的,这也正是规模化微服务实施的难点之一,典型的比如注册中心中注册的信息(现实中还包括很多比如访问控制列表,比如新token的生成、旧token的过期等)。规则和策略、以及规则和策略所依赖的数据(规则集合与数据集合),在下发到proxy的时候,通常需要proxy“暂停”处理已有请求,以更新配置。在变更频繁的情况下,这部分的开销也是不能忽视的

真实环境里,规则更新除了可能带来性能影响,还有可能带来“一致性”的问题,比如请求方更新了key,但是服务提供方并不识别新的key

  • 协议在proxy里的处理(协议解析)。为了控制和管理,我们需要识别请求中的信息,这个时候proxy需要解析协议,并把这些信息在内存里以结构(对象)的方式保存。协议解析的过程会带来开销。同时,很多协议是需要读出一段甚至完整的流量,才能识别出需要的信息,这个过程需要时间开销,也需要内存去缓存和分析

  • proxy对信息的编解码。典型的比如json的序列化反序列化,BASE64编解码等

  • Tracing的使用。Mesh的“可视化”通常在实现时候依赖tracing系统,虽然大多数tracing消息传递的机制是异步的,但是tracing信息本身的识别和生成,会带来开销。或者说:开启tracing和不开启tracing是有性能差异的

Flomesh可以在不开启Tracing功能的情况下通过服务间访问控制来实现服务依赖和服务拓扑的识别,同时支持常见Tracing系统入zipkin、jeager、skywalking

  • Metrics的采集与计算。Mesh的“可观测性”中很重要的一部分是Mesh上各个环节(包括服务本身)的指标(metrics)采集、计算与展示。虽然在云原生领域采用prometheus做metrics采集和处理是通用的方案,但是当需要采集的指标足够多的时候,prometheus在时效性、扩展性方面也会遇到一些局限;同时,proxy进程本身提供metrics也会带来开销,包括内存和计算资源。需要注意,通过日志统计计算指标是另外一种常见的做法,但是基于日志分析的指标管理并不能替代prometheus类的指标管理

bookinfo的benchmark演示

接下来我们以flomesh-bookinfo的vm演示为例,看下基本的benchmark。这个benchmark的目的是:

  1. 在给定的环境下,不同的proxy模式的性能开销
  2. proxy产生的开销随着调用链增长,是否线性变化

这里测试的环境和方法是:

  1. 服务的部署都是采用1C1G的虚拟机,关闭swap(swapoff -a)

  2. 虚拟机之间采用的是虚拟网络,1G虚拟网卡--实际测试中,网络本身对结果影响很小

  3. 我们测试两个链路:

    • ratings的查询服务
    • reviews的查询服务,reviews服务会调用ratings服务,也就是包含两个步骤的调用链
  4. 采用ab(apache bench)先直接访问Java服务,然后经过不同的proxy模式访问,统计Request per second和Time per request。对于ratings服务,模式一共包括四个(在flomesh-bookinfo-vm演示中,采用的是第四种模式):

    • ab --> Java
    • ab --> Piped proxy --> Java
    • ab --> Kong proxy --> Java
    • ab --> Piped proxy --> Kong proxy --> Java

    对于reviews服务,模式为:

    • ab --> reviews --> ratings
    • ab --> reviews --> piped(outbound) --> piped(inbound) --> ratings
    • ab --> piped(outbound) --> kong(inbound) --> reviews --> piped(outbound) --> kong(inbound) --> ratings(相比ratings的模式,这里缺少了每个服务都经过kong访问的模式)
  5. 测试采用5个批次,每个批次每种模式执行20个测试案例(TC),也就是ab -c 10 -n 10000

  6. 测试的结果以ab端数据为准,也就是client端观测到的数据。同期的对于网关和基础设施监控作为参考

  7. 最终的测试结果是:

    • ratings服务包含5s个批次,每个批次4个模式,每个模式20个测试案例
    • reviews服务包含5个批次,每个批次3个模式,每个模式20个测试案例
  8. 测试脚本如下:

#对于ratings服务
ab -c 20 -n 10000 -H "X-App-Key: reviews" http://192.168.122.12:8080/ratings/a071c269-369c-4f79-be03-6a41f27d6b5f

#对于reviews服务
ab -c 20 -n 10000 -H "X-App-Key: productpage" http://192.168.122.65:8080/reviews/a071c269-369c-4f79-be03-6a41f27d6b5f

注意:

  • 给定的环境,并非为了测试应用的最佳性能以及可能的配置,而是为了测量不同代理模式的延迟影响
  • 代理随着使用功能的增加,数据量的增加,也有影响,这部分的定量测试我们会在另外的测试中讨论和演示
  • 测试中遇到不完整测试数据,被丢弃没有纳入统计。有可能是Java端gc造成,没有分析具体原因

Ratings服务测试结果

批次#1

|---------|-------|---------|------|---------|-------|---------|--------|---------|
|         | Java            | Piped->java    | Kong->Java      | Piped->Kong->Java|
|---------|-------|---------|------|---------|-------|---------|--------|---------|
|         | RPS   | TPR[ms] | RPS  | TPR[ms] | RPS   | TPR[ms] | RPS    | TPR[ms] |
|---------|-------|---------|------|---------|-------|---------|--------|---------|
| TC1     | 1683  | 11.883  | 1450 | 13.789  | 1455  | 13.286  | 1505   | 13.745  |
| TC2     | 1625  | 12.311  | 1466 | 13.639  | 1478  | 13.449  | 1487   | 13.535  |
| TC3     | 1592  | 12.564  | 1538 | 13      | 1429  | 14.444  | 1385   | 13.998  |
| TC4     | 1651  | 12.112  | 1470 | 13.605  | 1402  | 12.431  | 1609   | 14.266  |
| TC5     | 1705  | 11.733  | 1552 | 12.886  | 1380  | 12.141  | 1647   | 14.493  |
| TC6     | 1291  | 15.497  | 1557 | 12.847  | 1398  | 12.122  | 1650   | 14.309  |
| TC7     | 1594  | 12.549  | 1563 | 12.798  | 1405  | 12.756  | 1568   | 14.234  |
| TC8     | 1642  | 12.179  | 1544 | 12.955  | 1413  | 13.107  | 1526   | 14.156  |
| TC9     | 1646  | 12.149  | 1520 | 13.157  | 1405  | 13.676  | 1462   | 14.232  |
| TC10    | 1650  | 12.122  | 1560 | 12.82   | 1377  | 12.965  | 1543   | 14.526  |
| TC11    | 1450  | 13.797  | 1547 | 12.932  | 1425  | 13.837  | 1445   | 14.034  |
| TC12    | 1447  | 13.82   | 1557 | 12.848  | 1388  | 13.201  | 1515   | 14.413  |
| TC13    | 1453  | 13.764  | 1556 | 12.851  | 1349  | 13.592  | 1471   | 14.829  |
| TC14    | 1491  | 13.413  | 1542 | 12.973  | 1333  | 14.198  | 1409   | 15.008  |
| TC15    | 1547  | 12.925  | 1553 | 12.881  | 1448  | 12.155  | 1645   | 13.807  |
| TC16    | 1519  | 13.163  | 1549 | 12.914  | 1422  | 12.13   | 1649   | 14.061  |
| TC17    | 1537  | 13.015  | 1560 | 12.82   | 1387  | 12.076  | 1656   | 14.424  |
| TC18    | 1556  | 12.854  | 1566 | 12.771  | 1390  | 11.901  | 1681   | 14.392  |
| TC19    | 1532  | 13.058  | 1540 | 12.985  | 1408  | 12.149  | 1646   | 14.204  |
| TC20    | 1356  | 14.746  | 1530 | 13.075  | 1326  | 12.773  | 1566   | 15.082  |
|         |       |         |      |         |       |         |        |         |
| AVG     | 1548  | 12.983  | 1536 | 13.027  | 1401  | 12.919  | 1553   | 14.287  |
| Percent | 100%  | 100%    | 99%  | 100%    | 90%   | 100%    | 100%   | 110%    |
|---------|-------|---------|------|---------|-------|---------|--------|---------|

批次#2

|---------|-------|---------|------|---------|-------|---------|---------|---------|
|         | Java            | Piped->java    | Kong->Java      | Piped->Kong->Java |
|---------|-------|---------|------|---------|-------|---------|---------|---------|
|         | RPS   | TPR[ms] | RPS  | TPR[ms] | RPS   | TPR[ms] | RPS     | TPR[ms] |
|---------|-------|---------|------|---------|-------|---------|---------|---------|
|         | RPS   | TPR[ms] | RPS  | TPR[ms] | RPS   | TPR[ms] | RPS     | TPR[ms] |
| TC1     | 1552  | 12.884  | 1460 | 13.79   | 1505  | 13.293  | 1478    | 13.535  |
| TC2     | 1628  | 12.287  | 1548 | 12.917  | 1601  | 12.494  | 1457    | 13.727  |
| TC3     | 1545  | 12.941  | 1499 | 13.343  | 1589  | 12.584  | 1374    | 14.561  |
| TC4     | 1595  | 12.541  | 1540 | 12.985  | 1592  | 12.56   | 1391    | 14.382  |
| TC5     | 1605  | 12.463  | 1548 | 12.916  | 1626  | 12.302  | 1321    | 15.144  |
| TC6     | 1638  | 12.21   | 1537 | 13.012  | 1585  | 12.62   | 1163    | 17.196  |
| TC7     | 1571  | 12.728  | 1520 | 13.158  | 1640  | 12.196  | 1301    | 15.37   |
| TC8     | 1601  | 12.49   | 1428 | 14.009  | 1608  | 12.434  | 1251    | 15.992  |
| TC9     | 1554  | 12.87   | 1502 | 13.319  | 1620  | 12.342  | 1236    | 16.184  |
| TC10    | 1488  | 13.442  | 1448 | 13.812  | 1640  | 12.194  | 1356    | 14.753  |
| TC11    | 1638  | 12.213  | 1575 | 12.695  | 1576  | 12.69   | 1382    | 14.468  |
| TC12    | 1685  | 11.869  | 1567 | 12.767  | 1622  | 12.333  | 1355    | 14.76   |
| TC13    | 1695  | 11.797  | 1531 | 13.063  | 1624  | 12.319  | 1413    | 14.157  |
| TC14    | 1605  | 12.458  | 1547 | 12.93   | 1632  | 12.252  | 1358    | 14.727  |
| TC15    | 1667  | 11.996  | 1566 | 12.772  | 1644  | 12.165  | 1316    | 15.198  |
| TC16    | 1580  | 12.659  | 1543 | 12.962  | 1616  | 12.375  | 1311    | 15.259  |
| TC17    | 1715  | 11.659  | 1533 | 13.045  | 1431  | 13.978  | 1405    | 14.23   |
| TC18    | 1707  | 11.717  | 1522 | 13.145  | 1646  | 12.151  | 1372    | 14.579  |
| TC19    | 1722  | 11.615  | 1545 | 12.946  | 1628  | 12.283  | 1285    | 15.562  |
| TC20    | 1769  | 11.303  | 1469 | 13.618  | 1581  | 12.648  | 1330    | 15.036  |
|         |       |         |      |         |       |         |         |         |
| AVG     | 1628  | 12.307  | 1528 | 13.100  | 1607  | 12.460  | 1336    | 15.014  |
| Percent | 100%  | 100%    | 94%  | 106%    | 99%   | 101%    | 82%     | 122%    |
|---------|-------|---------|------|---------|-------|---------|---------|---------|

批次#3

|---------|-------|---------|------|---------|-------|---------|---------|---------|
|         | Java            | Piped->java    | Kong->Java      | Piped->Kong->Java |
|---------|-------|---------|------|---------|-------|---------|---------|---------|
|         | RPS   | TPR[ms] | RPS  | TPR[ms] | RPS   | TPR[ms] | RPS     | TPR[ms] |
|---------|-------|---------|------|---------|-------|---------|---------|---------|
| TC1     | 1672  | 11.962  | 278  | 71.938  | 1581  | 15.073  | 1327    | 12.652  |
| TC2     | 1597  | 12.522  | 1639 | 12.201  | 1442  | 15.444  | 1295    | 13.866  |
| TC3     | 1566  | 12.775  | 1666 | 12.004  | 1459  | 16.326  | 1225    | 13.708  |
| TC4     | 1741  | 11.486  | 1623 | 12.324  | 1460  | 16.255  | 1230    | 13.696  |
| TC5     | 1741  | 11.485  | 1663 | 12.024  | 1443  | 15.738  | 1271    | 13.863  |
| TC6     | 1737  | 11.516  | 1673 | 11.954  | 1446  | 14.661  | 1364    | 13.833  |
| TC7     | 1681  | 11.897  | 1663 | 12.028  | 1451  | 14.965  | 1336    | 13.788  |
| TC8     | 1676  | 11.936  | 1625 | 12.305  | 1470  | 14.74   | 1357    | 13.61   |
| TC9     | 1727  | 11.578  | 1638 | 12.211  | 1477  | 14.768  | 1354    | 13.541  |
| TC10    | 1643  | 12.176  | 1668 | 11.994  | 1443  | 14.629  | 1367    | 13.863  |
| TC11    | 1612  | 12.406  | 1682 | 11.888  | 1436  | 14.952  | 1338    | 13.928  |
| TC12    | 1579  | 12.662  | 1647 | 12.145  | 1471  | 14.669  | 1363    | 13.6    |
| TC13    | 1670  | 11.975  | 1640 | 12.197  | 1485  | 14.675  | 1363    | 13.47   |
| TC14    | 1654  | 12.092  | 1652 | 12.104  | 1455  | 14.522  | 1377    | 13.749  |
| TC15    | 1640  | 12.193  | 1663 | 12.028  | 1475  | 14.858  | 1346    | 13.563  |
| TC16    | 1683  | 11.884  | 1662 | 12.033  | 1454  | 14.508  | 1379    | 13.755  |
| TC17    | 1705  | 11.733  | 1639 | 12.206  | 1474  | 14.27   | 1401    | 13.566  |
| TC18    | 1588  | 12.595  | 1679 | 11.912  | 1457  | 14.533  | 1376    | 13.727  |
| TC19    | 1661  | 12.043  | 1655 | 12.084  | 1475  | 14.654  | 1365    | 13.56   |
| TC20    | 1634  | 12.237  |      |         | 1478  | 14.606  | 1369    | 13.532  |
|         |       |         |      |         |       |         |         |         |
| AVG     | 1660  | 12.058  | 1654 | 12.091  | 1466  | 14.942  | 1340    | 13.644  |
| Percent | 100%  | 100%    | 100% | 100%    | 88%   | 124%    | 81%     | 113%    |
|---------|-------|---------|------|---------|-------|---------|---------|---------|

批次#4

|---------|-------|---------|------|---------|-------|---------|---------|---------|
|         | Java            | Piped->java    | Kong->Java      | Piped->Kong->Java |
|---------|-------|---------|------|---------|-------|---------|---------|---------|
|         | RPS   | TPR[ms] | RPS  | TPR[ms] | RPS   | TPR[ms] | RPS     | TPR[ms] |
|---------|-------|---------|------|---------|-------|---------|---------|---------|
| TC1     | 1632  | 12.255  | 290  | 69.062  | 1238  | 16.151  | 1291    | 15.496  |
| TC2     | 1673  | 11.956  | 1631 | 12.259  | 1329  | 15.048  | 1295    | 15.438  |
| TC3     | 1620  | 12.345  | 1473 | 13.577  | 1377  | 14.519  | 1153    | 17.34   |
| TC4     | 1670  | 11.978  | 1464 | 13.657  | 1498  | 13.348  | 1371    | 14.583  |
| TC5     | 1639  | 12.204  | 1471 | 13.6    | 1605  | 12.457  | 1330    | 15.038  |
| TC6     | 1660  | 12.046  | 1507 | 13.272  | 1634  | 12.241  | 1157    | 17.288  |
| TC7     | 1680  | 11.907  | 1520 | 13.155  | 1501  | 13.325  | 1250    | 15.999  |
| TC8     | 1653  | 12.101  | 1534 | 13.034  | 1495  | 13.377  | 1211    | 16.513  |
| TC9     | 1671  | 11.969  | 1505 | 13.289  | 1533  | 13.049  | 1348    | 14.84   |
| TC10    | 1653  | 12.099  | 1496 | 13.367  | 1477  | 13.542  | 1346    | 14.864  |
| TC11    | 1644  | 12.167  | 1380 | 14.495  | 1516  | 13.197  | 1307    | 15.301  |
| TC12    | 1652  | 12.108  | 1378 | 14.516  | 1516  | 13.19   | 1260    | 15.869  |
| TC13    | 1658  | 12.062  | 1261 | 15.857  | 1509  | 13.25   | 953     | 20.995  |
| TC14    | 1598  | 12.516  | 1516 | 13.195  | 1516  | 13.195  | 1221    | 16.384  |
| TC15    | 1696  | 11.79   | 1509 | 13.253  | 1519  | 13.165  | 1287    | 15.54   |
| TC16    | 1664  | 12.016  | 1543 | 12.966  | 1432  | 13.966  | 1352    | 14.793  |
| TC17    | 1664  | 12.02   | 1276 | 15.673  | 1372  | 14.582  | 1293    | 15.468  |
| TC18    | 1680  | 11.904  | 1554 | 12.867  | 1419  | 14.09   | 1244    | 16.081  |
| TC19    | 1700  | 11.764  | 1564 | 12.791  | 1330  | 15.038  | 1217    | 16.438  |
| TC20    | 1651  | 12.114  |      |         | 1386  | 14.428  | 1360    | 14.705  |
|         |       |         |      |         |       |         |         |         |
| AVG     | 1658  | 12.066  | 1344 | 15.694  | 1460  | 13.758  | 1262    | 15.949  |
| Percent | 100%  | 100%    | 81%  | 130%    | 88%   | 114%    | 76%     | 132%    |
|---------|-------|---------|------|---------|-------|---------|---------|---------|

批次#5

|---------|-------|---------|------|----------|------|---------|--------|---------|
|         | Java            | Piped->java     | Kong->Java     | Piped->Kong->Java|
|---------|-------|---------|------|----------|------|---------|--------|---------|
|         | RPS   | TPR[ms] | RPS  | TPR[ms]  | RPS  | TPR[ms] | RPS    | TPR[ms] |
|---------|-------|---------|------|----------|------|---------|--------|---------|
| TC1     | 1655  | 12.086  | 1657 | 12.073   | 1559 | 12.825  | 1455   | 13.748  |
| TC2     | 1674  | 11.948  | 1633 | 12.249   | 1571 | 12.732  | 1450   | 13.789  |
| TC3     | 1628  | 12.287  | 1608 | 12.434   | 1565 | 12.78   | 1436   | 13.931  |
| TC4     | 1657  | 12.069  | 1592 | 12.562   | 1579 | 12.663  | 1441   | 13.875  |
| TC5     | 1705  | 11.732  | 1629 | 12.281   | 1583 | 12.632  | 1438   | 13.905  |
| TC6     | 1674  | 11.948  | 1646 | 12.153   | 1583 | 12.633  | 1415   | 14.137  |
| TC7     | 1678  | 11.917  | 1643 | 12.175   | 1587 | 12.605  | 1417   | 14.118  |
| TC8     | 1694  | 11.806  | 1648 | 12.138   | 1499 | 13.342  | 1447   | 13.82   |
| TC9     | 1690  | 11.831  | 1588 | 12.595   | 1475 | 13.559  | 1427   | 14.02   |
| TC10    | 1689  | 11.844  | 1534 | 13.034   | 1494 | 13.386  | 1428   | 14.005  |
| TC11    | 1674  | 11.947  | 1528 | 13.093   | 1441 | 13.879  | 1429   | 14      |
| TC12    | 1665  | 12.014  | 1542 | 12.97    | 1492 | 13.404  | 1418   | 14.102  |
| TC13    | 1665  | 12.015  | 1504 | 13.301   | 1472 | 13.588  | 1451   | 13.779  |
| TC14    | 1669  | 11.982  | 1530 | 13.073   | 1476 | 13.547  | 1412   | 14.169  |
| TC15    | 1696  | 11.796  | 1527 | 13.098   | 1471 | 13.598  | 1457   | 13.729  |
| TC16    | 1665  | 12.013  | 1531 | 13.066   | 1598 | 12.512  | 1262   | 15.854  |
| TC17    | 1675  | 11.942  | 1525 | 13.119   | 1602 | 12.486  | 1344   | 14.876  |
| TC18    | 1693  | 11.813  | 1526 | 13.104   | 1584 | 12.629  | 1399   | 14.295  |
| TC19    | 1709  | 11.706  | 1535 | 13.031   | 1558 | 12.838  | 1438   | 13.904  |
| TC20    | 1730  | 11.56   |      |          | 1528 | 13.092  | 1340   | 14.926  |
|         |       |         |      |          |      |         |        |         |
| AVG     | 1679  | 11.9128 | 1575 | 12.07745 | 1536 | 13.0365 | 1415   | 14.1491 |
| Percent | 100%  | 100%    | 94%  | 101%     | 91%  | 109%    | 84%    | 119%    |
|---------|-------|---------|------|----------|------|---------|--------|---------|

汇总与结论

|---------|-------|---------|-------|---------|-------|---------|-------|---------|
|         | Java            | Piped->Java     | Kong->java      |Piped->Kong->java|
|---------|-------|---------|-------|---------|-------|---------|-------|---------|
|         | RPS   | TPR[ms] | RPS   | TPR[ms] | RPS   | TPR[ms] | RPS   | TPR[ms] |
|---------|-------|---------|-------|---------|-------|---------|-------|---------|
| AVG     | 1548  | 12.983  | 1536  | 13.027  | 1401  | 12.919  | 1553  | 14.287  |
| Percent | 100%  | 100%    | 99%   | 100%    | 90%   | 100%    | 100%  | 110%    |
|---------|-------|---------|-------|---------|-------|---------|-------|---------|
| AVG     | 1628  | 12.307  | 1528  | 13.100  | 1607  | 12.460  | 1336  | 15.014  |
| Percent | 100%  | 100%    | 94%   | 106%    | 99%   | 101%    | 82%   | 122%    |
|---------|-------|---------|-------|---------|-------|---------|-------|---------|
| AVG     | 1660  | 12.058  | 1654  | 12.091  | 1466  | 14.942  | 1340  | 13.644  |
| Percent | 100%  | 100%    | 100%  | 100%    | 88%   | 124%    | 81%   | 113%    |
|---------|-------|---------|-------|---------|-------|---------|-------|---------|
| AVG     | 1658  | 12.066  | 1344  | 15.694  | 1460  | 13.758  | 1262  | 15.949  |
| Percent | 100%  | 100%    | 81%   | 130%    | 88%   | 114%    | 76%   | 132%    |
|---------|-------|---------|-------|---------|-------|---------|-------|---------|
| AVG     | 1679  | 11.913  | 1575  | 12.077  | 1536  | 13.037  | 1415  | 14.149  |
| Percent | 100%  | 100%    | 94%   | 101%    | 91%   | 109%    | 84%   | 119%    |
|---------|-------|---------|-------|---------|-------|---------|-------|---------|
| AVG     | 1635  | 12.265  | 1527  | 13.198  | 1494  | 13.423  | 1381  | 14.608  |
| AVG(%)  | 100%  | 100%    | 94%   | 108%    | 91%   | 110%    | 85%   | 119%    |
| Delta   |       |         | -107  | 0.933   | -141  | 1.158   | -253  | 2.343   |
|---------|-------|---------|-------|---------|-------|---------|-------|---------|

观测性结论如下:

  • 单独经过piped代理的情况下(单outbound代理),对比直接访问服务,增加大约0.933毫秒的延迟
  • 单独经过kong代理的情况下(单inbound代理),对比直接访问服务,增加大约1.158毫秒的延迟
  • 先经过piped,再经过kong的情况下(也就是双代理),增加大约2.343ms的延迟,这个数值和上边两个数据相加大致相等
  • 对于一个平均请求时间12毫秒的Java服务(例子中的ratings服务),引入双代理的情况下(inbound和outbound),代理引入的延迟大概是19%

Reviews服务测试结果

批次#1

|---------|--------|---------|-------------|---------|-------------------|---------|
|         | Java             | Piped->java           | Piped->Kong->Java           |
|---------|--------|---------|-------------|---------|-------------------|---------|
|         | RPS    | TPR[ms] | RPS         | TPR[ms] | RPS               | TPR[ms] |
|---------|--------|---------|-------------|---------|-------------------|---------|
| TC1     | 436.4  | 45.83   | 456.96      | 43.768  | 328.92            | 60.805  |
| TC2     | 487.15 | 41.055  | 490         | 40.816  | 397.83            | 50.273  |
| TC3     | 538.86 | 37.115  | 513.55      | 38.945  | 422.96            | 47.286  |
| TC4     | 567.7  | 35.23   | 536.44      | 37.283  | 447.31            | 44.712  |
| TC5     | 567.08 | 35.268  | 546.44      | 36.6    | 459.63            | 43.514  |
| TC6     | 639.95 | 31.253  | 569.91      | 35.093  | 461.68            | 43.32   |
| TC7     | 650.14 | 30.763  | 597.08      | 33.496  | 483.94            | 41.328  |
| TC8     | 657.65 | 30.411  | 598.66      | 33.408  | 463.88            | 43.114  |
| TC9     | 608.51 | 32.867  | 638.26      | 31.335  | 467.93            | 42.741  |
| TC10    | 639.27 | 31.286  | 660.93      | 30.26   | 462.33            | 43.259  |
| TC11    | 649.64 | 30.786  | 725.12      | 27.582  | 486.74            | 41.089  |
| TC12    | 661.11 | 30.252  | 740.31      | 27.016  | 530.01            | 37.735  |
| TC13    | 681.28 | 29.357  | 739.47      | 27.047  | 542.6             | 36.86   |
| TC14    | 706.73 | 28.299  | 745.6       | 26.824  | 575.88            | 34.73   |
| TC15    | 729.72 | 27.408  | 729.67      | 27.41   | 571.91            | 34.971  |
| TC16    | 753.2  | 26.553  | 695.96      | 28.737  | 583.67            | 34.266  |
| TC17    | 765.09 | 26.141  | 746.5       | 26.792  | 619.41            | 32.289  |
| TC18    | 755.88 | 26.459  | 732.16      | 27.316  | 622.66            | 32.12   |
| TC19    | 767.49 | 26.059  | 744.97      | 26.847  | 596.33            | 33.538  |
| TC20    | 658.98 | 30.35   | 715.45      | 27.955  | 601.31            | 33.261  |
|         |        |         |             |         |                   |         |
| AVG     | 646    | 31.637  | 646         | 31.727  | 506               | 40.561  |
| Percent | 100%   | 100%    | 100%        | 100%    | 78%               | 128%    |
| Delta   | 0      | 0       | 0           | 0.089   | -140              | 8.923   |
|---------|--------|---------|-------------|---------|-------------------|---------|

批次#2

|---------|--------|---------|-------------|---------|-------------------|---------|
|         | Java             | Piped->java           | Piped->Kong->Java           |
|---------|--------|---------|-------------|---------|-------------------|---------|
|         | RPS    | TPR[ms] | RPS         | TPR[ms] | RPS               | TPR[ms] |
|---------|--------|---------|-------------|---------|-------------------|---------|
| TC1     | 344.29 | 58.09   | 303.74      | 65.846  | 277.1             | 72.176  |
| TC2     | 510.27 | 39.195  | 423.79      | 47.193  | 421.89            | 47.406  |
| TC3     | 549.77 | 36.379  | 462.86      | 43.21   | 442.71            | 45.177  |
| TC4     | 559.74 | 35.731  | 469.38      | 42.609  | 455.62            | 43.896  |
| TC5     | 575.92 | 34.727  | 491.85      | 40.663  | 464.55            | 43.052  |
| TC6     | 583.98 | 34.248  | 508.07      | 39.364  | 474.95            | 42.109  |
| TC7     | 612.77 | 32.639  | 527.91      | 37.885  | 496.26            | 40.302  |
| TC8     | 634.6  | 31.516  | 490.45      | 40.779  | 456.57            | 43.805  |
| TC9     | 589.37 | 33.935  | 508.25      | 39.351  | 475.96            | 42.02   |
| TC10    | 574.33 | 34.823  | 538.55      | 37.137  | 487.91            | 40.991  |
| TC11    | 567.25 | 35.258  | 533.86      | 37.463  | 501.21            | 39.903  |
| TC12    | 578.08 | 34.597  | 560.67      | 35.672  | 474.56            | 42.144  |
| TC13    | 606.17 | 32.994  | 554.16      | 36.09   | 528.02            | 37.877  |
| TC14    | 623.36 | 32.084  | 596.35      | 33.537  | 536.68            | 37.266  |
| TC15    | 645.35 | 30.991  | 617.02      | 32.414  | 534.17            | 37.442  |
| TC16    | 686.08 | 29.151  | 637.51      | 31.372  | 563.23            | 35.509  |
| TC17    | 634.98 | 31.497  | 656.04      | 30.486  | 556               | 35.971  |
| TC18    | 618.65 | 32.329  | 680.64      | 29.384  | 620.83            | 32.215  |
| TC19    | 658.15 | 30.388  | 723.51      | 27.643  | 596.77            | 33.514  |
| TC20    | 741.58 | 26.969  | 740.79      | 26.998  | 614.12            | 32.567  |
|         |        |         |             |         |                   |         |
| AVG     | 595    | 34.377  | 551         | 37.755  | 499               | 41.267  |
| Percent | 100%   | 100%    | 93%         | 110%    | 84%               | 120%    |
| Delta   | 0      | 0       | -43         | 3.378   | -96               | 6.890   |
|---------|--------|---------|-------------|---------|-------------------|---------|

批次#3

|---------|--------|---------|-------------|---------|-------------------|---------|
|         | Java             | Piped->java           | Piped->Kong->Java           |
|---------|--------|---------|-------------|---------|-------------------|---------|
|         | RPS    | TPR[ms] | RPS         | TPR[ms] | RPS               | TPR[ms] |
|---------|--------|---------|-------------|---------|-------------------|---------|
| TC1     | 338.47 | 59.09   | 304.64      | 65.651  | 292.72            | 68.326  |
| TC2     | 519.99 | 38.462  | 454.57      | 43.998  | 404.8             | 49.407  |
| TC3     | 554.22 | 36.087  | 476.55      | 41.968  | 424.03            | 47.166  |
| TC4     | 563.96 | 35.464  | 495.98      | 40.325  | 413.06            | 48.419  |
| TC5     | 588.37 | 33.992  | 517.66      | 38.636  | 443.67            | 45.078  |
| TC6     | 575.76 | 34.737  | 528.89      | 37.815  | 442.69            | 45.179  |
| TC7     | 626.61 | 31.918  | 515.22      | 38.819  | 464.66            | 43.042  |
| TC8     | 640.69 | 31.217  | 550.57      | 36.326  | 472.61            | 42.319  |
| TC9     | 659.46 | 30.328  | 499.98      | 40.001  | 473.75            | 42.216  |
| TC10    | 631.04 | 31.694  | 510.79      | 39.155  | 469.74            | 42.577  |
| TC11    | 576.1  | 34.716  | 537.13      | 37.235  | 470.9             | 42.472  |
| TC12    | 645.82 | 30.968  | 555.45      | 36.007  | 499.98            | 40.001  |
| TC13    | 674.18 | 29.666  | 550.09      | 36.358  | 522.48            | 38.279  |
| TC14    | 676.94 | 29.545  | 514.58      | 38.867  | 547.77            | 36.512  |
| TC15    | 690.66 | 28.958  | 572.43      | 34.939  | 525.15            | 38.084  |
| TC16    | 736.98 | 27.138  | 603.54      | 33.138  | 541.02            | 36.968  |
| TC17    | 762.08 | 26.244  | 695.8       | 28.744  | 567.19            | 35.262  |
| TC18    | 736.85 | 27.143  | 706.18      | 28.322  | 593.37            | 33.706  |
| TC19    | 809.61 | 24.703  | 727.8       | 27.48   | 625.09            | 31.996  |
| TC20    | 813.55 | 24.584  | 697.35      | 28.68   | 620.31            | 32.242  |
|         |        |         |             |         |                   |         |
| AVG     | 641    | 32.333  | 551         | 37.623  | 491               | 41.963  |
| Percent | 100%   | 100%    | 86%         | 116%    | 77%               | 130%    |
| Delta   | 0      | 0       | -90         | 5.291   | -150              | 9.630   |
|---------|--------|---------|-------------|---------|-------------------|---------|

批次#4

|---------|--------|---------|-------------|---------|-------------------|---------|
|         | Java             | Piped->java           | Piped->Kong->Java           |
|---------|--------|---------|-------------|---------|-------------------|---------|
|         | RPS    | TPR[ms] | RPS         | TPR[ms] | RPS               | TPR[ms] |
|---------|--------|---------|-------------|---------|-------------------|---------|
| TC1     | 313.65 | 63.765  | 299.25      | 66.834  | 285.07            | 70.158  |
| TC2     | 482.62 | 41.441  | 431.63      | 46.335  | 409.61            | 48.827  |
| TC3     | 528.41 | 37.85   | 442.78      | 45.169  | 426.81            | 46.859  |
| TC4     | 494.76 | 40.424  | 451.54      | 44.293  | 440.62            | 45.391  |
| TC5     | 511.43 | 39.106  | 462.7       | 43.224  | 459.46            | 43.53   |
| TC6     | 448.99 | 44.545  | 485.61      | 41.185  | 472.08            | 42.366  |
| TC7     | 559.5  | 35.746  | 511.57      | 39.095  | 478.95            | 41.758  |
| TC8     | 623.7  | 32.067  | 509.58      | 39.248  | 487.62            | 41.015  |
| TC9     | 633.95 | 31.548  | 506.83      | 39.461  | 484.92            | 41.244  |
| TC10    | 596.06 | 33.554  | 493.01      | 40.567  | 484.47            | 41.282  |
| TC11    | 584.74 | 34.203  | 503.72      | 39.704  | 496.8             | 40.258  |
| TC12    | 617.53 | 32.387  | 521.79      | 38.329  | 513.46            | 38.951  |
| TC13    | 653.04 | 30.626  | 540.87      | 36.977  | 526.55            | 37.983  |
| TC14    | 678.21 | 29.489  | 551.12      | 36.29   | 535.88            | 37.322  |
| TC15    | 692.46 | 28.882  | 576.56      | 34.689  | 536.58            | 37.273  |
| TC16    | 689.89 | 28.99   | 589.72      | 33.915  | 548.85            | 36.44   |
| TC17    | 667.17 | 29.978  | 612.59      | 32.648  | 574.63            | 34.805  |
| TC18    | 745.09 | 26.842  | 601.42      | 33.254  | 621.65            | 32.172  |
| TC19    | 800.78 | 24.976  | 596.75      | 33.515  | 624.93            | 32.004  |
| TC20    | 796.21 | 25.119  | 657.33      | 30.426  | 617.7             | 32.378  |
|         |        |         |             |         |                   |         |
| AVG     | 606    | 34.577  | 517         | 39.758  | 501               | 41.101  |
| Percent | 100%   | 100%    | 85%         | 115%    | 83%               | 119%    |
| Delta   | 0      | 0       | -89         | 5.181   | -105              | 6.524   |
|---------|--------|---------|-------------|---------|-------------------|---------|

批次#5

~~~bash
|---------|--------|---------|-------------|---------|-------------------|---------|
|         | Java             | Piped->java           | Piped->Kong->Java           |
|---------|--------|---------|-------------|---------|-------------------|---------|
|         | RPS    | TPR[ms] | RPS         | TPR[ms] | RPS               | TPR[ms] |
|---------|--------|---------|-------------|---------|-------------------|---------|
| TC1     | 301.86 | 66.255  | 321.88      | 62.135  | 263.03            | 76.037  |
| TC2     | 538.55 | 37.137  | 452.25      | 44.223  | 388.14            | 51.527  |
| TC3     | 557.66 | 35.864  | 483.82      | 41.338  | 415.03            | 48.189  |
| TC4     | 590.66 | 33.86   | 486.58      | 41.103  | 425.9             | 46.959  |
| TC5     | 602.12 | 33.216  | 501.27      | 39.899  | 452.07            | 44.241  |
| TC6     | 612.4  | 32.659  | 524.15      | 38.157  | 449.11            | 44.532  |
| TC7     | 614.37 | 32.553  | 537.37      | 37.218  | 476.71            | 41.954  |
| TC8     | 627.51 | 31.872  | 559.32      | 35.758  | 485.51            | 41.193  |
| TC9     | 655.17 | 30.526  | 554.79      | 36.05   | 498.15            | 40.149  |
| TC10    | 642.26 | 31.14   | 538.12      | 37.166  | 473.21            | 42.265  |
| TC11    | 665.49 | 30.053  | 549.46      | 36.399  | 482.8             | 41.425  |
| TC12    | 677.61 | 29.516  | 561.5       | 35.619  | 499.76            | 40.019  |
| TC13    | 678.47 | 29.478  | 581         | 34.423  | 516.35            | 38.734  |
| TC14    | 701.87 | 28.495  | 597.38      | 33.48   | 540.17            | 37.026  |
| TC15    | 725.64 | 27.562  | 610.42      | 32.764  | 554.77            | 36.051  |
| TC16    | 699.39 | 28.596  | 646.21      | 30.95   | 561.47            | 35.621  |
| TC17    | 718.23 | 27.846  | 651.79      | 30.685  | 559.56            | 35.742  |
| TC18    | 751.65 | 26.608  | 668.97      | 29.897  | 589.32            | 33.937  |
| TC19    | 801.57 | 24.951  | 720.86      | 27.745  | 612.54            | 32.651  |
| TC20    | 831.68 | 24.048  | 714.98      | 27.973  | 620.52            | 32.231  |
|         |        |         |             |         |                   |         |
| AVG     | 650    | 32.112  | 563         | 36.649  | 493               | 42.024  |
| Percent | 100%   | 100%    | 87%         | 114%    | 76%               | 131%    |
| Delta   | 0      | 0       | -87         | 4.537   | -157              | 9.912   |
|---------|--------|---------|-------------|---------|-------------------|---------|

汇总与结论

|---------|----------|----------|----------|---------|----------|----------|
|         | Java                | Piped->java        | Piped->Kong->Java   |
|---------|----------|----------|----------|---------|----------|----------|
|         | RPS      | TPR[ms]  | RPS      | TPR[ms] | RPS      | TPR[ms]  |
|---------|----------|----------|----------|---------|----------|----------|
| AVG     | 646.0915 | 31.6371  | 646.172  | 31.7265 | 506.3465 | 40.56055 |
|---------|----------|----------|----------|---------|----------|----------|
| Percent | 100%     | 100%     | 100%     | 100%    | 78%      | 128%     |
| Delta   | 0        | 0        | 0.08     | 0.09    | -139.75  | 8.92     |
|         |          |          |          |         |          |          |
| AVG     | 594.7345 | 34.37705 | 551.27   | 37.7548 | 498.9555 | 41.2671  |
| Percent | 100%     | 100%     | 93%      | 110%    | 84%      | 120%     |
| Delta   | 0        | 0        | -43.46   | 3.38    | -95.78   | 6.89     |
|         |          |          |          |         |          |          |
| AVG     | 641.067  | 32.3327  | 550.76   | 37.6232 | 490.7495 | 41.96255 |
| Percent | 100%     | 100%     | 86%      | 116%    | 77%      | 130%     |
| Delta   | 0        | 0        | -90.31   | 5.29    | -150.32  | 9.63     |
|         |          |          |          |         |          |          |
| AVG     | 605.9095 | 34.5769  | 517.3185 | 39.7579 | 501.332  | 41.1008  |
| Percent | 100%     | 100%     | 85%      | 115%    | 83%      | 119%     |
| Delta   | 0        | 0        | -88.59   | 5.18    | -104.58  | 6.52     |
|         |          |          |          |         |          |          |
| AVG     | 649.708  | 32.11175 | 563.106  | 36.6491 | 493.206  | 42.02415 |
| Percent | 100%     | 100%     | 87%      | 114%    | 76%      | 131%     |
| Delta   | 0        | 0        | -86.60   | 4.54    | -156.50  | 9.91     |
|         |          |          |          |         |          |          |
| AVG     | 627.50   | 33.01    | 565.73   | 36.70   | 498.12   | 41.38    |
| AVG(%)  | 100.00%  | 100.00%  | 90.16%   | 111.20% | 79.38%   | 125.38%  |
| Delta   | 0.00     | 0.00     | -61.78   | 3.70    | -129.38  | 8.38     |
|---------|----------|----------|----------|---------|----------|---------|

观测性结论如下:

  • 经过两次piped proxy对比不使用Mesh增加了3.7ms的延迟
  • 经过两次(piped + kong)对比不使用Mesh增加了8.38ms的延迟
  • 结合Ratings测试结果,经过piped proxy带来的延迟(对不不使用Mesh),增加幅度分别为8%和11.2%,可以认为是趋近固定数值--大概10%
  • 结合Ratings测试结果,经过(piped + kong)带来的延迟(对不不使用Mesh),增加幅度分别为19%和25%,可以认为趋近固定数值--大概20%

综合结论

Mesh通过在链路中增加代理的方式完成对流量的管控,不同的代理模式(single proxy和dual proxies)在基本代理情况下(包含基本的访问控制、反向代理、路由、负载均衡),带来近似常量百分比的延迟开销:

  • single proxy带来大概10%的延迟
  • dual proxies带来大概20%的开销