.. _architecture-overview: ********************* Architecture Overview ********************* FastIoT is designed as a service architecture. We use the following technologies to support the architecture: * `nats.io `_ as a message broker for inter module communication. * `Docker `_ for module runtime management with `docker-compose `_ for managing many containers * In production there is one separate docker container for each FastIoT Service * For testing purposes modules can be simulated or run locally and interact with other FastIoT or infrastructure services running in docker containers * MongoDB, MariaDB and others for data storage, s. :mod:`fastiot.db` for information on database handling. Modules and Messaging Basics ============================ Messages: * ... can be sent or received by modules via the NATS Broker using publish and subscribe. * ... are sent via a NATS Broker subject. The subject has a name, a message type and optionally a response type. Services: * ... are configured via environment variables or yaml-Files, depending on your needs * ... are executed in a Docker environment (for production), via command line, or within an IDE like PyCharm (for development) * ... connect themselves to the NATS Broker * ... publish and subscribe to the subjects of the NATS Broker * ... log their messages to the NATS Broker