查看原文
其他

Jina 轻松学 —— 部署和运行

Jina AI Jina AI 2022-03-19
 Jina是一个高性能的云原生分布式框架,可以利用它快速开发基于深度学习的神经搜索系统


本期教程将带来关于Jina部署和运行的介绍,让你快速、高效地运行Jina框架!

Jina远程部署——JinaD 

「Jina Daemon (简称为JinaD)可实现分布式部署、管理Jina Flow的功能」 
  • JinaD是通过REST式接口对Jina框架进行远程部署和调用的后台程序
  • 用户使用JinaD在远程主机上对Flow和Executor进行创建、更新和删除
  • JinaD通过为每个Jina实例定义一个Workspace来实现部署隔离,因此可在一台主机上同时运行多个Flow

Follow下面的步骤
使用JinaD将Jina Flow运行起来吧🏃‍♀️

 服务端 

JinaD的Docker镜像文件已发布在Docker Hub中,可部署在本地或云端,等待客户端发来的请求:
docker run --add-host host.docker.internal:host-gateway \
           -v /var/run/docker.sock:/var/run/docker.sock \
           -v /tmp/jinad:/tmp/jinad \
           -p 8000:8000 \
           --name jinad \
           -d jinaai/jina:master-daemon


💡 Docker运行小提示:
  • 端口号可以通过输入docker run命令时的  -p参数更改。

  • JinaD应该始终作为docker容器部署。简单地终端运行jinad命令启动服务是无效的。


  客户端 

Step1:Jina客户端的建立
from daemon.clients import JinaDClient
client = JinaDClient(host=HOST, port=PORT)

Step2: Workspace的建立

「Workspace是JinaD中所有Jina实例的基础入口」

  • Workspace为每个容器化的Jina实例创建基本镜像文件

  • Workspace负责管理Jina实例的所有子容器的通讯网络

  • Workspace中储存了用于管理Jina实例或由Jina实例创建的所有文件


建立了客户端后,就可以向服务端发送建立workspace的请求:


from daemon.clients import JinaDClient
client = JinaDClient(host=HOST, port=PORT)
workspace_id = client.workspaces.create(paths=['path_to_awesome_project'])


 💡 Workspace运行小提示:
  • path_to_awesome_project文件夹中应该放入yaml, py_modules,  requirements.txt, .jinad等文件
  • workspace_id是新建workspace的标识

Step3:REST式的Flows建立

使用 client.flows.create ,将在workspace_id定义的workspace中创建一个新的容器,并在容器内启动一个Flow

from daemon.clients import JinaDClient
client = JinaDClient(host=HOST, port=PORT)
client.flows.create(workspace_id=workspace_id, filename='my_awesome_flow.yml')
# jflow-a71cc28f-a5db-4cc0-bb9e-bb7797172cc9

 Jina服务运行 

在这部分,我们将向你展示如何在运行Jina Flow时单独创建服务端和客户端

「单独创建服务端和客户端的应用场景」

  • 服务端和客户端运行在不同的机器上
  • 服务端和客户端有不同的生命周期
  • 一个服务端同时被多个客户端访问
  • 一个客户端想要访问多个服务端
  • 客户端可以是浏览器/curl/postman等非代码形式

Flow和Client之间的通信可以通过grpc、websocket、http三种协议。在Jina中通过在创建Flow时写入protocol=的参数设置(默认

通过grpc)

服务端

from jina import Flow

f = Flow(protocol='http', port_expose=12345)
with f:
    f.block()


客户端

from jina import Client

c = Client(protocol='http', port_expose=12345)
c.post('/', ...)


💡 Flow运行小提示:
  • protocol也可以选择grpc、websocket哦(这两种协议在处理大量数据时有更好的表现)



点击下方 “阅读原文”,获得更详细的Jina 相关教程


👇 往期精彩

Jina 轻松学 —— 三个基本元素


Jina·拥抱社区!即刻申请,丰富周边送上门



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存