hyperledger-firefly / hyperledger-firefly/firefly

Node Component Architecture - Periodic Table of Elements

Open
#6 0 comments 0 reactions 2 assignees Claimed by @gabriel-indik View on GitHub
architecture
Dominant language
Go
Stars
602
Forks
246
Avg merge
18h 47m
Merged PRs (30d)
6

Description

> See #4 for info on why this is in Git

## What _is_ a FireFly Node?

![The Firefly Node](https://user-images.githubusercontent.com/6660217/118288481-7d034500-b4a2-11eb-80df-97f831685027.png)

There are three zoom levels of this question, where the architecture matters:

1. What fundamentally _is_ a node - _left on the picture_
- It is a *multiple* runtimes with a single unified HTTPS/Websocket API (exposed by the Core)
- It has a private database, containing your private data, and data received from others in the network
- It has connectivity out to other parties in the network, through runtimes (Blockchain, Shared Filesystems, Messaging etc.)
2. What are the core runtime responsibilities, and pluggable elements - _right on the picture_
- The core elements of function that FireFly performs, and which runtime is responsible
- This means some insight into core itself, and the jobs it performs, but not full code structure
- More importantly, what the split of responsibilities is between `Connectors` and `Infrastructure Runtimes`
- `Connectors` are the bridging runtimes, that know how to talk to a particular runtime.
- They run separately to the core (like a microservice architecture of an app)
- They can be written in any language (not just Go) - Java, TypeScript, Rust, Python, .NET etc.
- They can use any network transport (not just HTTPS/Websockets) - GRPC, AMQP, UDP etc.
- They connect to the core with a Golang shim - see separate _Plugin Architecture_ discussion
> - In some special cases (like the Database) the Golang shim does not need a connector runtime
- `Infrastructure Runtimes` are the core runtimes for multi-party system activities
- Blockchain nodes - Ethereum (Hyperledger Besu, Quorum, Geth), Hyperledger Fabric, Corda etc.
- Public strorage - IPFS etc.
- Database - PostreSQL, CouchDB etc.
- etc.
3. What is the code structure _inside_ the core
- The [README.md](https://github.com/kaleido-io/firefly) is the reference for this
- Developers contributing to FireFly, on the core, or building new plugins, need this level of detail
> - A reconciliation is underway to ensure the medium-level view correlates well with this code structure

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.