Protocol Buffers

服务器结构总结

∥☆過路亽.° 提交于 2020-03-09 11:16:13
数据库设计 erlang + mysql5.6 设计 网络设计 erlang +cowboy + ranch + http/https设计 逻辑设计 erlang + 代码结构 + 断线重连 日志设计 日志保存 + 数据库日志保存 协议设计 erlang + protobuf/自定义协议格式 配置导表设计 excle + php 导报 协议生成设计 php 导出协议/protobuf 导出协议+ 序列化/反序列化 代码编译 编译成beam文件 服务器运维设计 linux + shell 脚本 + 热更新 + 代码同步 充值付费设计 sdb对接 + php服务器验证+ 服务器验证+ 发货 + 充值记录 分布式跨服机制 erlang + 分布式跨服机制 机器人机制/压测 tsung + robo机制验证 合服机制 数据库的简单合并(注意key值得合并即可,以及有些数据值得删除操作) 脚本的数据库合并(用脚本的方式避免各个key值得重复,需要每个功能都写合服脚本) 来源: oschina 链接: https://my.oschina.net/gaoxepro/blog/3190364

python与golang通过grpc进行通信

巧了我就是萌 提交于 2020-03-08 14:36:10
gRPC grpc的优势: gRPC通过protobuf来定义接口,从而有更加严格的接口约束条件。2. 同时,通过protobuf可以将数据序列化为二进制编码,这会大幅减少需要传输的数据量,从而大幅提高性能。 gRPC可以方便地支持流式通信 以下将通过例子实现go和python之间的gRPC,实现简单地传输一个字符串 python:3.5.9 golang:1.13.4 protobuf:3.11.3 proto定义规则 ProtoBuf3数据结构定义 message 消息结构类型名{ 字段修饰符 数据类型 字段名 = 字段编码值; } 字段修饰符 singular 默认值,标识成员只有0个或者1个 repeated 可以重复0次或多次 数据类型 字段编码值 用于通信双方识别对方的字段,通过同一份协议的结构体每个编码值对应的数据字段是一样的。取值范围是 1 ~ 2^32 举例 message String{ string query = 1; int32 page_number = 2; // Which page number do we want int32 result_per_page = 3; // Number of results to return per page enum Corpus { UNIVERSAL = 0; WEB = 1; IMAGES = 2;

hadoop-2.6.0-cdh5.16.2编译

纵饮孤独 提交于 2020-03-07 21:40:55
centos7.4 新部署hadoop-2.6.0-cdh5.16.2集群,启动有警告,需要本地的hadoop库 [hadoop@node131 sbin]$ start-all.sh 20/03/07 18:27:03 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 根据网上命令确认无本地库 [hadoop@node131 sbin]$ hadoop checknative -a 20/03/07 18:36:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Native library checking: hadoop: false zlib: false snappy: false lz4: false bzip2: false openssl: false 20/03/07 18:36:04 INFO util.ExitUtil: Exiting

Netty面试题(2020最新版)

不羁的心 提交于 2020-03-06 20:53:32
1.Netty 是什么? Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活。 2.Netty 的特点是什么? 高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开发的网络通信框架,对比于 BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。 传输快:Netty 的传输依赖于零拷贝特性,尽量减少不必要的内存拷贝,实现了更高效率的传输。 封装好:Netty 封装了 NIO 操作的很多细节,提供了易于使用调用接口。 3.Netty 的优势有哪些? 使用简单:封装了 NIO 的很多细节,使用更简单。 功能强大:预置了多种编解码功能,支持多种主流协议。 定制能力强:可以通过 ChannelHandler 对通信框架进行灵活地扩展。 性能高:通过与其他业界主流的 NIO 框架对比,Netty 的综合性能最优。 稳定:Netty 修复了已经发现的所有 NIO 的 bug,让开发人员可以专注于业务本身。 社区活跃:Netty 是活跃的开源项目,版本迭代周期短,bug 修复速度快。 4.Netty 的应用场景有哪些? 典型的应用有:阿里分布式服务框架 Dubbo,默认使用 Netty 作为基础通信组件,还有 RocketMQ

gRPC Windows编译应用

坚强是说给别人听的谎言 提交于 2020-03-02 20:00:03
gRPC Windows编译 从github上clone出来后进行cmake的编译,参考上面的文档,需要注意的点: 必须安装所有的依赖,包括Perl,Go,YASM,Git,CMake 不要使用--recursive来递归clone,因为墙的原因会失败 所以子模块的下载请使用:git submodule update --init 使用cmake生成VS solution进行构建 安装请在VS中生成INSTALL项目即可,默认安装到C盘的Program Files目录 Q:奇怪的是grpc.lib竟然没有安装到目录下,不知道为什么? 所以我只能手动将Release目录下的lib文件都拷贝到安装目录下了 example的使用 依赖与库 需要使用grpc的include,在安装目录下有 C:\Program Files %28x86%29\grpc\include 需要使用protobuf的include,在安装目录下有 依赖库的路径:C:\Program Files %28x86%29\grpc\lib 依赖的库有:libprotobuf.lib;grpc++_unsecure.lib;grpc_unsecure.lib;gpr.lib;zlibstatic.lib;ws2_32.lib libprotobuf.lib:必须的库 grpc++.lib: 使用SSL加密的库,C++需要

golang 第三方包的使用总结

蹲街弑〆低调 提交于 2020-02-29 05:59:47
golang 第三方包的安装的方法: 1. go get 安装 # 比如要安装 "github.com/gin-gonic/gin" $ go get github.com/gin-gonic/gin 注意:执行go get 命令需要先安装git命令,并配置git全局变量。 2. 源码包安装 由于国内网络问题,很多时候go get命令并不能安装,所以就需要手动下载源码包,然后拷贝到$GOPATH/sr/ 目录下 # 比如要安装"github.com/golang/protobuf/proto" # 去github.com/golang/protobuf下载源码包, # 拷贝到 $GOPATH/src/github.com/golang/protobuf $ cd $GOPATH/src/github.com/golang/protobuf $ go install 注意:第三包安装完成后,应用程序导入包时还是使用的源码,而非 $GOPATH/pkg/ 下的 .a文件。如何能像标准包fmt一样直接使用pkg,还需进一步研究。 注意:上面直接写的$GOPATH,在 GOPATH 只有一个目录的时候可以这样写,按tab键就会自动切换为实际目录,如果 GOPATH 配置了多个目录则要输入具体的目录。 golang 使用第三方包 使用方式 在应用程序中直接impor即可 // 比如要使用

手把手教你使用ProtoBuf,通过gRPC服务在Android上进行网络请求

时光怂恿深爱的人放手 提交于 2020-02-29 03:51:13
ProtoBuf-gRPC-Android 教你如何使用ProtoBuf,通过gRPC服务在android上进行网络请求。 如果你对此感兴趣,那么请点击 项目地址 ,一睹为快把! 简介 ProtoBuf > google公司发布的一套开源编码规则,基于二进制流的序列化传输,可以转换成多种编程语言,几乎涵盖了市面上所有的主流编程语言,是目前公认的非常高效的序列化技术。 ProtoBuf的Github主页: https://github.com/protocolbuffers/protobuf gRPC >gRPC是一个高性能、开源和通用的RPC框架,面向移动和HTTP/2设计。目前提供C、Java和Go语言版本,分别是grpc、grpc-java、grpc-go。gRPC基于HTTP/2标准设计,带来诸如双向流、流控、头部压缩、单TCP连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。gRPC由google开发,是一款语言中立、平台中立、开源的远程过程调用系统。 gRPC(Java)的Github主页: https://github.com/grpc/grpc-java 为什么要使用ProtoBuf和gRPC > 简而言之,ProtoBuf就好比信息传输的媒介,类似我们常用的json,而grpc则是传输他们的通道,类似我们常用的socket。

无缝衔接 gRPC 与 dubbo-go

寵の児 提交于 2020-02-26 09:53:22
最近我们 dubbo-go 社区里面,呼声很大的一个 feature 就是对 gRPC 的支持。在某位大佬的不懈努力之下,终于弄出来了。 今天我就给大家分析一下大佬是怎么连接 dubbo-go 和 gRPC 。 gRPC 先来简单介绍一下 gRPC 。它是 Google 推出来的一个 RPC 框架。gRPC是通过 IDL ( Interface Definition Language )——接口定义语言——编译成不同语言的客户端来实现的。可以说是RPC理论的一个非常非常标准的实现。 因而 gRPC 天然就支持多语言。这几年,它几乎成为了跨语言 RPC 框架的标准实现方式了,很多优秀的rpc框架,如 Spring Cloud 和 dubbo ,都支持 gRPC 。 server 端 在 Go 里面,server 端的用法是: 它的关键部分是: s := grpc.NewServer() 和 pb.RegisterGreeterServer(s, &server{}) 两个步骤。第一个步骤很容易,唯独第二个步骤 RegisterGreeterServer 有点麻烦。为什么呢? 因为 pb.RegisterGreeterServer(s, &server{}) 这个方法是通过用户定义的 protobuf 编译出来的。 好在,这个编译出来的方法,本质上是: 也就是说,如果我们在 dubbo

Skywalking数据采集与收集源码分析

荒凉一梦 提交于 2020-02-26 03:30:08
Skywalking数据采集与收集源码分析 skywalking作为一个分布式APM(应用性能管理)系统,目前被广泛使用在各种系统中。 skywalking官网: https://skywalking.apache.org/ skywalking的架构图如下: Skywalking的agent负责采集数据,发送到collector,collector聚合,并且存储这些数据,且提供了一个简洁使用的UI端,可共我们查看监控的指标。 下面我们来开始分析skywalking的源码。 下载源码并构建 因为skywalking为了实现高性能通信,采用的是grpc的方式来实现服务器与客户端的数据传输的,所以导入之后我们需要稍微做一些事情,我们可以参考 docs/en/guides/How-to-build.md 这篇文档来构建。 打包构建 我们可以在github上面将skywalking源码fork一份,然后下载到自己的本地。 // 直接 git clone --recurse-submodules https://github.com/apache/skywalking.git // 或者 git clone https://github.com/apache/skywalking.git cd skywalking/ git submodule init git submodule

protobufjs 简单使用

喜夏-厌秋 提交于 2020-02-26 02:28:18
安装 npm 官网 其他使用方法可参考 vue 中使用 protobuf 的过程记录 npm i protobufjs -D 添加两个proto文件 User.proto syntax = "proto3"; package login; message PBUser { string uid = 1; string pwd = 2; int64 age = 3; } Login.proto syntax = "proto3"; package login; import "./User.proto"; message LoginReq { PBUser user = 1; } message LoginRes { int64 code = 1; } package.json 添加脚本, 将proto文件导出为js文件 "proto": "npx pbjs -t json-module -w commonjs -o api/proto/proto.js api/proto/*.proto" 引入导出的js let protoRoot = require("./proto/proto.js"); let loginReqObj = protoRoot.lookup('login').LoginReq.create(); let user = protoRoot.lookup(