基于gRPC go实现消息发布订阅使用gRPC go实现 基于Topic的高效消息订阅发布模型 姓名 张凯 中国电子云 目 录 gRPC go 介绍 01 gRPC四种通信模式及落地场景 02 根据proto生成go桩代码 03 订阅者动态注册 04 发布者消息推送 05 现场案例演示 06 gRPC go介绍 gRPC是什么? 01. 副标题 开篇思考几个问题 01. 副标题 gRPC介绍 Web开发 基于通信模式如何落地? 01. 副标题 流式传输 基于通信模式如何落地? 01. 副标题 以及,本次分享的 “ ” 基于Topic消息发布订阅 基于Topic的消息发布模型简介 01. 副标题 基于Topic的消息发布模型简介 01. 副标题 BRIAN KERNGHAN service PubSubService { rpc Publish(PublishRequest) 服务器和客户端的接口代码。 --go_out=.: 类似地,这个选项指定了非 gRPC 相关的 Protocol Buffers 消息结构体等 Go 语言代码的输出目录, 同样为当前目录。protoc-gen-go 插件会处理 .proto 文 件中的消息定义并生成对应的 Go 结构体。 订阅者动态注册 01. 副标题 type subscriber chan interface{}0 码力 | 31 页 | 2.42 MB | 1 年前3
基于amqp实现的golang消息队列MaxQ7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 1/22 基于amqp实现的golang消息队列 MaxQ 2017-07-01 张培培 饿了么-基础框架组 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 2. IPC消息队列 3. AMQP协议 4. MaxQ架构模型 5. MaxQ相关特性 6. 使用场景和案例 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 3/22 1. 队列 跟消息队列相比,有哪些共性? 7/1/2017 基于amqp实现的golang消息队列MaxQ 生产者消费者 通信方式 存储方式 堆积能力 消息可靠性 生产消费关系 Pull/Push 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 5/22 2. IPC消息队列 跟消息队列相比,有哪些共性? 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.1680 码力 | 22 页 | 1.45 MB | 1 年前3
大规模高性能区块链架构设计模式与测试框架-李世敬激励层 发⾏机制 分配机制 PoW PoS DPoS 可编程货币 可编程⾦融 可编程社会 合约层 智能合约脚本 算法机制 合约执⾏引擎 哈希算法 数字签名 P2P⽹络 传播机制 验证机制 默克尔树 轮胎、悬架等 基础硬件配置 电路油路 等传导系统 引擎、动⼒系统 汽油等润滑系统 车载⾃动化功能 公路、越野等具体场景 公有链基础架构⾃下⽽上分为六层:数据层、⽹络层、共识层、激 核⼼安全机制 ⾝份隐私保护 数据隐私保护 共识层 分布式⼀致性算法 典型共识算法 新型共识算法 合约层 智能合约脚本 合约执⾏引擎 分布式应⽤DApp ⽹络层 P2P⽹络 区块链⽹络模型 区块链⽹络协议 扩 展 层 扩展操作 跨链协议 链上链下计算 预⾔机 扩展组件 消息队列MQ 证书管理 测试框架 治理层 权限体系 治理模型 区块链审计 BaaS运维治理 应⽤层 司法存证 供应链⾦融 核⼼安全机制 ⾝份隐私保护 数据隐私保护 共识层 分布式⼀致性算法 典型共识算法 新型共识算法 合约层 智能合约脚本 合约执⾏引擎 分布式应⽤DApp ⽹络层 P2P⽹络 区块链⽹络模型 区块链⽹络协议 扩 展 层 扩展操作 跨链协议 链上链下计算 预⾔机 扩展组件 消息队列MQ 证书管理 测试框架 治理层 权限体系 治理模型 区块链审计 BaaS运维治理 应⽤层 司法存证 供应链⾦融0 码力 | 39 页 | 56.58 MB | 1 年前3
Go Web编程客户机通过TCP/IP协议建立到服务器的TCP连接 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档 服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言 的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端 客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果 一个简单的HTTP事务就是这样实现的,看起来很复杂,原理其实是挺简 //客户端字符编码集 //空行,用于分割请求头和消息体 //消息体,请求资源参数,例如POST传递的参数 我们通过fiddler抓包可以看到如下请求信息 图3.4 fiddler抓取的GET信息 88 图3.5 fiddler抓取的POST信息 我们可以看到GET请求消息体为空,POST请求带有消息体 我们可以看到GET请求消息体为空,POST请求带有消息体。 HTTP协议定义了很 Content-Length: 90 //主体内容长度 //空行 用来分割消息头和主体 消息体 Response包中的第一行叫做状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。 状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response。HTTP/10 码力 | 295 页 | 5.91 MB | 1 年前3
2.1.1 Golang主动式内存缓存的优化探索之路缓存如何保证更新,如何与数据库同步 同步、更新 被动方式 缓存过期 定期同步 主动方式 监听数据变化 数据加载,更新 02. 全量数据加载,增量数据监听 • 每个应用服务分别消费数据变更消息 • 一个应用服务消费数据变更,应用服务集群内广播 Maxwell是一个能实时读取MySQL二进 制日志binlog,并生成JSON格式的消 息,作为生产者发送给Kafka、 RabbitMQ、Redis、文件或其它平台的 数 据 冷数据、数据量多 缓存成本大、命中低、收益小 热 数 据 当前系统中的热点数据 命中率高 系 统 新 增 数 据 近期新增数据,较大概率命中 存储空间 缓存性能 冷热可交换,引擎可扩展 06. 冷热数据交换,通过栈式缓存结构,实现多级缓存策略 语言的局限性 07. 基于golang语言,内存对象超过百万量级后出现的GC耗时问题 • go原生map存储200万数据对象0 码力 | 48 页 | 6.06 MB | 1 年前3
Go 入门指南(The way to Go)gid=2524765&trk=myg_ugrp_ovr。 Go 编程语言的维基百科:en.wikipedia.org/wiki/Go_(programming_language) Go 语言相关资源的搜索引擎页面:gowalker.org Go 语言还有一个运行在 Google App Engine 上的 Go Tour,你也可以通过执行命令 go install go-tour.googlecode string) (i int, err error) 返回的形式: return var1, var2 这种多返回值一般用于判断某个函数是否执行成功(true/false)或与其它返回值一同返回错误消息(详见 之后的并行赋值)。 使用 type 关键字可以定义你自己的类型,你可能想要定义一个结构体(第 10 章),但是也可以定义一个已 经存在的类型的别名,如: type IZ int 这 from function here! ok, disconnected from db 使用 defer 语句实现代码追踪 一个基础但十分实用的实现代码执行追踪的方案就是在进入和离开某个函数打印相关的消息,即可以提炼 为下面两个函数: func trace(s string) { fmt.Println("entering:", s) } func untrace(s string) { fmt0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)gid=2524765&trk=myg_ugrp_ovr。 Go 编程语言的维基百科:en.wikipedia.org/wiki/Go_(programming_language)) Go 语言相关资源的搜索引擎页面:gowalker.org Go 语言还有一个运行在 Google App Engine 上的 Go Tour,你也可以通过执行命令 go install go- 时间轴: 1.1 起源与发展 string) (i int, err error) 返回的形式: 1. return var1, var2 这种多返回值一般用于判断某个函数是否执行成功(true/false)或与其它返回值一同返回错误消息(详见之后的 并行赋值)。 4.2.4 类型 4.2 Go 程序的基本结构和要素 - 62 - 本文档使用 书栈(BookStack.CN) 构建 使用 type 关键字可以定义你自己的类型,你可能想要定义一个结构体(第 function here! 6. ok, disconnected from db 使用 defer 语句实现代码追踪 一个基础但十分实用的实现代码执行追踪的方案就是在进入和离开某个函数打印相关的消息,即可以提炼为下面两个 函数: 1. func trace(s string) { fmt.Println("entering:", s) } 2. func untrace(s string)0 码力 | 466 页 | 4.44 MB | 1 年前3
03. Golang 在隐私计算平台建设中的实践 - 刘敬隐私计算算法框架-⽹网络消息处理理 由于元函数的⼊入参中包含由其他参与⽅方发送来的数据,框架需要实现⾃自动将收到的消息 反序列列化并缓存,否则⽆无法进⼊入到元函数调度流程注并⼊入到元对应函数的⼊入参中 趣链科技版权所有©2016 – 2021 28 隐私计算算法框架-⾃自动序列列化⽹网络消息 将reflect.TypeOf(data).String()作为消息体类型 将消息序列列化后记录消息类型和序列列化⽅方式包装 隐私计算算法框架-⾃自动序列列化⽹网络消息 根据发送消息类型⾃自动选择序列列化 ⽅方式(⾃自定义,protobuf,json) 趣链科技版权所有©2016 – 2021 30 隐私计算算法框架-⾃自动反序列列化⽹网络消息 根据消息体类型,找到框架初始化记录的对应reflect.Type 趣链科技版权所有©2016 – 2021 31 隐私计算算法框架-⾃自动反序列列化⽹网络消息 通过反射构建消息结构体 转为interface进⾏行行反序列列化0 码力 | 37 页 | 6.20 MB | 1 年前3
3.云原生边云协同AI框架实践有controller。 - f.SetDownstreamSendFunc()【7】云端消息同步到边缘 -> pkg/globalmanager/controllers/lifelonglearning/downstream.go - f.SetUpstreamHandler()【8】边缘消息同步到云端 -> pkg/globalmanager/controllers/lifel client,Controller 会监听Sedna CR 增删改查的变化,并 执行对应的处理逻辑。 • 初始化UpstreamController,用于处 理边缘LC上传的消息 • 针对每个特性(协同推理、终身学习 等),绑定对应的消息处理函数 【4】CRD client初始化 // New creates a new LifelongLearningJob controller that keeps = podInformer.Lister() jc.podStoreSynced = podInformer.Informer().HasSynced return jc, nil } 【5】消息处理初始化 // syncEdgeUpdate receives the updates from edge and syncs these to k8s. func (uc *UpstreamController)0 码力 | 37 页 | 2.36 MB | 1 年前3
NSQ - 陈冶Dive into NSQ 舜飞 - 陈冶 消息队列服务 • ⾯向跨进程/跨服务器通讯的组件 • 异步通信,将可并⾏化处理的同步操作解耦 使⽤案例 ⼴告点击数统计 Web Service MySQL User Click User Click User Click Stateless Stat Service Stateless 使⽤案例 ⼴告点击数统计 Web stream computing Msg 使⽤需求 • 数据缓冲,提⾼可⽤性 ,缓冲服务故障 • 数据⼴播,分发给多个服务 • 负载均衡,提⾼消费者的扩展性 • 消费反馈,确保消息不丢失 使⽤案例 ⼴告点击数统计 Web Service MySQL cluster User Click User Click User Click Stateless Stat • 数据⼴播,分发给多个服务 • 负载均衡,提⾼消费者的扩展性 • 消费反馈,确保消息不丢失 • MQ:分布式部署,排除⾃⾝单点故障 使⽤需求 • 数据缓冲,提⾼可⽤性 ,缓冲服务故障 • 数据⼴播,分发给多个服务 • 负载均衡,提⾼消费者的扩展性 • 消费反馈,确保消息不丢失 • MQ:分布式部署,排除⾃⾝单点故障 • MQ:具备横向扩展性,排除性能瓶颈0 码力 | 37 页 | 2.49 MB | 1 年前3
共 33 条
- 1
- 2
- 3
- 4













