高性能远程调用解决方案

1,879 views

Published on

一种跨语言、跨平台的高性能分布式远程调用解决方案

Published in: Technology, Education
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,879
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
48
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

高性能远程调用解决方案

  1. 1. 高性能远程调用解决方案搜狐技术部/我的搜狐
  2. 2. 内容 远程调用概述 如何选择/设计远程调用 我们的解决方案 发展和趋势
  3. 3. 远程调用 远程过程调用(RPC,Remote Producer Call)  远程调用(Remote Invocation)  远程方法调用(Remote Method Invocation) 一台计算机调用另一台计算机上的程序,而程 序员无需为此交互进行额外编程。
  4. 4. IDL Interface description language(接口描述语言)  编程语言中立  平台中立
  5. 5. 常见的IDL实现方式 Apache Avro Protocol Buffers Slice Thrift WSDL Microsoft Interface Definition
  6. 6. 常见解决方案 Java Remote Method Invocation(RMI) XML-RPC JSON-RPC SOAP .NET Remoting Internet Communications Engine(ICE) Apache Thrift CORBA Google Protocol Buffers
  7. 7. 选择/设计远程调用方案 跨语言(语言中立) 高性能(快速响应) 分布式(高扩展性) 低冗余(节省资源)
  8. 8. 跨语言 支持主流的语言  Java/C++/PHP/C# 容易实现 容易扩展
  9. 9. 高性能 高吞吐量 低延迟 同步、异步支持
  10. 10. 分布式 分布式集群 负载均衡 容错处理
  11. 11. 低冗余 数据量小 高效编码、解码
  12. 12. 我们的远程调用方案 Protocol Buffers + ICE + Zookeeper
  13. 13. Protocol Buffers Google出品、内部广泛使用的数据编码格式 2008/7/9 Open Source Website:https://developers.google.com/protocol-buffers/ New BSD License
  14. 14. Protocol Buffers特性 高效  比XML快20~100倍 可扩展  扩展字段向后兼容性、向前兼容 结构化  语法描述的结构化数据  无描述文件无法解析 轻量  比XML小3~10倍  二进制协议 半自动化  自动化工具生成数据解析、访问代码
  15. 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. 16. ICE The Internet Communications Engine  面向对象的分布式消息中间件 特性  面向对象  平台中立  语言中立  多种协议(TCP/UDP/SSL)  集群管理等  文档齐全
  17. 17. ICE C/S架构图
  18. 18. #ifndef ACCOUNT_ICE #define ACCOUNT_ICESample 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. 19. ZooKeeper Hudoop子项目 -> Apache顶级项目 Apache开源的可扩展分布式选举服务。
  20. 20. ZooKeeper 特性  选举算法  分布式所  配置管理  命名服务
  21. 21. ZooKeeper 重要特性 去中心化分布式集群  自动选举  无单点故障 Watcher机制  监听数据变更
  22. 22. 架构图 Server Server Server ICE Apache ZookeeperProtobuf Client Client Client
  23. 23. 远程调用步骤① 注册服务端配置② 客户端查询配置③ 根据策略连接服务④ 调用远程服务方法⑤ 收到配置变更销毁旧连接,建立新连接
  24. 24. 集中监控 集中监控  服务状态监控  服务性能分析  服务使用状况  服务路由状况
  25. 25. 非正式性能测试• 硬件环境(略)• 测试接口 • getByPassport ≈ 256b • getByPassports ≈ 5kb • getAccountsByPassports ≈ 20kb• 测试次数 • 至少10k次调用 • 多次测试
  26. 26. 数据展示
  27. 27. 数据展示
  28. 28. 数据展示
  29. 29. 服务性能
  30. 30. 缓存减少
  31. 31. 未来趋势 集群管理  服务分级  服务分类  集中管理  自动切换  流量控制
  32. 32. 未来趋势 REST支持  HTTP支持  自动路由  负载均衡
  33. 33. 关于我 搜狐技术部 架构师 Email: imxylz@gmail.com iSOHU: imxylz Weibo: imxylz Twitter: imxylz Slideshare: @xylz

×