Thrift: Scalable Cross-Language Services Implementation

Slides:



Advertisements
Similar presentations
分享人:張益源. 個人資料介紹 姓名:張益源 畢業:體育系 97 級 專長:田徑、籃球、游泳 任教學校:慈濟大學實驗國民小學 學校職務:體育兼資訊老師.
Advertisements

1 中 间 件 技 术中 间 件 技 术. 2 第 1 章 中间件产生背景及分布式计算环境 主要内容 开放系统 互操作性 中间件.
Web Maple— 云端计 算 数学学院刘海洋 胡婷婷. 需求 什么是 Web Maple ? Maple : “ 数学家的软件 ” 符号和数值计算 动态编程语言 集成编辑环境与图形输出 Web Maple :网页上的数学家 完整的 Maple 功能 云端计算 网页独特的输入输出格式.
姓名:柴伟龙 学号: 指导老师:邹立杰 姓名:柴伟龙 学号: 指导老师:邹立杰 2012 毕业论文 ( 设计 ) 答辩.
Go, Next Java? No, Next 许式伟 Go ,会成为下一个 Java 吗? 不。 Go 不是下一个 Java 。 认为 Go 是下一个 Java ,那是远远低估 Go 的能力。 Go 是下一个 C !
1 网站设计理念 大连理工大学创新实验学院 优秀网站展示 - LAMP 类网站
方振镇 华东架构师大会. SNS 和 Web 游戏基本对比 SNS 游戏后台 Web 游戏后台 如何选择 问答.
高级服务器设计和实现 1 —— 基础与进阶 余锋
应用地球物理卓越人才培养体系构建与实践 吉林大学地球探测科学与技术学院 刘 财 经验交流.
董笑菊 电子信息与电气工程学院 计算机科学与工程系
电子工业出版社《云计算(第二版)》配套课件
DATE: 14/10/2009 陳威宇 格網技術組 雲端運算相關應用 (Based on Hadoop)
毛峰教授 北京师范大学教授,博士生导师 国家社科基金项目专家 北京华文教育顾问
第一章 绪论.
性理釋疑(1—30題) 後學 阮章輝 學講.

云智慧助力在线医疗服务性能优化 —让IT运营更简单 2015年4月 云智慧科技(北京)有限公司.
Web Programming 網際網路程式設計
第五章 網際爭霸戰 ~網站技術與經營模式大進化 靜宜大學資管系 楊子青
2013 澎湖自助旅行講座 澎湖,其實就是一片海洋 主辦:沿著菊島旅行 協辦: 台北澎湖同鄉會、台中澎湖同鄉會、高雄澎湖同鄉會
閔肖蔓 諮商心理師 中央大學專任心理師 交通大學+中原大學兼任心理師 八方文教、杏陵醫學基金會特約講師 精贊學習公司特約講師
Java Programming Hygiene - for DIDC
第2章 计算机网络的协议与体系结构 2.1 计算机网络体系结构的形成 2.2 协议与划分层次 2.3 计算机网络的原理体系结构
操作系统结构.
老師的啟示.
转正述职报告 乐恩公司 史航
潘爱民 北京大学计算机科学技术研究所 组件技术——最后一讲 潘爱民 北京大学计算机科学技术研究所
远程教育站点管理 及齐鲁先锋平台的使用 平阴县党员干部现代远程教育中心.
J2EE与中间件技术 ——Lab.
Using C++ The Weird Way Something about c++11 & OOP tricks
網路入門 主講人:林義隆 教授 日期:
Microsoft .NET 第4組 十月15, 2002 B 陳東傑 B 蔣佳勳
校园网 IPv6 应用迁移 上海交通大学网络信息中心 姜开达.
Hadoop I/O By ShiChaojie.
第五章 信息与系统集成技术 概述 数据流集成技术 信息流集成技术 信息管理集成技术 流程重组与业务流程集成 企业门户集成 企业集成架构
分布式对象标准介绍 企业要构建多层分布式系统,必须遵循分布式标准,基于什么样的标准将直接影响到企业应用系统的开放性和可扩展性。目前业界分布式对象技术主要有三种架构标准: Microsoft的COM/DCOM/COM+ OMG组织的 CORBA。 Sun Microsystems的Enterprise.
从UNIX到Windows的 电信软件移植实践
Linux 圖形操作介面 GUI -- X-window 與 Webmin
第一章: Java Web 开发技术概述.
智慧家庭 組員:林祐偉 楊峻宇 陳泰宇 紀國慶.
在一定程度上 人类的思维产生于 简单个体之间的相互作用 ——Marvin Minsky.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
第九單元 Classes and data abstraction I
GT4安装与开发 李长华.
NS2 – TCP/IP Simulation How-Wei Wu.
專題J組 題目: 檢定考試管理系統 指導老師: 曾修宜 老師 組員: 曾聖棋 謝宗翰
DevDays ’99 The aim of this mission is knowledge..
Python联合服务器的使用.
SOA – Experiment 2: Query Classification Web Service
Westmont College 网络应用软件 第一讲 (客户-服务器 概念, 协议端口的使用, 套接字API)
Advister: Quincy Wu Speaker: Chenglin Tsai Date:3/26
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
Web Services and Its Applications
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
第三章 安裝 SQL Server 資料庫環境.
2019/5/3 JAVA Socket(UDP).
教育部特殊教育通報網 學生異動、接收操作說明.
Turtle规范报告
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
新一代信息安全的门户产品 安盟身份认证管理系统7.0
蔺华 ISV开发合作经理 平台及开发技术部 微软(中国)有限公司
整合私有雲、公有雲 打造企業「最適雲」.
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
案例分析: THE NEXTGEN POS SYSTEM
Android进程间通讯.
第1章 WWW和LAMP基本觀念.
第十二章 Java网络编程 1.URL编程 2.Socket网络编程 3.Datagram网络编程.
課程簡介 2019/10/18 李耕銘.
Presentation transcript:

Thrift: Scalable Cross-Language Services Implementation 2011.10.14 丁冬超

目录 About thrift Thrift 能用来干什么 什么是thrift,怎么工作? Thrift IDL Thrift Demo Thrift 协议栈 以及各层的使用(java 为例) 与protocolbuffer的区别

About thrift thrift是一种可伸缩的跨语言服务的发展软件框架。它结合了功能强大的软件堆栈 的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Java,Python和PHP和 Ruby结合。thrift是facebook开发的,我们现在把它作为开源软件使用。thrift允许你定 义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码 用来方便地生成RPC客户端和服务器通信的无缝跨编程语言(来自百度百科)。 》》最初由facebook开发用做系统内个语言之间的RPC通信 。 》》2007年由facebook贡献到apache基金 ,现在是apache下的opensource之一 。 》》支持多种语言之间的RPC方式的通信:php语言client可以构造一个对象,调用相应 的服务方法来调用java语言的服务 ,跨越语言的C—S rpc 调用 。

什么是thrift,怎么工作 java rmi 的例子 ,见代码 》》 定义一个服务调用接口 。 》》 server端:接口实现---impl的实例---注册该服务实现(端口)---启动服务。 》》 client端:通过ip、端口、服务名,得到服务,通过接口来调用 。 》》rmi数据传输方式:java对象序列化 。

什么是thrift,怎么工作 Thrift 服务 》》 例同rmi ,需要定义通信接口、实现、注册服务、绑定端口…… 》》如何多种语言之间通信 ? 数据传输走socket(多种语言均支持),数据再以特定的格式(String ),发送 ,接收方语言解析 。 Object  String  Object 。 问题:编码、解析完全需要自己做 ,复杂的数据结构会编码困难 ?

什么是thrift,怎么工作 Thrift 服务 :thrift的中间编码层 》》java Object  Thrift Object  php Object 》》 定义thrift的文件 ,由thrift文件(IDL)生成 双方语言的接口、model ,在生成的 model以及接口中会有解码编码的代码 。 》》 thrift 文件例子 thrift-0.7.0.exe -r -gen java TestThrift.thrift 生成java 代码 thrift-0.7.0.exe -r -gen php TestThrift.thrift 生成php代码 thrift-0.7.0.exe -r -gen py TestThrift.thrift 生成python代码 thrift-0.7.0.exe -r -gen as3 TestThrift.thrift 生成as3代码 thrift-0.7.0.exe -r -gen cpp TestThrift.thrift 生成C++代码

Thrift IDL Thrift 服务 http://www.cnblogs.com/tianhuilove/archive/2011/09/05/2167669.html http://wiki.apache.org/thrift/ http://wiki.apache.org/thrift/ThriftTypes

Thrift Demo Thrift IDL 文件 namespace java com.gemantic.analyse.thrift.index struct NewsModel{ 1:i32 id ; 2:string title; 3:string content; 4:string media_from; 5:string author; } service IndexNewsOperatorServices { bool indexNews(1:NewsModel indexNews), bool deleteArtificiallyNews(1:i32 id )

Thrift Demo Thrift 服务 --java 1、生成接口代码 2、 实现 3、服务 4、client demo :java client 、php client (铁钢)、Cshape(维维)、python client (高 铭)

java使用thrift TTransport transport = new TSocket("10.0.0.41", 9813); long start=System.currentTimeMillis(); TProtocol protocol = new TBinaryProtocol(transport); IndexNewsOperatorServices.Client client=new IndexNewsOperatorServices.Client(protocol); transport.open(); client.deleteArtificiallyNews(123456); NewsModel newsModel=new NewsModel(); newsModel.setId(789456); newsModel.setTitle("this from java client"); newsModel.setContent(" 世界杯比赛前"); newsModel.setAuthor("ddc"); newsModel.setMedia_from("新华08"); client.indexNews(newsModel); transport.close();

php使用thrift $GLOBALS['THRIFT_ROOT'] = '/home/tjiang/demo/thrift/lib/php/src'; require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php'; require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php'; require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php'; require_once $GLOBALS['THRIFT_ROOT'].'/transport/THttpClient.php'; require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php'; include_once $GLOBALS['THRIFT_ROOT'].'/packages/TestThrift/TestThrift_types.php'; include_once $GLOBALS['THRIFT_ROOT'].'/packages/TestThrift/IndexNewsOperatorServices.php'; $data = array(); $thrif_server_url = '10.0.0.41'; $transport = new TSocket($thrif_server_url, 9813); $transport->open(); $protocol = new TBinaryProtocol($transport); $client= new IndexNewsOperatorServicesClient($protocol, $protocol); $obj = new NewsModel($data); $result = $client->indexNews($obj); $transport->close();

python 使用thrift # Make socket transport = TSocket.TSocket('10.0.0.41', 9813) # Buffering is critical. Raw sockets are very slow transport = TTransport.TBufferedTransport(transport) # Wrap in a protocol protocol = TBinaryProtocol.TBinaryProtocol(transport) # Create a client to use the protocol encoder client = Client(protocol) # Connect! transport.open() client.deleteArtificiallyNews(123) newsModel=NewsModel() newsModel.id=123456 newsModel.title="python Test" newsModel.content="client test come from python"; newsModel.media_from="xinhua08" client.indexNews(newsModel) #close transport.close()

CSharp 使用thrift TTransport transport = new TSocket("10.0.0.41", 9813); TProtocol protocol = new TBinaryProtocol(transport); IndexNewsOperatorServices.Client client = new IndexNewsOperatorServices.Client(protocol); transport.Open(); NewsModel model = new NewsModel(); model.Author = "jww"; model.Title = "title"; model.Content = "client Come From CSharp"; model.Id = 1; client.deleteArtificiallyNews(123); Console.WriteLine(client.indexNews(model));

Thrift协议栈以及各层 Thrift协议栈以及各层 1、model 2、Tprotocol 协议层 3、Ttramsport 传输层 4、TServer

Thrift协议栈以及各层 Thrift协议栈以及各层 1、model interface 服务的调用接口以及接口参数model、返回值model 2、Tprotocol 协议层 将数据(model)编码 、解码 。 3、Ttramsport 传输层 编码后的数据传输(简单socket、heet) 5、Tserver 服务的Tserver类型,实现了几种rpc调用(单线程、多线程、非阻塞IO)

与protocolbuffer的区别 参考 : http://liuchangit.com/development/346.html http://stackoverflow.com/questions/69316/biggest-differences-of-thrift-vs-protocol-buffers

与protocolbuffer的区别 1、Another important difference are the languages supported by default. protobuf: Java, C++, Python Thrift: Java, C++, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, Ocaml 2、Thrift supports 'exceptions‘ 3、Protocol Buffers much easier to read 。Protobuf API looks cleaner, though the generated classes are all packed as an inner classes which is not so nice. 4、Protobuf serialized objects are about 30% smaller then Thrift. 5、RPC is another key difference. Thrift generates code to implement RPC clients and servers wheres Protocol Buffers seems mostly designed as a data-interchange format alone. *****6 、And according to the wiki the Thrift runtime doesn't run on Windows.