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能够极大的简化小艺
场景的开发。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
探秘数据库中的并行计算技术应用
本文分享自华为云社区《【GaussTech技术专栏】数据库中并行计算技术应用探秘》,作者:GaussDB数据库。 并行计算是提高系统性能的重要手段之一。该技术是通过利用多台服务器、多个处理器、处理器中的多核以及SIMD指令集等技术,实现任务的并行化处理,从而加快任务处理的速度。同时,在多个计算机领域有应用,如图像处理、大数据处理、科学计算及数据库等。 数据库中的并行处理技术 1. 分布式并行处理架构 并行处理数据库架构的出现可以追溯到上世纪80年代。当时计算机性能非常有限,但企业已经有了大规模的数据的处理需求。 那当时技术界是如何提升数据处理能力的呢? 当时技术界提出了三种并行架构:Shared Nothing、Shared Disk、Shared Memory,并对他们展开了各种讨论。图灵奖获得者Michael Stonebraker在1985年发表的一篇关于Shared Nothing的文章《The Case for Shared Nothing》,从不同维度,对三种架构能力做了一些比较分析。由于在成本、扩展性、可用性方面的优势,Shared Nothing成为主流的设计思路。 1...
- 下一篇
第55期:MySQL 频繁 Crash 怎么办?
社区王牌专栏《一问一实验:AI 版》全新改版归来,得到了新老读者们的关注。其中不乏对 ChatDBA 感兴趣的读者前来咨询,表达了想试用体验 ChatDBA 的意愿,对此我们表示感谢 🤟。 目前,ChatDBA 还在最后的准备阶段,会尽快跟大家见面。想预约试用的朋友,可以扫码文末的 预约试用 填写调研问卷。我们正在对 DBA 群体试用大模型的情况进行调研,这对我们打磨 ChatDBA 的使用体验非常重要。 下面让我们正式进入《一问一实验:AI 版》的第 54 期。 问题 MySQL 一分钟内 Crash 并重启了三次,是什么原因导致的? 实验 1. 将问题丢给 ChatDBA 我们先把这个问题丢给 ChatDBA,让他看下具体出了什么问题。 可以在爱可生开源社区 B 站或视频号查看本期完整操作视频。 左侧为流程分析画布,展示 ChatDBA 对此问题的排查逻辑;右侧为互动区域 2. ChatDBA 协助问题排查 本期我们使用了一个之前遇到过的问题来问下 ChatDBA,他首先让我们去查询错误日志,同时猜测了一些可能导致这个问题的原因。 紧接着我们就将错误日志直接发给了 ChatDBA...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能