hello,大家好呀,我是既写Java又写Go的小楼,在写Go的过程中经常对比这两种语言的特性,踩了不少坑,也发现了不少有意思的地方,今天就来聊聊Go自带的HttpClient的超时机制。 JavaHttpClient超时底层原理 在介绍Go的HttpClient超时机制之前,我们先看看Java是如何实现超时的。 写一个Java原生的HttpClient,设置连接超时、读取超时时间分别对应到底层的方法分别是: 再追溯到JVM源码,发现是对系统调用的封装,其实不光是Java,大部分的编程语言都借助了操作系统提供的超时能力。 然而Go的HttpClient却提供了另一种超时机制,挺有意思,我们来...

  JMlVK4toauXH   2023年11月02日   28   0   0 Go

hello,大家好呀,我是小楼。 上篇文章《一言不合就重构》说了我最近重构的一个系统,虽然重构完了,但还在灰度,这不,在灰度过程中又发现了一个问题。 背景 这个问题简单说一下背景,如果不明白可以看上篇文章,不想看也没关系,这是个通用的解法,后面我会总结抽象下。 在上篇文章的最后提到对每个摘除的地址做决策时,需要顺序执行,且每一个要摘除的地址都要实时获取该集群的地址信息,以便做出是否需要兜底的决策。 当被摘除的机器非常多时,获取地址信息的请求量就会非常大,对注册中心造成了不小的压力。 请求数据源的接口如下所示(其中cuuid是集群的id) typeReadinterface{ ListClus...

  JMlVK4toauXH   2023年11月02日   68   0   0 Go

hello大家好呀,我是小楼,这是系列文《Go底层原理剖析》的第二篇,依旧是分析Http模块,话不多说,开始。 从一个Demo入手 俗话说万事开头难,但用Go实现一个HttpServer真不难,简单到什么程度?起一个Server,并且能响应请求,算上包名、导入的依赖,甚至空行,也就只要15行代码: packagemain import( "io" "net/http" ) funcmain(){ http.HandleFunc("/hello",hello) http.ListenAndServe(":81",nil) } funchello(responsehttp.Resp...

  JMlVK4toauXH   2023年11月02日   54   0   0 Go

hello大家好呀,我是小楼,这是系列文《Go底层原理剖析》的第三篇,依旧分析Http模块。我们今天来看Go内置的RPC。说起RPC大家想到的一般是框架,Go作为编程语言竟然还内置了RPC,着实让我有些吃鲸。 从一个Demo入手 为了快速进入状态,我们先搞一个Demo,当然这个Demo是参考Go源码src/net/rpc/server.go,做了一丢丢的修改。 首先定义请求的入参和出参: packagecommon typeArgsstruct{ A,Bint } typeQuotientstruct{ Quo,Remint } 接着在定义一个对象,并给这个对象写两个方法 ...

  JMlVK4toauXH   2023年11月02日   47   0   0 Go

hello,大家好啊,我是小楼。 最近在工作中对Go的singleflight包做了下增强,解决了一个性能问题,这里记录下,希望对你也有所帮助。 singleflight是什么 singleflight直接翻译为”单(次)飞(行)“,它是对同一种请求的抑制,保证同一时刻相同的请求只有一个在执行,且在它执行期间的相同请求都会Hold直到执行完成,这些hold的请求也使用这次执行的结果。 举个例子,当程序中有读(如Redis、MySQL、Http、RPC等)请求,且并发非常高的情况,使用singleflight能得到比较好的效果,它限制了同一时刻只有一个请求在执行,也就是并发永远为1。 sing...

  JMlVK4toauXH   2023年11月02日   59   0   0 Go

大家好呀,我是小楼。 本文是上篇文章《使用增强版singleflight合并事件推送,效果炸裂!》的续集,没看过前文必须要先看完才能看本文,实在不想看,拉到文章末尾,给我点个赞再退出吧Doge 上篇文章发出后,有一位读者朋友给我发私信,写了一大段话: 一开始,没太看懂,于是就细问了一下 在看了解释之后,感觉好像有点懂了,再三思考后,确认了,这里面有BUG。 理想状态 为了描述简单,这里我用字母本身表示事件发生,如A,用字母加一撇表示事件开始执行,如A',用字母加两撇表示事件执行结束后的状态,如D''。 如下表示我们之前思考的理想状态:A事件到来便执行,在执行结束前又先后来了B、C、D三个事...

  JMlVK4toauXH   2023年11月02日   81   0   0 Go

hello,大家好呀,我是小楼。 前段时间不是在忙么,忙的内容之一就是花了点时间重构了一个服务的健康检查组件,目前已经慢慢在灰度线上,本文就来分享下这次重构之旅,也算作个总结吧。 背景 服务健康检查简介 服务健康检查是应对分布式应用下某些服务节点不健康问题的一种解法。如下图,消费者调用提供方集群,通常通过注册中心获取提供方的地址,根据负载均衡算法选取某台具体机器发起调用。 假设某台机器意外宕机,服务消费方不能感知,就会导致流量有损,如果此时有一种检测服务节点健康状态并及时剔除的机制,就能大大增加线上服务的稳定性。 原服务健康检查实现原理 我们是自研的注册中心,健康检查也算注册中心的一部分,其...

  JMlVK4toauXH   2023年11月01日   145   0   0 架构设计
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~