zoukankan      html  css  js  c++  java
  • 1、微博RPC框架Motan

    RPC概述

    RPC:即Remote Procedure Call Protocol,翻译过来就是远程过程调用协议。

    引用知乎(https://www.zhihu.com/question/25536695)上的解释就是:

    RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
    
    比如说,一个方法可能是这样定义的:
    Employee getEmployeeByName(String fullName)
    那么:
    首先,要解决通讯的问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
    第二,要解决寻址的问题,也就是说,A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么,这样才能完成调用。比如基于Web服务协议栈的RPC,就要提供一个endpoint URI,或者是从UDDI服务上查找。如果是RMI调用的话,还需要一个RMI Registry来注册服务的地址。
    第三,当A服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给B服务器。
    第四,B服务器收到请求后,需要对参数进行反序列化(序列化的逆操作),恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值。
    第五,返回值还要发送回服务器A上的应用,也要经过序列化的方式发送,服务器A接到后,再反序列化,恢复为内存中的表达方式,交给A服务器上的应用.

    RPC的本质

    对于软件工程师来讲,形如object.method()的方法调用实在是太过熟悉,当我们在同一个JVM进程内执行方法调用的时候,一切都显得顺其自然。

    然而如果我们将上述的调用过程拆分成两个部分—-方法的调用端和方法的实现端,然后将他们分别放置到不同的进程中,使得调用端和实现端能够做到跨操作系统,跨网络。这便是RPC的本质。


    Motan概述

    先来段高潮:motan在2014年的春晚中支撑着新浪微博的千亿调用,对抗了春晚的最高峰值 !

    motan是新浪微博开源的一套轻量级、方便使用的RPC框架,从功能角度来讲,RPC框架可以分为服务治理型和多语言型;

    motan显然属于前者,因此对motan框架可以简单的理解为:分离方法的调用和实现,并具双端服务治理功能;

    微博的Motan RPC服务,底层通讯引擎采用了Netty网络框架,序列化协议支持Hessian和Java序列化,通讯协议支持Motan、http、tcp、mc等;

    Motan框架在内部大量使用,在系统的健壮性和服务治理方面,有较为成熟的技术解决方案:

    • 健壮性上,基于Config配置管理服务实现了High Availability与Load Balance策略(支持灵活的FailOver和FailFast HA策略,以及Round Robin、LRU、Consistent Hash等Load Balance策略);
    • 服务治理方面,生成完整的服务调用链数据,服务请求性能数据,响应时间(Response Time)、QPS以及标准化Error、Exception日志信息。

    Motan 可以支持不同的 RPC 协议、传输协议。Motan 能够无缝支持 Spring 配置方式使用 RPC 服务,通过简单、灵活的配置就可以提供或使用 RPC 服务。通过使用 Motan 框架,可以十分方便的进行服务拆分、分布式服务部署。

    Motan 提供的主要功能包括:

    • 支持通过spring配置方式集成,无需额外编写代码即可为服务提供分布式调用能力。
    • 支持集成consul、zookeeper等配置服务组件,提供集群环境的服务发现及治理能力。
    • 支持动态自定义负载均衡、跨机房流量调整等高级服务调度能力。
    • 基于高并发、高负载场景进行优化,保障生产环境下RPC服务高可用。

    最后,附上motan在GitHub上的api中文地址:https://github.com/weibocom/motan/wiki/zh_overview

  • 相关阅读:
    python之面向对象函数与方法,反射,双下方法
    python之面向对象的成员,方法,属性,异常处理
    python之面向对象性封装,多态,以及鸭子类型
    python之面向对象三大特性: 继承(单继承)
    AMAP-TECH算法大赛开赛!基于车载视频图像的动态路况分析
    深度学习在高德ETA应用的探索与实践
    高德SD地图数据生产自动化技术的路线与实践(道路篇)
    高德前端这五年:动态化技术的研发历程和全面落地实践
    深度学习在高德POI鲜活度提升中的演进
    高德技术评测建设之路
  • 原文地址:https://www.cnblogs.com/Json1208/p/8784793.html
Copyright © 2011-2022 走看看