44 lines
2.5 KiB
Markdown
44 lines
2.5 KiB
Markdown
## Components
|
|
|
|
Mainflux IoT platform is comprised of the following services:
|
|
|
|
| Service | Description |
|
|
|:--------------------------------------------------------------------------|:------------------------------------------------------------------------|
|
|
| [users](https://github.com/mainflux/mainflux/tree/master/users) | Manages platform's users and auth concerns |
|
|
| [things](https://github.com/mainflux/mainflux/tree/master/things) | Manages platform's things, channels and access policies |
|
|
| [normalizer](https://github.com/mainflux/mainflux/tree/master/normalizer) | Normalizes SenML messages and generates the "processed" messages stream |
|
|
| [http-adapter](https://github.com/mainflux/mainflux/tree/master/http) | Provides an HTTP interface for accessing communication channels |
|
|
| [ws-adapter](https://github.com/mainflux/mainflux/tree/master/ws) | Provides a WebSocket interface for accessing communication channels |
|
|
|
|
![arch](img/architecture.jpg)
|
|
|
|
## Domain model
|
|
|
|
The platform is built around 3 main entities: **users**, **things** and **channels**.
|
|
|
|
`User` represents the real (human) user of the system. It is represented via its
|
|
e-mail and password, which he uses as platform access credentials in order to obtain
|
|
an access token. Once logged into the system, user can manage his resources (i.e.
|
|
things and channels) in CRUD fashion, and define access control policies by
|
|
connecting them.
|
|
|
|
`Thing` represents devices and applications connected to Mainflux. There are
|
|
two types of "things" supported at the moment: `device` and `app`. While device
|
|
is used to represent any physical device connected to the platform, app represents
|
|
any 3rd party service that uses the platform for message exchange with other
|
|
"things".
|
|
|
|
`Channel` represents a communication channel. It serves as message topic that
|
|
can be consumed by all of the things connected to it.
|
|
|
|
## Messaging
|
|
|
|
Mainflux uses [NATS](https://nats.io) as its messaging backbone, due to its
|
|
lightweight and performant nature. You can treat its *subjects* as physical
|
|
representation of Mainflux channels, where subject name is constructed using
|
|
channel unique identifier.
|
|
|
|
In general, there is no constrained put on content that is being exchanged
|
|
through channels. However, in order to be post-processed and normalized,
|
|
messages should be formatted using [SenML](https://tools.ietf.org/html/draft-ietf-core-senml-08).
|