This commit is contained in:
Redkale
2016-11-25 09:32:43 +08:00
parent 42996c473f
commit 477e9864c4
2 changed files with 7 additions and 7 deletions

BIN
doc/Redkale开发手册.doc Normal file

Binary file not shown.

View File

@@ -32,13 +32,13 @@
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、提供HTTP服务同时内置JSON功能与限时缓存功能 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、TCP层完全使用NIO.2并统一TCP与UDP的接口 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、提供分布式与集中式部署的无缝切换 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5、提供类似JPA功能包含数据缓存自动同步与简洁的数据层操作接口 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6、可以动态修改已依赖注入的资源 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5、提供类似JPA功能包含数据缓存自动同步、分表分库与简洁的数据层操作接口 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6、支持依赖注入的资源的动态修改 <br/>
</p>
<h3><a id="redkale_think" class="anchor" href="#" aria-hidden="true"></a>设计理念</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作为一个全新的微服务框架,不仅是使用了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的默认实现。这其实包含了控制反转的思想让框架里的零件可以让开发者控制。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与主流框架比功能上Redkale显得很简单这也是Redkale的一个特点并非不足从一个良好的设计习惯或架构上来看有些常用功能是不需要提供的如Redkale的HTTP服务不支持HTTPS和JSPHTTPS比HTTP多了一层加密解密这种密集的数字计算不是Java的专长同时一个稍好的提供HTTP服务的架构不会将Java动态服务器放在最前端通常前面会放nginx或apache除了负载均衡还能静动分离既然Java服务器前面有C写的服务器那么HTTPS的加解密就应该交给前面的服务器处理。Redkale再提供HTTPS服务就显得鸡肋。JSP其实算是一个落后的技术现在是一个多样化终端的时代终端不只局限于桌面程序和PC浏览器还有原生App、混合式App、微信端、移动H5、提供第三方接口等各种形式的终端这些都不是JSP能兼顾的而HTTP+JSON作为通用性接口可以避免重复开发模版引擎的功能加上各种强大的JS框架足以取代JSP(如果初级程序员还花大量时间去学习基于JSP的Struts或Spring MVC框架就有点跟不上时代了)。Redkale在功能上做了筛选不会只因为迎合主流而提供而是以良好的设计思想为指导。这也是Redkale一个很重要的思维。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作为一个全新的微服务框架,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的默认实现。这其实包含了控制反转的思想让框架里的各个组件均可让开发者控制。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与主流框架比功能上Redkale显得很简单这也是Redkale的一个特点并非不足从一个良好的设计习惯或架构上来看有些常用功能是不需要提供的如Redkale的HTTP服务不支持HTTPS和JSPHTTPS比HTTP多了一层加密解密这种密集的数字计算不是Java的专长通常提供HTTP服务的架构不会将Java动态服务器放在最前端而是在前方会放nginx或apache除了负载均衡还能静动分离因此HTTPS的加解密应交给nginx这样的高性能服务器处理。Redkale再提供HTTPS服务就显得鸡肋。JSP其实算是一个落后的技术现在是一个多样化终端的时代终端不只局限于桌面程序和PC浏览器还有原生App、混合式App、微信端、移动H5、提供第三方接口等各种形式的终端这些都不是JSP能兼顾的而HTTP+JSON作为通用性接口可以避免重复开发模版引擎的功能加上各种强大的JS框架足以取代JSP。Redkale在功能上做了筛选不会只因为迎合主流而提供而是以良好的设计思想为指导。这也是Redkale一个很重要的思维。</p>
<h3><a class="anchor" href="convert.html" target="_blank" aria-hidden="true">亮点一. 序列化与反序列化</a></h3>
@@ -48,18 +48,18 @@
<h3><a class="anchor" href="net.html#net_http" target="_blank" aria-hidden="true">亮点二. 轻量级HTTP</a></h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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移动端、第三方接口都可使用统一接口) 因此HTTP层内置了JSON序列化与反序列化接口同时内置HTTP缓存机制。<br/>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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缓存机制。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Redkale 的<a href="net.html#net_ws" target="_blank">WebSocket服务</a>接口不同于JSR 340(Servlet 3.1) 除了提供基本的WebSocket功能 还提供分布式与集中式部署, 当部署多个WebSocket进程时通过配置文件可以实现WebSocket之间连接信息的数据同步。</p>
<h3><a class="anchor" href="net.html#net_sncp" target="_blank" aria-hidden="true">亮点三. SNCP协议</a></h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SNCP(Service Node Communicate Protocol)是Redkale独有的RPC协议 主要用于进程间的数据传输。使用者通过配置文件可以轻易的将Service由<a href="service.html#service_local" target="_blank">本地模式</a>变成<a href="service.html#service_remote" target="_blank">远程模式</a><a href="service.html#service_remote" target="_blank">远程模式Service</a>使用SNCP协议与其他进程的Service通信。使用者无需对远程通信接口使用类似Mina的第三方包自行开发。SNCP是Redkale的核心功能其微服务架构都是基于<a href="service.html#service_local" target="_blank">本地模式Service</a><a href="service.html#service_remote" target="_blank">远程模式Service</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SNCP(Service Node Communicate Protocol)是Redkale独有的RPC协议 主要用于进程间的数据传输,支持泛型和子类的数据转换。使用者通过配置文件可以轻易的将Service由<a href="service.html#service_local" target="_blank">本地模式</a>变成<a href="service.html#service_remote" target="_blank">远程模式</a><a href="service.html#service_remote" target="_blank">远程模式Service</a>使用SNCP协议与其他进程的Service通信。使用者无需对远程通信接口使用类似Mina的第三方包自行开发。SNCP是Redkale的核心功能其微服务架构都是基于<a href="service.html#service_local" target="_blank">本地模式Service</a><a href="service.html#service_remote" target="_blank">远程模式Service</a></p>
<h3><a class="anchor" href="source.html#source_datasource" target="_blank" aria-hidden="true">亮点四. DataSource</a></h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Redkale提供DataSource类对数据层进行操作其功能类似JPA。最大程度的简化数据层的操作免去SQL/JPQL语句的编写。同时提供过滤查询与JavaBean的结合、读写分离、数据库热切换、本地/远程部署、进程间缓存自动同步等功能。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Redkale提供DataSource类对数据层进行操作其功能类似JPA。最大程度的简化数据层的操作免去SQL/JPQL语句的编写。同时提供过滤查询与JavaBean的结合、读写分离、数据库热切换、本地/远程部署、数据分库分表、进程间缓存自动同步等功能。</p>
<h3><a id="redkale_code" class="anchor" href="#" aria-hidden="true"></a>Java 源码</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://github.com/redkale" target="_blank" >Github 源码 &nbsp;&nbsp; https://github.com/redkale</a><br/>