<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Boney</title>
    <description>The latest articles on DEV Community by Boney (@boneys).</description>
    <link>https://dev.to/boneys</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: Boney</title>
      <link>https://dev.to/boneys</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/boneys"/>
    <language>en</language>
    <item>
      <title>Orchestration and Microservices - A match made in heaven</title>
      <dc:creator>Boney</dc:creator>
      <pubDate>Thu, 16 Dec 2021 04:19:19 +0000</pubDate>
      <link>https://dev.to/boneys/orchestration-and-microservices-a-match-made-in-heaven-3jjn</link>
      <guid>https://dev.to/boneys/orchestration-and-microservices-a-match-made-in-heaven-3jjn</guid>
      <description>&lt;p&gt;Microservices have emerged as the dominant application development paradigm in the software world today. It has tremendous benefits both from a business and technical perspective due to its fundamental characteristics of agility, scalability, and resiliency.&lt;/p&gt;

&lt;p&gt;However, implementing microservices are hard! The inherently distributed nature of this architectural pattern introduces complexity across multiple areas especially around Transaction Management, Data Consistency, and Process Automation. In a distributed system, Business Transactions can span across multiple services. Since we no longer have the ability to run a single ACID transaction, it requires careful coordination across these services to ensure that you have a consistent and reliable system at the end of a business process.&lt;/p&gt;

&lt;p&gt;Solutions to solve this “coordination” problem have led to the rise of a new set of application patterns that can be broadly classified into two main groups - Choreography and Orchestration.&lt;/p&gt;

&lt;p&gt;Let us tackle the first group - choreography which advocates the usage of events as a coordination mechanism to complete local tasks within each microservice involved in an end-to-end business transaction. Each microservice is responsible for its local execution of the transaction resulting in the publishing of events that other microservices react to and then execute their local transactions. In other words, a sequence of event subscriptions across various microservices to complete a business transaction.&lt;/p&gt;

&lt;p&gt;Using the ubiquitous “Flight Booking example to depict a choreographic approach.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fblog%2Fassets%2Fchoreography-microservices.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fblog%2Fassets%2Fchoreography-microservices.png%3Fraw%3Dtrue" alt="Microservice Choreography"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;center&gt;&lt;em&gt;Choreography&lt;/em&gt;&lt;/center&gt;

&lt;p&gt;As seen the various microservices utilize events to interact with each other to complete the booking process flow.&lt;/p&gt;

&lt;p&gt;The tendency to move towards choreography to implement business flows in a distributed environment is natural, the major appeal being the autonomy that this pattern provides. As seen in the flight booking example below, each microservice executes its local transaction and publishes events that are subscribed-to by other microservices which in turn trigger local transactions.   &lt;/p&gt;

&lt;p&gt;But as you start looking at it more closely, we realize that there is a relationship or a logical flow between the subscriptions and that is where it starts to become problematic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To begin with, it becomes difficult to see the flow as it is embedded within code. In other words, the lack of visibility into the process flows is a challenging aspect of choreography as you would need to reason over all the various microservices to infer the flow&lt;/li&gt;
&lt;li&gt;It becomes extremely difficult to gauge the impact of a change within the flow requiring coordinated deployment and hope that it works due to the inability to test it holistically (since each service just does its own bit)&lt;/li&gt;
&lt;li&gt;There is no systematic mechanism to report as well as action on technical/business metrics associated with the process (e.g. SLAs, How much are we done with Process X ?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, with peer-to-peer choreography, it becomes harder to scale with growing business needs and complexities. It does offer a low entry barrier but you completely lose sight of the larger-scale flow.&lt;/p&gt;

&lt;p&gt;On the other side of the spectrum is the Orchestration approach which relies purely on a task-based approach to coordinate and execute process flows. Generally, it is implemented using a central component that issues task-based requests to the individual services, interprets response(s), and decides to proceed/terminate or complete the flow.&lt;/p&gt;

&lt;p&gt;Going back to the Flight Booking problem, if the orchestration approach is adopted, it would be depicted like something below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fblog%2Fassets%2Forchestration-microservices.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fblog%2Fassets%2Forchestration-microservices.png%3Fraw%3Dtrue" alt="Microservice Orchestration"&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;center&gt;&lt;em&gt;Orchestration&lt;/em&gt;&lt;/center&gt;

&lt;p&gt;The orchestration approach does alleviate some of the problems that choreography poses - There is now complete process visibility and traceability into the process flows, change impact is localized to the central component and it generally becomes easier and quicker to debug issues as well as action on them.&lt;/p&gt;

&lt;p&gt;However applying orchestration is easier said than done and while at first glance it looks easy, it does have a whole set of challenges associated with its implementation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For example, how do we prevent the centralized component from being a single point of failure? &lt;/li&gt;
&lt;li&gt;In addition to that, we would need to ensure that there are no business logic creeps into the component and it does what it is intended to do i.e. just pure orchestration&lt;/li&gt;
&lt;li&gt;And finally, how do we provide reliable, resilient, and scalable orchestration services since it forms such a critical piece of the infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, we would need to build a distributed orchestration engine. And building one is not easy! Like any other piece of infrastructural software, it is always prudent to utilize a purpose-built tool. And it holds true in the case of a distributed orchestration engine too.&lt;/p&gt;

&lt;p&gt;Introducing Conductor which was built to help orchestrate microservices based process flows at Netflix.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conductor provides a clean task-based API backed by a distributed server ecosystem to create a highly efficient and scalable distributed orchestration engine. &lt;/li&gt;
&lt;li&gt;It uses a well-structured DSL mechanism to help define process flows across microservices. &lt;/li&gt;
&lt;li&gt;It provides full operational control over process flows including operations for pause/resume/retry and a user interface to visualize, replay and search the flows. &lt;/li&gt;
&lt;li&gt;Not to mention the fact that it is battle-tested for scale at Netflix volumes running millions of concurrent process flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fblog%2Fassets%2Fnetflix-conductor-architecture-orkes.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fblog%2Fassets%2Fnetflix-conductor-architecture-orkes.png%3Fraw%3Dtrue" alt="Netflix Conductor Architecture - Orkes"&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;center&gt;&lt;em&gt;Netflix Conductor Architecture&lt;/em&gt;&lt;/center&gt;

&lt;p&gt;To conclude, the choice of orchestration over choreography to help run your process flows across microservices is a safe one. However, it would be advisable to use a purpose-built engine like Netflix Conductor to help implement your orchestration needs. The implementation is complex especially in a distributed system and Conductor helps abstract all the technical and infrastructural complexities associated with orchestration helping you focus on your business code.&lt;/p&gt;

&lt;p&gt;The adoption and usage of Conductor have exploded over the past few years since it was first released. Organizations rely on Conductor to help implement reliable, scalable, and resilient Microservices-based applications utilizing a robust distributed orchestration engine. From powering complex loan origination processes at a leading Financial Institution to enabling India’s largest food delivery platform to assist sales at a large real estate brokerage company, the range of use cases that Conductor supports is broad.&lt;/p&gt;

&lt;p&gt;And that is precisely why we started Orkes! Orkes brings to market an enterprise-grade, cloud-hosted, fully managed version of Netflix Conductor offering full compatibility with the open-source version along with tiered support.&lt;/p&gt;

&lt;p&gt;Early access to the platform is now available for interested customers &lt;a href="https://orkes.io" rel="noopener noreferrer"&gt;https://orkes.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Netflix/conductor" rel="noopener noreferrer"&gt;Follow/Star the Netflix Conductor Open Source Github Repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io" rel="noopener noreferrer"&gt;Learn more about Orkes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://join.slack.com/t/orkes-conductor/shared_invite/zt-xyxqyseb-YZ3hwwAgHJH97bsrYRnSZg" rel="noopener noreferrer"&gt;Join the Orkes Conductor Slack community here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jobs.lever.co/Orkes/" rel="noopener noreferrer"&gt;Want to work at Orkes?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://orkes.io/content/blog/orchestration-microservices-match-made-heaven" rel="noopener noreferrer"&gt;Link to Original Post&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>orchestration</category>
      <category>microservices</category>
      <category>workflow</category>
    </item>
    <item>
      <title>Running a Conductor Workflow</title>
      <dc:creator>Boney</dc:creator>
      <pubDate>Sun, 05 Dec 2021 20:50:29 +0000</pubDate>
      <link>https://dev.to/boneys/running-a-conductor-workflow-5e3n</link>
      <guid>https://dev.to/boneys/running-a-conductor-workflow-5e3n</guid>
      <description>&lt;p&gt;In this article we will explore how we can run a really simple workflow using Netflix Conductor. &lt;/p&gt;

&lt;p&gt;Read more about Conductor here: &lt;a href="https://github.com/Netflix/conductor" rel="noopener noreferrer"&gt;https://github.com/Netflix/conductor&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Visit our codebase and give us a star, it helps! :)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Conductor can orchestrate HTTP services out of the box without implementing any code.  We will use that to create and run our first workflow.&lt;/p&gt;

&lt;p&gt;To follow the steps in this article we will need to have Conductor running on your local. We can do that by following the &lt;a href="https://orkes.io/content/docs/getting-started/install/running-locally-docker" rel="noopener noreferrer"&gt;steps here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Configuring our First Workflow
&lt;/h2&gt;

&lt;p&gt;This is a sample workflow that we can leverage for our test.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"first_sample_workflow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"First Sample Workflow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tasks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_population_data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"taskReferenceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_population_data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"inputParameters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"http_request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"uri"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://datausa.io/api/data?drilldowns=Nation&amp;amp;measures=Population"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HTTP"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"inputParameters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"outputParameters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${get_population_data.output.response.body.data}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${get_population_data.output.response.body.source}"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"schemaVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"restartable"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"workflowStatusListenerEnabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ownerEmail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example@email.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timeoutPolicy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ALERT_ONLY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timeoutSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is an example workflow that queries a publicly available JSON API to retrieve some data. This workflow doesn’t require any worker implementation as the tasks in this workflow are managed by the system itself. This is an awesome feature of Conductor. For a lot of typical work, we won’t have to write any code at all.&lt;/p&gt;

&lt;p&gt;To configure the workflow, head over to the swagger API of conductor server and access the metadata workflow create API:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8080/swagger-ui/index.html?configUrl=/api-docs/swagger-config#/metadata-resource/create" rel="noopener noreferrer"&gt;http://localhost:8080/swagger-ui/index.html?configUrl=/api-docs/swagger-config#/metadata-resource/create&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the link doesn’t open the right Swagger section, we can navigate to Metadata-Resource&lt;br&gt;
→ &lt;code&gt;POST /api/metadata/workflow&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Paste the workflow payload into the Swagger API and hit Execute.&lt;/p&gt;

&lt;p&gt;Now if we head over to the UI, we can see this workflow definition created:&lt;br&gt;
&lt;a href="http://localhost:5000/workflowDef/first_sample_workflow" rel="noopener noreferrer"&gt;http://localhost:5000/workflowDef/first_sample_workflow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fstatic%2Fimg%2Ftutorial%2FuiWorkflowDefinitionVisual.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fstatic%2Fimg%2Ftutorial%2FuiWorkflowDefinitionVisual.png%3Fraw%3Dtrue" alt="Conductor UI - Workflow Definition - Visual Flow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Running our First Workflow
&lt;/h2&gt;

&lt;p&gt;Let’s run this workflow. To do that we can use the swagger API under the workflow-resources&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:8080/swagger-ui/index.html?configUrl=/api-docs/swagger-config#/workflow-resource/startWorkflow_1" rel="noopener noreferrer"&gt;http://localhost:8080/swagger-ui/index.html?configUrl=/api-docs/swagger-config#/workflow-resource/startWorkflow_1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fstatic%2Fimg%2Ftutorial%2FmetadataWorkflowRun.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fstatic%2Fimg%2Ftutorial%2FmetadataWorkflowRun.png%3Fraw%3Dtrue" alt="Swagger UI - Metadata - Workflow - Run"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's specify our workflow name &lt;code&gt;first_sample_workflow&lt;/code&gt; and Hit &lt;strong&gt;Execute&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Conductor will return a workflow id.&lt;/p&gt;

&lt;p&gt;You can find more options on how to run workflows &lt;a href="https://orkes.io/content/docs/how-tos/starting-workflows" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ok, we should see this running and get completed soon. Let’s go to the UI to see what happened.&lt;/p&gt;

&lt;p&gt;To load the workflow directly, use this URL format:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

http://localhost:5000/execution/&amp;lt;WORKFLOW_ID&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Replace &lt;code&gt;&amp;lt;WORKFLOW_ID&amp;gt;&lt;/code&gt; with our workflow id from the previous step. We should see a screen like below. Click on the different tabs to see all inputs and outputs and task list etc. Explore away!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fstatic%2Fimg%2Ftutorial%2FworkflowLoaded.png%3Fraw%3Dtrue" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Forkes-io%2Fdocs%2Fblob%2Fmain%2Fstatic%2Fimg%2Ftutorial%2FworkflowLoaded.png%3Fraw%3Dtrue" alt="Conductor UI - Workflow Run"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In this blog post — we learned how to run a sample workflow in our Conductor installation. Concepts we touched on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Workflow creation&lt;/li&gt;
&lt;li&gt;System tasks such as HTTP&lt;/li&gt;
&lt;li&gt;Running a workflow via API&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thank you for reading, and we hope you found this helpful. Please feel free to reach out to us for any questions and we&lt;br&gt;
are happy to help in any way we can.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who are we?
&lt;/h3&gt;

&lt;p&gt;We are founding engineers of Netflix Conductor who has got together to form &lt;a href="https://orkes.io" rel="noopener noreferrer"&gt;Orkes Inc.&lt;/a&gt; - a company focused on helping developers to adopt and use Netflix Conductor for building distributed systems at scale and with reliability. &lt;/p&gt;

&lt;p&gt;Join our &lt;a href="https://join.slack.com/t/orkes-conductor/shared_invite/zt-xyxqyseb-YZ3hwwAgHJH97bsrYRnSZg" rel="noopener noreferrer"&gt;slack channel&lt;/a&gt; to reach us and talk about your use-cases. We would love to talk to you!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
