xian frame 介绍
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能解决其他主流微服务框架费力才能解决或者解决不了的问题
微服务粒度自由拆分,修改配置和拆分包即可实现,几乎不用修改Java代码。
微服务API接口文档自动生成以及API文档定制。
微服务与数据库一对一、一对多、多对多关系轻松切换,而不用修改代码的问题。
几行代码实现经典的分片顺序消息推送场景。
微服务接口编排。
部署和监控问题。
帮助实现devops开发运维协作能力。
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现有功能
微服务间通讯RPC、MQ。
方法级粒度的服务治理、服务可视化管理。
集中日志收集和可视化日志查询。
分布式业务链路追踪方案,可以在上述3的日志系统内查询定位出单条业务链路上完备日志线。
将Java web应用集成到微服务集群内形成业务层的“微服务”,复用框架提供的自动化集成部署和横向扩展能力,目前支持任何servlet框架集成,特别对springboot做了友好支持。
微服务和数据库一对一、一对多、多对多关系的灵活支持。
构建部署和持续集成插件。
业务监控插件。
业务线程池管理和监控。
服务不下线:全微服务0停服更新。
内置轻量级的持久层dao插件,支持连接池监控、慢SQL监控和防SQL注入等。
轻量级api网关,具有一定的api接口编排能力。
api文档自动化生成的能力。
基于oauth2.0的api网关安全管理和ip白名单控制能力。
可快速实现开放平台能力。
redis缓存插件,支持多redis数据源能力。
分布式消息订阅和推送功能。
定时任务调度功能。
集中配置管理。
分布式锁。
多环境管理(研发、测试、生产环境)
本地非集群运行模式和本地集群运行模式,方便开发阶段调试。
log4j-1.x、log4j-2.x日志插件
短信和邮件发送插件
mqtt协议客户端集成
对腾讯云k8s容器服务的集成
对数据库读写分离的友好支持。
一致性哈希算法的封装支持。
基于一致性哈希算法的异步保序功能。
插件式无限扩展新功能的能力。
函数响应式同步编程风格实现异步业务逻辑。
正在开发中的功能
内置持久层框架对分布式事务支持
api网关内置反向代理的功能
api接口编排脚本支持热更新
断路器、熔断技术
规划中的功能
基于api网关内置反向代理实现灰度/蓝绿/红黑发布。
集成rxJava实现纯异步的微服务调用模式,可完全杜绝线程阻塞情况的发生,预估可成倍提升业务线程的性能。 已上线。
不局限于特定语言,将来会率先支持.NET语言实现微服务,帮助解决许多传统企业历史信息系统转型互联网微服务架构。可行性方面,本框架已经抽象出了rpc通信协议规范和服务治理规范,因此几乎其他所有OOP语言都可以集成进来。
基于“录音机”的API自动化测试方案。
分库分表方案。
对rancher管理平台的rest api集成。
写在末尾
xian,即“贤”,来自某个人的名,代表“好”、“佳”的意思。谨以此名字纪念我死去的爱情。
请大家多多指点,加星加星!关注! 那些开发中和规划中的功能就全靠你们的星星了,可怜脸。
鸣谢:
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;