thrift

序列化和反序列化

我怕爱的太早我们不能终老 提交于 2020-02-06 00:25:59
1, 摘要   序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中;另一方面,它们会以其他更容易理解的概念出现,例如加密、持久化。然而,序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式、大数据量系统设计里面更为显著。恰当的序列化协议不仅可以提高系统的通用性、强健性、安全性、优化系统性能,而且会让系统更加易于调试、便于扩展。本文从多个角度去分析和讲解“序列化和反序列化”,并对比了当前流行的几种序列化协议,期望对读者做序列化选型有所帮助。   简介   文章作者服务于美团推荐与个性化组,该组致力于为美团用户提供每天billion级别的高质量个性化推荐以及排序服务。从Terabyte级别的用户行为数据,到Gigabyte级别的Deal/Poi数据;从对实时性要求毫秒以内的用户实时地理位置数据,到定期后台job数据,推荐与重排序系统需要多种类型的数据服务。推荐与重排序系统客户包括各种内部服务、美团客户端、美团网站。为了提供高质量的数据服务,为了实现与上下游各系统进行良好的对接,序列化和反序列化的选型往往是我们做系统设计的一个重要考虑因素。   本文内容按如下方式组织: 第一部分给出了序列化和反序列化的定义,以及其在通讯协议中所处的位置。 第二部分从使用者的角度探讨了序列化协议的一些特性。

thrift简单示例 (基于C++)

旧时模样 提交于 2020-01-27 02:43:37
这个thrift的简单示例, 来源于官网 (http://thrift.apache.org/tutorial/cpp), 因为我觉得官网的例子已经很简单了, 所以没有写新的示例, 关于安装的教程, 可以参考https://www.cnblogs.com/albizzia/p/10838646.html, 关于thrift文件的语法, 可以参考: https://www.cnblogs.com/albizzia/p/10838646.html. thrift文件 首先给出shared.thrift文件的定义: /** * 这个Thrift文件包含一些共享定义 */ namespace cpp shared struct SharedStruct { 1: i32 key 2: string value } service SharedService { SharedStruct getStruct(1: i32 key) } 然后给出tutorial.thrift的定义: /** * Thrift引用其他thrift文件, 这些文件可以从当前目录中找到, 或者使用-I的编译器参数指示. * 引入的thrift文件中的对象, 使用被引入thrift文件的名字作为前缀, 例如shared.SharedStruct. */include "shared.thrift"namespace

Thrift框架使用C++的一个demo

白昼怎懂夜的黑 提交于 2020-01-25 00:06:24
Thrift编译器会根据选择的目标语言为server产生服务接口代码,为client产生stubs,参数可以是基本类型和结构体。 代码框架用的Thrift,为了了解结构,学习写了一个thrift的Demo。虽然看起来很简单,确实废了不少功夫。下面列下我的步骤和我遇到的问题。 大家也可以参考这个博客:http://blog.csdn.net/hbuxiaoshe/article/details/6558391/ 我这边多出来的只有自己遇到的问题总结。 例子描述:我们将学生信息(学号,姓名,性别,年龄)由客户端发送到服务端。 一 编写thrift文件 学生信息使用thrift的struct即可,为了达到通信目的,我们需要写一个service。注意改出service的名字为Serv,方法名字为put。 所以最后写成的student.thrift文件内容如下: struct Student{ 1: i32 sno, 2: string sname, 3: bool ssex, 4: i16 sage, } service Serv{ void put(1: Student s), } 二 生成cpp文件 thrift可以简易生成不同语言的代码,c++ python java等,此处我们只用--gen cpp第一个命令即可 thrift -r --gen cpp student.thrift

Thrift简介

早过忘川 提交于 2020-01-24 14:51:50
Thrift简介 学习了:https://www.cnblogs.com/cyfonly/p/6059374.html Java版的; https://www.cnblogs.com/enternal/p/5275455.html C#版的; http://thrift.apache.org/ 官网 https://baike.baidu.com/item/thrift/3879058?fr=aladdin 百度百科 百度翻译的有些句子绕口拗口: Thrift 最初是由 Facebook 开发用做系统内各语言之间的 RPC 通信的一个可扩展且跨语言的软件框架,它结合了功能强大的软件堆栈和代码生成引擎,允许定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。 自己整理一下: Thrift是一个可扩展且跨语言的RPC软件框架, 它结合了软件堆栈和代码生成引擎。 在文件中定义数据类型和服务接口, 该文件作为输入, 编译生成RPC客户端和服务器端代码。 来源: https://www.cnblogs.com/stono/p/8136238.html

Thrift功能简介

↘锁芯ラ 提交于 2020-01-24 07:04:09
什么是Thrift? Thrift是一个可用于扩展跨语言服务开发的软件框架。 利用Thrift框架,我们可以构建出一个在多种语言之间相互通信的项目结构。例如:C ++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C# Cocoa,JavaScript,Node.js,Smalltalk,OCaml和Delphi等语言。 Thrift功能简介 在使用Thrift时,我们首先需要编写一个thrift文件。 这个文件是由Thrift类型和服务定义的接口相关的信息。 而在该文件中定义的接口可以通过任意语言类型作为服务端来具体实现。 此外,在客户端也可以使用任意的语言来进行接口的调用。 使用流程 Step1:安装Thrift环境。 Step2:编写Thrift文件来定义接口信息。 Step3:用thrift编译Thrift文件来生成Server端依赖的代码文件夹。 Step4:在生成的Server端文件夹中创建定义接口的具体实现函数。 Step5:启动Server。 Step6:编写客户端代码并进行测试。 来源: CSDN 作者: eddieHoo 链接: https://blog.csdn.net/u011323949/article/details/104043174

用thrift实现客户端和服务端的C++代码 - 金美光的小屋 - 博客频道 - CSDN.NET

删除回忆录丶 提交于 2020-01-23 21:33:42
用thrift实现客户端和服务端的C++代码 - 金美光的小屋 - 博客频道 - CSDN.NET 用thrift实现客户端和服务端的C++代码 分类: thrift 2011-03-25 17:12 1058人阅读 评论 (0) 收藏 举报 Getting started The first thing you need to know is that the C++ code generated by Thrift compiles only on Unix based systems, although some success has been reported using Cygwin on Win32 in ThriftInstallationWin32 . Requirements Make sure that your system meets the requirements as noted in ThriftRequirements Thrift library files Thrift header files. Installing the Thrift library Installing the Thrift library is trivial to link with the generated code. 1. Download a

Spark SQL Thrift Server 配置 Kerberos身份认证和权限管理

血红的双手。 提交于 2020-01-21 21:55:28
  转载请注明出处: http://www.cnblogs.com/xiaodf/   之前的博客介绍了通过Kerberos + Sentry的方式实现了hive server2的身份认证和权限管理功能,本文主要介绍Spark SQL JDBC方式操作Hive库时的身份认证和权限管理实现。  ThriftServer是一个JDBC/ODBC接口,用户可以通过JDBC/ODBC连接ThriftServer来访问SparkSQL的数据。ThriftServer在启动的时候,会启动了一个sparkSQL的应用程序,而通过JDBC/ODBC连接进来的客户端共同分享这个sparkSQL应用程序的资源,也就是说不同的用户之间可以共享数据;ThriftServer启动时还开启一个侦听器,等待JDBC客户端的连接和提交查询。所以,在配置ThriftServer的时候,至少要配置ThriftServer的主机名和端口,如果要使用hive数据的话,还要提供hive metastore的uris。 前提:   本文是在以下几个部署前提下进行的实验:   (1)CDH 开启了Kerberos身份认证,并安装了Sentry;   (2)Hive权限通过Sentry服务控制;   (3)HDFS开启了HDFS ACL与Sentry的权限同步功能,通过sql语句更改Hive表的权限,会同步到相应的HDFS文件。

thrift介绍

不羁的心 提交于 2020-01-18 18:55:29
一 描述thrift(个人英语飘过六级,翻译的肯定不是很准确,请谅解。)      Apache thrift框架,旨在处理扩语言的开发服务,它结合代码生产引擎的软件栈,构建高效地和无缝地运行在C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml和Delphi等语言中的服务。 二 文件说明和使用方式(thrift通过一个中间语言IDL(接口定义语言)来定义RPC的数据类型和接口)   我们需要定义一个thrift文件,这个文件是由thrift tpe(相当于实体类,也可以理解为使我们需要进行服务间传递的消息)和Service(这个Service就相当于一个service类,中间有各种方法)构成的接口定义文件。文件中定义的Service将有服务端进行实现,并由客户端进行调用。thrift编辑器将你定义的thrift文件生产为你客户端和服务端使用的资源文件。通过运行 thrift --gen <language> <Thrift filename>来生产资源文件。   --language是你使用的编程语言。   --Thrift filename生产文件的位置 三 协议栈结构 来源: https://www.cnblogs.com

python3访问HBase数据库

风流意气都作罢 提交于 2020-01-17 21:47:17
python3访问HBase数据库 1 介绍 2 启动thrift-server 3 安装thrift-client 3.1 安装依赖 3.2 安装boost 3.3 安装thrift客户端 4 使用python3连接Hbase(hbase-thrift) 5 常用方法介绍 1 介绍 Hbase是用Java写的,它原生地提供了Java接口,对非Java程序人员,它也提供了thrift接口,因此也可以采用其他语言来编写Hbase的客户端,本文即介绍了python通过thrift接口访问HBase数据库的方法。 目前Hbase有两套thrift接口(thrift和thrift2),它们并不兼容。根据官方文档,thrift很可能被抛弃,但网上的文章基本是介绍thrift的,我们这里采用的也是thrift。 software version HBase 1.2.9 Python 3.6.3 Thrift 0.11.0 2 启动thrift-server 要使用Hbase的thrift接口,必须将它的服务启动,启动Hbase的thrift-server进程如下: cd /home/hbase-1.2.9/ ./hbase-daemon.sh start thrift 执行jps命令检查: 34533 ThriftServer thrift默认端口是9090,启动成功后可以查看端口是否起来 3

How to get client's IP in a golang thrift server

北战南征 提交于 2020-01-17 07:47:17
问题 I'm writing a thrift service in golang and I would like to understand how I can get the client's IP address in the handler functions context. Thanks, Love. 回答1: I think you're using this Godoc Thrift library. It would be good to have code snippets in your question; such as type of thrift server , handler definition, etc. As per Thrift Go library doc- func (p *TSocket) Addr() net.Addr Returns the remote address of the socket. So if you have access to TSocket then you can get remote address. 来源