
这是一个关于扩展性和使用痛点的软件架构故事,和其他好的技术故事一样,也是从点滴开始的。 在Panorays,我们帮助大量企业用户衡量供应商的安全地位,但是我更愿意看到集中式第三方安全管理。我们先从架构和流程开始。 开始时候,管理虚机都是通过Bash进行的,使用大量的脚本。
-
每个公司都有一个独特的虚机实例
-
每个虚机串行执行很多作业模拟黑客的业务
-
并行作业是通过启动更多虚机完成
-
采用Cron和Bash创建内部编排功能
-
并发在于公司层面而不是作业层面
-
进程不透明
-
服务器利用率太低
-
手工触发

这样的问题引发了Transport工具的兴起,Transport是一个动态工作流引擎,将工作流当做Kubernetes的作业调度。基于容器架构使得Transport灵活配置工作,又能有效扩展。根据工作流依存度,可能时提供最佳并发性,并提供完整RESTAPI实现自动管道管理。 当有新公司进入平台后,Transport的API会自动被触发,根据实现定义好的工作流情况,Transport将并行或串行将作业提交给Kubernetes执行。






新部署流程包括安全创建和将docker images推上Google Cloud Registry。 Transport将作业根据工作流转化成相关作业,而ConfigMap则定义作业版本。 Kubernetes则提供Docker容器底层运行引擎。



框架

我们也调研过一些框架方案:
-
Airflow:这是一个很棒的方案,将Python文件渲染成代表工作流的DAGs。如果有一个运行前确定状态的静态工作流,推荐使用Airflow。Airflow的问题在于动态工作流,stackoverflow里有很多如何正确创建动态工作流的方法。因为改变了RESTAPI的请求方法,我们不需要生成动态工作流。
-
Google Pub/Sub:是谷歌pub/sub方案,因为需要在“作业端”修改大量的代码因此我们也没有采用它。
-
可以从更多的任务队列中找到替换项。

UI:添加UI来对正在运行和完成工作流进行监控和排错。 Generify : 如果想使Transport更加普适化,可以将其开源。 原文链接:https://hackernoon.com/https-medium-com-talperetz24-scaling-effectively-when-kubernetes-met-celery-e6abd7ce4fed