用户工具

站点工具


分享:技术:gxxrpc:gxxrpc介绍文档

gxxrpc介绍文档

版本

作者 日期 版本 说明
关向辉(Gxx) 2017-11-20 1.0 梳理文档

介绍

gxxrpc是一个基于java的简易版高性能(?)RPC框架,实现功能参考dubbo。

服务端暴露服务接口,客户端引用服务,将调用服务名称,方法,参数送到服务端,服务端接收并反射执行,返回结果。依赖gxxrpc可以方便的实现整个过程的rpc调用。

源码

架构

  1. Providor服务端启动,将服务注册到Register注册中心
  2. Consumer客户端启动,将引用注册到Register注册中心,并订阅引用服务变化和降级服务变化
  3. Register注册中心有服务注册或者下线,或者降级服务的新增或者删除,都会通知Consumer客户端,客户端内部负载均衡路由调用
  4. Consumer客户端根据从Register注册中心获取的服务列表,根据负载均衡算法路由调用指定Providor服务端
  5. Consumer客户端配置监控,将服务调用详情数据推送给Manage治理中心
  6. Manage治理中心管理降级服务,接收监控数据,查看监控数据和图表
  7. Gateway泛化网关配置http请求转rpc服务调用关系,将http请求转成rpc调用,返回json结果

示例

要求

jdk1.7或者更高

maven3.0或者更高

maven依赖

客户端和服务端,都需要依赖gxxrpc的maven包

<dependency>
	<groupId>com.gxx</groupId>
	<artifactId>rpc</artifactId>
	<version>1.0.0-SNAPSHOT</version>
</dependency>

服务接口定义

服务端定义服务接口并暴露api jar包

package com.gxx.rpc.service;

import java.math.BigDecimal;

/**
 * 用户服务
 * @author Gxx
 */
public interface UserService {

	/**
	 * 加法-正常返回结果
	 * @param a
	 * @param b
	 * @return
	 */
	BigDecimal normalPlus(BigDecimal a, BigDecimal b);
}

服务接口实现

服务端服务接口实现,没必要暴露在api jar包中

package com.gxx.rpc.service;

import java.math.BigDecimal;

/**
 * 用户服务实现类
 * @author Gxx
 */
public class UserServiceImpl implements UserService {

	/**
	 * 加法-正常返回结果
	 * @param a
	 * @param b
	 * @return
	 */
	public BigDecimal normalPlus(BigDecimal a, BigDecimal b) {
		return a.add(b);
	}
}

服务端配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:gxxrpc="http://www.recorddrip.com/schema/gxxrpc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.recorddrip.com/schema/gxxrpc http://www.recorddrip.com/schema/gxxrpc/gxxrpc.xsd">

	<!-- 应用 -->
	<gxxrpc:application name="rpc_server" />
	
	<!-- 服务端 -->
	<gxxrpc:server port="9527" />
	
	<!-- 注册中心 -->
	<gxxrpc:register type="zookeeper" ip="121.43.104.34" port="2181" />
	
	<!-- 提供服务 -->
	<gxxrpc:service id="userService" name="com.gxx.rpc.service.UserService" ref="userServiceImpl" />
	
	<bean id="userServiceImpl" class="com.gxx.rpc.service.UserServiceImpl" />
	
</beans>

服务端启动

	/**
	 * 测试服务端-base版本
	 * @throws Exception
	 */
	@SuppressWarnings("resource")
	@Test
	public void testServer_base() throws Exception {
		logger.info("测试服务端-base版本");
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("gxxrpc-provider-base.xml");
		context.start();
		System.in.read();
	}

客户端配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:gxxrpc="http://www.recorddrip.com/schema/gxxrpc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.recorddrip.com/schema/gxxrpc http://www.recorddrip.com/schema/gxxrpc/gxxrpc.xsd">

	<!-- 应用 -->
	<gxxrpc:application name="rpc_client" />
	
	<!-- 客户端 -->
	<gxxrpc:client load_balance="poll" />
	
	<!-- 注册中心 -->
	<gxxrpc:register type="zookeeper" ip="121.43.104.34" port="2181" />
	
	<!-- 引用 -->
	<gxxrpc:refrence id="userService" name="com.gxx.rpc.service.UserService" />
	
</beans>

客户端启动

	/**
	 * 测试客户端-base版本
	 * @throws Exception
	 */
	@SuppressWarnings("resource")
	@Test
	public void testClient_base() throws Exception {
		logger.info("测试客户端-base版本");
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("gxxrpc-consumer-base.xml");
		context.start();
		/**
		 * 服务调用
		 */
		UserService userService = (UserService)context.getBean("userService");
		BigDecimal a = new BigDecimal("123");
		BigDecimal b = new BigDecimal("321");
		logger.info("a+b:" + userService.normalPlus(a, b));
		System.in.read();
	}

能力

xml配置

基于Spring可扩展Schema提供自定义配置支持

分布式通讯

底层使用netty作为网络通讯框架

注册中心

服务注册与订阅,都通过zookeeper

定向服务

可以指向指定服务提供方ip和端口,不指向注册中心

负载均衡策略

支持多台服务提供方集群,实现负载均衡算法:轮询,随机,加权轮询,加权随机,源地址哈希

集群容错策略

服务调用失败的策略:快速失败,失败重试,失败安全,广播失败,广播安全

服务版本控制

服务匹配相同版本号才可调用

设置超时时间

超时时间设置,默认超时时间5秒

结果缓存

设置缓存时间,缓存超上限,FIFO先进先出算法

泛化调用

不依赖api发起rpc调用

上下文信息

应用名称,ip,本次线程内调用方信息,服务方信息

隐式参数

非服务入参,客户端设置隐藏参数,服务端获取隐藏参数

异步调用

实时返回null,异步从上下文信息中获取

本地调用

不扫描注册中心,从本应用中寻找服务

拦截器

pre/post/exception

服务降级

服务请求方判断服务被降级,直接返回null,降级服务管理

优雅停机

从注册中心下掉服务和引用

telnet治理

查看应用名称,ip,管理缓存,管理降级服务

监控

向治理中心发送监控调用服务情况

治理中心[gxxrpc-manage]

用户登录

用户名,密码验证

服务治理

服务降级与非降级切换,服务请求方判断是否降级

监控查询

查询监控数据明细,统计监控并发数,平均耗时,tps

实时监控

曲线图展示选择时间段监控交易并发数,平均耗时,tps

泛化网关[gxxrpc-gateway]

用户登录

用户名,密码验证

泛化配置

增删改查泛化配置

http请求转发

http请求判断泛化转rpc调用返回json结果

curl 请求:

http://localhost:8080/gxxrpc-gateway/user/getUserInfo.htm?name=gxx&age=999

curl 返回:

"hello [gxx:999] from server!"

schema配置手册

gxxrpc:application

标签功能:配置应用相关信息

属性 类型 是否必填 默认/固定值 描述
id string 固定值:application 唯一id
name string 系统名称

gxxrpc:server

标签功能:配置服务端相关信息

属性 类型 是否必填 默认/固定值 描述
id string 固定值:server 唯一id
port string 监听端口

gxxrpc:client

标签功能:配置客户端相关信息

属性 类型 是否必填 默认/固定值 描述
id string 固定值:client 唯一id
load_balance string 默认值:poll 负载均衡

gxxrpc:telnet_manage

标签功能:配置telnet服务治理相关信息

属性 类型 是否必填 默认/固定值 描述
id string 固定值:telnet_manage 唯一id
port string 监听端口

gxxrpc:monitor

标签功能:配置监控相关信息

属性 类型 是否必填 默认/固定值 描述
id string 固定值:monitor 唯一id
ip string 监控ip
port integer 监听端口

gxxrpc:register

标签功能:配置注册中心相关信息

属性 类型 是否必填 默认/固定值 描述
id string 固定值:register 唯一id
type string 类型
ip string ip
port string 端口
username string 用户名
password string 密码

gxxrpc:service

标签功能:配置服务相关信息

属性 类型 是否必填 默认/固定值 描述
id string 唯一id
name string 服务接口名称
impl string 服务实现类
ref string 服务实现相关类
version string 版本
weight integer 默认值:5,范围:0~10 权重

gxxrpc:refrence

标签功能:配置引用相关信息

属性 类型 是否必填 默认/固定值 描述
id string 唯一id
name string 服务接口名称
version string 版本
timeout integer 默认值:5000 超时毫秒数
direct_server_ip string 指向服务ip
direct_server_port string 指向服务端口
cluster_fault string 集群容错策略
use_cache string 默认值:false,范围:true/false 使用缓存
cache_time integer 缓存时间(秒)
async string 默认值:false,范围:true/false 异步
search_local string 默认值:false,范围:true/false 本地调用
intercept string 默认值:false,范围:true/false 是否拦截
interceptor string 拦截器

后期版本规划

  1. 目前支持spring延伸xml标签配置,后续将支持properties配置和api方式配置
  2. 目前底层采用netty作为通讯框架,后续将支持mina
  3. 目前注册中心采用zookeeper,后续将支持redis和自开发一套注册中心,实现服务的注册和订阅
  4. 目前负载均衡算法有轮询,随机,加权轮询,加权随机,源地址哈希,后续将支持最小连接数算法
  5. 目前泛化调用仅支持基础类型和java.lang.String类型,后续将支持复杂参数类型
  6. 目前拦截器可以拦截客户端调用服务的前后,后续将支持服务端被请求时的拦截
  7. 目前优雅停机从注册中心下掉服务和引用,后续将支持其他资源释放
  8. 目前监控是监控客户端请求,整个过程包括服务网络开销,后续将支持监控服务端请求,这里不包括网络开销
  9. 目前很多配置都控制服务类级别,后续将支持控制方法级别
分享/技术/gxxrpc/gxxrpc介绍文档.txt · 最后更改: 2017/12/06 18:18 由 gxx