xian frame - Java 微服务框架


Apache-2.0
跨平台
Java

软件简介

xian-asynchronous

xian是一个微服务框架,更确切的说是一个微服务套件。它基于Java8编写,不依赖spring,不依赖dubbo,上手和学习难度非常小。如果是以学会使用为目的,只要你会Java语言会gradle构建工具,甚至不需要了解微服务的各种概念,比学会使用dubbo和spring
cloud不知道简单多少倍。

很开心地告诉大家,现在我们可以基于xian开发100%异步的微服务了!我们基于netty非阻塞io和rxJava2响应式编程风格,实现了以同步风格代码开发异步业务逻辑。
从gateway到业务层,整个业务生命周期都是异步的!当然,DAO层目前依然使用的是阻塞的JDBC,是由于目前我们局限于JDBC阻塞的标准API。
至此,xian也是actor模型的完整实现了,希望哪天可以跟akka、vertx做性能pk!

xian frame的基础介绍

xian frame能解决其他主流微服务框架费力才能解决或者解决不了的问题

  1. 微服务粒度自由拆分,修改配置和拆分包即可实现,几乎不用修改Java代码。

  2. 微服务API接口文档自动生成以及API文档定制。

  3. 微服务与数据库一对一、一对多、多对多关系轻松切换,而不用修改代码的问题。

  4. 几行代码实现经典的分片顺序消息推送场景。

  5. 微服务接口编排。

  6. 部署和监控问题。

  7. 帮助实现devops开发运维协作能力。

  8. actor-model实现,开发异步业务而没有回调地狱!

基于xian你可以实现如下逻辑架构图对应的微服务集群

30分钟学会使用xian frame开发微服务

编写一个微服务单元

编写一个微服务单元只需要实现接口Unit即可:

public class HelloWorldUnit implements Unit {
    @Override
    public String getName() { // 指定一个unit名称
        return "helloWorld";
    }
    
    @Override
    public Group getGroup() { // 指定当前微服务单元所属的group对象
        return TestGroup.singleton;
    }

    @Override
    public Input getInput() { // 指定微服务单元的入参定义
        return Input.create().add("yourName", String.class, "你的名字", REQUIRED);
    }

    @Override
    public void execute(UnitRequest msg,Handler<UnitResponse> handler) { // 当前微服务单元的执行逻辑
        UnitResponse unitResponse = UnitResponse.createSuccess("hello world, "+ msg.getString("yourName"));
        handler.handle(unitResponse); // callback回调 以返回unit执行结果
    }
}

定义一个微服务单元是不是很简单? 接下来我们展示如何使用RPC来调用该服务单元:

UnitResponse resp = SingleRxXian.call("test", "helloWorld", map/bean).blockingGet();//这种阻塞业务的方式,我们是非常不推荐的!这里仅仅做展示。

以上是同步RPC调用,下面展示异步RPC调用:

SingleRxXian
    .call("test", "helloWorld", map/bean)
    .subscribe(unitResponse -> {
        // 这里可以对unitResponse进行处理
    });
    
// 链式调用, 这里如果大家对rxJava有一定的了解的话,那么以下代码你肯定信手拈来
SingleRxXian
    .call("test", "helloWorld", map/bean)
    .flatMap(unitResponse -> {
       return SingleRxXian.call("anotherGroup", "anotherUnit0", unitResponse.dataToMap());
    })
    .flatMap(unitResponse -> {
       return SingleRxXian.call("anotherGroup", "anotherUnit1", unitResponse.dataToMap());
    })
    .subscribe(unitResponse -> {
        // 这里可以对unitResponse进行处理
    });

接下来,你只需要在各个微服务内编写各自的微服务单元,然后就可以实现自己的分布式应用啦,就是这么简单!

xian frame现有功能

  1. 微服务间通讯RPC、MQ。

  2. 方法级粒度的服务治理、服务可视化管理。

  3. 集中日志收集和可视化日志查询。

  4. 分布式业务链路追踪方案,可以在上述3的日志系统内查询定位出单条业务链路上完备日志线。

  5. 将Java web应用集成到微服务集群内形成业务层的“微服务”,复用框架提供的自动化集成部署和横向扩展能力,目前支持任何servlet框架集成,特别对springboot做了友好支持。

  6. 微服务和数据库一对一、一对多、多对多关系的灵活支持。

  7. 构建部署和持续集成插件。

  8. 业务监控插件。

  9. 业务线程池管理和监控。

  10. 服务不下线:全微服务0停服更新。

  11. 内置轻量级的持久层dao插件,支持连接池监控、慢SQL监控和防SQL注入等。

  12. 轻量级api网关,具有一定的api接口编排能力。

  13. api文档自动化生成的能力。

  14. 基于oauth2.0的api网关安全管理和ip白名单控制能力。

  15. 可快速实现开放平台能力。

  16. redis缓存插件,支持多redis数据源能力。

  17. 分布式消息订阅和推送功能。

  18. 定时任务调度功能。

  19. 集中配置管理。

  20. 分布式锁。

  21. 多环境管理(研发、测试、生产环境)

  22. 本地非集群运行模式和本地集群运行模式,方便开发阶段调试。

  23. log4j-1.x、log4j-2.x日志插件

  24. 短信和邮件发送插件

  25. mqtt协议客户端集成

  26. 对腾讯云k8s容器服务的集成

  27. 对数据库读写分离的友好支持。

  28. 一致性哈希算法的封装支持。

  29. 基于一致性哈希算法的异步保序功能。

  30. 插件式无限扩展新功能的能力。

  31. 函数响应式同步编程风格实现异步业务逻辑。

正在开发中的功能

  1. 内置持久层框架对分布式事务支持

  2. api网关内置反向代理的功能

  3. api接口编排脚本支持热更新

  4. 断路器、熔断技术

规划中的功能

  1. 基于api网关内置反向代理实现灰度/蓝绿/红黑发布。

  2. 集成rxJava实现纯异步的微服务调用模式,可完全杜绝线程阻塞情况的发生,预估可成倍提升业务线程的性能。 已上线。

  3. 不局限于特定语言,将来会率先支持.NET语言实现微服务,帮助解决许多传统企业历史信息系统转型互联网微服务架构。可行性方面,本框架已经抽象出了rpc通信协议规范和服务治理规范,因此几乎其他所有OOP语言都可以集成进来。

  4. 基于“录音机”的API自动化测试方案。

  5. 分库分表方案。

  6. 对rancher管理平台的rest api集成。

写在末尾

  1. xian,即“贤”,来自某个人的名,代表“好”、“佳”的意思。谨以此名字纪念我死去的爱情。

  2. 请大家多多指点,加星加星!关注! 那些开发中和规划中的功能就全靠你们的星星了,可怜脸。

  3. 鸣谢:
    http://netty.io,
    https://github.com/ReactiveX/RxJava,
    https://github.com/alibaba/fastjson,
    https://github.com/google/guava, https://logging.apache.org/log4j,
    http://zookeeper.apache.org,
    http://curator.apache.org;