SlideShare a Scribd company logo
高性能远程调用解决方案
搜狐技术部/我的搜狐
内容
   远程调用概述
   如何选择/设计远程调用
   我们的解决方案
   发展和趋势
远程调用
   远程过程调用(RPC,Remote Producer Call)
     远程调用(Remote
                Invocation)
     远程方法调用(Remote Method Invocation)



   一台计算机调用另一台计算机上的程序,而程
    序员无需为此交互进行额外编程。
IDL
   Interface description language(接口描述语言)
     编程语言中立

     平台中立
常见的IDL实现方式
   Apache Avro
   Protocol Buffers
   Slice
   Thrift
   WSDL
   Microsoft Interface Definition
常见解决方案
   Java Remote Method Invocation(RMI)
   XML-RPC
   JSON-RPC
   SOAP
   .NET Remoting
   Internet Communications Engine(ICE)
   Apache Thrift
   CORBA
   Google Protocol Buffers
选择/设计远程调用方案
   跨语言(语言中立)
   高性能(快速响应)
   分布式(高扩展性)
   低冗余(节省资源)
跨语言
   支持主流的语言
     Java/C++/PHP/C#

   容易实现
   容易扩展
高性能
   高吞吐量
   低延迟
   同步、异步支持
分布式
   分布式集群
   负载均衡
   容错处理
低冗余
   数据量小
   高效编码、解码
我们的远程调用方案
   Protocol Buffers + ICE + Zookeeper
Protocol Buffers
   Google出品、内部广泛使用的数据编码格式
   2008/7/9 Open Source
   Website:https://developers.google.com/protocol-buffers/
   New BSD License
Protocol Buffers特性
   高效
       比XML快20~100倍
   可扩展
       扩展字段向后兼容性、向前兼容
   结构化
       语法描述的结构化数据
       无描述文件无法解析
   轻量
       比XML小3~10倍
       二进制协议
   半自动化
       自动化工具生成数据解析、访问代码
package account;
         option java_package = "sce.proto.account";
Sample   option java_outer_classname = "Accounts";
         enum Status{
           NORMAL = 0;
           DELETED = -1;
           INACTIVED = 2;
         }
         message Account {
           required int64 account_id =1;
           required string passport =2;
           required string nick =3 ;
           required string domain =4 [default=""];
           optional string uid =5 [default = ""];
           optional Status status = 6 [default=NORMAL];
           optional string icon = 7;
           optional string image = 8;
           optional string detail_desc = 9;
           optional string theme = 10;
           optional int32 tip_level =11;
         }
ICE
   The Internet Communications Engine
     面向对象的分布式消息中间件


   特性
     面向对象
     平台中立
     语言中立
     多种协议(TCP/UDP/SSL)
     集群管理等
     文档齐全
ICE C/S架构图
#ifndef ACCOUNT_ICE
     #define ACCOUNT_ICE



Sample
     module sce {
     module slice {
     module account {
          ["java:protobuf:sce.proto.account.Accounts.AccountIndex"] sequence<byte> PbAccountIndex;
          ["java:protobuf:sce.proto.account.Accounts.Account"] sequence<byte> PbAccount;
          ["java:protobuf:sce.proto.codemsg.CodeMsgs.CodeMsg"] sequence<byte> PbCodeMsg;


          ["java:type:java.util.ArrayList"] sequence<PbAccountIndex> AccountIndexList;
          ["java:type:java.util.ArrayList"] sequence<PbAccount> AccountList;


          interface AccountService {
               PbCodeMsg addAccount(PbAccount account,string createdIp,string regFrom);
               PbCodeMsg active(string passport);
               PbCodeMsg setDomain(long id,string domain);
               PbCodeMsg setNick(long id,string newNick);


               PbAccountIndex getByPassport(string passport);
               PbAccountIndex getByNick(string nick);


               PbAccount getAccountByPassport(string passport);
               PbAccount getAccountById(long id);
               PbAccount getAccountByNick(string nick);
               PbAccount getAccountByDomain(string domain);
               PbAccount getAccountByUid(string uid);
          };
     };
     };
     };
     #endif
ZooKeeper
   Hudoop子项目 -> Apache顶级项目
   Apache开源的可扩展分布式选举服务。
ZooKeeper
   特性
     选举算法

     分布式所

     配置管理

     命名服务
ZooKeeper 重要特性
   去中心化分布式集群
     自动选举

     无单点故障



   Watcher机制
     监听数据变更
架构图

      Server        Server          Server
                                             ICE




                Apache Zookeeper
Protobuf




       Client        Client        Client
远程调用步骤
①   注册服务端配置
②   客户端查询配置
③   根据策略连接服务
④   调用远程服务方法
⑤   收到配置变更销毁旧连接,建立新连接
集中监控
   集中监控
     服务状态监控

     服务性能分析

     服务使用状况

     服务路由状况
非正式性能测试
• 硬件环境(略)
• 测试接口
   • getByPassport ≈ 256b
   • getByPassports ≈ 5kb
   • getAccountsByPassports ≈
     20kb
• 测试次数
   • 至少10k次调用
   • 多次测试
数据展示
数据展示
数据展示
服务性能
缓存减少
未来趋势
   集群管理
     服务分级

     服务分类

     集中管理

     自动切换

     流量控制
未来趋势
   REST支持
     HTTP支持

     自动路由

     负载均衡
关于我


   搜狐技术部 架构师
   Email: imxylz@gmail.com
   iSOHU: imxylz
   Weibo: imxylz
   Twitter: imxylz
   Slideshare: @xylz

More Related Content

Similar to 高性能远程调用解决方案

Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
Joshua Zhu
 
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisBaidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisXiaoming Chen
 
twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning ServicestwMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC
 
Yog Framework
Yog FrameworkYog Framework
Yog Framework
fansekey
 
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
Johnson Gau
 
廖雪峰 Saa s ovp
廖雪峰 Saa s ovp廖雪峰 Saa s ovp
廖雪峰 Saa s ovpdrewz lin
 
未来网络技术发展探梦 - 开篇
未来网络技术发展探梦 - 开篇未来网络技术发展探梦 - 开篇
未来网络技术发展探梦 - 开篇
Yao-Wei Ou
 
基于Erlang的
基于Erlang的基于Erlang的
基于Erlang的
hnoutman
 
Java@taobao
Java@taobaoJava@taobao
Java@taobao
vanadies10
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
klandor
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
YingSiang Geng
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战
rfyiamcool
 
鹰眼下的淘宝_EagleEye with Taobao
鹰眼下的淘宝_EagleEye with Taobao鹰眼下的淘宝_EagleEye with Taobao
鹰眼下的淘宝_EagleEye with Taobao
terryice
 
deep inside Sina App Engine cloud service
deep inside Sina App Engine cloud servicedeep inside Sina App Engine cloud service
deep inside Sina App Engine cloud service
cong lei
 
Sae
SaeSae
淘宝开放产品前端实践
淘宝开放产品前端实践淘宝开放产品前端实践
淘宝开放产品前端实践taobao.com
 
作業系統數位教材(劉政雄)(1 9)
作業系統數位教材(劉政雄)(1 9)作業系統數位教材(劉政雄)(1 9)
作業系統數位教材(劉政雄)(1 9)Ying wei (Joe) Chou
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计
fuchaoqun
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)
vanadies10
 
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接 构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接
Renaun Erickson
 

Similar to 高性能远程调用解决方案 (20)

Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisBaidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log Analysis
 
twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning ServicestwMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
 
Yog Framework
Yog FrameworkYog Framework
Yog Framework
 
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
 
廖雪峰 Saa s ovp
廖雪峰 Saa s ovp廖雪峰 Saa s ovp
廖雪峰 Saa s ovp
 
未来网络技术发展探梦 - 开篇
未来网络技术发展探梦 - 开篇未来网络技术发展探梦 - 开篇
未来网络技术发展探梦 - 开篇
 
基于Erlang的
基于Erlang的基于Erlang的
基于Erlang的
 
Java@taobao
Java@taobaoJava@taobao
Java@taobao
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战
 
鹰眼下的淘宝_EagleEye with Taobao
鹰眼下的淘宝_EagleEye with Taobao鹰眼下的淘宝_EagleEye with Taobao
鹰眼下的淘宝_EagleEye with Taobao
 
deep inside Sina App Engine cloud service
deep inside Sina App Engine cloud servicedeep inside Sina App Engine cloud service
deep inside Sina App Engine cloud service
 
Sae
SaeSae
Sae
 
淘宝开放产品前端实践
淘宝开放产品前端实践淘宝开放产品前端实践
淘宝开放产品前端实践
 
作業系統數位教材(劉政雄)(1 9)
作業系統數位教材(劉政雄)(1 9)作業系統數位教材(劉政雄)(1 9)
作業系統數位教材(劉政雄)(1 9)
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)
 
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接 构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接
 

高性能远程调用解决方案

  • 2. 内容  远程调用概述  如何选择/设计远程调用  我们的解决方案  发展和趋势
  • 3. 远程调用  远程过程调用(RPC,Remote Producer Call)  远程调用(Remote Invocation)  远程方法调用(Remote Method Invocation)  一台计算机调用另一台计算机上的程序,而程 序员无需为此交互进行额外编程。
  • 4. IDL  Interface description language(接口描述语言)  编程语言中立  平台中立
  • 5. 常见的IDL实现方式  Apache Avro  Protocol Buffers  Slice  Thrift  WSDL  Microsoft Interface Definition
  • 6. 常见解决方案  Java Remote Method Invocation(RMI)  XML-RPC  JSON-RPC  SOAP  .NET Remoting  Internet Communications Engine(ICE)  Apache Thrift  CORBA  Google Protocol Buffers
  • 7. 选择/设计远程调用方案  跨语言(语言中立)  高性能(快速响应)  分布式(高扩展性)  低冗余(节省资源)
  • 8. 跨语言  支持主流的语言  Java/C++/PHP/C#  容易实现  容易扩展
  • 9. 高性能  高吞吐量  低延迟  同步、异步支持
  • 10. 分布式  分布式集群  负载均衡  容错处理
  • 11. 低冗余  数据量小  高效编码、解码
  • 12. 我们的远程调用方案  Protocol Buffers + ICE + Zookeeper
  • 13. Protocol Buffers  Google出品、内部广泛使用的数据编码格式  2008/7/9 Open Source  Website:https://developers.google.com/protocol-buffers/  New BSD License
  • 14. Protocol Buffers特性  高效  比XML快20~100倍  可扩展  扩展字段向后兼容性、向前兼容  结构化  语法描述的结构化数据  无描述文件无法解析  轻量  比XML小3~10倍  二进制协议  半自动化  自动化工具生成数据解析、访问代码
  • 15. package account; option java_package = "sce.proto.account"; Sample option java_outer_classname = "Accounts"; enum Status{ NORMAL = 0; DELETED = -1; INACTIVED = 2; } message Account { required int64 account_id =1; required string passport =2; required string nick =3 ; required string domain =4 [default=""]; optional string uid =5 [default = ""]; optional Status status = 6 [default=NORMAL]; optional string icon = 7; optional string image = 8; optional string detail_desc = 9; optional string theme = 10; optional int32 tip_level =11; }
  • 16. ICE  The Internet Communications Engine  面向对象的分布式消息中间件  特性  面向对象  平台中立  语言中立  多种协议(TCP/UDP/SSL)  集群管理等  文档齐全
  • 18. #ifndef ACCOUNT_ICE #define ACCOUNT_ICE Sample module sce { module slice { module account { ["java:protobuf:sce.proto.account.Accounts.AccountIndex"] sequence<byte> PbAccountIndex; ["java:protobuf:sce.proto.account.Accounts.Account"] sequence<byte> PbAccount; ["java:protobuf:sce.proto.codemsg.CodeMsgs.CodeMsg"] sequence<byte> PbCodeMsg; ["java:type:java.util.ArrayList"] sequence<PbAccountIndex> AccountIndexList; ["java:type:java.util.ArrayList"] sequence<PbAccount> AccountList; interface AccountService { PbCodeMsg addAccount(PbAccount account,string createdIp,string regFrom); PbCodeMsg active(string passport); PbCodeMsg setDomain(long id,string domain); PbCodeMsg setNick(long id,string newNick); PbAccountIndex getByPassport(string passport); PbAccountIndex getByNick(string nick); PbAccount getAccountByPassport(string passport); PbAccount getAccountById(long id); PbAccount getAccountByNick(string nick); PbAccount getAccountByDomain(string domain); PbAccount getAccountByUid(string uid); }; }; }; }; #endif
  • 19. ZooKeeper  Hudoop子项目 -> Apache顶级项目  Apache开源的可扩展分布式选举服务。
  • 20. ZooKeeper  特性  选举算法  分布式所  配置管理  命名服务
  • 21. ZooKeeper 重要特性  去中心化分布式集群  自动选举  无单点故障  Watcher机制  监听数据变更
  • 22. 架构图 Server Server Server ICE Apache Zookeeper Protobuf Client Client Client
  • 23. 远程调用步骤 ① 注册服务端配置 ② 客户端查询配置 ③ 根据策略连接服务 ④ 调用远程服务方法 ⑤ 收到配置变更销毁旧连接,建立新连接
  • 24. 集中监控  集中监控  服务状态监控  服务性能分析  服务使用状况  服务路由状况
  • 25. 非正式性能测试 • 硬件环境(略) • 测试接口 • getByPassport ≈ 256b • getByPassports ≈ 5kb • getAccountsByPassports ≈ 20kb • 测试次数 • 至少10k次调用 • 多次测试
  • 31. 未来趋势  集群管理  服务分级  服务分类  集中管理  自动切换  流量控制
  • 32. 未来趋势  REST支持  HTTP支持  自动路由  负载均衡
  • 33. 关于我  搜狐技术部 架构师  Email: imxylz@gmail.com  iSOHU: imxylz  Weibo: imxylz  Twitter: imxylz  Slideshare: @xylz