Giter Club home page Giter Club logo

conductor-sharp's People

Contributors

boma96 avatar nikola-babic-cdx avatar ognjenkatic avatar renatohalic97 avatar tymarats avatar vedranvucic77 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

conductor-sharp's Issues

Add support for automatic registration of workers and sub-workflows when registering a workflow

Instead of having to register workflows and all their tasks manually (error-prone for large workflows), it could be useful to add support for automatic worker and sub-workflow registration. The user would then register only the workflows they need, and all of its workers and sub-workflows would be discovered via reflection and registered behind the scenes.

This feature can be optional, so something like this:

builder.RegisterWorkflow<MyWorkflow>(opts => opts.RegisterTasksAutomatically());

Missing semaphore wait

As reported by @markor23 the semaphore Wait call in ExecutionManager.cs is missing (removed in a hurried refactor at some point) and therefore the intended limit on the number of concurrent workers is not being applied.

Noting here and waiting for PR.

Add support for polldata

image
There are endpoints that allow us to see polling information for tasks. This is useful to check if tasks are not being polled (workers might be offline).

Implement worker load balancing strategy (maybe?)

Quoting exising TODO:

// TODO: Implement load balancing strategy so we can avoid // task starvation. One way is to create some sort of task priority // which will dynamically change based on how many of those tasks we served // When a task is polled we reduce its priorty and when increse the priorty of all others

The intent here is to implement some smarter way of polling tasks. The way polling currently works is:

  1. Check queue to see how many of which task is queued
  2. Select task names implemented by microservice which have queue count > 0
  3. Execute them concurrently (up to a limit)

This should equate to round robin polling by task name. Maybe we can assign priorities to tasks and use that, or select them based on how many are in queue, or select them at random, or something smarter.

There are no apparent issues with the current approach so this TODO can also just be cleared.

Make the WorkflowEngineBackgroundService resilient

When there are conductor outages, this service will crash and workers will no longer respond. It would be helpful to be able to configure some sort of recovery strategy so that it can restart if conductor comes back up.

Implement polling strategy (maybe?)

Quoting existing TODO from code:

// TODO: Implement polling strategy so that if there // are no requests incoming we poll less, and when queues are full // we poll more often

This basically means that when there is a high load we poll more often and when there is no load we extend the polling interval to be kind to conductor (as there are many microservices individually polling it).

I am not 100% sure this would make much of a difference as we cannot allot a too long polling interval (5s+) because new tasks would end up waiting a lot. We did notice in production scenarios that conductor is affected by heavy polling.

Make workflow description formatting configurable

At the moment workflow descriptions are stringified json. This allows us to make more complex descriptions, use labels and such, but it was not the intended use of the description field. It should by default be a string field. However, we should allow the user to retain the previous behavior somehow if they want.

Create a Conductor sink logger

It would be nice to have an injectable logger that writes logs to conductor task endpoint, in case we want to have Conductor as the main logging system.

Add support for HTTP taks

The http task is very useful and could lead to less writing of code. For starters we should add a simple builder which allows us to add these to workflows. More advanced features and use cases can be implemented later (as there can be quite a lot of complexity in dealing with requests and responses).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.