我们的 consul dashboard(基于 consul ui 源码,新增了权限控制,独立部署)突然出现 504 异常。
打开浏览器调试器的 network,查看异常的请求。
/v1/* 接口,向部署的node应用发送请求,node 应用再将请求通过插件( express-http-proxy )代理转发至 consul server。
很奇怪,其他所有机房都没有问题。而且,多刷几次,偶尔可以正常响应。
服务
这一台机器的 Java 服务报了奇怪的 \n not found: limit=0 content=�~@� 异常。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[ERROR 2021-03-15 20:21:39.114] com...init(ConsulBase.java:58) [[consul] init consul base failed, e=[com.orbitz.consul.ConsulException: Error connecting to Consul at com.orbitz.consul.AgentClient.ping(AgentClient.java:69) at com.orbitz.consul.Consul$Builder.build(Consul.java:708) ... Caused by: java.io.IOException: unexpected end of stream on http://127.0.0.1:8500/... at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:205) at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.kt:105) ... at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.kt:184) at okhttp3.RealCall.execute(RealCall.kt:66) at retrofit2.OkHttpCall.execute(OkHttpCall.java:186) at com.orbitz.consul.AgentClient.ping(AgentClient.java:62) ... 14 more Caused by: java.io.EOFException: \n not found: limit=0 content=�~@� at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:231) at okhttp3.internal.http1.Http1ExchangeCodec.readHeaderLine(Http1ExchangeCodec.kt:210) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:181) ... 35 more
传输层提供端到端的数据传输服务。它定义了两个主要的传输协议:TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。TCP提供可靠的、面向连接的数据传输,而UDP提供无连接的、不可靠的数据传输。该层还处理数据分段、流量控制和错误恢复等任务
网络层(Internet Layer)
网络层实现了IP协议,负责在不同网络之间进行数据包的路由和转发。它使用IP地址标识主机和网络,并通过路由选择算法确定最佳路径。主要协议包括IP(Internet Protocol)、ICMP(Internet Control Message Protocol)和ARP(Address Resolution Protocol)
万维网(World Wide Web)是一种基于英特网的信息系统,通过超文本链接的方式来组织、检索和共享文档和资源。在万维网上,不同的文档和资源通过统一的标识符(URL,统一资源定位符)进行唯一标识。万维网的核心技术是HTTP(Hypertext Transfer Protocol),它定义了在网络上传输超文本资源的规范。
MAC 地址
MAC地址(Media Access Control Address)是网络设备(如网卡、无线适配器)在出厂时固定分配的唯一标识符。它是一个由12个十六进制数(0-9,A-F)组成的字符串,通常以冒号或短横线分隔。MAC地址由两部分组成:前6个十六进制数表示厂商代码(OUI,Organizationally Unique Identifier),用于标识设备制造商;后面的6个十六进制数是设备的序列号,由制造商分配。
计算机实现原子操作,对于单核机器,关中断防止调度即可;多核理论上可使用 spinlock 保护,实际一般通过原子汇编语言实现,比如x86的tsl指令(test and set),可以用一条“无法继续分割的”汇编指令实现判断变量值并根据是否为0进行置位,具体这个指令实现原子性一般通过锁总线实现,也就是我执行这条指令时,其它核都不能访问这个地址了。