`
gaojingsong
  • 浏览: 1197065 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【RPC框架之Motan 介绍】

阅读更多

motan是新浪微博开源的一套轻量级、方便使用的RPC框架。motan是新浪开源的一个RPC框架,可以看做是Dubbo的量身裁剪版。

 

Motan is a remote procedure call(RPC) framework for rapid development of high performance distributed services.

 

Features

Create distributed services without writing extra code.

Provides cluster support and integrate with popular service discovery services like Consul or Zookeeper.

Supports advanced scheduling features like weighted load-balance, scheduling cross IDCs, etc.

Optimization for high load scenarios, provides high availability in production environment.

Supports both synchronous and asynchronous calls.

功能

支持通过spring配置方式集成,无需额外编写代码即可为服务提供分布式调用能力。

支持集成consul、zookeeper等配置服务组件,提供集群环境的服务发现及治理能力。

支持动态自定义负载均衡、跨机房流量调整等高级服务调度能力。

基于高并发、高负载场景进行优化,保障生产环境下RPC服务高可用。

 

 

Motan属于服务治理型框架。 

RPC框架目前可以划分为两类,

一类以Thrift,gRPC为代表的跨语言型,其特点是支持跨语言的RPC调用,通过加一层装换为中间语言,实现跨语言调用,

另一类是服务治理型。

 

相比于Dubbo,Motan在支持相同功能的同时,减少了部分扩展特性.在序列化方式上,Motan只支持Heesian和fastJson,注册中心Motan只支持zookeeper和Consul,底层通信组件只能使用netty,而dubbo还额外支持mina,grizzly,相应的协议,motan也只支持本地调用和motan定义的协议,相比之下dubbo还提供了对redis,thrift,memcache等组件的协议支持,可以使用这些组件完成服务的发布和引用。

 

motan和dubbo都使用SPI机制保证扩展,所有配置拼接为URL,构造接口代理隐藏远程调用细节,这一点类似基于JMS的远程调用,你需要提供调用接口,方法参数,参数类型,服务端反射接口实现执行返回结果。

 

接口和实现类的映射dubbo和motan都用一个map来保存。通过请求的接口名找到实现类反射执行方法。

 

motan的模块设计: 

评价一个模块设计的好坏是不同模块之前是否相互依赖,也即模块A中不要出现有类继承模块B的类,即使一定要扩展类,也应该先考虑包装模式,也即是装饰模式,让被扩展的类作为扩展类的一个属性。

 

motan提供两种配置方式。

1.注解

2.xml

Motan是一套基于java开发的RPC框架,除了常规的点对点调用外,Motan还提供服务治理功能,包括服务节点的自动发现、摘除、高可用和负载均衡等。Motan具有良好的扩展性,主要模块都提供了多种不同的实现,例如支持多种注册中心,支持多种rpc协议等。

架构概述

Motan中分为服务提供方(RPC Server),服务调用方(RPC Client)和服务注册中心(Registry)三个角色。

  • Server提供服务,向Registry注册自身服务,并向注册中心定期发送心跳汇报状态;
  • Client使用服务,需要向注册中心订阅RPC服务,Client根据Registry返回的服务列表,与具体的Sever建立连接,并进行RPC调用。
  • 当Server发生变更时,Registry会同步变更,Client感知后会对本地的服务列表作相应调整。

三者的交互关系如下图:

模块概述

Motan框架中主要有register、transport、serialize、protocol几个功能模块,各个功能模块都支持通过SPI进行扩展,各模块的交互如下图所示:

register

用来和注册中心进行交互,包括注册服务、订阅服务、服务变更通知、服务心跳发送等功能;Server端会在系统初始化时通过register模块注册服务,Client端在系统初始化时会通过register模块订阅到具体提供服务的Server列表,当Server 列表发生变更时也由register模块通知Client。

protocol

用来进行RPC服务的描述和RPC服务的配置管理,这一层还可以添加不同功能的filter用来完成统计、并发限制等功能。

serialize

将RPC请求中的参数、结果等对象进行序列化与反序列化,即进行对象与字节流的互相转换;默认使用对java更友好的hessian2进行序列化。

transport

用来进行远程通信,默认使用Netty nio的TCP长链接方式。

cluster

Client端使用的模块,cluster是一组可用的Server在逻辑上的封装,包含若干可以提供RPC服务的Server,实际请求时会根据不同的高可用与负载均衡策略选择一个可用的Server发起远程调用。

在进行RPC请求时,Client通过代理机制调用cluster模块,cluster根据配置的HA和LoadBalance选出一个可用的Server,通过serialize模块把RPC请求转换为字节流,然后通过transport模块发送到Server端。

配置概述

Motan框架中将功能模块抽象为四个可配置的元素,分别为:

  • protocol:服务通信协议。服务提供方与消费方进行远程调用的协议,默认为Motan协议,使用hessian2进行序列化,netty作为Endpoint以及使用Motan自定义的协议编码方式。

  • registry:注册中心。服务提供方将服务信息(包含ip、端口、服务策略等信息)注册到注册中心,服务消费方通过注册中心发现服务。当服务发生变更,注册中心负责通知各个消费方。

  • service:服务提供方提供的服务。使用方将核心业务抽取出来,作为独立的服务。通过暴露服务并将服务注册至注册中心,从而使调用方调用。

  • referer:服务消费方对服务的引用,即服务调用方。

Motan推荐使用spring配置rpc服务,目前Motan扩展了6个自定义Spring xml标签:

  • motan:protocol
  • motan:registry
  • motan:basicService
  • motan:service
  • motan:basicReferer
  • motan:referer
0
0
分享到:
评论

相关推荐

    Netty4.1实战-手写RPC框架.pdf

    RPC是一种远程调用的通信协议,例如dubbo、thrift等,我们在互联网高并发应用开发时候都会使用到类似的服务。本专题主要通过三个章节实现一个rpc通信的基础功能,来学习RPC服务...- 手写RPC框架第三章《RPC中间件》

    实现一个简单的RPC框架

    本篇将详细讲解如何使用socket、反射和序列化等技术来实现一个简单的RPC框架。 首先,让我们了解RPC的基本原理。在RPC模型中,客户端(Client)发起一个函数调用请求,这个请求包含了目标函数的名称和参数。RPC框架...

    基于 C++ 的 RPC 框架.zip

    基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++ 的 RPC 框架.zip基于 C++...

    RPC框架的实现原理,及RPC架构组件详解.pdf

    详细讲解RPC

    自己写了一个RPC框架

    RPC(Remote Procedure Call)框架是分布式系统中的一种通信机制,允许一个程序调用另一个不在同一台计算机上的程序,使得远程服务调用就像本地调用一样简单。在这个场景中,你提到的是你自己编写了一个RPC框架,这...

    RPC框架原理介绍.docx

    RPC 框架原理介绍 RPC 框架是远程过程调用(Remote Procedure Call)的缩写,通过网络通信调用不同的服务,共同支撑一个软件系统,微服务实现的基石技术。使用 RPC 可以解耦系统,方便维护,同时增加系统处理请求的...

    基于netty的手写rpc框架

    在本项目中,我们将基于Netty实现一个手写的RPC框架。Netty是Java领域的一个高性能、异步事件驱动的网络应用程序框架,常用于构建高效的服务器和客户端。 首先,我们需要理解RPC框架的基本组成部分: 1. **服务...

    RPC框架底层模拟

    RPC(Remote Procedure Call)框架是分布式系统中广泛使用的通信机制,它允许一个程序在不关心远程服务器具体实现的情况下调用其方法,就像调用本地对象一样。本篇将深入探讨RPC框架的底层模拟,主要围绕以下几个...

    JAVA实现简单RPC框架

    RPC(Remote Procedure Call)框架是分布式系统中广泛使用的通信机制,允许一个进程调用另一个进程中定义的方法,就像调用本地方法一样。在这个“JAVA实现简单RPC框架”的项目中,我们将探讨如何利用Java的核心特性...

    高性能RPC框架 nfs-rpc.7z

    在本场景中,我们关注的是一个名为“nfs-rpc”的高性能RPC框架。NFS(Network File System)最初是UNIX系统间用于文件共享的协议,而这里的“nfs-rpc”可能是指将NFS协议与RPC概念相结合的一种实现,旨在提供高效的...

    Hadoop自己的Rpc框架使用Demo

    在分布式计算领域,Hadoop RPC(Remote Procedure Call)框架是一个至关重要的组件,它允许不同的进程之间进行通信,尤其是在大规模数据处理的场景下。Hadoop RPC是Hadoop生态系统中的基础服务,使得不同模块如HDFS...

    jsonrpc是一个基于Java的高性能开源RPC框架

    在Java世界中,JSON-RPC作为一个高性能的开源RPC框架,为分布式系统中的服务调用提供了便利。这个框架允许应用程序通过网络在不同的进程之间传递方法调用,仿佛这些方法是在本地对象上调用一样。 JSON-RPC的核心...

    基于java的开发源码-高性能RPC框架 nfs-rpc.zip

    基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-高性能RPC框架 nfs-rpc.zip 基于java的开发源码-...

    可参考的自定义实现rpc框架

    标题中的“可参考的自定义实现rpc框架”指的是一个关于如何设计和实现远程过程调用(RPC)框架的教程或示例项目。RPC允许不同计算机系统间的程序进行通信,仿佛它们是在同一台机器上直接调用函数一样。下面将详细...

    6种微服务RPC框架,你知道几个?

    跟语言平台绑定的开源RPC框架主要有下面几种。Dubbo:国内最早开源的RPC框架,由阿里巴巴公司开发并于2011年末对外开源,仅支持 Java语言。 Motan:微博内部使用的RPC框架,于2016年对外开源,仅支持Java语言。 Tars...

    基于C++ module库 Protobuf Zookeeper 实现的Rpc框架.zip

    基于C++ module库 Protobuf Zookeeper 实现的Rpc框架.zip基于C++ module库 Protobuf Zookeeper 实现的Rpc框架.zip基于C++ module库 Protobuf Zookeeper 实现的Rpc框架.zip基于C++ module库 Protobuf Zookeeper 实现...

    JAVA实的RPC框架

    RPC(Remote Procedure Call)框架是Java开发中常用于构建分布式系统的重要工具,它允许一个程序在不关心远程系统具体实现的情况下调用其功能,简化了跨网络的服务调用。本篇文章将深入探讨基于Java实现的RPC框架,...

    自定义rpc框架

    自定义RPC(Remote Procedure Call)框架是软件开发中的一个重要领域,它允许程序在不同的网络节点间进行通信,仿佛调用本地方法一般。本项目旨在通过深入研究Netty和Zookeeper来构建一个类似Dubbo的RPC框架,从而...

    轻量级RPC框架

    轻量级RPC框架是指在不引入过多复杂性的情况下,设计用于快速开发和部署分布式应用的框架。在这个场景中,我们将讨论如何利用Zookeeper、Socket和Java动态代理来构建这样一个框架。 Zookeeper是Apache Hadoop的一个...

Global site tag (gtag.js) - Google Analytics