tcc
Optimizing IoT Cloud Applications for Scalability: Leveraging RPC with Distributed Queues for Seamless Operations
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (7.2%) to scientific vocabulary
Repository
Optimizing IoT Cloud Applications for Scalability: Leveraging RPC with Distributed Queues for Seamless Operations
Basic Info
- Host: GitHub
- Owner: LombardiDaniel
- Language: Go
- Default Branch: main
- Size: 4.51 MB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Optimizing IoT Cloud Applications for Scalability: Leveraging RPC with Distributed Queues for Seamless Operations
TCC

Router enables worker to have purelly sync code while still allowing for horizontal scalability in all sides.
- Routing Queue acts as both RPC framework and service and load balancer.
- Shared Memory acts as service discovery, storage for return addrs of workers (via ephemeral in-memroy queues in RabbitMQ).

This creates a decoupled system that does not need a long-lived connection between the router and the worker, allowing for better scalability.
Different levels of Async and Sync communication are common pitfals for scalability, where a single service may be needed to avoid resource locks and such. With this architecture, the TaskWorker (where business logic reside) is purelly synchronous. This allows for more reliable development and testing.
In a regular architecture, the Router would not be able to scale horizontally, because a reply from MQTT (round-robin) may fall on a different node, one that did not make the request, making it unable to ack the request (made by the worker).
Check out the docker-compose.yml! Note that all of our services have multiple replicas and the requests are still able to be routed correctly.
Happy path:
sh
docker compose up --build
Access http://localhost:15672/, login with user: guest as password: guest. In task_queue queue, publish the example task:
json
{
"action": "test",
"transaction_id": "1234567890",
"product_id": "1234567890",
"ts": "2025-06-25T18:30:32.56958179Z"
}
Example reply:
```sh docker run -ti --network tcc_default eclipse-mosquitto:1.6.15 ash
mosquittopub -h mqtt -t /gw/GWMAC/response -m {\"deviceMac\":\"000000000001\",\"ack\":true} && mosquittopub -h mqtt -t /gw/GWMAC/response -m {\"deviceMac\":\"000000000002\",\"ack\":true} ```
To just run a simple experiment, configure the docker-compose.yml file with appropriate parameters and run it. Remember to uncomment mongodb if you wish to run it locally.
sh
docker compose up --build -d && docker compose logs -t -f ; docker compose down
Owner
- Name: Daniel Lombardi
- Login: LombardiDaniel
- Kind: user
- Location: São Paulo, Brazil
- Repositories: 19
- Profile: https://github.com/LombardiDaniel
Eng. Comp - UFSCar
Citation (CITATION.cff)
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: Lombardi
given-names: Daniel
orcid: https://orcid.org/0000-0002-1892-3415
title: "Optimizing IoT Cloud Applications for Scalability: Leveraging RPC with Distributed Queues for Seamless Operations"
version: 1.0.0
# identifiers:
# - type: doi
# value: 10.5281/zenodo.1234
date-released: 2025-07-11
GitHub Events
Total
- Push event: 41
- Create event: 2
Last Year
- Push event: 41
- Create event: 2
Dependencies
- eclipse-mosquitto 1.6.15
- rabbitmq 3-management
- redis latest
- alpine 3.21.3 build
- golang 1.23.8 build
- alpine 3.21.3 build
- golang 1.23.8 build
- github.com/cespare/xxhash/v2 v2.2.0
- github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f
- github.com/eclipse/paho.mqtt.golang v1.5.0
- github.com/gorilla/websocket v1.5.3
- github.com/rabbitmq/amqp091-go v1.10.0
- github.com/redis/go-redis/v9 v9.7.3
- golang.org/x/net v0.27.0
- golang.org/x/sync v0.7.0
- github.com/cespare/xxhash/v2 v2.2.0
- github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f
- github.com/eclipse/paho.mqtt.golang v1.5.0
- github.com/gorilla/websocket v1.5.3
- github.com/rabbitmq/amqp091-go v1.10.0
- github.com/redis/go-redis/v9 v9.7.3
- go.uber.org/goleak v1.3.0
- golang.org/x/net v0.27.0
- golang.org/x/sync v0.7.0
- github.com/rabbitmq/amqp091-go v1.10.0
- github.com/rabbitmq/amqp091-go v1.10.0
- go.uber.org/goleak v1.3.0