2021-08-27 16:20:48 -07:00
API Comparisons
===============
Comparison between Ray Core APIs and Workflows
----------------------------------------------
Workflows is built on top of Ray, and offers a mostly consistent subset of its API while providing durability. This section highlights some of the differences:
2022-05-05 22:22:51 -07:00
`` func.remote `` vs `` func.bind ``
2021-11-05 17:05:35 -07:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-07-02 21:24:05 -07:00
With Ray tasks, `` func.remote `` will submit a remote task to run eagerly; `` func.bind `` will generate
a node in a DAG, it will not be executed until the DAG is been executed.
Under the context of Ray Workflows, the execution of the DAG is deferred until `` workflow.run(dag, workflow_id=...) `` or `` workflow.run_async(dag, workflow_id=...) `` is called on the DAG.
Specifying the workflow id allows for resuming of the workflow by its id in case of cluster failure.
2021-08-27 16:20:48 -07:00
Other Workflow Engines
----------------------
Note: these comparisons are inspired by the `Serverless workflows comparisons repo <https://github.com/serverlessworkflow/specification/tree/main/comparisons> `__ .
Argo API Comparison
~~~~~~~~~~~~~~~~~~~
The original source of these comparisons can be `found here <https://github.com/serverlessworkflow/specification/blob/main/comparisons/comparison-argo.md> `__ .
Conditionals
^^^^^^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/conditionals_argo.yaml
2021-08-27 16:20:48 -07:00
:caption: Argo version:
:language: yaml
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/conditionals_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
DAG
^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/dag_argo.yaml
2021-08-27 16:20:48 -07:00
:caption: Argo version:
:language: yaml
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/dag_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
Multi-step Workflow
^^^^^^^^^^^^^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/multi_step_argo.yaml
2021-08-27 16:20:48 -07:00
:caption: Argo version:
:language: yaml
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/multi_step_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
Exit Handler
^^^^^^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/exit_handler_argo.yaml
2021-08-27 16:20:48 -07:00
:caption: Argo version:
:language: yaml
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/exit_handler_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
Loops
^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/loops_argo.yaml
2021-08-27 16:20:48 -07:00
:caption: Argo version:
:language: yaml
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/loops_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
Recursion
^^^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/recursion_argo.yaml
2021-08-27 16:20:48 -07:00
:caption: Argo version:
:language: yaml
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/recursion_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
Retries
^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/retry_argo.yaml
2021-08-27 16:20:48 -07:00
:caption: Argo version:
:language: yaml
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/argo/retry_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
Metaflow API Comparison
~~~~~~~~~~~~~~~~~~~~~~~
The original source of these comparisons can be `found here <https://docs.metaflow.org/metaflow/basics#foreach> `__ .
Foreach
^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/metaflow/foreach_metaflow.py.txt
2021-08-27 16:20:48 -07:00
:caption: Metaflow version:
:language: python
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/metaflow/foreach_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
Cadence API Comparison
~~~~~~~~~~~~~~~~~~~~~~
The original source of these comparisons can be `found here <https://github.com/serverlessworkflow/specification/blob/main/comparisons/comparison-cadence.md> `__ .
Sub Workflows
^^^^^^^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/cadence/sub_workflow_cadence.java
2021-08-27 16:20:48 -07:00
:caption: Cadence version:
:language: java
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/cadence/sub_workflow_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
File Processing
^^^^^^^^^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/cadence/file_processing_cadence.java
2021-08-27 16:20:48 -07:00
:caption: Cadence version:
:language: java
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/cadence/file_processing_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
Trip Booking
^^^^^^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/cadence/trip_booking_cadence.java
2021-08-27 16:20:48 -07:00
:caption: Cadence version:
:language: java
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/cadence/trip_booking_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
Google Cloud Workflows API Comparison
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The original source of these comparisons can be `found here <https://github.com/serverlessworkflow/specification/blob/main/comparisons/comparison-google-cloud-workflows.md> `__ .
Data Conditional
^^^^^^^^^^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/google_cloud_workflows/data_cond_google.yaml
2021-08-27 16:20:48 -07:00
:caption: Google Cloud version:
:language: yaml
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/google_cloud_workflows/data_cond_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
Concat Array
^^^^^^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/google_cloud_workflows/concat_array_google.yaml
2021-08-27 16:20:48 -07:00
:caption: Google Cloud version:
:language: yaml
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/google_cloud_workflows/concat_array_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
Sub Workflows
^^^^^^^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/google_cloud_workflows/sub_workflows_google.yaml
2021-08-27 16:20:48 -07:00
:caption: Google Cloud version:
:language: yaml
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/google_cloud_workflows/sub_workflows_workflow.py
2021-08-27 16:20:48 -07:00
:caption: Workflow version:
:language: python
2021-09-03 19:26:33 -07:00
Prefect API Comparison
~~~~~~~~~~~~~~~~~~~~~~
The original source of these comparisons can be `found here <https://docs.prefect.io/core/advanced_tutorials/task-looping.html> `__ .
Looping
^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/prefect/compute_fib_prefect.py.txt
2021-09-03 19:26:33 -07:00
:caption: Prefect version:
:language: python
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/prefect/compute_fib_workflow.py
2021-09-03 19:26:33 -07:00
:caption: Workflow version:
:language: python
AirFlow API Comparison
~~~~~~~~~~~~~~~~~~~~~~
The original source of these comparisons can be `found here <https://airflow.apache.org/docs/apache-airflow/stable/tutorial_taskflow_api.html> `__ .
ETL Workflow
^^^^^^^^^^^^
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/airflow/etl_airflow.py.txt
2021-09-03 19:26:33 -07:00
:caption: AirFlow version:
:language: python
2021-09-13 17:45:18 -07:00
.. literalinclude :: ../../../python/ray/workflow/examples/comparisons/airflow/etl_workflow.py
2021-09-03 19:26:33 -07:00
:caption: Workflow version:
:language: python