我们有一个由kubernetes ingress创建的HTTP(s)Load Balancer,它指向由运行nginx和Ruby on Rails的pod组成的后端.
看一下负载均衡器日志,我们检测到越来越多的请求,响应代码为0和statusDetails= client_disconnected_before_any_response.
我们试图理解为什么会发生这种情况,但我们没有找到任何相关的东西.nginx访问或错误日志中没有任何内容.
这种情况发生在从GET到POST的多种请求中.
我们还怀疑有时尽管请求记录了该错误,但请求实际上是传递给后端的.例如,我们看到了PG :: UniqueViolation错误,因为在我们的注册终端中,两次发送了令人满意的注册请求到后端.
任何形式的帮助将不胜感激.谢谢!
我已经创建了一个基于日志的Stackdriver度量标准,用于计算出现此行为的请求数.这是图表:
大峰大致匹配这些kubernetes事件的时间戳:
完整错误: Readiness probe failed: Get http://10.48.1.28:80/health_check: net/http: request canceled (Client.Timeout exceeded while awaiting headers)"
因此有时候后端后面的pod的准备探测失败了,但并非总是如此.
这是readinessProbe的定义
readinessProbe:
failureThreshold: 3
httpGet:
httpHeaders:
- name: X-Forwarded-Proto
value: https
- name: Host
value: [redacted]
path: /health_check
port: 80
scheme: HTTP
initialDelaySeconds: 1
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 5
Run Code Online (Sandbox Code Playgroud) kubernetes google-kubernetes-engine google-cloud-networking kubernetes-ingress
假设我有一个包含这些字段的表顺序:
最初使用payment_date和invoice_number创建带有NULL值的订单,因此我可以拥有以下行:
ID | payment_date | invoice_number
1 | NULL | NULL
2 | 03/10/11 | 1
3 | 03/14/11 | 2
4 | NULL | NULL
5 | NULL | NULL
Run Code Online (Sandbox Code Playgroud)
我想要做的是当我更新一行以填充payment_date时,我需要使用第一个可用的invoice_number更新invoice_number.例如,如果我更新第五行,则invoice_number将为"3".
第一种方法是为invoice_number选择MAX()值,然后将1加到该值,但这会产生并发问题,对吧?
您认为什么是最佳解决方案?
提前致谢!
我正在使用Juggernaut,Redis,SQLite和Rails 3.1构建一个简单的实时聊天
当另一个用户断开连接时(例如他关闭了窗口),我想给每个用户写一条新消息,这是为了听Juggernaut的客户端断开事件.
Juggernaut docs说我可以在服务器端做这个(Ruby)
Juggernaut.subscribe do |event, data|
# Use event/data
end
Run Code Online (Sandbox Code Playgroud)
问题是我不知道我应该把这个代码放在我的Rails应用程序(控制器,模型,观察者?)中.我试图将它放入模型中,但是服务器不会响应任何带有大量代码的请求进入模型.
我想我应该从服务器端收听该事件,因为如果用户因为关闭窗口而断开连接,那么我没有该用户的"客户端".
可能我错过了一些关于Juggernaut如何工作的东西.任何帮助将不胜感激.