Venus 日志

Venus 3.3.1 Release

bug fixed:

  1. 解决返回结果类中包含泛型的解析异常

务必需要将以下类库进行升级:

版本依赖
<dependency>
<groupId>com.meidusa.toolkit</groupId>
<artifactId>fastmark</artifactId>
<version>1.0.3</version>
</dependency>

<dependency>
<groupId>com.meidusa.toolkit</groupId>
<artifactId>fastjson</artifactId>
<version>1.4.3</version>
</dependency>

<dependency><groupId>com.meidusa.toolkit.commons</groupId>
<artifactId>toolkit-common-pool</artifactId>
<version>1.2.8</version>
</dependency>

<dependency>
<groupId>com.meidusa.toolkit.net</groupId>
<artifactId>toolkit-net-nio</artifactId>
<version>1.0.15</version>
</dependency>

Venus 3.2.20 Release

bug fixed:

  1. 解决数据包超过8M的时候出现解析异常

版本依赖升级:

<dependency>
<groupId>com.meidusa.toolkit.net</groupId>
<artifactId>toolkit-net-nio</artifactId>
<version>1.0.15</version>
</dependency>
Venus 3.2.19 Release

bug fixed:

  1. 修复用户名、密码的认证方式
  2. 客户端请求等待的超时时间默认为30秒,客户端通过factory设置 该参数目前无效,需要通过 endpoint 的配置来指定 timewait时间(如果该接口会超过30秒的话)
  3. 	/**
    	 * 有返回结果的服务调用,该接口只能支持同步调用
    	 *
    	 * @param name
    	 * @return Hello
    	 */
    	@Endpoint(name = "getHello", timeWait = 5000)
    	public abstract Hello getHello(@Param(name = "name") String name);
  4. Venus的文件加载机制采用Spring 提供的ResourceLoader
  5. 修复了SpringMVC中 多级加载Venus Service Client配置文件,子Bean Container无法找到父 Bean Container中的 Venus Service的问题
Venus 3.2.12 Release
  • fastjson升级到 1.3.17
  • venus remote配置的地址,默认情况下采用物理连接池共享(多个remote中包含相同的ip,则该ip形成的pool是共享的,如果要独享,则需要设置remote属性 share="false")
  •  
Venus 3.2.10 Release
  • 版本依赖升级
    类库 版本 修改内容
    toolkit-net-nio
    1.0.12 
    • 增加方法
    fastjson 1.3.16
    • 功能增强:Map中key支持 Long、Integer等基本数据类型对象,修正 TreeMap、LinkedList等有序集合经过序列化以后数据乱序问题
  • Venus Bus升级,增加路由日志
  • 修复ObjectPool的心跳检测有效性的问题
Venus 3.2.3 Released

新版本发布,主要完善venus 日志的输出

   <!-- venus服务端口启动日志 -->
    <logger name="com.meidusa.toolkit.net.ConnectionAcceptor" additivity="true">
        <level value="info"/>
        <appender-ref ref="VENUS"/>
        <appender-ref ref="STDOUT"/>
    </logger>
    
   <!-- venus主日志 -->
    <logger name="com.meidusa.venus" additivity="false">
        <level value="info"/>
        <appender-ref ref="VENUS"/>
    </logger>

    <logger name="com.meidusa.toolkit.net" additivity="false">
        <level value="info"/>
        <appender-ref ref="VENUS"/>
    </logger>


       <!-- Venus后端socket连接池的心跳信息,info级别只会打印异常的Pool,debug将会打印所有Pool的心跳情况 -->
     <logger name="com.meidusa.toolkit.common.heartbeat" additivity="false">
	 	<level value="info"/>
        <appender-ref ref="VENUS-HEARTBEAT"/>
	</logger>
    
    <!-- venus性能相关的日志,诸如服务调用消耗的时间 -->
    <logger name="venus.backend.performance" additivity="false">
        <level value="debug"/>
        <appender-ref ref="VENUS-PERFORMANCE"/>
    </logger>


    <!-- 作为venus 客户端调用远程服务的性能情况 -->
    <logger name="venus.client.performance" additivity="false">
        <level value="debug"/>
        <appender-ref ref="VENUS-PERFORMANCE"/>
    </logger>

    <!-- Venus执行线程中的等待任务日志 -->
    <logger name="venus.report.queue" additivity="false">
        <level value="info"/>
        <appender-ref ref="VENUS"/>
    </logger>


    <!-- venus 调用日志,客户端调用的时候将会产生一个UUID,这个ID将会流传到服务端,服务端也会记录本次调用 -->
    <logger name="venus.tracer" additivity="false">
        <level value="debug"/>
        <appender-ref ref="VENUS-TRACER"/>
    </logger>
Venus 3.0.9 Released

Bug fix:

  • Venus client中配置Service,分成Remote配置与简单的ipAddressList 配置,本次修正了采用 ipAddressList,原远程连接的连接池配置,默认将支持 testOnBorrow=true,testWhileIdle=true
  • 修复Venus返回结果Map中带数组,而没有转换成相应类型的bug 

功能增加:

  • 增加@ExceptionCode Annotation 取代 采用CodedException的接口实现方式,更加方便异常的定义,目前Exception采用扫描classpath的方式获取所有标有 ExceptionCode Annotation的类 进行cache,方便异常类的系列化与反序列化

 异常例子:

     

@ExceptionCode(errorCode=1988000)  /** 该code在你的系统中需要唯一性,否则该code转换成Exception 将会混乱 **/
public class HelloRuntimeException extends RuntimeException {
    private static final long serialVersionUID = 1L;

    public HelloRuntimeException(String msg){
        super(msg);
    }
}
Venus 3.0.6 Released
  1. source code文件采用 utf8编码
  2. 修正了接口返回null 客户端出现解析异常的bug
Venus 3.0.4 Released

功能增加:

  1. 支持服务参数 无默认构造函数  类序列化与反序列化,该类必须实现 java.io.Serializable  接口
  2. Endpoint annotation增加 timeWait ,解释:
    1. 客户端:等待该方法返回结果的超时时间
    2. 服务端:客服端请求进入队列,等待执行线程开始执行的时间
    3. 时间单位:毫秒,默认30000毫秒
    4. 主要作用:该参数主要用于协商该接口的调用最大等待时间,服务端的作用在于防止请求的浪涌(诸如秒杀,秒杀的特征基本在于刷页面,会导致不停的请求进入后端服务执行队列中,包括客户端恶意请求,不等待请求结果而再次发起请求)。这种情况服务端执行线程肯定非常繁忙,而且开始有队列堆积,当堆积到一定程度,如果服务端从队列中获得该请求,并且开始执行的时候,可能用户已经不耐烦,关闭页面或者已经超时,那么就没有必要执行这个请求,应该返回特定的数据包给客户端,告知请求被忽略了。
Venus 3.0.3 Released

BugFix:

1. 修正了3.0.2之前的客户端对 3.0.2版本的服务端调用 出现异常的问题

Venus 3.0.2 Released

Venus 3.0.2增加Venus调用跟踪日志:

2013-10-21 11:14:48,385 DEBUG venus.tracer - receive id=d6863646-6b87-4e53-8d70-41068fc875e3,service=HelloService.sayHello,params={name:jack}
2013-10-21 11:14:48,394 DEBUG venus.tracer - receive id=f891fddf-537c-4195-82ea-d1d9384a2794,service=HelloService.sayAsyncHello,params={name:jack}
method sayAsyncHello invoked
2013-10-21 11:14:48,418 DEBUG venus.tracer - receive id=1e986970-0235-403d-a33b-ec9208781039,service=HelloService.sayHelloCallback,params={name:jack,callback:com.meidusa.venus.notify.ReferenceInvocationListener@28f19d6e}
2013-10-21 11:16:27,853 DEBUG venus.tracer - receive id=35fcb9ae-deb1-4b5e-abdf-707d49c826ef,service=HelloService.getHello,params={name:Jack}

主要在几个地方增加日志:

  • 发起Venus 服务请求 (request id=....)
  • 接收到服务请求 (receive id=....)
  • 接收到回调请求 (callback id=...)

Venus 日志格式:

* debug打印的信息:请求标识{request,receive,callback} id={uuid},service={apiName},params={request Param Json}
* Info 打印的信息:请求标识{request,receive,callback} id={uuid},service={apiName}
* warn或则error将忽略该日志
原理:
  1. 客户端:Venus通过ThreadLocal判断当前是否有请求表示初始请求的UUID,如果不存在则产生byte[16]数组,存储在com.meidusa.venus.util.ThreadLocalMap, Key="REQUEST_TRACE_ID",每次发起请求,则将这byte[16]通过数据包传输
  2. 服务端:接受到Venus客户端的请求,则解析数据包,获取byte[16],存储在com.meidusa.venus.util.ThreadLocalMap,以方便该线程的Venus调用使用,如果在该线程进行二次Venus调用,那么可以将这个byte[16] 带入这次请求
  3. 重置UUID:单线程或者后台系统如何分离不同的Venus请求? 每次调用Venus,如果一次调用作为一个完整的Venus调用,需要通过 com.meidusa.venus.util.ThreadLocalMap类 调用reset() 方法来清理 ThreadLocalMap中的byte[]
  4. 日志输出:通过UUID类,将byte[16]生成36个长度的字符串打印出来。

相关Log4j配置

     <logger name="venus.tracer" additivity="true">
        <level value="debug"/>
        <appender-ref ref="CONSOLE"/>
    </logger>
Venus 3.0.1 Released

简介: venus 3.0.1做一次重大升级,首先NIO框架进行升级,增加了路由协议,服务端将支持Venus Bus.协议数据包,性能有所提升

本次升级兼容2.x版本

  1. 增加了Venus Bus系统,Venus Registry系统(简单)
  2. 增加nio的虚拟连接池 (PollingBackendConnectionPool)
  3. 依赖全新的网络io框架,toolkit-net-nio
  4. 剔除对log4j的直接依赖,转向对slf4j的接口依赖
  5. venus-backend支持 venus-bus的路由协议包
  6. Venus性能优化
  7. venus接口支持Set集合

Venus 2.3.0 Released

本期更新内容:

  1. 主要解决内部类库的依赖,剔除了不合理的依赖关系
  2. 为接入slf4j做准备
  3. 依赖的Toolkit类库都进行了版本升级
Venus 2.2.7 Released

Venus 2.2.7 Released:

主要新增功能:客户端根据 服务的请求参数,通过一致性hash的方式将请求发送到hash环的一台机器上。

主要目的:有些数据是有缓存,并且这些内存数据会定期执行某种业务。那么跟在内存中的数据相关的操作必须发送到这台服务器上,避免相同数据出现的不同的物理机器上。

这个功能主要是由客户端来决定的,虽然有点不妥,但目前来説,对于内部服务是非常有效的解决方法。

使用方法:

一个接口关于一致性hash的用法
	@Endpoint(name = "getHello",loadbalancingKey="name")
	public abstract Hello getHello(@Param(name = "name") String name);

复杂对象的loadbalancingKey表达式写法:

复杂对象的loadbalancingKey表达式
	@Endpoint(name = "testChild" ,loadbalancingKey="hello.name")
	public abstract Hello testChild(@Param(name = "hello") Hello hello);
注意: 要让一致性hash路由算法起作用,remote中的地址必须配置多个ip
Venus 2.2.6 Released

Venus 2.2.6 Released:

该版本改进有2方面:

  1. validator有了新的性能提升
  2. 修复了toolkit-net-io的一个bug
  • 相关的Bug描述:由于 connectionManager在主循环中检测并且发送ping包,ping发送的时候,如果该connection之前有消息堆积(可能是由于网络问题/CPU/GC时间过长等问题 最终导致消息堆积) ,并且当前消息堆积达到设定的最大值,
    默认最大值Venus设定了1(目前每个连接已经提示到10000),
  • 解决方法: connection *idle check仍旧保留在主循环中,但是发送ping包通过另外一个线程来发送,避免主线程wait.并且增加每个连接的发送队列长度.