Java Grpc:使 dns 缓存无效

2024-03-28

我有一个 grpc 客户端指向一个解析为 2 个 IP 地址的 url。 问题是,当一个服务器节点出现故障然后恢复时,grpc 客户端不会选择它,所有负载都会转移到单个节点。

我尝试建议改变networkaddress.cache.ttl财产,但没有帮助。 我的代码(Scala)

java.security.Security.setProperty("networkaddress.cache.ttl", "30")
System.setProperty("networkaddress.cache.ttl", "30")
val channel = NettyChannelBuilder.forAddress(host, port).nameResolverFactory(
      new DnsNameResolverProvider).usePlaintext().build
val client = MyServiceGrpc.newStub(channel)

grpc版本:1.32.1


假设 DNS 始终返回两个 IP(可能是随机的),那么问题不在于 DNS 缓存。问题是 gRPC 有一个工作连接,因此不会选择重新连接,也不会执行 DNS 查询。

你应该配置你的服务器MAX_CONNECTION_AGE https://github.com/grpc/proposal/blob/master/A9-server-side-conn-mgt.md#proposal强制客户端偶尔重新连接以重新平衡负载。当客户端与服务器断开连接时,它们会触发新的 DNS 解析,因此这也可用于查找新地址(尽管重新连接不会等待 DNS 解析完成)。

在爪哇,MAX_CONNECTION_AGE可以通过NettyServerBuilder.maxConnectionAge() https://grpc.github.io/grpc-java/javadoc/io/grpc/netty/NettyServerBuilder.html#maxConnectionAge-long-java.util.concurrent.TimeUnit-:

NettyServerBuilder.forPort(yourPort)
    .maxConnectionAge(30, TimeUnit.MINUTES)
    ....

您希望使用您可以接受的尽可能大的年龄。如果时间是 30 分钟,那么每个客户端每 30 分钟就会重新平衡一次。因此,在服务器重新启动 15 分钟后,该服务器将具有 1/4 的负载,30 分钟后将具有大约 1/2 的负载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Grpc:使 dns 缓存无效 的相关文章

随机推荐

  • 在 Matlab 中的匿名函数中使用 for/while 循环

    我发现匿名函数非常有用 但很多时候我需要使用循环才能使函数正常工作 例如 while val
  • 循环运行多个数据集并将每个输出保存在 R 中

    我们尝试对八个不同的数据集运行循环 然后以标准化格式保存输出 数据框被称为df1 df2 df3 etc 我无法共享数据 这是数据示例 https figshare com s ace5b44bc12394a7c46d 但每个数据集都是df
  • 我可以在 jsplumb 中将偏移应用于连续锚点吗

    我想在 jsplumb 中使用 连续 锚点放置选项 这很好用 但是锚点一半放置在容器 div 内部 一半放置在容器外部 我希望锚点完全位于容器 div 之外 如果可能的话 div 和锚点之间的空间较小 一或两个像素 我的目的是将这些锚点放在
  • 无法解析导入 android.support.v7.app.MediaRouteActionProvider

    我正在尝试使用 GoogleMap V2 但是我在导入这些时遇到错误 import android support v7 app MediaRouteActionProvider import android support v7 medi
  • sys.exc_info() 是如何工作的?

    sys exc info 的行为描述于蟒蛇文档 http docs python org 2 library sys html and on SO https stackoverflow com questions 1611561 pyth
  • 在 Git 中管理多项目分支

    Maven项目 SCM场景中是否有工具可以实现以下抽象操作 给定一个应用程序项目 为应用程序及其使用的所有快照库创建分支 这些分支应该可以作为一个逻辑分支进行管理 参见下一篇 给定应用程序项目的逻辑分支 发布它 通过运行Maven发布 这意
  • 在 Vim 中突出显示光标下的变量,就像在 NetBeans 中一样

    我在 NetBeans 工作并喜欢这个功能 当您将光标放在变量名称上时 所有出现的变量都会突出显示 这对于快速搜索变量的所有出现非常有用 是否可以将这种行为添加到 Vim 中 该自动命令将执行您想要的操作 autocmd CursorMov
  • 通过将数组传递给 MySQL PHP 中的查询来动态创建 OR 条件

    我正在尝试使用数组动态创建 OR 条件 给定一个数组 当然是名称 courses array Eng Deu Bio Chemi 我想要一个 SQL 查询 该查询在其 AND 子句中使用数组的值以及 OR 条件 例如 SELECT FROM
  • JavaScript 对象上的复杂 SQL 查询

    我有以下 JS 对象 var groups id 4 name abcd id group 1 id 5 name efgh id group 1 id 6 name ijkl id group 1 id 4 name abcd id gr
  • 由于缺少 ._ufuncs dll,Python scipy 模块导入错误

    我在 python 中从 scipy 集成子模块时遇到了一些麻烦 我有一个 64 位架构 并且根据 python 解释器的第一行 见下文 我似乎还在将 64 位版本的 Python 与 Anaconda 一起使用 下面是问题 我只是编写了最
  • Backbone 中仅限客户端的属性

    我有一个相当通用的模型和该模型的集合 见下文 我正在将其作为一系列视图的基础 在几个视图上 选择其中一个模型会生成操作 通过 selected 属性 并且我需要能够仅在客户端跟踪选择 然而 在 Backbone 中似乎没有干净的方法来做到这
  • 身份验证/授权 MVC 5 和 Web API - Katana/Owin

    我在尝试决定执行我的项目的路线时遇到问题 我一直在阅读 OWIN 规范和 Katana 在 NET 中的实现 我之所以选择 Katana 路线 是因为与 ADFS 和令牌 Cookie 生成相关的 owin 组件 我有两个项目 一个用于 M
  • 我可以通过编程方式更改应用程序图标吗

    我内置了两个应用程序图标 免费和高级 在应用程序内购买成功完成后 是否可以以编程方式将免费图标替换为高级图标 对于这种情况有一个新的解决方案 您可以使用 setAlternateIconName completionHandler iOS
  • Codeigniter 基准测试,这些 ms 来自哪里?

    我正在对我的网站进行基准测试 class Home extends Controller function Home parent Controller this gt benchmark gt mark Constructor start
  • 为什么当“%s”之外的任何内容与变体一起使用时,格式会崩溃?

    我正在与SysUtils Format http docwiki embarcadero com VCL en SysUtils Format功能和variant值 我发现该函数仅在格式字符串为 s 我检查了有关的文档Format函数 但不
  • 在 Ionic 框架中通过 JavaScript 从 PHP 获取 JSON 数组

    我正在尝试从服务器端 PHP 文件获取 JSON 数组 我将 PHP 设置为查询 MySQL 数据库并将结果作为 JSON 数组返回 我正在使用离子框架来开发应用程序 目前 我的应用程序使用硬编码的 JSON 数组 这需要用从 PHP 获得
  • 如何在循环中创建对象文字数组?

    我需要创建一个对象文字数组 如下所示 var myColumnDefs key label sortable true resizeable true key notes sortable true resizeable true 在这样的
  • 无法从待办事项列表中删除 li

    我正在创建一个待办事项列表应用程序 当用户单击他 她创建的待办事项时 我希望将其删除 但我测试的时候并没有删除 document ready gt input input on keypress check todo output ul l
  • 交换位置 (HC11)

    我只是在玩我的MC 68HC11 在 C 中 我可以通过执行以下操作来执行简单的字节交换 swapped num gt gt 24 0xff move byte 3 to byte 0 num lt lt 8 0xff0000 move b
  • Java Grpc:使 dns 缓存无效

    我有一个 grpc 客户端指向一个解析为 2 个 IP 地址的 url 问题是 当一个服务器节点出现故障然后恢复时 grpc 客户端不会选择它 所有负载都会转移到单个节点 我尝试建议改变networkaddress cache ttl财产