ray架构_OLI理论框架

ray架构_OLI理论框架Rayson是一个支持跨平台通信以及快速开发的API服务器及其开发框架

ray架构_OLI理论框架"

本系列之1: 简介👈
本系列之2: API服务开发
本系列之3: RSON序列化格式
本系列之4: RPC调度原理
本系列之5: NIO实现原理
本系列之6: 客户端动态代理原理
本系列之7: 注解处理器(APT)原理

Rayson简介

Rayson是一个支持跨平台通信以及快速开发的API服务器及其开发框架。本文作为Rayson框架分析的系列文章的第一篇,对其总体情况进行简单的介绍。

Rayson特性

简单

  • 基于标准 HTTP 协议
    Rayson的应用层协议采用标准的HTTP/1.1协议,该协议的简单和通用性为大家所熟知。
    另外HTTP/1.1作为万维网(WWW)服务的传输标准,因此非常成熟,有众多支持工具。
    HTTP/1.1协议的这些特点,使得我们使用Rayson开发出来的API具有简单、易于理解、易用、易测试的特点。

  • 序列化默认采用快速、压缩结构化数据
    Rayson的通信数据序列化默认采用RSON(Rayson Object Notation)(参考 本系列之3: RSON序列化格式)格式。
    该格式是一种结构化数据,具有编码(解码)快速、空间占用小的特点。
    采用RSON格式,比直接采用基于文本的application/x-www-form-urlencoded以及application/json等格式,性能大大得到提高。
    同时,为了兼容传统支持HTTP协议的客户端(例如浏览器、curl命令行等),Rayson也支持application/x-www-form-urlencodedapplication/json等格式的通信数据。

  • 使用 Java Interface 定义API服务
    Rayson定义一个API服务非常的简单、方便,只需要定义一个Java接口。
    如下代码就定义了一个API服务,该服务定义了一个服务接口org.rayson.demo.simple.api.SimpleProtocol/echo,功能是把传入的字符串参数返回:

package org.rayson.demo.simple.api;
@Service
public interface SimpleProtocol extends Protocol { 
   
    public String echo(String msg) throws IOException, RpcException;
}

关于定义API服务更详细的规范请参考接口org.rayson.api.Protocol的javadoc。

轻量

  • 嵌入式服务器
    Rayson的API服务器采用嵌入式的模式,只需要在你的Java项目中引入rayson.server这个Java包就可以进行开发和运行。如下所示:
<dependency>
        <groupId>org.rayson</groupId>
        <artifactId>rayson.server</artifactId>
        <version>1.0.0-BETA</version>
</dependency>
  • 依赖极少的Java类库

一个最简单的SpringBoot应用,它所依赖的Java类库如下所示:

tomcat-embed-core-9.0.29.jar 3.2M
spring-core-5.2.2.RELEASE.jar 1.4M
spring-web-5.2.2.RELEASE.jar 1.4M
jackson-databind-2.10.1.jar 1.3M
spring-boot-autoconfigure-2.2.2.RELEASE.jar 1.3M
spring-context-5.2.2.RELEASE.jar 1.2M
hibernate-validator-6.0.18.Final.jar 1.1M
spring-boot-2.2.2.RELEASE.jar 1.0M
spring-webmvc-5.2.2.RELEASE.jar 924K
spring-beans-5.2.2.RELEASE.jar 669K
spring-boot-actuator-2.2.2.RELEASE.jar 561K
spring-boot-actuator-autoconfigure-2.2.2.RELEASE.jar 482K
logback-core-1.2.3.jar 461K
micrometer-core-1.3.1.jar 459K
spring-aop-5.2.2.RELEASE.jar 364K
jackson-core-2.10.1.jar 340K
snakeyaml-1.25.jar 296K
logback-classic-1.2.3.jar 284K
spring-expression-5.2.2.RELEASE.jar 275K
log4j-api-2.12.1.jar 270K
tomcat-embed-websocket-9.0.29.jar 260K
tomcat-embed-el-9.0.29.jar 248K
HdrHistogram-2.1.11.jar 120K
jackson-datatype-jsr310-2.10.1.jar 103K
jakarta.validation-api-2.0.1.jar 91K
jackson-annotations-2.10.1.jar 66K
classmate-1.5.1.jar 66K
jboss-logging-3.4.1.Final.jar 59K
slf4j-api-1.7.29.jar 40K
jackson-datatype-jdk8-2.10.1.jar 34K
LatencyUtils-2.0.3.jar 29K
jakarta.annotation-api-1.3.5.jar 24K
spring-jcl-5.2.2.RELEASE.jar 23K
log4j-to-slf4j-2.12.1.jar 17K
jackson-module-parameter-names-2.10.1.jar 9.1K
jul-to-slf4j-1.7.29.jar 4.5K
spring-boot-starter-**.jar ...

总共18M+44个jar包,是比较重的实现。
而一个典型的Rayson服务器端应用,它所依赖的类库如下所示:

rayson.share-1.0.0-BETA.jar 141K
javax.json-1.1.4.jar 126K
rayson.api-1.0.0-BETA.jar 100K
rayson.server-1.0.0-BETA.jar 58K
slf4j-api-1.7.22.jar 40K
slf4j-jdk14-1.7.22.jar 8.3K

总共488K+6个jar包,明显轻量得多。

高性能

  • 纯 NIO 实现
    Rayson的底层通信采用标准NIO(Non-blocking I/O)来实现,采用单线程非堵塞模式以及重用字节缓冲(ByteBuffer)的方式来读写网络层数据,使得底层通信的处理效率非常高。详细请参考本系列之5: NIO实现原理。

  • 多工作线程智能调度
    Rayson的API服务器对客户端的连接以及请求进行多工作线程的智能调度。调度机制能够对客户请求进行智能调度,并且能够根据连接和请求的压力和强度动态调整工作线程数。详细请参考 本系列之4: RPC调度原理。

易用

  • 客户端直接使用 Java Interface 来调用远程 API 服务
    Rayson的java客户端调用远程的API服务非常简单,只需要把前文所述的用 Java Interface 所定义 API 接口作为参数传给Rayson客户端,返回一个动态代理类,对代理类进行操作,就可以实现对远程API的调用并且得到返回结果。
    示例代码如下:
public static void main(final String[] args) throws Exception { 
   
    final RaysonServerAddress serverAddr = new RaysonServerAddress("localhost", 8080);
    SimpleProtocol simpleProtocol = Rayson.createProxy(serverAddr, SimpleProtocol.class);
    try { 
   
        String echoMsg = simpleProtocol.echo("Hello World");
        System.out.println(echoMsg);
    } catch (IOException e) { 
   
        System.err.println("Network error occurred");
    } catch (RpcException e) { 
   
        System.err.println("Invoking RPC got logic error: error_code: " + e.getCode() + " error_message: " + e.getMessage());
    }
}

关于客户端动态代理的原理请参考本系列之6: 客户端动态代理原理。

  • 服务器及客户端的使用接口非常简约
    简约是Rayson系统的核心设计原则。无论是服务器端还是客户端,Rayson对开发者的使用接口都是非常简约的,这样简约的设计有助于开发者快速准确地理解并使用Rayson来开发、实现自己的API。
    关于具体的使用接口请参考本系列之2: API服务开发以及项目的javadoc。

  • 开发者专注于业务逻辑的实现、无需关注底层通信及RPC请求调度细节
    分层和隔离同样是Rayson系统的核心设计原则。Rayson把开发者API、RPC请求调度、底层通信实现三个层次进行了很好的隔离,使得开发者可以专注于自身业务逻辑的实现、而无需关注底层通信及RPC请求调度细节。

示例代码

Rayson的示例代码,请参阅本系列之2: API服务开发。


The End

今天的文章ray架构_OLI理论框架分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85176.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注