Go语言中文网 为您找到相关结果 669

goim的业务集成(分享会小结与QA)

goim 文章系列(共5篇): goim 架构与定制 从goim定制, 浅谈 golang 的 interface 解耦合与gRPC goim中的 bilibili/discovery (eureka)基本概念及应用 goim 的 data flow 数据流 goim的业务集成(分享会小结与QA) 有个 slack 频道, 不少朋友在交流 goim , 欢迎加入slack #goim [简述] goim.io 是 非常成功的 IM (Instance Message) 即时消息平台 , 本文汇总在 go夜读 组织的 goim 交流分享会后的小结 goim 交流分享会的视频, 第一次用视频会议, 一堆问题, 请包容一下 :( 视频地址在 youtube www.youtube.com/watc...阅读全文

博文 2019-06-03 23:34:22 tsingson

golang consul-grpc 服务注册与发现

在微服务架构里面,每个小服务都是由很多节点组成,节点的添加删除故障希望能对下游透明,因此有必要引入一种服务的自动注册和发现机制,而 consul 提供了完整的解决方案,并且内置了对 GRPC 以及 HTTP 服务的支持 总体架构 服务注册与发现 服务调用: client 直连 server 调用服务 服务注册: 服务端将服务的信息注册到 consul 里 服务发现: 客户端从 consul 里发现服务信息,主要是服务的地址 健康检查: consul 检查服务器的健康状态 服务注册 服务端将服务信息注册到 consul 里,这个注册可以在服务启动可以提供服务的时候完成 完整代码参考: https://github.com/hatlonely/hellogolang/blob/master/sa...阅读全文

博文 2018-06-23 23:34:39 hatlonely

gRPC负载均衡库grpc-lb的使用

grpc-lb采用客户端进程内负载均衡方式,支持随机、轮询、一致性哈希三种负载均衡策略,并支持服务端权重。可采用etcd或consul作为注册中心。项目地址:https://github.com/liyue201/grpc-lb基本架构如图,服务提供者起来后向注册中心注册自己的信息,ip、端口、权重等,并保持心跳。客户端监听注册中心,获取服务器列表,一旦服务器发生变化,客户端马上更新本地的服务器列表。客户端每个请求都通过负载均衡策略选择一个合适的服务器去访问。​随机负载均衡客户端例子: package main import ( etcd "github.com/coreos/etcd/client" grpclb "github.com/liyue201/grpc-lb" "github....阅读全文

博文 2017-08-02 10:17:33 stirlingx

有对Go比较精通的吗? 对Go的原理和各方面深层次的应用比较精通。

有对Go比较精通的吗? 对Go, protobuf, gRPC或Thrift比较熟悉,重点是对Go的原理和各方面深层次的应用比较精通。(非猎头) 最好本科或以上学历。 招聘公司行业:金融科技行业知名大公司 地点:上海市区 简历投递地址:whshliu@126.co...阅读全文

gRPC的Go语言使用例子

gRPC刚被Google开源, gRPC是啥? 先照抄一段说明: gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。 这段抄自info: http://www.infoq.com/cn/news/2015/03/grpc-google-http2-protobuf 官网地址: http://www.grpc.io 冲着面向...阅读全文

博文 2015-06-17 20:05:18 xcltapestry

gRPC golang开发简介

主要基于官网介绍的文档总结而来。 需要先了解 protocol buffers 为什么使用gRPC 通过gPRC,我们可以仅仅定义一次service 到.proto文件中,然后使用gRPC支持的任何开发语言开发客户端或服务器。 样例代码和环境的建立 首先要确保golang开发环境的正确配置,go1.5+。 $ go get -u -v google.golang.org/grpc 本人在测试中遇到报错,主要原因在于样例需要 "golang.org/x/net" "golang.org/x/text" 的支持,本人的解决方法如下到 $GOPATH/src/golang.org/x/ 目录下,如果golang.org/x/ 不存在则手动创建一个。然后 git clone https://gith...阅读全文

博文 2017-07-03 08:07:01 kingeasternsun

基于Golang的IP地址信息查询服务

工作中经常会有通过IP匹配用户信息的需求,如确定用户所在的地区(国家/省份/城市)、运营商、时区、经纬度等等。前一阵有个Golang开发的项目也有这样的需求,于是简单实现了一个包,最近忙里偷闲又包了一个支持HTTP和GRPC方式调用的服务,并开源在GitHub上了。本文主要介绍IP地址信息查询的实现细节和使用方式。 首先交代一下GitHub地址: IpQuery Golang Package:https://github.com/tabalt/ipquery IP地址信息查询服务:https://github.com/tabalt/ipqueryd 欢迎大家在项目中使用(已通过N亿日PV服务的考验),有任何问题或建议,请提交Issue反馈或Fork到自己名下修改后提交Pull Request...阅读全文

博文 2017-11-22 09:03:26 mickelfeng

grpc文档与grpc-go的实现-连接语义和API

> 查看原文:[blog.keyboardman.me](http://blog.keyboardman.me/2018/02/08/grpc-doc-with-grpc-connectivity-semantics-and-api/) > 文档地址:[gRPC Connectivity Semantics and API](https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md) > 译文:[gitbook](https://0x5010.gitbooks.io/grpc-doc-zh/content/connectivity-semantics-and-api.html) > 译者:[0...阅读全文

博文 2018-02-08 17:06:50 0x5010

github上用golang写的项目

1.moby/moby docker的新马甲 2.kubernetes/kubernetes 分布式容器管理 3.grafana/grafana 一个可视化面板,有漂亮的仪表盘,多种数据来源,适合做系统监控 4.coreos/etcd 集群共享信息,服务与发现 5.astaxie/beego 一个快速开发Go应用的http框架 6.gin-gonic/gin 同上 7.prometheus/prometheus 系统监控和报警工具 8.drone/drone 用于CD(Continuous Delivery) 9.mattermost/mattermost-server 类似slack或者钉钉 10.nsqio/nsq 类似rabbitmq,首选kafka? 11.containous/tr...阅读全文

博文 2017-10-19 03:00:03 wjx0912

房间号生成器

在写游戏服务器中, 特别是卡牌一类的游戏, 经常需要让用户手动输入房间号加入一个房间, 为了用户友好, 这个房间号通常需要限定长度, 比如4位或者6位数字. 因此用数据库的auto_increment对用户不太友好, 其一是长度不固定, 其二是后期房间号会很长, 所以专门写了一个房间号生成器服务器, 其满足以下需求: 指定生成的的房间号范围: 比如[100000, 1000000) 租借过期: 当一个房间号被生成后, 若超时未续期, 则自动释放(冻结) 房间号冻结: 当一个房间号被归还后, 在指定时间范围内不会被重新分配 安装 项目地址: https://github.com/acrazing/uno 安装: go get -u github.com/acrazing/uno 使用 接口很简...阅读全文

博文 2018-05-25 10:34:41 acrazing

Go使用gRPC与Protocol Buffers构建高性能API 服务

由于近年来软件的规模日益庞大,API成为了应用程序的的骨干。API作为后台服务为web与移动端提供了强有力的支撑,也用于各平台直接的数据交互,当我们想构建一个基于API的web服务时,我们通常会选择RESTful Api 和 JSON 作为之间的数据交换的方式。RESTful Api 和 JSON确实可以很方便的为移动客户端提供服务,由于Docker为代表的容器技术的火热,微服务架构也随之被很多公司推崇。其中微服务能否实现大规模和高性能非常关键。然而微服务肯定需要一个高性能通信机制与各种服务之间通信。那么最大的问题就是Json是否能够满足基于API提供高性能和扩展性的现代应用程序?然而Json是应用程序直接交换数据最快的数据格式吗?RESTful架构是否能够构建复杂的API?我们能够轻松的通...阅读全文

博文 2017-02-10 12:28:31 谢权

视频笔记:gRPC 从学习到生产 - Alan Shreve

视频信息 演讲者 微服务之间应该如何通讯? 为什么 REST API 不好用? 什么是 gRPC 建一个缓存服务 app.proto server.go client.go 这不就是 WSDL 么? 实现具体的 CacheService 错误处理 加密传输 生产环境如何使用 gRPC gRPC 的实现 gRPC 从哪来的 生产环境案例:多租户 生产环境案例:性能 生产环境案例:超时 生产环境案例:上下文传递 生产环境案例:GRPC Metadata 生产环境案例:Retry 生产环境案例:结构化错误 生产环境案例:Dump 生产环境案例:流量控制 生产环境案例:Streaming 生产环境案例:横向扩展、负载均衡 生产环境案例:多语言协作 gRPC 尚不完美的地方 gRPC 在生产环境中的用...阅读全文

博文 2017-10-05 06:43:32 大桥下的蜗牛

Golang gRPC实践 连载三 Protobuf语法

Protobuf语法 gRPC推荐使用proto3,本节只介绍常用语法,更多高级使用姿势请参考官方文档 Message定义 一个message类型定义描述了一个请求或相应的消息格式,可以包含多种类型字段。例如定义一个搜索请求的消息格式,每个请求包含查询字符串、页码、每页数目。 syntax = "proto3"; message SearchRequest { string query = 1; // 查询字符串 int32 page_number = 2; // 页码 int32 result_per_page = 3; // 每页条数 } 首行声明使用的protobuf版本为proto3 SearchRequest 定义了三个字段,每个字段声明以分号结尾,可使用双斜线//添加注释。 字段...阅读全文

博文 2017-04-14 06:00:39 徐学良

GRPC状态码

使用grpc的时候,线上php客户端调用go服务端,出现2/5/14等状态码,没有做日志输出,导致问题查了很长时间,最终问题是因为连接没有close掉,连接数不够了。 grpc的状态码在google.golang.org/grpc/codes:codes中,整理下状态码的翻译: 0:Ok:返回成功 1:Canceled:操作已取消 2:Unknown:未知错误。如果从另一个地址空间接收到的状态值属 于在该地址空间中未知的错误空间,则可以返回此错误的示例。 没有返回足够的错误信息的API引发的错误也可能会转换为此错误 3:InvalidArgument:表示客户端指定了无效的参数。 请注意,这与FailedPrecondition不同。 它表示无论系统状态如何(例如格式错误的文件名)都有问题的...阅读全文

博文 2018-11-16 19:34:47 王先森QAQ

[golang grpc] 框架介绍

官方网站 http://www.grpc.io/ http://www.grpc.io/docs/quickstart/go.html grpc安装 • go安装 目前grpc需要go 1.5以上版本支持。go安装可以参考:http://www.cnblogs.com/heartchord/p/5127503.html。 • protocol buffer安装 protocol buffer和go插件安装可以参考:http://www.cnblogs.com/heartchord/p/5337863.html。 • grpc安装 go get google.golang.org/grpc • 官方例子测试 grpc包下自带测试例子,路径为google.golang.org/grpc/exam...阅读全文

博文 2016-09-01 19:00:00 heartchord

go基于grpc构建微服务框架-结构化日志输出

1.结构化日志的意义 1.1 日志格式化 日志主要用于跟踪服务的运行信息,作为后端攻城狮,一般都会有一种想法,平时的时候希望日志越少越好,出问题的时候又总是抱怨,怎么才tmd这点日志,还在关键的地方没打印. 因此,日志很重要,将日志进行格式化也很重要,日志格式化主要是为了方便后续进行分析.如通过将错误码格式化到日志中,我们可以对收集后的日志分析接口的调用健康状态,将接口耗时格式化后上报,可以监控延时高的操作,并查询出关联日志进行分析. 所以只要是格式化输出,很容易有很多应用. 1.2 日志库应该有的特性 高性能 这里主要是两方面,每次操作的耗时,以及每次操作分配的内存,作为日志库,两个指标都应该要极低. 日志等级过滤 能通过调节日志等级打印不同级别的日志. 采样率 能够设置采样率,防止服务请...阅读全文

博文 2018-04-21 11:34:38 沐风

Protobuf生成Go代码指南

这个教程中将会描述protocol buffer编译器通过给定的.proto会编译生成什么Go代码。教程针对的是proto3版本的protobuf。在阅读之前确保你已经阅读过Protobuf语言指南。 编译器调用 Protobuf核心的工具集是C++语言开发的,官方的protoc编译器中并不支持Go语言,需要安装一个插件才能生成Go代码。用如下命令安装: $ go get github.com/golang/protobuf/protoc-gen-go 提供了一个protoc-gen-go二进制文件,当编译器调用时传递了--go_out命令行标志时protoc就会使用它。--go_out告诉编译器把Go源代码写到哪里。编译器会为每个.proto文件生成一个单独的源代码文件。 输出文件的名称是...阅读全文

博文 2019-09-18 13:32:41 KevinYan

go语言gRPC负载均衡库grpc-lb的使用

grpc-lb采用客户端进程内负载均衡方式,支持随机、轮询、一致性哈希三种负载均衡策略,并支持服务端权重。可采用etcd或consul作为注册中心。 项目地址:https://github.com/liyue201/g... 基本架构如图,服务提供者起来后向注册中心注册自己的信息,ip、端口、权重等,并保持心跳。客户端监听注册中心,获取服务器列表,一旦服务器发生变化,客户端马上更新本地的服务器列表。客户端每个请求都通过负载均衡策略选择一个合适的服务器去访问。 随机负载均衡客户端例子: package main import ( etcd "github.com/coreos/etcd/client" grpclb "github.com/liyue201/grpc-lb" "github.c...阅读全文

博文 2017-08-03 06:34:59 stirling

golang gRPC示例

gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。 1、普通帐号安装protobuf unzip protobuf-cpp-3.0.0-alpha-3.zip cd protobuf-3.0.0-alpha-3/ ./configure make && sudo make install go get -u github....阅读全文

博文 2015-10-28 18:00:06 wkyb608

grpc-gateway的替代品--Turbo

转载自:https://zhuanlan.zhihu.com/p/29350695 grpc-gateway是一个使用起来很便捷的工具,可以很方便的把grpc接口用HTTP的方式暴露出去。 但在实际使用过程中,也在grpc-gateway里发现了一些问题,比如: 1,灵活性不够,如果有一些比较特殊的需求,在grpc-gateway中能扩展的余地不大; 2,严重依赖protocol buffer,而且必须是protobuf 3; 3,即使grpc服务的接口不变,只是修改HTTP接口定义,也必须重新生成代码,也就必须重新部署,重启服务; 4,只支持JSON格式的输入,不支持传统的kv格式的参数; 5,只支持grpc,嗯。。好吧,这不算问题,但thrift...阅读全文

微服务构建示例(istio k8s grpc-go echo)

# 传送门 [istio-micro](https://github.com/xiaomeng79/istio-micro) ## istio-micro [![Build Status](https://travis-ci.org/xiaomeng79/istio-micro.svg?branch=master)](https://travis-ci.org/xiaomeng79/istio-micro) [![codecov](https://codecov.io/gh/xiaomeng79/istio-micro/branch/master/graph/badge.svg)](https://codecov.io/gh/xiaomeng79/istio-micro) #### 使用go...阅读全文

博文 2019-01-19 11:16:47 xiaomeng

protobuf的bytes类型

syntax "proto3"; package Test; service Test{ rpc KeepAlive(Hello) returns (Hello){} } message Hello{ int64 timestamp=1; bytes alert=2; } python: channel = grpc.insecure_channel('%s:%d'%(ADDR, PORT)) stub = Test_pb2_grpc.TestStub(channel=channel) hello = Hello() hello.timestamp=datetime.now().timestamp() hello.alert=bytes("hello", encoding="ascii") ...阅读全文

博文 2018-11-08 12:34:54 CentrosPan

golang通用连接池,支持GRPC,RPC,TCP

# pool https://github.com/flyaways/pool Pool 用于管理客户端到服务集群之间的连接. Pool的主要功能: * **通用连接池** - Pool for GRPC,RPC,TCP.support RPC timeout. * **支持集群** - Connet to Cluster. * **动态更新** - Danamic update targets. Pool runs on Linux, Mac OS X, and Windows. **声明**:当前使用随机数策略达到动态负载均衡. ## 下载 ```go go get -u gopkg.in/flyaways/pool.v1 ``` ## 导入方法 ```go import "gopkg....阅读全文

博文 2019-04-16 16:33:56 flyaways

gRPC & Protocol Buffer 构建高性能接口实践

文章介绍了如何使用 gRPC 和 ProtoBuf,快速连接 gRPC 可以参考这篇文章第一段:gRPC quick Start。 接口开发是软件开发占据举足轻重的地位,是现代软件开发之基石。体现在无论是前后端分离的 Web 前端还是移动客户端,乃至基于不同系统、编程语言构建的软件系统之间,API 都是充当桥梁的作用把不同端的系统链接在一起从而形成了一套稳固的商用系统。 基于 Web 的接口通常都是 RESTful API 结合 JSON 在前后端之间传递信息,这种模式比较适合于前后端分离及移动客户端于后端通信;但对于承载大规模并发、高性能要求的微服务架构,基于 JSON 传输的 RESTful 是否还适用于高并发、伸缩性强及业务逻辑复杂的软件架构吗?基于 RESTful 架构是否能够简单是...阅读全文

博文 2017-10-28 11:04:44 hww_面条酱

客户端速率限制工具 Doorman

Doorman 是一个客户端速率限制的解决方案,客户端与共享资源进行通讯,包括数据库、gRPC 服务、RESTful API 等等可使用 Doorman 来限制对资源的调用。Doorman 使用 Go 语言开发,使用 gRPC 的通讯协议。其高可用特性需要一个分布式的锁管理器,当前支持 [etcd](/p/etcd),也可使用 [Zookeeper](http://www.oschina.net/p/zookeeper) 替代...阅读全文

开源项目 2016-04-09 16:00:00 youtube

golang的etcd

etcd 是由CoreOS开发,用于可靠地存储集群的配置数据的一种持久性,轻量型的,分布式的键-值数据存储。表示在任何给定时间点处的集群的整体状态。其他组件在注意到存储的变化之后,会变成相应的状态。 etcd 有golang 编写 kubernets体系中主要用于 服务注册 + 服务发现. // 以下为俺们封装的grpc调用 etcd的调用逻辑. 服务端. 注册服务. client端. 发现服务. 使用服务. 2.1 导入 invoker 包 main.go -> service.Init() -> 相关grpc的初始化. -> 导入 git.dz11.com/vega/invoker 包. 2.2 invoker包的init函数执行. 在 invoker/register.go 中. in...阅读全文

博文 2019-02-21 21:34:42 个00个

Go语言AST尝试

# Go语言AST尝试 Go语言有很多工具, goimports用于package的自动导入或者删除, golint用于检查源码中不符合Go coding style的地方, 比如全名,注释等. 还有其它工具如gorename, guru等工具. 作为工具它们都是使用go语言([查看](https://github.com/golang/tools/tree/master/cmd))开发的, 这些工具都有一个共同点就是: 读取源代码, 分析源代码, 修改或生成新代码. ## 简述 很多编程语言/库/框架等都能生成代码, 比如使用rails, 可以轻松地new一个project出来, 生成项目基本代码, 我们其为boilerplate, 或者template, 这已经习以为常了. 像ruby的...阅读全文

博文 2016-09-17 12:00:01 qgymje

go资源

数据库操作库 https://github.com/jmoiron/sqlx https://github.com/go-xorm/xorm https://github.com/xormplus/xorm https://github.com/jinzhu/gorm RPC https://github.com/smallnest/rpcx https://github.com/grpc/grpc-go https://github.com/hprose/hprose-go https://github.com/micro/go-micro GUI https://github.com/andlabs/ui https://github.com/visualfc/goqt https://...阅读全文

博文 2017-02-13 03:00:28 老查

Golang gRPC实践 连载一 gRPC介绍与安装

gRPC介绍与安装 A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. ——gRPC Website gRPC 是一个高性能、开源、通用的RPC框架,由Google推出,基于HTTP/2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言。gRPC提供了一种简单的方法来精确的定义服务,并且为客户端和服务端自动生成可靠的功能库。 主要特性 强大的IDL gRPC使用ProtoBuf来定义服务,ProtoBuf是由Google开发的一种数据序列化协议(类似于XML、JSON、hessian)。ProtoBuf能够将数据进行序列化,并...阅读全文

博文 2017-02-10 02:38:47 Coldstar

grpc(3):使用 golang 开发 grpc 服务端和客户端

1,关于grpc-go golang 可以可以做grpc的服务端和客户端。 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://github.com/grpc/grpc-go 和之前写的java的grpc客户端调用相同。也需要使用protobuf的配置文件。 但是golang下面的类库非常的简单,而且golang的性能也很强悍呢。 有些简单的业务逻辑真的可以使用golang进行开发。 性能强悍而且,消耗的资源也很小。java感觉上已经非常的臃肿了。 项目已经上传到github上面了。 https://github.com/freewebsys/grpc-go-demo 2,生成代码 定义proto文件: syntax = "pr...阅读全文

博文 2017-07-12 02:30:02 freewebsys

gRPC远程过程调用之golang

gRPC是Google出品,支持多种语言,但是国内安装会有点问题,下面整理一下,方便今后配环境的复习。 安装grpc go get google.golang.org/grpc 结果出现了如下错误: package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc"(https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout) 参考 https://blog.csdn.net/cjj198561/article/details/78133193 可以使用如下方式进行...阅读全文

博文 2018-10-14 18:34:39 尽情的嘲笑我吧

linux下golang gRPC配置详解

1.安装gRPC运行环境 go get google.golang.org/grpc 这里的grpc通俗来说就说用在代码里的一个类库,后面的例子可以看到。比较坑的是这里可能需要FQ..... 2.安装protoc 这里需要安装proto buffer的编译器。首先在官网下载,如c++版本的protobuf-cpp-3.4.1.tar.gz,解压后进行编译: ./configure make && make install 3.安装protoc-gen-go go get -a github.com/golang/protobuf/protoc-gen-go 4.编写proto文件 基于protobuf的跨语言的特性,不难想到它自己实现了一套数据类型。这里有一个简单的例子 //testHell...阅读全文

博文 2017-11-07 01:00:01 xiaodeshan

Golang 微服务教程(四)

译文链接:wuYin/blog原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。 本文完整代码:GitHub 上节引入 user-service 微服务并在 Postgres 中存储了用户数据,包括明文密码。本节将对密码进行安全的加密处理,并使用唯一的 token 来在各微服务之间识别用户。 在开始之前,需要手动运行数据库容器: $ docker run -d -p 5432:5432 postgres $ docker run -d -p 27017:27017 mongo 密码的哈希处理 安全原则 遵循 ”即使发生数据泄露,密码等敏感数据也不能被还原“ 的原则,永远都不要明文存储用户的密码。尽管一直这么说,但仍有项目是明文存储,比如以前的 CS...阅读全文

博文 2018-06-07 09:34:37 wuYin

从实践到原理,带你参透 gRPC

文地址:从实践到原理,带你参透 gRPC gRPC 在 Go 语言中大放异彩,越来越多的小伙伴在使用,最近也在公司安利了一波,希望能通过这篇文章能带你一览 gRPC 的爱与恨。本文篇幅较长,希望你做好阅读准备,目录如下: 简述 gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持。 gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省...阅读全文

博文 2019-06-29 20:02:38 煎鱼

gRPC 调试和开发工具grpc-tools

grpc-tools 是一套用于 gRPC 调试和开发的工具。 主要工具是 grpc-dump,它拦截网络流量,并使用完整元数据记录所有 gRPC 和 gRPC-Web 请求作为 JSON 流。此流可以轻松读取,也可以使用 jq 等工具进行更复杂的可视化。 ![demo](https://static.oschina.net/uploads/img/201906/25104652_LNS2.svg) 该存储库目前包括: * grpc-dump:一个小的 gRPC 代理,它将 RPC 详细信息转储到文件中以进行调试,然后进行分析/重放。 * grpc-replay:从 grpc-dump 获取输出并将请求重放到服务器。 * grpc-fixture:一个代理,它从 grpc...阅读全文

gRPC源码/transport/流控

流控 代码 https://github.com/messixukej... 在liangzhiyang/annotate-grpc-go基础上补充了部分注释 发送流控 HTTP/2 流量控制的目标,在流量窗口初始值的约束下,给予接收端以全权,控制当下想要接受的流量大小。 算法: 两端(收发)保有一个流量控制窗口(window)初始值。 发送端每发送一个DATA帧,就把window递减,递减量为这个帧的大小,要是window小于帧大小,那么这个帧就必须被拆分。如果window等于0,就不能发送任何帧。 接收端可以发送 WINDOW_UPDATE帧给发送端,发送端以帧内指定的Window Size Increment作为增量,加到window上。 // 用于发送流控。 将当前可用的quota(...阅读全文

博文 2018-06-10 10:34:37 蓝白狂想

深入了解 gRPC:协议

经过很长一段时间的开发,TiDB 终于发了 RC3。RC3 版本对于 TiKV 来说最重要的功能就是支持了 gRPC,也就意味着后面大家可以非常方便的使用自己喜欢的语言对接 TiKV 了。 gRPC 是基于 HTTP/2 协议的,要深刻理解 gRPC,理解下 HTTP/2 是必要的,这里先简单介绍一下 HTTP/2 相关的知识,然后在介绍下 gRPC 是如何基于 HTTP/2 构建的。 HTTP/1.x HTTP 协议可以算是现阶段 Web 上面最通用的协议了,在之前很长一段时间,很多应用都是基于 HTTP/1.x 协议,HTTP/1.x 协议是一个文本协议,可读性非常好,但其实并不高效,笔者主要碰到过几个问题: Parser 如果要解析一个完整的 HTTP 请求,首先我们需要能正确的读出 ...阅读全文

博文 2017-06-21 02:12:39 siddontang

Golang RPC 之 gRPC

gRPC 简介: gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等)。因为 gRPC 对 HTTP/2 协议的支持使其在 Android、IOS 等客户端后端服务的开发领域具有良好的前景。gRPC 提供了一种简单的方法来定义服务,同时客户端可以充分利用 HTTP2 stream 的特性,从而有助于节省带宽、降低 TCP 的连接次数、节省CPU的使用等。 安装: gRPC 的安装 $ go get -u google.golang.org/grpc 因为 gRPC 是基于 protobuf 实现的接口序列化,所以也要安装 protobuf: 安装及简介教程。 实践: 下面我们使用 ...阅读全文

博文 2017-03-08 09:53:30 谢烟客

Grpc+Grpc Gateway实践三 Swagger了解一下

Swagger了解一下 在上一节,我们完成了一个服务端同时支持Rpc和RESTful Api后,你以为自己大功告成了,结果突然发现要写Api文档和前端同事对接= = 。。。 你寻思有没有什么组件能够自动化生成Api文档来解决这个问题,就在这时你发现了Swagger,一起了解一下吧! 介绍 Swagger Swagger是全球最大的OpenAPI规范(OAS)API开发工具框架,支持从设计和文档到测试和部署的整个API生命周期的开发 Swagger是目前最受欢迎的RESTful Api文档生成工具之一,主要的原因如下 跨平台、跨语言的支持 强大的社区 生态圈 Swagger Tools(Swagger Editor、Swagger Codegen、Swagger UI ...) 强大的控制台 ...阅读全文

博文 2018-03-04 21:34:39 EDDYCJY

go语言使用grpc的步骤

grpc提供了很好的rpc远程过程调用功能,封装了中间环节,让使用rpc的客户服务端只需要关注自己的业务即可。 go语言下使用gprc的步骤如下: 1、安装go语言 go语言的安装不再详述,具体参见:https://golang.org/doc/install grpc需要在go语言1.5或以上版本工作 2、安装grpc 安装好go语言后,调用如下: $ go get google.golang.org/grpc 3、安装 Protocol Buffers v3 到https://github.com/google/protobuf/releases下下载对应平台和版本(protoc--.zip)的压缩包或安装包,解压到你自己的目录下,同时将目录下的bi...阅读全文

博文 2016-09-09 16:00:03 sky101010ws

gRPC源码/服务发现

代码 GitHub - messixukejia/grpc-wrapper: wrapper of grpc 关键数据结构 流程处理 关键流程图 1、客户端开工阶段从etcd获取所有服务端地址,并watch服务端变更。2、服务端变化,推送给watch的客户端。3、服务端开工阶段,将自己的地址信息put到etcd。 服务端 1、向ETCD建立客户端连接:etcd.New。2、创建ETCD注册器:NewEtcdRegisty,用于与ETCD的交互,例如注册服务地址等。3、建立grpc server,并注册相应的服务。4、启动server,并将自己服务信息通过etcdRegistry.Register向ETCD注册,在监听客户端连接强求,处理相应业务。 客户端 1、向ETCD建立客户端连接:etc...阅读全文

博文 2018-06-11 21:34:38 蓝白狂想

grpc的Go服务端和PHP客户端实现

前言 gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持. gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。本例系统为 CentOS Linux release 7.5.1804 (Core) ,具体实现如下: 安装GO(已安装跳过) 1、安装yum 源 yum install epel -y 2、然后使用 yu...阅读全文

博文 2019-07-04 18:32:39 guyan0319

用consul做grpc的服务发现

用consul做grpc的服务发现与健康检查 consul 服务发现与负载均衡 当server端是集群部署时,client调用server就需要用到服务发现与负载均衡。通常有两总方式: 一种方式是在client与server之间加代理,由代理来做负载均衡 一种方式是将服务注册到一个数据中心,client通过数据中心查询到所有服务的节点信息,然后自己选择负载均衡的策略。 第一种方式常见的就是用nginx给http服务做负载均衡,client端不直接与server交互,而是把请求并给nginx,nginx再转给后端的服务。这种方式的优点是: client和server无需做改造,client看不到server的集群,就像单点一样调用就可以 这种方式有几个缺点: 所有的请求都必须经过代理,代理侧容...阅读全文

博文 2019-03-07 17:34:48 直抒胸臆

gRPC在golang中的使用(客户端)

安装 gRPC 使用如下命令进行gRPC安装: go get google.golang.org/grpc 安装 Protocol Buffers v3 安装该协议编译器用来生成 gRPC 服务代码。最简便的方法是在https://github.com/google/protobuf/releases下载一个二进制压缩包。解压后加入环境变量,如下: export PATH=$PATH:执行路径 (linux下) set PATH=%PATH%;执行路径 (windows下) 执行以下命令安装该协议插件: go get -u github.com/golang/protobuf/proto go get -u github.com/golang/protobuf/protoc-gen-go 新...阅读全文

博文 2016-10-14 10:00:14 知止software