Protocol Buffers

使用命名管道承载gRPC

那年仲夏 提交于 2020-08-11 17:36:51
最近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

Java架构师面试之Netty面试专题及答案(共10题,含详细解答)

对着背影说爱祢 提交于 2020-08-11 14:46:22
【 Java架构师面试网 】收集整理了几乎整个架构师学习途中会遇到的面试题,希望大家都能早日圆自己的架构师梦~ 公众号: Java架构师面试网 ,关注回复“ 资料 ”即可领取精美整理的面试资料一份哦~ 1.BIO、 NIO 和 AIO 的区别? BIO :一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。 伪异步 IO :将请求连接放入线程池,一对多,但线程还是很宝贵的资源。 NIO :一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求时才启动一个线程进行处理。 AIO :一个有效请求一个线程,客户端的 I/O 请求都是由 OS 先完成了再通知服务器应用去启动线程进行处理, BIO是面向流的,NIO 是面向缓冲区的;BIO 的各种流是阻塞的。而NIO是非阻塞的;BIO的 Stream 是单向的,而NIO的channel 是双向的。 NIO 的特点:事件驱动模型、单线程处理多任务、非阻塞 I/O, I/O 读写不再阻塞,而是返回 0、基于 block 的传输比基于流的传输更高效、更高级的 IO 函数 zero-copy、 IO 多路复用大大提高了 Java 网络应用的可伸缩性和实用性。基于 Reactor 线程模型。 在 Reactor 模式中,事件分发器等待某个事件或者可应用或个操作的状态发生

构建PHP带grpc扩展的docker

北城余情 提交于 2020-08-11 14:18:54
FROM library/alpine RUN apk add gcc autoconf nginx php7-fpm php7-mcrypt php7-pdo php7-pdo_pgsql php7-pear php7-redis php7-dev php7-mbstring php7-bcmath php7-json php7-opcache php7-curl php7-xml php7-simplexml php7-dom php7-tokenizer php7-openssl php7-fileinfo php7-gmp php7-gd php7-zip zip composer git RUN apk add make g++ m4 automake libtool linux-headers RUN pecl install protobuf RUN pecl install grpc Dockerfile 要这样写,在php.ini里要加 extension=grpc extension=protobuf composer.json里要加 "require": { "php": "^7.2.5", "grpc/grpc": "^v1.3.0", "google/protobuf": "^v3.3.0", }, 你们都懂得 来源: oschina 链接: https:

Lua差分系统

。_饼干妹妹 提交于 2020-08-10 00:22:02
https://gitee.com/liyonghelpme_admin/LuaDiff Lua差分系统设计 1:通过Protobuf 的 optional 方式,来序列化和反序列化差分数据 2:通过Lua自身的Metatable 来支持 标记数据变动 实现差分数据 3:每帧同步 差分序列化后的 PB数据 4:当初次同步的时候,同步完整的PB序列化数据 实现: delta.proto 实现pb 协议 pb.c 为 protobuf 的c部分实现 Buffer.lua protobuf的lua部分实现 GenLuaPB.py 将protobuf生成对应的 lua序列化 反序列化代码 DeltaStateTable.lua 实现lua层的差分 结构 API: PB的序列化 反序列化 Lib.GetSerialize(data, 协议) Lib.DeSerialize(data, 协议) 获取非嵌套 差分数据 Lib:GetDelta(tb) 获取嵌套差分数据 Lib:GetDeltaDeep(tb) 来源: oschina 链接: https://my.oschina.net/u/186074/blog/4293011

第三十六节:gRPC身份认证和授权(JWT模式 和 集成IDS4)

可紊 提交于 2020-08-09 21:22:24
一. 再谈认证和授权 (详见:https://www.cnblogs.com/yaopengfei/p/13141548.html) 1.认证   是验证身份的一种机制,比如用户名和密码登录,这就是一种认证机制,再比如现在比较流行jwt校验,通过用户名和密码访问接口,验证通过获取token的过程,也叫做认证。 2.授权   是确定你是否有权限访问系统的某些资源. 比如用户登录成功进入系统以后,要进行增加博客这个功能,系统要判断一下该用户是否有权限访问这个增加博客的功能,这个过程就叫做授权。 再比如某个客户端app携带token访问服务端某个api接口,这个时候服务端要校验一下该token是否有权限访问这个api接口,这个过程也是授权。 3.Core Mvc中认证和授权   在Core Mvc中,UseAuthentication()代表认证,UseAuthorization()代表授权, 需要注意的是这里的认证和授权 与 上述广义上的理解有点差异,在Core MVC中,UseAuthentication和UseAuthorization一般 是成对出现,且UseAuthentication认证需要写在上面,且需要在对应的api接口上加[Authorize],代表该接口需要校验, 这样当该接口被请求的时候,才会走UseAuthentication中的认证逻辑。 (PS:

在 Google,Java 程序员的一天是如何工作的

落花浮王杯 提交于 2020-08-09 20:15:04
1. 严格遵守“Google Style”,这份“Google Style”会有详细的文档清楚地告诉你如何编码(一开始你会觉得很痛苦,但是以后你会享受它带来的好处) 2. 非常严格的代码审查(同样一开始会觉得很烦人,但以后你会感激它的),它能确保代码稳定的运行。(我从其他公司小伙伴那听闻Google对代码要求让人汗颜) 3. 使用内部定制化的Eclipse IDE(真正的勇士在用VIM) 4. 自定义一切(构建系统、测试系统、java、版本控制、问题追踪系统、OS、等等),很多外面的东西放在Google的规模基本不能用 5. Google Collection(你不需要“new ArrayList()”,取而代之的是“Lists.newArrayList()”或者类似的操作) 6. 巨大的Java文件(我曾经见过一个.java文件超过9万行),通常这是自动生成的代码 7. 忘记标准的序列化相关的东西,欢迎使用protocol buffers,以Google的量级来说这很重要 8. 有各种机会来提升你的技能(技术讲座、代码实验室、专题讨论等等) 9. 大量的会议 10. 可升降的桌子 11. 两个大的显示器 12. 每周五的免费啤酒 13. 附近的小厨房能填充肚子 14. Slides 和 firepoles (就是那个弯弯的东东)能直达自助餐厅,因此你可以吃的更胖 15.

NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成

半世苍凉 提交于 2020-08-09 12:24:23
本篇内容属于非实用性(拿来即用)介绍,如对框架设计没兴趣的朋友,请略过。 快一个月没有写博文了,最近忙着两件事; 一:阅读刘墉先生的《说话的魅力》,以一种微妙的,你我大家都会经常遇见的事物,来建议说话的“艺术和魅力”,对于我们从事软件开发、不太善于沟通和表达的朋友来说,也算是一项软技能了,推荐喜欢阅读的朋友有时间阅读,给你不一样的阅读体验。 二:编写基于Net Core的Rpc框架。之前有朋友说如何将Rpc等整个体系集成到dotnet框架中,我想这篇博文会给你一个答案。 哦,对了,我不建议直接将代码直接复制下来然后去运行的朋友,因为这样你达不到学习的目的,也违背了笔者的初衷。谢谢理解。 一:简单回顾一下之前的介绍 继续贴上之前的一张图片 根据上面图,服务化原理可以分为3步: 服务端启动并且向注册中心发送服务信息,注册中心收到后会定时监控服务状态(常见心跳检测); 客户端需要开始调用服务的时候,首先去注册中心获取服务信息; 客户端创建远程调用连接,连接后服务端返回处理信息;   第3步又可以细分,下面说说远程过程调用的原理: 目标:客户端怎么调用远程机器上的公开方法 服务发现,向注册中心获取服务(这里需要做的有很多:拿到多个服务时需要做负载均衡,同机房过滤、版本过滤、服务路由过滤、统一网关等); 客户端发起调用,将需要调用的服务、方法、参数进行组装; 序列化编码组装的消息

.NETCore微服务探寻(四)

▼魔方 西西 提交于 2020-08-09 08:42:32
前言 一直以来对于.NETCore微服务相关的技术栈都处于一个浅尝辄止的了解阶段,在现实工作中也对于微服务也一直没有使用的业务环境,所以一直也没有整合过一个完整的基于.NETCore技术栈的微服务项目。正好由于最近刚好辞职,有了时间可以写写自己感兴趣的东西,所以在此想把自己了解的微服务相关的概念和技术框架使用实现记录在一个完整的工程中,由于本人技术有限,所以错误的地方希望大家指出。 目录 .NETCore微服务探寻(一) - 网关 .NETCore微服务探寻(二) - 认证与授权 .NETCore微服务探寻(三) - 分布式日志 项目地址: https://github.com/yingpanwang/fordotnet/tree/dev 什么是RPC RPC(Remote Procedure Call)简单来说就是指像调用本地方法一样调用远程方法,常用于分布式,微服务中的组件中或服务中的通讯。实现一个RPC框架主要就是着重如何实现"像调用本地方法一样调用远程方法",其中就包括了如何处理网络请求,负载均衡,传输协议等问题。 为什么要RPC RPC是一个技术名词,实现的方式是有多种的,其中包括了复杂的实现,传输协议,通讯协议,序列化协议的。在分布式应用,微服务兴起的时代,服务之间的高效通讯是尤为重要的,如果服务间的通讯只是简单通过http访问接口而没有一个统一的管理与治理的话

.NETCore微服务探寻(四)

拥有回忆 提交于 2020-08-09 08:36:40
前言 一直以来对于.NETCore微服务相关的技术栈都处于一个浅尝辄止的了解阶段,在现实工作中也对于微服务也一直没有使用的业务环境,所以一直也没有整合过一个完整的基于.NETCore技术栈的微服务项目。正好由于最近刚好辞职,有了时间可以写写自己感兴趣的东西,所以在此想把自己了解的微服务相关的概念和技术框架使用实现记录在一个完整的工程中,由于本人技术有限,所以错误的地方希望大家指出。 目录 .NETCore微服务探寻(一) - 网关 .NETCore微服务探寻(二) - 认证与授权 .NETCore微服务探寻(三) - 分布式日志 项目地址: https://github.com/yingpanwang/fordotnet/tree/dev 什么是RPC RPC(Remote Procedure Call)简单来说就是指像调用本地方法一样调用远程方法,常用于分布式,微服务中的组件中或服务中的通讯。实现一个RPC框架主要就是着重如何实现"像调用本地方法一样调用远程方法",其中就包括了如何处理网络请求,负载均衡,传输协议等问题。 为什么要RPC RPC是一个技术名词,实现的方式是有多种的,其中包括了复杂的实现,传输协议,通讯协议,序列化协议的。在分布式应用,微服务兴起的时代,服务之间的高效通讯是尤为重要的,如果服务间的通讯只是简单通过http访问接口而没有一个统一的管理与治理的话

MNN编译android

末鹿安然 提交于 2020-08-07 10:55:45
MNN下交叉编译 参考: https://blog.csdn.net/Simplify_boy/article/details/105410235 https://blog.csdn.net/qq_37643960/article/details/99775939 Could NOT find Protobuf (missing: Protobuf_LIBRARIES Protobuf_INCLUDE_DIR) MNN CMakeLists.txt CMakelist.txt 设置MNN_ARM82为ON (低精度需要的动态库) ndk vim ~/.bashrc 添加android-NDK export ANDROID_NDK=/$(path)/android-ndk-r21 $(path)为自己的路径 source ~/.bashrc` 编译 cd /path/to/MNN ./schema/generate.sh cd MNN/project/android mkdir build_64 && cd build_64 && ../build_64.sh make -j4 使用动态库 代码设置 // 创建session需要的配置 MNN::ScheduleConfig config; // 选择Backend config.type = MNN_FORWARD_CPU; //