当前位置: 首页 > news >正文

Superset二次开发之源码 run-server.sh 分析

背景:

如果基于docker方式部署Superset项目,Dockerfile文件末尾指向了docker-ci.sh,而docker-ci.sh 脚本又指向了run-server.sh。因此我们重点分析一下run-server脚本

路径 docker\run-server.sh

#!/usr/bin/env bashHYPHEN_SYMBOL='-'gunicorn \--bind "${SUPERSET_BIND_ADDRESS:-0.0.0.0}:${SUPERSET_PORT:-8088}" \--access-logfile "${ACCESS_LOG_FILE:-$HYPHEN_SYMBOL}" \--error-logfile "${ERROR_LOG_FILE:-$HYPHEN_SYMBOL}" \--workers ${SERVER_WORKER_AMOUNT:-1} \--worker-class ${SERVER_WORKER_CLASS:-gthread} \--threads ${SERVER_THREADS_AMOUNT:-20} \--timeout ${GUNICORN_TIMEOUT:-60} \--keep-alive ${GUNICORN_KEEPALIVE:-2} \--max-requests ${WORKER_MAX_REQUESTS:-0} \--max-requests-jitter ${WORKER_MAX_REQUESTS_JITTER:-0} \--limit-request-line ${SERVER_LIMIT_REQUEST_LINE:-0} \--limit-request-field_size ${SERVER_LIMIT_REQUEST_FIELD_SIZE:-0} \"${FLASK_APP}"

以上命令是用来启动一个 Gunicorn 服务器的脚本,Gunicorn 是一个 Python WSGI HTTP 服务器,常用于部署 Flask 和其他 WSGI 应用。以下是对这段命令的详细分析和解释:

各个参数的解释

`gunicorn` : 启动 Gunicorn 服务器的命令。

  • `--bind` : 指定服务器监听的地址和端口。`${SUPERSET_BIND_ADDRESS:-0.0.0.0}` 表示如果环境变量 `SUPERSET_BIND_ADDRESS` 未设置,则默认绑定到 `0.0.0.0`(即所有可用的网络接口)。`${SUPERSET_PORT:-8088}` 表示如果环境变量 `SUPERSET_PORT` 未设置,则默认使用端口 `8088`。
  • `--access-logfile` : 指定访问日志文件的路径。`${ACCESS_LOG_FILE:-$HYPHEN_SYMBOL}` 表示如果环境变量 `ACCESS_LOG_FILE` 未设置,则使用 `$HYPHEN_SYMBOL`(通常是 `-`,表示输出到标准输出)。
  • `--error-logfile` : 指定错误日志文件的路径。`${ERROR_LOG_FILE:-$HYPHEN_SYMBOL}` 表示如果环境变量 `ERROR_LOG_FILE` 未设置,则使用 `$HYPHEN_SYMBOL`。
  • `--workers` : 指定工作进程的数量。`${SERVER_WORKER_AMOUNT:-1}` 表示如果环境变量 `SERVER_WORKER_AMOUNT` 未设置,则默认使用 `1` 个工作进程。增加工作进程可以提高并发处理能力。
  • `--worker-class` : 指定工作进程的类型。`${SERVER_WORKER_CLASS:-gthread}` 表示如果环境变量 `SERVER_WORKER_CLASS` 未设置,则默认使用 `gthread`(基于线程的工作进程)。可以根据需要选择不同的工作类,如 `sync`、`eventlet`、`gevent` 等。
  • `--threads` : 指定每个工作进程的线程数。`${SERVER_THREADS_AMOUNT:-20}` 表示如果环境变量 `SERVER_THREADS_AMOUNT` 未设置,则默认使用 `20` 个线程。适用于处理 I/O 密集型任务。
  • `--timeout` : 指定请求超时时间(秒)。`${GUNICORN_TIMEOUT:-60}` 表示如果环境变量 `GUNICORN_TIMEOUT` 未设置,则默认超时为 `60` 秒。
  • `--keep-alive` : 指定保持连接的时间(秒)。`${GUNICORN_KEEPALIVE:-2}` 表示如果环境变量 `GUNICORN_KEEPALIVE` 未设置,则默认保持连接 `2` 秒。
  • `--max-requests` : 指定每个工作进程在重启之前处理的最大请求数。`${WORKER_MAX_REQUESTS:-0}` 表示如果环境变量 `WORKER_MAX_REQUESTS` 未设置,则默认值为 `0`(表示不限制)。
  • `--max-requests-jitter` : 指定在重启工作进程时的随机延迟(秒)。`${WORKER_MAX_REQUESTS_JITTER:-0}` 表示如果环境变量 `WORKER_MAX_REQUESTS_JITTER` 未设置,则默认值为 `0`。
  • `--limit-request-line` : 指定请求行的最大字节数。`${SERVER_LIMIT_REQUEST_LINE:-0}` 表示如果环境变量 `SERVER_LIMIT_REQUEST_LINE` 未设置,则默认值为 `0`(表示不限制)。
  • `--limit-request-field_size` : 指定请求头字段的最大字节数。`${SERVER_LIMIT_REQUEST_FIELD_SIZE:-0}` 表示如果环境变量 `SERVER_LIMIT_REQUEST_FIELD_SIZE` 未设置,则默认值为 `0`(表示不限制)。
  • `${FLASK_APP}` : 指定要运行的 Flask 应用程序的模块或包名。这个变量通常在环境中设置,指向 Flask 应用的入口。

   总结

这段命令通过 Gunicorn 启动一个 Flask 应用,配置了多种参数以优化性能和日志记录。通过使用环境变量,用户可以灵活地调整服务器的行为,适应不同的部署需求。整体上,这段命令为 Superset 提供了一个可扩展和高效的运行环境。

http://www.lryc.cn/news/437102.html

相关文章:

  • Java 之四种内部类详解
  • 03:手动可变电阻
  • 嵌入式Linux电池管理(TODO)
  • Python 求亲和数
  • 【C++】——vector模拟实现和迭代器失效问题
  • USB 3.1 标准 A 型连接器及其引脚分配
  • 机器学习文献|基于循环细胞因子特征,通过机器学习算法预测NSCLC免疫治疗结局
  • Qt 实现自定义截图工具
  • 第15-05章:获取运行时类的完整结构
  • 【Kubernetes】K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制
  • Java面试、技巧、问题、回复,资源面面观
  • 深入理解Elasticsearch的`_source`字段与索引优化
  • Pikachu靶场
  • TS axios封装
  • 学会使用西门子博途Startdrive中的测量功能
  • Spring Security认证与授权
  • 速通GPT:Improving Language Understanding by Generative Pre-Training全文解读
  • 软件质量保证例题
  • 动态规划算法---04.斐波那契数列模型_解码方法_C++
  • crm如何做私域运营?
  • 基于QGIS 3.16.0 的OSM路网矢量范围裁剪实战-以湖南省为例
  • WPF 手撸插件 八 依赖注入
  • 走进低代码报表开发(一):探秘报表数据源
  • 代理服务器及其原理
  • 计算机毕业设计选题推荐-养老院管理系统-Java/Python项目实战
  • 免费SSL证书正在逐渐被淘汰,证书部署自动化的发展趋势即将到来!
  • openVX加速-基本概念和简单代码实现
  • 网工内推 | 网络工程师,Base上海,HCIP/HCIE认证优先
  • Windows10 如何配置python IDE
  • Machine Learning: A Probabilistic Perspective 机器学习:概率视角 PDF免费分享