Protocol Buffers

使用命名管道承载gRPC

半腔热情 提交于 2020-08-14 06:51:56
最近GRPC很火,感觉整RPC不用GRPC都快跟不上时髦了。 gRPC设计 gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架。刚好需要使用一个的RPC应用系统,自然而然就盯上了它,但是它真能够解决所有问题吗?不见得,先看看他的优点: gRPC的主要优点: 现代高性能轻量级 RPC 框架。 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现。 可用于多种语言的工具,以生成强类型服务器和客户端。 支持客户端、服务器和双向流式处理调用。 使用 Protobuf 二进制序列化减少对网络的使用。 对应的适用场景: 微服务 :gRPC 设计用于低延迟和高吞吐量通信。 gRPC 对于效率至关重要的轻量级微服务非常有用。 点对点实时通信 :gRPC 对双向流式传输提供出色的支持。 gRPC 服务可以实时推送消息而无需轮询。 多语言环境 :gRPC 工具支持所有常用的开发语言,因此,gRPC 是多语言环境的理想选择。 网络受限环境 :gRPC 消息使用 Protobuf(一种轻量级消息格式)进行序列化。 gRPC 消息始终小于等效的 JSON 消息。 gRPC还是有缺点的: 浏览器支持受限 :绝大数浏览器不支持 HTTP/2 非人工可读取 :proto文件规定的格式在通讯中会序列化成二进制数据,人工解析较为困难。 不适用的场景与替代: 浏览器可访问的API :gRPC

语音识别服务分离计算内核

蹲街弑〆低调 提交于 2020-08-13 18:58:54
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 背景 最近研究的同事对识别内核做了一些优化,将原先集成在casrserver的内核计算逻辑单独抽离出来做成了服务并且测试后性能有提升,需要casrserver服务配合做一些改造,我之前也有过类似的想法,这次正好识别工程团队没有人力支持,加上我之前维护过casrserver, 于是就去协助casrserver改造了。在修改之前先介绍一下当前的架构 当前架构 如上图,当前casrserver中既处理了网络连接,又完成了识别的计算任务,图中是一次语音请求的核心交互逻辑, 一条客户端连接过来,网络进程里会对应三个协程: recv协程负责接收客户端发上来的数据 rpc协程负责将recv的数据发送给计算进程,然后接收计算进程返回的识别结果 send协程将识别结果再回给客户端 为了做到异步三个协程之间用了两个队列进行通信, 关于这套架构更详细的介绍,见顺哥在2016年openresty大会做的 ppt分享。之前的架构介绍到这里,让我们再来看看新版修改后的架构。 改动后的架构 如图,原先在openresty中worker进程fork出来的计算进程已经抽离出来成为独立的服务,casrserver和asr kernel server通过cosocket进行通信。 实现 针对上述架构

基于阿里云服务网格的 GRPC 服务部署实践

雨燕双飞 提交于 2020-08-13 06:59:32
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 继MicroServices之后,ServiceMesh是又一个推动软件工业的革命性技术。其服务治理的方法论,不仅改变了技术实现的方式,也将深入影响社会分工。 运行于数据平面的用户服务与治理服务的各种规则彻底解耦。运行于控制平面的规则定义组件,将流量控制的具体规则推送给运行于数据平面的proxy,proxy通过对用户服务的ingress和egress的实际控制,最终实现服务治理。 原本需要服务开发者编程实现的服务发现、容错、灰度、流量复制等能力,被ServiceMesh非侵入的方式实现。此外,ServiceMesh还提供了访问控制、认证授权等功能,进一步减轻了用户服务的开发成本。 阿里云提供的服务网格是基于容器服务之上的托管版ServiceMesh,在提供完整的ServiceMesh能力的同时(ASM还在底层横向拉通了阿里云云原生的各种能力,不在本篇讲述范围),免去了用户搭建和运维ServiceMesh平台istio的繁琐工作。本篇将分享如何将我们自己的GRPC服务,托管到阿里云的服务网格中。 1. grpc服务 grpc协议相比http而言,既具备http跨操作系统和编程语言的好处,又提供了基于流的通信优势。而且,grpc逐渐成为工业界的标准

.net core微服务——gRPC(下)

心不动则不痛 提交于 2020-08-13 05:28:26
序 上一篇博客把grpc的概念说了个大概,介绍了proto的数据类型,基本语法,也写了个小demo,是不是没那么难? 今天要从理论到实际,写两个微服务,并利用grpc完成两者之间的通信。只是作为demo写的话会十分简单,毕竟理解为主。 服务端 首先要拿出之前写好的proto文件,然后修改两个属性: Build Action => Protobuf compiler gRpc Stub Classes => Server only 如图: 当然也可以在项目文件里看到它: 然后重新生成项目 ,会自动根据proto文件生成server端的文件。 引用 经过刚才,已经生成了对应的服务,我们可以直接在代码里调用。 这是之前写好的proto: syntax = " proto3 " ; option csharp_namespace = " gRPCApiDemo.Protos " ; package Demo; service MyMath{ rpc MathAdd (AddRequest) returns (AddRespones) {} } message AddRequest{ int32 a = 1 ; int32 b = 2 ; } message AddRespones{ int32 a = 1 ; } 生成以后,会有一个MyMath.MyMathBase这个类,我们来继承一下:

Go语言学习教程

六月ゝ 毕业季﹏ 提交于 2020-08-13 03:07:15
我关于Go语言的博客原本发布于我的个人网站: wwww.liwenzhou.com 。 但是被某些人抄怕了,没办法只好搬运到博客园。 我的Go语言学习之路 《Go语言学习之路》博客目录。 2015年底我因为工作原因接触到了Go语言,那时网上关于Go语言的学习资料不多,好在一直坚持到现在。我把自己学习Go语言的笔记都整理到这里,希望能给Go社区的发展出一点绵薄之力,帮助更多的人加入Gopher大家庭。 Go语言介绍 为什么你应该学习Go语言? → B站视频链接 开发环境准备 从零开始搭建Go语言开发环境 → B站视频链接 VS Code配置Go语言开发环境 → B站视频链接 Go语言基础 Go语言基础之变量和常量 → B站视频链接 Go语言基础之基本数据类型 → B站视频链接 Go语言基础之运算符 → B站视频链接 Go语言基础之流程控制 → B站视频链接 Go语言基础之数组 → B站视频链接 Go语言基础之切片 → B站视频链接 Go语言基础之map → B站视频链接 Go语言基础之函数 B站视频01函数部分 B站视频02匿名函数和闭包部分 Go语言基础之指针 → B站视频链接 Go语言基础之结构体 B站视频01自定义类型和类型别名 B站视频02结构体定义与实例化 B站视频03方法和接收者 B站视频04结构体嵌套 B站视频05结构体字段可见性和JSON

go语言编译安装protobuf : protoc-gen-go: program not found or is not executable

烂漫一生 提交于 2020-08-12 05:53:46
引用文献:https://studygolang.com/articles/10473 https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ 一、Protobuf简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。 二、在安装proto-gen-go时,先配置环境再下载,不然可执行程序protoc下载不下来;就会如下错误: protoc-gen-go: program not found or is not executable 1.gedit ~/.bashrc export PATH = "PATH:$GOPATH/bin" ($GOPATH: /opt/gopath) 2.source ~/.bashrc 3. go

编译protobuf文件为Java文件

不想你离开。 提交于 2020-08-12 02:29:07
首先上github下安装压缩包: https://github.com/google/protobuf/release ,安装好 安装成功,执行protoc --version 然后在后缀为proto的文件目录下面执行 protoc --java_out=./ 1.proto 在当前路径下面看到生成的文件 来源: oschina 链接: https://my.oschina.net/u/1156250/blog/4423712

听说go语言越来越火了?那么请收下这一份go语言书单吧!

僤鯓⒐⒋嵵緔 提交于 2020-08-12 02:26:08
关注公众号【程序员书单】后回复“book”即可领取30+精品免费电子书 ​ Go 是一种简单、小巧、令人愉悦的语言。它也有一些犄角旮旯,但绝大部分是经过精心设计的。它的学习速度令人难以置信,并且规避了其他语言中一些不那么广为人知的特性。 现如今越来越多的互联网公司开始使用go语言,有的初创公司开始使用go语言打造基础架构,而知乎这样的公司也基本上踏上了go语言的路子,或许,未来的互联网公司会越来越多地使用golang,那么,你想学习一下这门未来的语言么,今天就来推荐一份go语言书单吧。 go语言系列书单 ​ Go语言核心编程 Go语言的核心语言特性包括:类型系统、接口、并发。这三部分是Go语言精华、优美、也是重要的特征,本书紧密围绕这三个主题展开。以“类型系统”为例,Go语言中的类型有:简单类型、复合类型、命名类型、未命名类型、静态类型、动态类型、底层类型、接口类型、具体类型以及类型字面量等诸多概念,这些概念在其他Go类图书里面鲜有介绍,本书试图帮助读者梳理清楚这些类型的含义,建立概念,认清类型本质并学会正确使用; 在接口章节,不单介绍了接口概念和用法,还深入分析了接口的机制,使读者对Go语言非侵入式的接口有更深入的理解;在并发编程章节,书中给出了5个并发编程范式,并用图描述并发程序的模型,通俗易懂,这也是本书读特点。 此外本书还拿出一整章内容介绍Go语言编程过程中可能遇到的陷阱

HBase自定义Comparator过滤数值

会有一股神秘感。 提交于 2020-08-12 00:49:26
简介 要自定义HBase的Comparator,需要使用到protoc,可以在下面的链接下载: protoc新版本下载 protoc2.5版本下载 完整的工程你可以在下面的链接下载: HBase自定义Comparator实例 proto文件格式 enum Sex{ MALE = 1; FEMALE = 2; } message Bean { required int32 id = 1; required string name = 2; optional Sex sex = 3[defalut = MALE]; } enum关键字定义一个枚举类型,message定义一个类。 required: 必须包含该字段一次 optional: 包含该字段零次或一次 repeated: 该字段可以重复任意多次 字段定义说明: optional Sex sex = 3 [defalut = MALE]; 字段规则 字段类型 字段名称 唯一标识符 可选的选项:默认值 数据默认值: int: 0 string: 空字符 bool: false enum: 枚举的第一项 定义一个proto文件 syntax = "proto2"; option java_package = "org.curitis.comparator"; option java_outer_classname =

听说go语言越来越火了?那么请收下这一份go语言书单吧!

北慕城南 提交于 2020-08-11 20:46:34
关注公众号【程序员书单】后回复“book”即可领取30+精品免费电子书 ​ Go 是一种简单、小巧、令人愉悦的语言。它也有一些犄角旮旯,但绝大部分是经过精心设计的。它的学习速度令人难以置信,并且规避了其他语言中一些不那么广为人知的特性。 现如今越来越多的互联网公司开始使用go语言,有的初创公司开始使用go语言打造基础架构,而知乎这样的公司也基本上踏上了go语言的路子,或许,未来的互联网公司会越来越多地使用golang,那么,你想学习一下这门未来的语言么,今天就来推荐一份go语言书单吧。 go语言系列书单 ​ Go语言核心编程 Go语言的核心语言特性包括:类型系统、接口、并发。这三部分是Go语言精华、优美、也是重要的特征,本书紧密围绕这三个主题展开。以“类型系统”为例,Go语言中的类型有:简单类型、复合类型、命名类型、未命名类型、静态类型、动态类型、底层类型、接口类型、具体类型以及类型字面量等诸多概念,这些概念在其他Go类图书里面鲜有介绍,本书试图帮助读者梳理清楚这些类型的含义,建立概念,认清类型本质并学会正确使用; 在接口章节,不单介绍了接口概念和用法,还深入分析了接口的机制,使读者对Go语言非侵入式的接口有更深入的理解;在并发编程章节,书中给出了5个并发编程范式,并用图描述并发程序的模型,通俗易懂,这也是本书读特点。 此外本书还拿出一整章内容介绍Go语言编程过程中可能遇到的陷阱