漏桶算法与令牌桶限流算法实现 2019-10-29 服务治理 约 16736 字 预计阅读 34 分钟 限流算法 在开发中我们可能会遇到接口访问频次过高,这时候就需要做流量限制,你可能是用的 Nginx 这种 Web Server 来控制也可能是用了一些流行的类库实现。在分布式 阅读更多
GoKit使用:熔断与限流 2019-10-28 GoKit 约 2012 字 预计阅读 5 分钟 限流 限流实现 gokit 基于go包 golang.org/x/time/rate 内置了一种实现. 本次实现基于gokit内建的类型endpoint.Middleware,该类型实际上是一个func 阅读更多
GoKit使用:日志功能 2019-10-28 GoKit 约 1239 字 预计阅读 3 分钟 基础日志 Gokit有自身的基础日志模块,配置如下: 1 2 3 4 5 6 var logger log.Logger { logger = log.NewLogfmtLogger(os.Stderr) //错误输出到控制台 logger = log.With(logger, "ts", log.DefaultTimestampUTC) logger = log.With(logger, "caller", log.DefaultCaller) } 如果我们想要加入通用日 阅读更多
GoKit使用:注册发现 2019-10-28 GoKit 约 3056 字 预计阅读 7 分钟 server 服务注册: 1、连接注册中心 2、注册当前服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 package 阅读更多
Go实现层级时间轮 2019-10-23 Go实践 约 6872 字 预计阅读 14 分钟 引言 在软件系统中,“在一段时间后执行一个任务” 的需求比比皆是。比如: 客户端发起 HTTP 请求后,如果在指定时间内没有收到服务器的响应,则自动断开连接 阅读更多
Golang如何获取MySQL的各类型数据 2019-10-23 Go实践 约 1337 字 预计阅读 3 分钟 数据类型对应关系 时间类型的转换 修改DSN 构建 DSN 时增加 loc 指定时区,并区增加对时间的解析。打印出来的 uri: 1 xiaoju:@tcp(127.0.0.1:3306)/test?charset=utf8&loc=Asia%2FShanghai&parseTime=true 后面的 parseTime 必须要有,用法如下: 这样 阅读更多
Go中TrimLeft和TrimPrefix的区别 2019-10-21 Go实践 约 718 字 预计阅读 2 分钟 问题 看这样一个例子: 1 2 3 4 5 6 7 8 9 10 11 package main import ( "fmt" "strings" ) func main() { str := "/some/key" fmt.Println(strings.TrimLeft(str, "/some")) } 1 2 3 key Program exited. 上例有正确返回,再看一例: 1 2 3 4 5 6 7 8 9 10 11 package main import 阅读更多
Go的timer和ticker用法 2019-10-21 Go实践 约 5544 字 预计阅读 12 分钟 定时器:timer time包中有两个函数可以帮我们初始化 time.Timer (类型) 在高性能场景下,不应该使用time.After,而应该使用New.Time 阅读更多
Go的定时器源码剖析 2019-10-21 Go源码 约 16936 字 预计阅读 34 分钟 前言 准确的时间对于任何一个正在运行的应用非常重要,但是在分布式系统中我们很难保证各个节点的绝对时间一致,哪怕通过 NTP 这种标准的对时协议也只能把 阅读更多
Linux内核时钟系统和定时器实现 2019-10-21 Linux 约 6649 字 预计阅读 14 分钟 Linux内核时钟系统和定时器实现 Linux 2.6.16之前,内核只支持低精度时钟,内核定时器的工作方式: 系统启动后,会读取时钟源设备(RTC, HP 阅读更多
单机定时器的实现方案 2019-10-20 架构 约 3145 字 预计阅读 7 分钟 理解定时器 很多场景会用到定时器,例如 使用 TCP 长连接时,客户端需要定时向服务端发送心跳请求。 财务系统每个月的月末定时生成对账单。 双 11 的 0 点,定时 阅读更多
异步任务队列:machinery源码剖析 2019-10-17 Go三方库 约 14643 字 预计阅读 30 分钟 导语 异步任务,是每一位开发者都遇到过的技术名词,在任何一个稍微复杂的后台系统中,异步任务总是无法避免的,而任务队列由于其松耦合、易扩展的特性 阅读更多
异步任务队列:machinery使用方法 2019-10-16 Go三方库 约 5717 字 预计阅读 12 分钟 Config machinery的配置结构体是config包中的Config类型,具体结构如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // Config holds all configuration for our program type Config struct { 阅读更多
分布式延时任务方案 2019-10-16 架构 约 3619 字 预计阅读 8 分钟 引言 在开发中,往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个 阅读更多
cron库源码剖析 2019-10-15 Go三方库 约 9028 字 预计阅读 19 分钟 Cron表达式 基本cron格式: 1 2 3 4 5 6 7 8 # cron格式說明 # ┌──分鐘(0 - 59) # │ ┌──小時(0 - 23) # | │ ┌──日(1 - 31 阅读更多
一致性哈希算法实现 2019-10-09 服务治理 约 18476 字 预计阅读 37 分钟 一致性哈希算法 我们希望构造一种函数 f(k,n)→m 把字符串映射到 n 个槽上: 它的输入是随机到来的字符串 k 和 槽的个数 n. 输出是映射到的槽的标号 m , 阅读更多
梅森旋转算法与伪随机数 2019-10-09 数据结构与算法 约 2057 字 预计阅读 5 分钟 现代编程语言,大都在标准库中包含了随机库。例如,C++ 在 C++11 标准中添加了 random 头文件,提供了现代的随机库;Python 则有 random。C++11 阅读更多
线性同余法与伪随机数 2019-10-09 数据结构与算法 约 3629 字 预计阅读 8 分钟 公式定义 在离散数据及其应用中,如果 那么,称a模m同余b(或者称模m时,a等价于b),可以记为 而线性同余式就可以这样表示: 线性同余发生器与上面 阅读更多
go generate介绍 2019-09-26 Go实践 约 1442 字 预计阅读 3 分钟 介绍 go generate命令是go 1.4版本里面新添加的一个命令,当运行go generate时,它将扫描与当前包相关的源代码文件,找出所有包含 阅读更多