写点什么

Java Chassis 3 技术解密,流式响应如何简化 AI 应用开发

  • 2024-07-01
    广东
  • 本文字数:1568 字

    阅读完需:约 5 分钟

Java Chassis 3技术解密,流式响应如何简化AI应用开发

本文分享自华为云社区《Java Chassis 3技术解密:流式响应和人工智能应用开发》,作者:liubao68。


随着生成式人工智能技术的发展,应用程序开发者对于流式响应(Streaming Responses)的诉求越来越多。服务器事件推送(Server Push Events)技术能够在使用 HTTP 协议的前提下,提供流式响应能力。然而,在微服务架构下使用流式响应并不是那么方便,现有的各个微服务开发框架都需要使用不同于响应应答的普通 REST 接口额外能力,采用新的技术或者 API 来满足流式响应的开发诉求,增加了技术成本。


Java Chassis 3 基于服务器事件推送和响应式流(reactive streams)标准,提供了非常简洁的流式响应开发能力,简化人工智能应用开发体验。

使用流式响应


首先,看看微服务架构下一个简单的调用场景。


  前端(浏览器) -> 应用网关(edge service) -> 消费者微服务 -> 提供者微服务
复制代码


  • 提供者微服务:定义流式响应服务和生成流式响应


定义流式响应服务非常简单,只需要将响应类型声明为 Publisher。 业务逻辑可以使用 RxJava 或者 Reactor 等框架生成流式响应。 在下面的例子中,使用 RxJava3 的 API 来实现流式响应。


@RestSchema(schemaId = "ReactiveStreamController")@RequestMapping(path = "/")public class ReactiveStreamController {  @GetMapping("/sseString")  public Publisher<String> sseString() {    return Flowable.fromArray("a", "b", "c");  }
@GetMapping("/sseModel") public Publisher<Model> sseModel() { return Flowable.intervalRange(0, 5, 0, 1, TimeUnit.SECONDS) .map(item -> new Model("jack", item.intValue())); }}
复制代码


  • 消费者微服务: 消费流式响应,并对外提供新的流式响应服务


消费者可以像调用普通 REST 接口一样调用流式响应服务,开发起来非常简单。


@RestSchema(schemaId = "ReactiveStreamController")@RequestMapping(path = "/")public class ConsumerReactiveStreamController {  interface ProviderReactiveStreamController {    Publisher<String> sseString();
Publisher<Model> sseModel(); }
@RpcReference(microserviceName = "provider", schemaId = "ReactiveStreamController") ProviderReactiveStreamController controller;
@GetMapping("/sseString") public Publisher<String> sseString() { return controller.sseString(); }
@GetMapping("/sseModel") public Publisher<Model> sseModel() { return controller.sseModel(); }}
复制代码


  • 应用网关:透明转发


应用网关无需做额外配置,能够实现流式响应的透明转发。


  • 前端(浏览器):消费消息


大部分浏览器都支持通过 EventSource 消费流式响应。下面是简单的代码片段:


<script>    var sse = new EventSource("http://localhost:9090/sseModel");
sse.onmessage = function (ev) { var elementById = document.getElementById("ssediv"); elementById.innerHTML = elementById.innerHTML + "\n" + ev.data; }
sse.onerror = function (){ sse.close() }
sse.onopen = function (){ }</script>
复制代码

相关的技术实现


Spring Boot采用SseEmitter来定义服务器事件推送,如果需要使用流式响应,则必须使用WebFlux,在微服务场景下,则需要使用WebClient来消费。这些使用方式与WebMvc集成和注册发现集成都会带来非常大的开发麻烦。 Java Chassis 3 给开发者提供了非常棒的统一一致的开发体验。


在 小艺 人工智能应用中,需要大量使用流式响应,包括微服务之间。为了实现这些功能,需要额外开发大量代码,并且与现有的 REST 框架没有实现统一一致的服务治理规范,给应用的可维护性和质量带来了隐患。 通过新的流式响应 API 能够极大的简化小艺场景的开发。


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 6
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
Java Chassis 3技术解密,流式响应如何简化AI应用开发_Java_华为云开发者联盟_InfoQ写作社区