前两天,我在开源中国的微信公众号看到新浪微博的轻量Rpc框架——Motan开源了。上网查了下,才得知这个Motan来头不小,支撑着新浪微博的千亿调用,曾经在2014年的春晚中有着千亿次的调用,对抗了春晚的最高峰值。
什么是Motan
2013 年微博 RPC 框架 Motan 在前辈大师们(福林、fishermen、小麦、王喆等)的精心设计和辛勤工作中诞生,向各位大师们致敬,也得到了微博各个技术团队的鼎力支持及不断完善,如今 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 属于服务治理类型,是一个基于 Java 开发的高性能的轻量级 RPC 框架,Motan 提供了实用的服务治理功能和优秀的 RPC 协议扩展能力。
Motan 提供的主要功能包括:
服务发现 :服务发布、订阅、通知
高可用策略 :失败重试(Failover)、快速失败(Failfast)、异常隔离(Server 连续失败超过指定次数置为不可用,然后定期进行心跳探测)
负载均衡 :支持低并发优先、一致性 Hash、随机请求、轮询等
扩展性 :支持 SPI 扩展(service provider interface)
其他 :调用统计、访问日志等
Motan 可以支持不同的 RPC 协议、传输协议。Motan 能够无缝支持 Spring 配置方式使用 RPC 服务,通过简单、灵活的配置就可以提供或使用 RPC 服务。通过使用 Motan 框架,可以十分方便的进行服务拆分、分布式服务部署。
简单调用示例
参照github中wiki,可以快速的跑一跑motan,提前感受一下,由于Motan刚开源,很多东西还不完整,我个人在这中间也遇到很多坑,后面一一介绍。我按照wiki介绍,先创建maven项目motandemo,
添加pom依赖
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.hjc.demo
motandemo
0.0.1-SNAPSHOT
war
motandemo
spy
36
default
http://repo1.maven.org/maven2
false
junit
junit
3.8.1
test
com.weibo
motan-core
0.0.1
com.weibo
motan-transport-netty
0.0.1
com.weibo
motan-registry-consul
0.0.1
com.weibo
motan-registry-zookeeper
0.0.1
com.weibo
motan-springsupport
0.0.1
org.springframework
spring-context
4.0.5.RELEASE
motan
注意如果maven下载不下来可以去仓库直接搜,然后下载jar包,我在搭建的过程就遇到了jar包下载不下来的情况