V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuxueli
V2EX  ›  Java

XXL-RPC v1.3.1,分布式服务框架,扩展多种负载策略

  •  
  •   xuxueli · 2018-12-21 12:26:11 +08:00 · 1615 次点击
    这是一个创建于 2155 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Release Notes

    • 1、负载均衡 /软负载:提供丰富的负载均衡策略,包括:轮询、随机、LRU、LFU、一致性 HASH 等;
    • 2、服务发现注册逻辑优化:支持批量注册、摘除,升级 xxl-registry 至 v1.0.1 ;
    • 3、新增 jfinal 类型示例项目 "xxl-rpc-sample-jfinal" 支持 jfinal 项目快速接入分布式 RPC 服务功能;高兼容性,原则上支持任务框架,甚至 main 方法直接运行;
    • 4、TCP 通讯方案 Server 端 Channel 线程优化(线程参数=60/300/1000 ),避免 IO 线程阻塞于业务;
    • 5、TCP 通讯方案 Client 端 Channel 线程优化(线程参数=10/100/1000 ),避免 IO 线程阻塞于 callback 业务;
    • 6、TCP 通讯方案 Client 初始化逻辑优化;
    • 7、TCP 长连销毁逻辑优化;
    • 8、底层 Log 整理,RPC 报错时打印完整 Log,包括请求地址,请求参数等;
    • 9、Server 端销毁逻辑优化;
    • 10、static 代码块优化,进行组件无状态优化:response factory 等;迁移到 invoke factory 上来;
    • 11、升级多项 pom 依赖至较新稳定版本;

    简介

    XXL-RPC 是一个分布式服务框架,提供稳定高性能的 RPC 远程服务调用功能。拥有"高性能、分布式、注册中心、负载均衡、服务治理"等特性。现已开放源代码,开箱即用。

    输入图片说明

    特性

    • 1、快速接入:接入步骤非常简洁,两分钟即可上手;
    • 2、服务透明:系统完整的封装了底层通信细节,开发时调用远程服务就像调用本地服务,在提供远程调用能力时不损失本地调用的语义简洁性;
    • 3、多调用方案:支持 SYNC、ONEWAY、FUTURE、CALLBACK 等方案;
    • 4、多通讯方案:支持 TCP 和 HTTP 两种通讯方式进行服务调用;其中 TCP 提供可选方案 NETTY 或 MINA,HTTP 提供可选方案 Jetty ;
    • 5、多序列化方案:支持 HESSIAN、HESSIAN1、PROTOSTUFF、JSON 等方案;
    • 6、负载均衡 /软负载:提供丰富的负载均衡策略,包括:轮询、随机、LRU、LFU、一致性 HASH 等;
    • 7、注册中心:可选组件,支持服务注册并动态发现;可选择不启用,直接指定服务提供方机器地址通讯;选择启用时,内置可选方案:“ XXL-REGISTRY 轻量级注册中心”(推荐)、“ ZK 注册中心”、“ Local 注册中心”等;
    • 8、服务治理:提供服务治理中心,可在线管理注册的服务信息,如服务锁定、禁用等;
    • 9、服务监控:可在线监控服务调用统计信息以及服务健康状况等(计划中);
    • 10、容错:服务提供方集群注册时,某个服务节点不可用时将会自动摘除,同时消费方将会移除失效节点将流量分发到其余节点,提高系统容错能力。
    • 11、解决 1+1 问题:传统分布式通讯一般通过 nginx 或 f5 做集群服务的流量负载均衡,每次请求在到达目标服务机器之前都需要经过负载均衡机器,即 1+1,这将会把流量放大一倍。而 XXL-RPC 将会从消费方直达服务提供方,每次请求直达目标机器,从而可以避免上述问题;
    • 12、高兼容性:得益于优良的兼容性与模块化设计,不限制外部框架;除 spring/springboot 环境之外,理论上支持运行在任何 Java 代码中,甚至 main 方法直接启动运行;

    文档地址

    技术交流

    4 条回复    2018-12-21 15:21:07 +08:00
    ppdudu
        1
    ppdudu  
       2018-12-21 14:19:58 +08:00
    最近在用 job,
    请教一个问题:同一个执行器上有多个 online 机器地址,如何不通过轮询 /失败重试的方式来执行某一个机器上的 handler.
    谢谢
    loveCoding
        2
    loveCoding  
       2018-12-21 14:26:32 +08:00
    作者开源了好多项目 , 牛逼了
    分布式 job , rpc,mq,注册中心 , 能写文章说说是怎样做到的吗? 个人经历如何分配
    Variazioni
        3
    Variazioni  
       2018-12-21 15:11:32 +08:00
    @ppdudu 一致性 HASH 可以保证任务分配到同一个地址。。但是没法指定某一台机器。。话说。为什么会有这种奇怪的需求。。
    xuxueli
        4
    xuxueli  
    OP
       2018-12-21 15:21:07 +08:00
    @loveCoding 你好,这些项目主要要社区一期来迭代维护的,后面有机会会考虑在社区内分享讨论的。

    @ppdudu @Variazioni 是的,一致性 HASH 策略可行的,应该可以满足你的需求。
    也可以结合执行器来做,可以为这个任务单独配置一个执行器,执行器选择手动注册,指定希望运行任务机器地址即可。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1060 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:31 · PVG 06:31 · LAX 14:31 · JFK 17:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.