Motan源码阅读--初识Motan

Motan

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

功能

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

模块

Motan框架中主要有register,transport,serialize,protocol几个功能,各个模块都支持通过SPI进行扩展。

registry

用来和注册中心交互,包括服务注册,服务订阅,服务变更通知,服务心跳发送等。server端会在系统初始化时通过registry模块注册服务,client端在系统初始化时通过registry模块订阅到服务提供者列表,当server列表变更时由registry模块通知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扩展来6个自定义的Spring xml标签:

  • motan:protocol
  • motan:registry
  • Motan:basicservice
  • motan:service
  • motan:basicreferer
  • motan:referer

原文发布于微信公众号 - 服务端技术杂谈(develop_king)

原文发表时间:2018-08-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏BeJavaGod

分布式系统的那些事儿(三) - 系统与系统之间的调用

系统与系统之间的调用通俗来讲,分为本地同一台服务器上的服务相互调用与远程服务调用,这个都可以称之为RPC通信。浅白点讲,客户访问服务器A,此时服务器要完成某个动...

36740
来自专栏性能与架构

Redis3 对集群进行重新分片

image.png 重新分片就是在集群各个节点间移动slot,这个操作是向集群中添加节点和删除节点的基础 步骤 (1)执行 redis-trib 命令,用 re...

36650
来自专栏Crossin的编程教室

关于 Git 你不知道的十件事

git log -p FILE 查看README.md的修改历史,例如: > git log -p README.md git log -S’PATTERN’ ...

26750
来自专栏耕耘实录

Linux系统下漏洞扫描、评估工具OpenVAS9的安装与使用

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

34320
来自专栏Flutter入门到实战

Flutter填坑全面总结

Flutter是一个新的跨平台开发的工具,博主也玩了一段时间,一步步的踩着坑摸石头过河,这其中受尽了各种各样的坑,各种谷歌,stackoverflow,Flut...

71120
来自专栏阮一峰的网络日志

Content Security Policy 入门教程

跨域脚本攻击 XSS 是最常见、危害最大的网页安全漏洞。 ? 为了防止它们,要采取很多编程措施,非常麻烦。很多人提出,能不能根本上解决问题,浏览器自动禁止外部注...

34250
来自专栏北京马哥教育

Python爬虫代理池

46180
来自专栏烂笔头

Python爬虫代理IP池

目录[-] 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代理IP,从而保证爬虫快速...

90460
来自专栏李少华的专栏

腾讯云 CMQ 消息队列在 Linux 环境下的使用

腾讯云消息队列(Cloud Message Queue,以下简称CMQ)是分布式的消息队列服务,用于存储进程间传输的消息,为分布式部署的不同应用之间或者一个应用...

7.5K00
来自专栏腾讯云数据库团队的专栏

在云端快速构建一个 ODOO 站点

ODOO 的前身是 OpenERP,是一款开源的 ERP 系统,使用 Python 开发,数据库采用PostgreSQL,系统以 LGPLv3 协议发布。ODO...

2.9K10

扫码关注云+社区

领取腾讯云代金券