<?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: Deepesh Pathak</title>
    <description>The latest articles on DEV Community by Deepesh Pathak (@fristonio).</description>
    <link>https://dev.to/fristonio</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F420337%2F89ccec57-8790-4cbe-9424-3e3078c41373.jpeg</url>
      <title>DEV Community: Deepesh Pathak</title>
      <link>https://dev.to/fristonio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fristonio"/>
    <language>en</language>
    <item>
      <title>Distributed Workflow Runner</title>
      <dc:creator>Deepesh Pathak</dc:creator>
      <pubDate>Tue, 30 Jun 2020 05:05:49 +0000</pubDate>
      <link>https://dev.to/fristonio/distributed-workflow-runner-5cod</link>
      <guid>https://dev.to/fristonio/distributed-workflow-runner-5cod</guid>
      <description>&lt;h1&gt;
  
  
  Xene
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;A distributed workflow runner with a focus on performance and simplicity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://github.com/fristonio/xene"&gt;Xene GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2qIUB9RI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://api.netlify.com/api/v1/badges/f3adc406-ad04-4059-ad21-6a54f4be6771/deploy-status" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2qIUB9RI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://api.netlify.com/api/v1/badges/f3adc406-ad04-4059-ad21-6a54f4be6771/deploy-status" alt="Netlify Status"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Xene is a high performance, distributed workflow execution platform. It lets you create custom workflows in the form of a Directed Acyclic Graph, which can then be executed based on a trigger configured with the workflow.&lt;/p&gt;

&lt;p&gt;Xene is built with Golang with a focus on performance, resiliency, and simplicity. Xene internally runs in a way similar to Kubernetes by getting triggered on a level and then reconciling the desired state with the current state. Currently, xene supports &lt;a href="https://github.com/dgraph-io/badger"&gt;Badger&lt;/a&gt; as the storage engines, which is pluggable and can be replaced with a similar key-value store.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;Xene aims to tackle two main problems in any workflow execution system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Low resource footprint&lt;/li&gt;
&lt;li&gt;Flexibility and Simplicity&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Xene exploits a lot of small enhancement to reduce the network and memory footprint of the executors and APIServer.&lt;br&gt;
APIServer acts as the brains of the whole ecosystem by directing the decisions of scheduling workloads and managing coordination&lt;br&gt;
between all the moving components. All the communication between APIServer and Agent is encrypted using mTLS and xene doesn't require&lt;br&gt;
Agents to communicate with each other reducing network footprint.&lt;/p&gt;

&lt;p&gt;Xene derives a lot of its design decisions from Kubernetes, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Like Kubernetes, xene is also level triggered and does the reconciliation of state described by the user with the actual state.&lt;/li&gt;
&lt;li&gt;It also uses a KeyValue store to store all the states and objects. To reduce the memory footprint, xene supports the use of &lt;a href="https://github.com/dgraph-io/badger"&gt;Badger&lt;/a&gt; as a key-value store.&lt;/li&gt;
&lt;li&gt;Objects are reconciled using controllers configured to watch changes on keys in the KVStore.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of the main features of Xene are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locally running a workflow from provided specs.&lt;/li&gt;
&lt;li&gt;Command-line tool for xene(xenectl) to interact with apiserver.&lt;/li&gt;
&lt;li&gt;mTLS based authentication between agent and apiserver.&lt;/li&gt;
&lt;li&gt;JWT based authentication for API server.&lt;/li&gt;
&lt;li&gt;Google OAuth based authentication integration.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/fristonio/xene-ui"&gt;Beta UI&lt;/a&gt; based on React and Typescript&lt;/li&gt;
&lt;li&gt;Workflow creation and running on top of Docker-based container runtime executor on the agent.&lt;/li&gt;
&lt;li&gt;Secrets management for agents.&lt;/li&gt;
&lt;li&gt;Workflow pipelines run live log streaming and status feed.&lt;/li&gt;
&lt;li&gt;Google-based OAuth for APIServer with domain filtered authorization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;You can start with setting up Xene on your system and try solving a few bugs listed here: &lt;a href="https://github.com/fristonio/xene/issues"&gt;https://github.com/fristonio/xene/issues&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://xene-api-docs.netlify.app/apidocs.html"&gt;API Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://xene-api-docs.netlify.app/"&gt;Xene Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pkg.go.dev/github.com/fristonio/xene"&gt;Go Doc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;Xene is licensed under &lt;a href="https://github.com/fristonio/xene/blob/master/LICENSE.md"&gt;MIT License&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contact
&lt;/h2&gt;

&lt;p&gt;If you have any queries regarding the project or just want to say hello, feel free to drop a mail at &lt;a href="mailto:deepshpathak@gmail.com"&gt;deepshpathak@gmail.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>showdev</category>
      <category>distributedsystems</category>
      <category>go</category>
    </item>
  </channel>
</rss>
