Coder Social home page Coder Social logo

insyn's Introduction

Insyn - Transparent Business Process Execution

This is a prototype for a a programming model to execute distributed processes in an enterprise environment.

Table of Contents

  1. Motivation
  2. Structure
  3. Setup
  4. Documentation

Requirements

  • node ^6.6.0
  • npm ^3.0.0

Motivation

Environment: Enterprise Software is complex but needs to be changed frequently

The business logic of enterprise software and its implementation is very complex. They have to cover global distributed process across several business units and still adhere to security, regulatory and compliance. In current IT projects within enterprise organisations, there is an excessive focus on functionality due to the importance of requirements. These requirements only represent the status quo and do not account for future changes. Markets, and therefore business requirements, are changing constantly, which causes IT solutions to lag behind business functions.

Challenge: Complexity makes logic intransparent and therefore harder to adapt

These constant changes also make the systems even more complex and intransparent due to requirements spread out over time, and lack of up to date documentation. This leads to business users not understanding how systems behave and should behave. Transparency and understanding of current processes is necessary in order to improve them faster. In order to deliver functionality faster, one trend in the IT industry is the microservice architecture. It allows to build functionality more independently, but it comes at the price that the overall increasing complexity and therefore decreasing transparency.

Hypothesis: Right programming model makes system transparent

Within a microservice environment using the right programming model, it is possible to focus on business functionality, while maintaining transparency over business logic and processes.

Requirements: Transparency, Adaptability, Testability and Fixability

In order to develop this programming model, it is important to break down which criterion it should fulfil in order to solve that problem. Transparency: The programming model should allow business users as well as IT to understand the logic within the system for current, as well as past processes. Adaptability / Replaceability: Parts of the logic should be decoupled in order to adapt or even replace them completely. Testability: The system should allow for meaningful tests that represent tests for actual business functionality. Fixability: The system should be capable of rolling back processes when flawed code is deployed and has not obviously crashed the system, but moved it into a wrong state.

Solution: Constraining write operations to asynchronous events

Business logic and process definitions are only relevant to write operations. Write operations are encapsulated in events and can be processed asynchronously, which is where our model is applied. State in our system can only be changed by those events and not directly.
In order to achieve transparency within the system, the effects of actions need to be transparent as well. In particular, they need to define how they change state and what other events they dispatch and are not allowed to have any other side effects. With this paradigm our current state is derived from those events and is therefore only a second class.

Structure

The structure in this repository has 4 main parts:

.
├── lib                      # Framework that implements the proposed programming model
├── src                      # Application using the framework implementing a Demo Process
├── frontend                 # Frontend Application for Demo (based on react-redux-starter-kit)
└── tests                    # Unit tests and test application, which is also used for Demo

Setup

First, clone the project:

$ git clone https://github.com/KeKs0r/insyn.git
$ cd insyn

Then install dependencies for the main applicaiton

$ npm install                   # Install project dependencies

Then test functionality of Application

$ npm test                   # Install project dependencies

Then install the frontend application

$ cd frontend
$ npm install                   # Install frontend dependencies

Then you should be able to run the frontend (still in frontend folder)

$ npm start                     # Runs development Server

Then you should see something like:

  app:config Creating default configuration. +0ms
  app:config Looking for environment overrides for NODE_ENV "development". +3ms
  app:config Found overrides, applying to default configuration. +2ms
  app:webpack:config Creating configuration. +1s
  app:webpack:config Enable plugins for live development (HMR, NoErrors). +3ms
  app:server Enable webpack dev and HMR middleware +151ms
  app:bin:server Server is now running at http://localhost:3000. +54ms

So the webserver is now available on localhost and port 3000

Documentation

The Demo Client is able to visualize the events for a single order process. In order to see it, you need to navigate to Order Process in the left navigation bar. On the order process screen the process needs to be executed by clicking the Sun icon next to the headline and selecting replay actions. Then the events are replayed and executed, which visualizes the different process steps. Clicking on specific Events in a process state e.g. ORDER.CREATE_ORDER, it shows the single action on the right side. Which was the context that was provided to that action as well as the result and side actions that were dispatched. When the customer on the navigation bar is catategorized as B, the final status of the invoice is PARTIALLY_PAID. This is an error path that was intentionally included. When categorizing the customer as A and replaying the actions again, we see that the invoice is now fully paid, since A-Customers get a higher discount.

insyn's People

Contributors

greenkeeperio-bot avatar keks0r avatar

Watchers

 avatar

Forkers

paulvelthuis93

insyn's Issues

Version 10 of node.js has been released

Version 10 of Node.js (code name Dubnium) has been released! 🎊

To see what happens to your code in Node.js 10, Greenkeeper has created a branch with the following changes:

  • Added the new Node.js version to your .travis.yml
  • The engines config in 1 of your package.json files was updated to the new Node.js version

If you’re interested in upgrading this repo to Node.js 10, you can open a PR with these changes. Please note that this issue is just intended as a friendly reminder and the PR as a possible starting point for getting your code running on Node.js 10.

More information on this issue

Greenkeeper has checked the engines key in any package.json file, the .nvmrc file, and the .travis.yml file, if present.

  • engines was only updated if it defined a single version, not a range.
  • .nvmrc was updated to Node.js 10
  • .travis.yml was only changed if there was a root-level node_js that didn’t already include Node.js 10, such as node or lts/*. In this case, the new version was appended to the list. We didn’t touch job or matrix configurations because these tend to be quite specific and complex, and it’s difficult to infer what the intentions were.

For many simpler .travis.yml configurations, this PR should suffice as-is, but depending on what you’re doing it may require additional work or may not be applicable at all. We’re also aware that you may have good reasons to not update to Node.js 10, which is why this was sent as an issue and not a pull request. Feel free to delete it without comment, I’m a humble robot and won’t feel rejected 🤖


FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

An in-range update of uuid is breaking the build 🚨

Version 3.1.0 of uuid just got published.

Branch Build failing 🚨
Dependency uuid
Current Version 3.0.1
Type dependency

This version is covered by your current version range and after updating it in your project the build failed.

uuid is a direct dependency of this project this is very likely breaking your project right now. If other packages depend on you it’s very likely also breaking them.
I recommend you give this issue a very high priority. I’m sure you can resolve this 💪

Status Details
  • continuous-integration/travis-ci/push The Travis CI build could not complete due to an error Details

Commits

The new version differs by 6 commits.

  • c50ac88 Update readme & package version (#198)
  • 082a0b3 v5 support in CLI (#197)
  • 1d56dc9 V5 support (#188)
  • f37f96a (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183)
  • 3b21880 Fix typo (#178)
  • d8e41bd Simple typo fix (#165)

See the full diff

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of babel-loader is breaking the build 🚨

Version 7.1.0 of babel-loader just got published.

Branch Build failing 🚨
Dependency babel-loader
Current Version 7.0.0
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As babel-loader is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪

Status Details
  • continuous-integration/travis-ci/push The Travis CI build could not complete due to an error Details

Release Notes 7.1.0

🚀 New Feature

  • Update to support webpack 3 (#471) (Joe Lencioni)
  • look for babel options in package.json and .babelrc.js (babel 7) (#465) (Thomas Sileghem)
  • Watch configuration files. (#460) (Evilebot Tnawi)
    You can now change the babel config while webpack watch or dev-server is running and webpack will correctly recompile all files with babel.

🐛 Bug Fix

  • Only base cache identifier on babel options from package.json (#468) (Daniel Tschinder)

📝 Documentation

  • Remove outdated examples. (Daniel Tschinder)

🏠 Internal

  • update eslint-config-babel to version 7.0.0 (#469) (greenkeeper[bot])
  • update lint-staged to version 4.0.0 (#470) (greenkeeper[bot])
  • Add prettier eslint plugin (#466) (Daniel Tschinder)
  • Add node 8 to test matrix (#467) (Daniel Tschinder)
  • Upgrade find-cache-dir to 1.0 and cross-env to 5.0 (#457) (Daniel Tschinder)
Commits

The new version differs by 13 commits.

  • d249119 7.1.0
  • ea9b4d4 Update yarn.lock
  • 7986787 chore(package): update eslint-config-babel to version 7.0.0 (#469)
  • ee40748 chore(package): update lint-staged to version 4.0.0 (#470)
  • 66784e4 Update to webpack 3 (#471)
  • 8544ffa Only base cache identifier on babel options from pkg.json (#468)
  • ea2eafa Add prettier eslint plugin (#466)
  • 4548169 Add node 8 to test matrix (#467)
  • d8b73c0 fix(resolve-rc): look for babel in package.json and .babelrc.js (#465)
  • 8d96c1f Remove outdated examples.
  • 91f2658 Fixed: watch configuration files. (#460)
  • de2d3f3 Upgrade dependencies
  • 37e63e3 Upgrade find-cache-dir to 1.0 and cross-env to 5.0 (#457)

See the full diff

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of eventemitter2 is breaking the build 🚨

Version 4.1.2 of eventemitter2 just got published.

Branch Build failing 🚨
Dependency eventemitter2
Current Version 4.1.0
Type dependency

This version is covered by your current version range and after updating it in your project the build failed.

eventemitter2 is a direct dependency of this project this is very likely breaking your project right now. If other packages depend on you it’s very likely also breaking them.
I recommend you give this issue a very high priority. I’m sure you can resolve this 💪

Status Details
  • continuous-integration/travis-ci/push The Travis CI build could not complete due to an error Details

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

An in-range update of async is breaking the build 🚨

Version 2.5.0 of async just got published.

Branch Build failing 🚨
Dependency async
Current Version 2.4.1
Type dependency

This version is covered by your current version range and after updating it in your project the build failed.

async is a direct dependency of this project this is very likely breaking your project right now. If other packages depend on you it’s very likely also breaking them.
I recommend you give this issue a very high priority. I’m sure you can resolve this 💪

Status Details
  • continuous-integration/travis-ci/push The Travis CI build could not complete due to an error Details

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

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.