Diffo

Module VersionHex DocsLicenseREUSE statusAsk DeepWiki

Diffo is a Telecommunications Management Forum (TMF) Service and Resource Manager, built for autonomous networks.

It is implemented using the Ash Framework leveraging core and community extensions including some created and maintained by diffo-dev. As such it is highly customizable using Spark DSL and as necessary Elixir.

Diffo models relationships between all domain entities (Ash resources) and persists these in Neo4j, an open source graph based database.

Diffo comes with all Ash resources to implement:

Diffo can simply be used as an inventory system paired with conventional orchestration, and while this is a good starting point, we recommend dynamic orchestration, where orchestration (or rather choreography) is done in order to ensure goals are met autonomously.

Diffo can be used to implement 'a difference engine' which allows closed loop autonomy by acting on outstanding goals. Intents can be expressed as persistent expectations, and these are compared with actual instances to compute an outstanding instance, which simply contains unmet expectations in the original structure. This can then be used to derive the next task, which typically impacts actual but may also refine our expectations. In this way the workflow is synthesized from small tasks.

Expected and actual instances are compared using the Elixir Outstanding Protocol, via the Ash Outstanding Extension

Diffo can be used for any combination of service-service, service-resource and resource-resource, where expectations can be held for internal or external actual services and/or resources.

Diffo is especially suited for use in organisations with loosely coupled 'entity based' enterprise architecture where network entities can run diffo inside their entity without requiring or expecting other entities to do so.

Installation

If available in Hex, the package can be installed by adding diffo to your list of dependencies in mix.exs:

def deps do
  [
    {:diffo, "~> 0.1.6"}
  ]
end

You should need Neo4j available. We recommend the Neo4j Community 5 latest, available at Neo4j Deploymnent Centre which can be installed locally. You can also configure connection to a cloud based database service such as Neo4j AuraDB.

Tutorial

To get started you need a running instance of Livebook

Run in Livebook

Future Work

We plan to support:

Contributions

Contributions are welcome, please start with either a discussion or issue

Acknowledgements

Thanks to my colleagues in the Telco industry, in particular those who I've collaborated with in the Telco industry.

Thanks to the vibrant Elixir and Ash communities, and in particular the Ash Core for ash 🚀

Thanks to Florin Patrascu for bolt_sips andLuis Sagastume for boltx, both forerunners of bolty the bolt driver for neo4j.

Thanks to the Neo4j Core for neo4j and pioneering work on graph databases.

Links

Diffo.devNeo4j Deployment CentreTMF