One system consisted of a Django frontend communicating through WebSockets with a web.py backend. Initially, this system used a REST API, but it required speeding up. WebSockets could return each response from the microservices immediately instead of waiting for all of them to be completed.

The backend distributed tasks to microservices using RabbitMQ. These microservices performed their tasks, usually employing Selenium, and then returned their answers to the backend. Subsequently, the backend sent each answer to the frontend for the user to access.

The entire system was dockerized and deployed on an EC2 container.

This configuration allowed a user to quickly access a variety of data from various sources at the click of a button.

More details
This particular project used a domain bought from route53 and used traeffik as a reverse proxy, though i do sometimes use nginx (such as for this website).
Passwords were required for many of the microservices and they were stored in an rds database, to save the user from having to enter many usernames and passwords each time.