I'm developing a prototype IoT application which does the following
- Receive/Store data from sensors.
- Web application with a web-based IDE for users to deploy simple JavaScript/Python scripts which gets executed in Docker Containers.
- Data from the sensors gets streamed to these containers.
- User programs can use this data to do analytics, monitoring etc.
- The logs of these programs are outputted to the user on the webapp
Current Architecture and Services
- Using one AWS EC2 instance. I chose EC2 because I was trying to figure out the architecture.
- Stack is Node.js, RabbitMQ, Express, MySQl, MongoDB and Docker
- I'm not interested in using AWS IoT services like AWS IoT and Greengrass
- I've ruled out Heroku since I'm using other AWS services.
Questions and Concerns
My goal is prototype development for a Beta release to a set of 50 users (hopefully someone else will help/work on a production release)
- As far as possible, I don't want to spend a lot of time migrating between services since developing the product is key. Should I stick with EC2 or move to Beanstalk?
- If I stick with EC2, what is the best way to handle small-medium traffic? Use one large EC2 machine or many small micro instances?
- What is a good way to manage containers? Is it worth it use swarm and do container management? What if I have to use multiple instances?
- I also have small scripts which have status of information of sensors which are needed by web app and other services. If I move to multiple instances, how can I make these scripts available to multiple machines?
- The above question also holds good for servers, message buses, databases etc.
My goal is certainly not production release. I want to complete the product, show I have users who are interested and of course, show that the product works!
Any help in this regard will be really appreciated!
