ModelArts Standard的WebSocket在线服务全流程开发
背景说明
WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,位于OSI模型的应用层。WebSocket协议在2011年由IETF标准化为RFC 6455,后由RFC 7936补充规范。Web IDL中的WebSocket API由W3C标准化。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。
前提条件
- 用户需有一定的Java开发经验,熟悉jar打包流程。
- 用户需了解WebSocket协议的基本概念及调用方法。
- 用户需熟悉Docker制作镜像的方法。
约束与限制
- WebSocket协议只支持部署在线服务。
- 只支持自定义镜像导入AI应用部署的在线服务。
准备工作
ModelArts使用WebSocket完成推理需要用户自己准备自定义镜像,该自定义镜像需要在单机环境下能够提供完整的WebSocket服务,如完成WebSocket的握手,client向server发送数据,server向client发送数据等。模型的推理过程在自定义镜像中完成,如下载模型,加载模型,执行预处理,完成推理,拼装响应体等。
操作步骤
WebSocket在线服务开发操作步骤如下:
上传镜像至容器镜像服务
将准备好的本地镜像上传到容器镜像服务(SWR)。
使用镜像创建AI应用
- 登录ModelArts管理控制台,进入“ AI应用”页面,单击“创建”,跳转至创建AI应用页面。
- 完成AI应用配置,部分配置如下:
- 元模型来源:选择“从容器镜像中选择”。
- 容器镜像所在的路径:选择上传镜像至容器镜像服务上传的路径。
- 容器调用接口:根据实际情况配置容器调用接口。
- 健康检查:保持默认。如果镜像中配置了健康检查则按实际情况配置健康检查。
图1 AI应用配置参数
- 单击“立即创建”,进入AI应用列表页,等AI应用状态变为“正常”,表示AI应用创建成功。
使用AI应用部署在线服务
- 登录ModelArts管理控制台,进入“模型部署 >在线服务”页面,单击“部署”,跳转至在线服务部署页面。
- 完成服务的配置,部分配置如下:
- 选择AI应用及版本:选择使用镜像创建AI应用创建完成的AI应用及版本
- 升级为WebSocket:打开开关
图2 升级为WebSocket
- 单击“下一步”,确认配置后“提交”,完成在线服务的部署。返回在线服务列表页,查看服务状态变为“运行中”,表示服务部署成功。
WebSocket在线服务调用
WebSocket协议本身不提供额外的认证方式。不管自定义镜像里面是ws还是wss,经过ModelArts平台出去的WebSocket协议都是wss的。同时wss只支持客户端对服务端的单向认证,不支持服务端对客户端的双向认证。
可以使用ModelArts提供的以下认证方式:
WebSocket服务调用步骤如下(以图形界面的软件Postman进行预测,token认证为例):
- WebSocket连接的建立
- 打开Postman(需选择8.5 以上版本,以10.12.0为例)工具,单击左上角 ,选择“File>New”,弹出新建对话框,选择“WebSocket Request”(当前为beta版本)功能:
图3 选择WebSocket Request功能
- 在新建的窗口中填入WebSocket连接信息:
左上角选择Raw,不要选择Socket.IO(一种WebSocket实现,要求客户端跟服务端都要基于Socket.IO),地址栏中填入从服务详情页“调用指南”页签中获取“API接口调用公网地址”后面的地址。如果自定义镜像中有更细粒度的地址,则在地址后面追加该URL。如果有queryString,那么在params栏中添加参数。在header中添加认证信息(不同认证方式有不同header,跟https的推理服务相同)。选择单击右上的connect按钮,建立WebSocket连接。
图4 获取API接口调用公网地址
明:- 如果信息正确,右下角连接状态处会显示:CONNECTED;
- 如果无法建立连接,如果是401状态码,检查认证信息;
- 如果显示WRONG_VERSION_NUMBER等关键字,检查自定义镜像的端口和ws跟wss的配置是否正确。
连接成功后结果如下:
图5 连接成功
须知:优先验证自定义镜像提供的websocket服务的情况,不同的工具实现的websocket服务会有不同,可能出现连接建立后维持不住,可能出现请求一次后连接就中断需要重新连接的情况,ModelArts平台只保证,未上ModelArts前自定义镜像的websocket的形态跟上了ModelArts平台后的websocket形态相同(除了地址跟认证方式不同)。
- 打开Postman(需选择8.5 以上版本,以10.12.0为例)工具,单击左上角 ,选择“File>New”,弹出新建对话框,选择“WebSocket Request”(当前为beta版本)功能:
- WebSocket客户端和服务端双向传输数据
连接建立后,WebSocket使用TCP完成全双工通信。WebSocket的客户端可以往服务端发送数据,客户端有不同的实现,同一种语言也存在不同的lib包的实现,这里不考虑实现的不同种类。
客户端发送的内容在协议的角度不限定格式,Postman支持Text/Json/XML/HTML/Binary,以text为例,在输入框中输入要发送的文本,单击右侧中部的Send按钮即可将请求发往服务端,当文本内容过长,可能会导致postman工具卡住。
图6 发送数据
原文地址:https://blog.csdn.net/2403_89344729/article/details/144156611
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!