使用Go与redis构建有趣的应用Go 和 Redis 构建有趣的程序 ⻩黄健宏 @ huangz.me 关于我 • ⻩黄健宏,⽹网名 huangz ,⼴广东清远⼈人。 • 计算机技术图书作者和译者,偶尔也写⼀一点⼩小程序⾃自娱⾃自乐。 • 精通 Go、 Python 、 Ruby 、 PHP、 C 等数⼗十种语⾔言……的 Hello World ! • 著作:《Redis 设计与实现》,《Redis 使⽤用教程》(写作中)。 Web 编程》,《Redis 实战》。 • 开源⽂文档:《Go 标准库中⽂文⽂文档》,《Redis 命令参考》,《SICP 解题集》等。 • 个⼈人⽹网站: huangz.me 。 路路线图 路路线图 ⼀一. Redis 简介 路路线图 ⼀一. Redis 简介 ⼆二. 使⽤用 Redis 构建锁 路路线图 ⼀一. Redis 简介 ⼆二. 使⽤用 Redis 构建锁 三 三. 使⽤用 Redis 构建在线⽤用户统计器器 路路线图 ⼀一. Redis 简介 ⼆二. 使⽤用 Redis 构建锁 三. 使⽤用 Redis 构建在线⽤用户统计器器 四. 使⽤用 Redis 构建⾃自动补完程序 Redis an open source, in-memory data structure store 特点 特点 • 具有多种不不同的数据结构可⽤用,其0 码力 | 176 页 | 2.34 MB | 1 年前3
2.7 Golang与高性能DSP竞价系统预警接⼝口: Interface 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved 预警接⼝口: Redis 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved Dispatch: 数据、状态同步 Dispatch Reserved • 重度使⽤用Redis • 存放的数据包括 • CookieMapping • 曝光频次 • DMP⼈人群数据 • 实时费⽤用消耗 • 其他 Redis集群 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • Server端:等待Redis官⽅方(当时还没有的) 性能损耗 Redis集群 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • 最终在Client端实现 • ⼀一致性hash: github.com/stathat/consistent • 预先开启⾜足够多的Redis实例,预防增加节点带来的数据 迁移⿇麻烦 Redis集群 专业DSP解决⽅方案0 码力 | 51 页 | 5.09 MB | 1 年前3
Go Web编程线标出,意思是此处方法的Receiver是以值传递,而非引用传递,是 的,Receiver还可以是指针, 两者的差别在于, 指针作为Receiver会对实例对象的内容发生操作,而普通类型作为 Receiver仅仅是以副本作为操作对象,并不对原实例对象发生操作。后文对此会有详细论述。 那是不是method只能作用在struct上面呢?当然不是咯,他可以定义在任何你自定义的类型、内置类型、struct等各 道receiver是指针,他自动帮你转了。 也就是说: 如果一个method的receiver是*T,你可以在一个T类型的实例变量V上面调用这个method,而不需要&V去调用这个 69 如果一个method的receiver是*T,你可以在一个T类型的实例变量V上面调用这个method,而不需要&V去调用这个 method 类似的 如果一个method的receiver是T, 再次访问这个服务器上的网页,会继续使用这一条已经建立的TCP连 接。 Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同服务器软件(如Apache)中设置这个时间 请求实例 请求实例 图3.7 一次请求的request和response 上面这张图我们可以了解到整个的通讯过程,同时细心的读者是否注意到了一点,一个URL请求但是左边栏里面为什 么会有那么多的资源0 码力 | 295 页 | 5.91 MB | 1 年前3
Go性能优化概览-曹春晖16814c2960f16255c36d1b381cda9e7/ prometheus/go_collector.go#L45 基本套路 1. 排除外部问题,例如依赖的上游服务(包括 DB、redis、MQ)延迟 过⾼,在监控系统中查看 2. CPU 占⽤过⾼ -> 看 CPU profile -> 优化占⽤ CPU 较多的部分逻 辑 3. 内存占⽤过⾼ -> 看 prometheus,内存 过⾼ • 调⼤ GOGC • 程序启动阶段 make ⼀个全局的超⼤ slice(如 1GB) 这种⽅式只适合那些内存不紧张,且希望提⾼整体吞吐量的服务 内存占⽤过⾼-堆分配导致内存过⾼ 实例分析,TLS 的 write buffer 瓶颈优化过程 https://github.com/golang/go/blob/master/src/crypto/tls/conn.go#L930 ⾃动 dumper 能够发现的偶发线上问题⼀览 Holmes 之前定位出的线上问题,偶发死锁。 ⻓连接场景,为了连接保活, 每 15s 发送⼀次⼼跳 当⼼跳失败 6 次时,会关闭重建连 恰好有些实例出现 6 次⼼跳 与发送数据并发 出现了死锁 ⾃动 dumper 能够发现的偶发线上问题⼀览 Holmes 之前定位出的线上问题 Decode huge packet 某些语⾔的⽹络 encoding0 码力 | 40 页 | 8.69 MB | 1 年前3
Golang大规模云原生应用管理实践Tekton Argo KEDA ES InfluxDB Promethues Knative Ingress Rook Kube eventer … 策略 机制 Jaeger 实例 调度策略 链路 K8s及云原生生态给 开发者提供的是机制 开发者直接使用K8s的失败故事 • 认知成本高:K8s功能强大却没有统一的使用方式,不得不学习复杂的声明字段和各种奇怪的Annotation; ScaledObject spec: maxReplicaCount: 4 triggers: - type: redis ... - trait: apiVersion: extended.oam.dev/v1 kind: Route kind: Network name: my-vpc-network-X - instanceName: backend componentName: redis scopes: - scope: apiVersion: core.oam.dev/v1alpha2 kind: Network0 码力 | 23 页 | 7.70 MB | 1 年前3
Golang 入门笔记函数可以返回多个值 2. 支持高并发 3. 每一行之后不需要分号 4. 切片slice (动态数组)、延迟执行 defer Golang 入门教程 Golang 数据操作 MySQL 数据库操作 Redis 操作 高级特征 Go 语言作用域 定义 作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。 申明 函数内定义的变量称为局部变量 函数外定义的变量称为全局变量 valuen} variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen} 结构体使用实例 实例1 访问结构体成员 结构体作为函数参数 结构体指针 切片(Slice) Go 语言切片是对数组的抽象。(不固定长度的数组) Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,0 码力 | 2 页 | 511.29 KB | 1 年前3
Go 入门指南(The way to Go)fmt.Println / fmt.Printf )。 2. 在 fmt.Printf 中使用下面的说明符来打印有关变量的相关信息: %+v 打印包括字段在内的实例的完整信息 %#v 打印包括字段和限定类型名称在内的实例的完整信息 %T 打印某个类型的完整说明 3. 使用 panic 语句(第 13.2 节)来获取栈跟踪信息(直到 panic 时所有被调用函数的列表)。 4. 使用关键字 map1 目录及其子目录下的所有 Go 源文件。 gofmt 也可以通过在参数 -r 后面加入用双引号括起来的替换规则实现代码的简单重构,规则的格式: <原始内容> -> <替换内容> 。 实例: gofmt -r “(a) -> a” –w *.go Go入门指南 - 24 - 本文档使用 看云 构建 上面的代码会将源文件中没有意义的括号去掉。 gofmt -r “a[n:len(a)] Sub(start) fmt.Printf("longCalculation took this amount of time: %s\n", delta) 您可以查看示例 6.20 fibonacci.go 作为实例学习。 如果您对一段代码进行了所谓的优化,请务必对它们之间的效率进行对比再做出最后的判断。在接下来的 章节中,我们会学习如何进行有价值的优化操作。 6.12 通过内存缓存来提升性能 当在进行0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)打包和安装 9.10 Go 的外部包和项目 9.11 在 Go 程序中使用外部库 第10章:结构(struct)与方法(method) 10.1 结构体定义 10.2 使用工厂方法创建结构体实例 10.3 使用自定义包中的结构体 10.4 带标签的结构体 10.5 匿名字段和内嵌结构体 10.6 方法 10.7 类型的 String() 方法和格式化描述符 10.8 垃圾回收和 Println / fmt.Printf )。 2. 在 fmt.Printf 中使用下面的说明符来打印有关变量的相关信息: %+v 打印包括字段在内的实例的完整信息 %#v 打印包括字段和限定类型名称在内的实例的完整信息 %T 打印某个类型的完整说明 3. 使用 panic 语句(第 13.2 节)来获取栈跟踪信息(直到 panic 时所有被调用函数的列表)。 4. 目录及其子目录下的所有 Go 源文件。 gofmt 也可以通过在参数 -r 后面加入用双引号括起来的替换规则实现代码的简单重构,规则的格式: <原始内 容> -> <替换内容> 。 实例: 1. gofmt -r '(a) -> a' –w *.go 上面的代码会将源文件中没有意义的括号去掉。 1. gofmt -r 'a[n:len(a)] -> a[n:]' –w *.go0 码力 | 466 页 | 4.44 MB | 1 年前3
03. Golang 在隐私计算平台建设中的实践 - 刘敬需要发送给其他⽅方的数据, 通过context对象指定参与 ⽅方发送 Context中包含本次隐私计算任务的详细信息 趣链科技版权所有©2016 – 2021 18 隐私计算算法框架 协商算法 实例例版本 检查参与⽅方 任务状态 校验多⽅方输⼊入 格式是否匹配 参与⽅方掉线 检测 算 法 管 理理 异 常 处 理理 算 法 实 例例 ADD CMP PIR PSI 优点 01 一个算法实现,负责管理理隐私计算任务,以及算法实例例 中 元函数的调度,框架根据算法实例例会⾃自动⽣生成对应的控制器器 protocol instance:⼀一个instance对应对应具体的算法的⼀一中实现,包含算法的配置和所有元函 数的 集合 趣链科技版权所有©2016 – 2021 20 隐私计算算法框架-instance 声明算法实例例的配置 通⽤用流程的回调函数 按照隐私计算中的⻆角⾊色 选择所有参与⽅方都有 的且版本最⾼高的实例例 没有具体逻辑,只是做算 法结果的类型转换 根据配置的具体实现, 框架通过反射构建实例例 反射注⼊入继承的BaseManager字段 趣链科技版权所有©2016 – 2021 22 隐私计算算法框架-controller 通过反射扫描出元函数的⼊入参类型 框架在初始化时, 遍历所有算法manager的 所有实例例并记录实例例详情 趣链科技版权所有©20160 码力 | 37 页 | 6.20 MB | 1 年前3
1.5 Go 语言构建高并发分布式系统实践实时⻓长连接数亿量级,⽇日独数⼗十亿量级 1分钟内亿量级⼲⼴广播,⽇日下发峰值百亿量级 400台物理机,9个独⽴立集群,国内外近10个IDC 运维管理的go语⾔言编写的常驻service服务实例接近3000个。 业务场景多样: ⽀支持聊天场景业务,稳定⽀支持多款聊天业务app 单通道多app复⽤用 上⾏行通道,回调⽀支持 对智能硬件产品,提供定制化消息推送与转发服务 性能满⾜足需要: (deprecat ed) 接入客户端 Android IOS Linux Web Windows Flash Iframe for ever 消息系统简要架构 单实例,单端⼝口,多协议复⽤用 全双⼯工,单客户端,多app复⽤用服务单通道 适⽤用于复杂环境下的⺴⽹网络的接⼊入策略 协议完备、简单、数据安全、可扩展、省流量 接⼊入层 ���� 最接近业务场景的百万级别压测后台 架构迭代 所有实例组通信数据监控 性能监控与调优 架构迭代 压测平台 拆分多实例 l 缓解GC压⼒力(gc时间减少40%) 按业务类型聚类,⼲⼴广播(io密集),多播,点对点(内部通信密集),聊天室(cpu密集)0 码力 | 39 页 | 5.23 MB | 1 年前3
共 50 条
- 1
- 2
- 3
- 4
- 5













