当前位置: 首页 > 知识库问答 >
问题:

Java REST的正确心跳/保持活力的技术/层是什么?HTTP?TCP?编码:分块?

柴凌
2023-03-14

设置:

有时London04实际上需要超过10秒(比方说2分钟)才能执行。有时它会不优雅地崩溃。有时会发生其他(网络)问题。有时在这2分钟内,response-xml-data的各个部分被逐渐填充,以至于各个部分之间没有10秒的间隔,因此从来不会超过readTimeout,有时有10多秒的间隔,HttpClient超时...

我们可以尝试增加主端的超时,但这会很容易使侦听器池膨胀/过载(仅仅是常规的通信量,甚至还没有被DDOSed)。我们需要一种方法来区分internal-site-stily-working-on-generating-the-response和它真的崩溃/network_lost/etc的情况。在交流过程中,最好的感觉是心跳(每5秒一次)。

我们以为Keep-Alive可以拯救我们,但它似乎只保护请求之间的空隙(而不是请求期间),而且它似乎在空隙期间不做任何心跳(只是having/waiting_for timeout)。

问题:

如果我们假设keepalive/chunkedencoding不能帮助我们实现keptalive/hearbeat/fastdetectionofdeadbackend,那么:

1)这样的心跳应该在哪一层实现?HTTP?TCP?

  • https://en.wikipedia.org/wiki/keepalive
  • http://tldp.org/howto/tcp-keepalive-howto/usingkeepalive.html
  • 套接字心跳vs keepalive
  • WebSockets ping/pong,为什么TCP不保持活动?

但根据这些,我必须设置如下内容:

  • tcp_keepalive_time=5
  • tcp_keepalive_intvl=1
  • tcp_keepalive_probes=3

共有1个答案

夏侯智鑫
2023-03-14

我的建议是不要用心跳。让面向外部的API返回一个303 See other,其头部指示何时何地可能有所需的响应。

因此您可以调用:

POST https://public.api/my/call

然后回去

303 See Other
Location: "https://public.api/my/call/results"
Retry-After: 10

如果您的服务器能够猜测生成一个响应需要多长时间,那么它应该将此因素考虑到retry-after值中。如果稍后对新位置进行了Get调用,但生成结果尚未完成,则返回一个带有更新的Retry-After值的响应。因此,您可能尝试10,如果不起作用,则告诉客户机再等待一次110,总共需要两分钟。

或者,使用一个被设计成能够长时间打开的协议,比如WebSockets。

 类似资料:
  • 在kafka消费者留档https://kafka.apache.org/10/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html中,它指出需要小心,以确保每隔一段时间调用投票,否则经纪人将假设消费者已经死亡。 最可靠的程序非常复杂: 对于消息处理时间变化不可预测的用例,这两个选项都可能不够。处理这些情况的推

  • 问题内容: 我要进行Flask + Nginx + Gunicorn部署。我已经安装并正在运行Nginx,并且按照文档中的说明运行gunicorn: 但是,当我注销服务器时,gunicorn进程退出了吗?确保Nginx保持连接状态并在崩溃时重新启动的正确方法是什么? 问题答案: 运行Gunicorn时使用选项。例:

  • 开发多语言 Golang、Ruby、NodeJS、Python 四种主力开发语言 架构微服务 超过 70 个微服务化的组件,采用松散耦合的方式对接 交付持续化 实现全自动测试和交付,每周迭代次数近百 部署云端化 分布在全球六大数据中心数百台虚拟机之上,实现底层虚机 IaaS 的无缝对接 吃狗食 我们使用 DaoCloud 开发 DaoCloud

  • 问题内容: 我的Go服务器上有一个有效的TCP套接字设置。我接受传入连接,运行for循环并使用net.Conn.Read函数读取传入数据。 但这对我来说毫无意义。如何知道已收到完整的消息以便继续返回消息大小? 这是我目前的代码: 可以说我的应用程序发送的消息长度为6个字节(可以是任意大小)。怎么知道收到消息后才继续呢? 我的经验主要在于C#,所以Go在这里并不常见。对于我的C#应用​​程序,消息具

  • 2016年3月10日,Tinker项目正式启动,并在同年9月23日举行的MDCC会议上开源。一年过去了,两个人,50%的工作时间。总的来说,填了一些坑,获得少许成绩,也遭受不少批评。究竟Tinker是否将已经很糟糕的Android的生态变得更差,会不会对用户的安全造成更大的挑战? 回想Tinker的初心,我们希望开发者可以用很小代价进行快速升级,它是国内追求快速迭代诉求。立项至今,Tinker踩了

  • 人生第一面 2023-6-9 10:50开始 2023-6-9 11:20结束 坚持了半小时,期间面试官好像说了由于时间限定之类的话语,也不知道面试官反不反感我让这次面试变长至半小时。。。 面经: 自我介绍(卡壳了...) 技术面: 有木有k8s部署搭建的经验(巧了,我的项目就是k8s...) 顺便介绍自己的项目,问了监控和预警(预警没融到自己项目中555,赶紧去查相关资料补上) 操作系统(Lin