Bio-OS / bioos

Apache License 2.0
58 stars 16 forks source link

流程语言拓展T4-Hiplot #66

Open Bing64 opened 10 months ago

Bing64 commented 10 months ago

流程语言拓展T4-Hiplot

功能说明

本项目在Kubernetes环境下完成了Sapporo的兼容,打破了Bio-OS开源发行版当前架构设计模式下单机应用的能力限制,使Bio-OS项目可以完整地部署在K8S集群环境中,并实现对K8S算力资源的有效调度。

本项目支持WDL、CWL、Nextflow、Snakemake四类生物医学领域主流的工作流声明语言(Bioos前端目前仅支持WDL CWL执行,另外两种正在开发中),并对Sapporo项目接口进行了标准化,使其可以暴露标准的WES接口,该接口可供Bio-OS项目 API server 无缝调用,可支持作为Bio-OS Nextflow WDL 等工作流运行的WES Endpoint。

简单总结:

  1. 通过标准WES API接口调用
  2. 支持WDL、CWL、Nextflow、Snakemake工作流语言
  3. 基于Kubernetes进行部署和任务调度

详细设计

pi64wsP.png

本项目设计了一个运行在Kubernetes上的全流程语言任务调度引擎,其主要包括两部分:一、基于Sapporo开发的支持WES API的API server;二、基于TESK的支持TES API的任务执行引擎。Sapporo收到提交任务请求后,对请求进行解析和处理,随后通过TES API向TESK服务器提交任务并执行。对不同的流程语言设计了不同的任务执行方式。

Bio-OS通过WES协议调用该引擎,主要用到的接口包括:POST /runs(提交任务)、GET /runs/{run_id}(查询任务日志)、POST /runs/{run_id}/cancel(取消任务)。

关键功能优化

  1. Sapporo的标准WES API适配

  2. Sapporo与BioOS APIserver对接

  3. 在Kubernetes中部署TESK及Sapporo

  4. 完成四种流程语言执行方式的修改

  5. Bioos项目多语言适配及优化

使用演示

pi6U5VK.png

pi6UIUO.png pi6Uo5D.png pi6Uhb6.png pi6U7Pe.png

pi6hgu6.png pi6hyg1.png pi64ePJ.png pi64mG9.png

pi64V54.png pi64EaF.png

pi6h6jx.png pi6h0N4.png pi6h2DK.png pi6hB4J.png pi6hrC9.png pi6hs3R.png

Bio-os工作流扩展方法

扩展一种新的工作流语言,需要进行如下工作:

Api-server端

internal\context\workspace\infrastructure\workflowparser

在这个包里,实现一个新的工作流语言解析器,包括以下内容:

pi65TnP.png

internal\context\workspace\infrastructure\workflowparser\workflowparser.go

在这个文件里,初始化一个解析器注册函数

pi65IXt.png

internal\context\workspace\application\command\workflow\commands.go

在这个文件里初始化解析器实例

pi6570f.png

Web端

web\src\pages\workflow\Run.tsx

在下图所示函数中定义各种工作流语言所对应的exposedOptions

pi6I89H.png

在下图所示部分设计对应的ui界面

pi6I14e.png

新增功能

后端服务

代码地址

  1. sapporo

    Githhub仓库地址

    支持docker部署和k8s部署,分别在develop和develop-k8s分支

  2. TESK

    Github仓库地址

使用指南

  1. 部署Bio-os项目

  2. 为WES Endpoint配置代理

    通过Sapporo作为统一的WES后端,不同的工作流声明语言的仅暴露同一个WES endpoint,由于Sapporo WES Base URL 与Cromwell WES Base URL存在差异,为了尽可能少的干预两个项目的原初设计,使用Nginx对Sapporo所暴露的服务进行转发,如下:

    server {
               listen [bioos-wes-port];
               server_name 127.0.0.1;
    
               location /api/ga4gh/wes/v1/{
                   proxy_pass http://127.0.0.1:[sapporo=port]/;
                   proxy_set_header Host $host;
                   proxy_set_header X-Real-IP $remote_addr;
                }
           }

    亦可在Bio-OS 项目 Config中修改 WES bath path 参数,但会影响api-server与Cromwell的wes endpoint的对接。

  3. 部署Sapporo

    以下是k8s部署步骤,若使用docker部署,可参考develop分支下的docker-compose.dev.yaml文件

    按需修改deployment.yaml和service.yaml中存储、端口、namespace等相关配置,随后依次执行如下命令部署:

    # 构建镜像
    docker build -t sapporo-service-dev -f Dockerfile-dev . 
    #  我们使用minikube的测试环境,此处导入了镜像,也可上传到公共仓库
    minikube image load sapporo-service-dev 
    
    kubectl apply -f deployment.yaml  # 创建deployment
    kubectl apply -f service.yaml  #  创建service
    
    # 若采用默认配置,则可使用下面命令检查部署
    kubectl -n bioos port-forward --address 0.0.0.0 service/sapporo-service 1188:1122  # 转发端口到宿主机
    curl -fsSL -X GET http://127.0.0.1:1188/service-info   # 获取service-info
  4. TESK部署

    按需修改charts\tesk\values.yaml中存储、端口相关参数:

    service:
    type: "NodePort"
    node_port: "31567"

    在charts\tesk\templates\common\tesk-deployment.yaml中修改数据卷挂载的相关参数:

    pi64jL6.png

    随后依次执行如下命令部署:

    cd customize/tesk-core
    docker build -t tesk-core-filer-hiplot:v0.10.1 .  #  构建新的taskmaster_filer_image_name镜像
    minikube image load tesk-core-filer-hiplot:v0.10.1  #  我们使用minikube的测试环境,此处导入了镜像,也可上传到公共仓库
    
    cd ../../charts/tesk
    helm upgrade -n bioos --install tesk-release . -f secrets.yaml -f values.yaml # 安装tesk
    # 如果修改了service名称和端口,需要对应修改sapporo项目中的const.py中对应内容
    
    # 部署完成后,若采用默认参数,则可使用下面命令检查部署
    curl -fsSL -X GET http://[所在节点的ip]:31567/ga4gh/tes/v1/service-info

测试

Bio-os中,导入测试使用cwl流程:NCI-GDC/gdc-rnaseq-cwlhacchy1983/CWL-workflows

执行测试使用cwl流程:hacchy1983/CWL-workflows

snakemake及nextflow语言,在bioos端完成适配后方可使用。目前可通过手动提交请求测试,所有用到的测试流程和文件都在sapporo的develop-k8s分支中的sapporo/test-examples文件夹给出。测试方法如下,其中所使用的地址和端口需对应替换:


# SMK测试
curl -fsSL -X POST -H "Content-Type: multipart/form-data" \
-F "workflow_type=SMK" -F "workflow_type_version=1.0" \
-F "workflow_params=<./test-examples/SNAKEMAKE/workflow_params.json" \
-F "workflow_attachment=@./test-examples/SNAKEMAKE/Snakefile;filename=Snakefile" \
http://127.0.0.1:1188/runs

# NFL测试
curl -fsSL -X POST -H "Content-Type: multipart/form-data" \
-F "workflow_type=NFL" -F "workflow_type_version=1.0" \
-F "workflow_params=<./test-examples/NEXTFLOW/workflow_params.json" \
-F "workflow_attachment=@./test-examples/NEXTFLOW/file_input.nf" \
http://127.0.0.1:1188/runs
CLAassistant commented 10 months ago

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.