Redkale

##

Redkale 入门 Convert 组件 Service 组件 Source 组件 Net 组件 Watch 组件 Redkale 插件 技术文章

### Redkale 介绍

Redkale(中文名: 红菜苔，湖北武汉的一种特产蔬菜)是基于Java 8全新的微服务开源框架， 包含HTTP、WebSocket、TCP/UDP、数据序列化、数据缓存、依赖注入等功能。 本框架致力于简化集中式和微服务架构的开发，在增强开发敏捷性的同时保持高性能。
Redkale 有如下主要特点：
1、大量使用Java 8新特性（接口默认值、Stream、Lambda、JDk8内置的ASM等）
2、提供HTTP服务，同时内置JSON功能与限时缓存功能
3、TCP层完全使用NIO.2，并统一TCP与UDP的接口
4、提供分布式与集中式部署的无缝切换
5、提供类似JPA功能，包含数据缓存自动同步、分表分库与简洁的数据层操作接口
6、支持依赖注入的资源的动态修改

### 设计理念

作为一个全新的微服务框架，Redkale在接口定义上使用了Java 8大量的新语法，接口有默认实现、接口带静态方法、重复注解等特性，同时在设计上与主流框架有很大不同。Redkale是按组件形式设计的，而非以容器为主，几乎每个子包都是能提供独立功能的组件。如Tomcat是按容器设计的，所有web资源/配置由Tomcat控制，开发者很能难控制到Tomcat内部，而Redkale的HTTP服务只是个组件，开发者既可以自己启动和配置HttpServer，也可以把Redkale当成容器通过Redkale进程来初始化服务。Spring的Ioc容器也是如此，Redkale提供的依赖注入仅通过ResouceFactory一个类来控制，非常轻量，并且可动态更改已注入的资源。Spring提倡控制反转思想，而自身的容器却让开发者很难控制。Redkale是一个既能以组件形式也能以容器形式存在的框架。从整体上看，Redkale的架构分两层：接口和默认实现。开发者若想替换掉Redkale内置的HTTP服务而使用符合JavaEE规范的HttpServlet, 可以采用自定义协议基于JSR 340(Servlet 3.1)来实现自己的HTTP服务；若想使用Hibernate作为数据库操作，可以写一个自己的DataSource实现类；JSON的序列化和反序列化也可以使用第三方的实现；Memcached或Redis也可以作为另一个CacheSource的实现替换Redkale的默认实现。这其实包含了控制反转的思想，让框架里的各个组件均可让开发者控制。
与主流框架比，功能上Redkale显得很简单，这也是Redkale的一个特点并非不足，从一个良好的设计习惯或架构上来看，有些常用功能是不需要提供的，如Redkale的HTTP服务不支持HTTPS和JSP，HTTPS比HTTP多了一层加密解密，这种密集的数字计算不是Java的专长，通常提供HTTP服务的架构不会将Java动态服务器放在最前端，而是在前方会放nginx或apache，除了负载均衡还能静动分离，因此HTTPS的加解密应交给nginx这样的高性能服务器处理。Redkale再提供HTTPS服务就显得鸡肋。JSP其实算是一个落后的技术，现在是一个多样化终端的时代，终端不只局限于桌面程序和PC浏览器，还有原生App、混合式App、微信端、移动H5、提供第三方接口等各种形式的终端，这些都不是JSP能兼顾的，而HTTP+JSON作为通用性接口可以避免重复开发，模版引擎的功能加上各种强大的JS框架足以取代JSP。Redkale在功能上做了筛选，不会只因为迎合主流而提供，而是以良好的设计思想为指导。这也是Redkale一个很重要的思维。

### 亮点一. 序列化与反序列化

Convert包是Redkale内一个独立的组件， 用于数据的序列化与反序列化。包分三块：基本包、JSON包、BSON(Binary Stream Object Notation)包。基本包可以用于扩展其他序列化格式(如: XML)，其JSON性能是其他任何JSON框架不能媲美的，对于非常规的POJO类也提供了方便的自定义接口。BSON用于数据的二进制序列化与反序列化，支持很复杂的泛型数据，是SNCP协议的基础。

### 亮点二. 轻量级HTTP

Redkale 的HTTP是基于异步NIO.2实现的，HttpRequest的输入与HttpResponse的输出均是异步操作，HttpRequest内置JSON参数的获取和文件上传功能，HttpResponse提供数据对象和文件的数据，同时集成了REST ，因此并不遵循JSR 340规范(Servlet 3.1)且也没有实现JSP规范。 HTTP Server只提供四个对象：HttpContext、HttpRequest、HttpResponse、HttpServlet。 传统Session则由数据层实现。Redkale提倡HTTP+JSON接口(网站、PC客户端、APP移动端、第三方接口均可统一接口)， 故内置了JSON序列化与反序列化接口，同时内置HTTP缓存机制。
Redkale 的WebSocket服务接口不同于JSR 340(Servlet 3.1)， 除了提供基本的WebSocket功能， 还提供分布式与集中式部署， 当部署多个WebSocket进程时，通过配置文件可以实现WebSocket之间连接信息的数据同步。

### 亮点三. SNCP协议

SNCP(Service Node Communicate Protocol)是Redkale独有的RPC协议， 主要用于进程间的数据传输，支持泛型和子类的数据转换。开发人员通过配置文件可以轻易的将Service由本地模式变成远程模式。远程模式Service使用SNCP协议与其他进程的Service通信。开发人员无需对远程通信接口使用类似Mina的第三方包自行开发。SNCP是Redkale的核心功能，其微服务架构都是基于本地模式Service和远程模式Service。

### 亮点四. DataSource

Redkale提供DataSource类对数据层进行操作，其功能类似JPA。最大程度的简化数据层的操作，免去SQL/JPQL语句的编写。同时提供过滤查询与JavaBean的结合、读写分离、数据库热切换、本地/远程部署、数据分库分表、进程间缓存自动同步等功能。

### Java 源码

Github 源码 https://github.com/redkale
在线 Javadoc API

Redkale官网: https://redkale.org