I have a chat application using stack of Openfire, Tomcat6 and MySQL.
Currently, i have installed all these servers on single Linux micro-instance(613 MB memory). Even in low user base 10-20 i am encountering CPU overload which is quite obvious here.
As, i am new to Amazon EC2 can somebody suggest me how to scale up my architecture according to traffic use?
should i use separate micro instances for every app server(openfire,mysql,tomcat6)
should i use single small or medium instance for whole server stack.
Some factors in context:
high reliance on MYSQL
high memory usage due to file transfer
web-application interacting with other Amazon service like S3,SES
I would use at least an m1.small or better an m1.large Instance. The micro-instance really is for development only, because the 613MB may soon not be enough even with zero users. Besides that, you will most likely see a lot of CPU steal time and your Server will not react some time after you had a small cpu peak. That is very annoying.
I would try to get the whole stack running on each instance except of the mysql-db. Take a look at RDS! You dont need to setup a high avalailability mysql master-slave infrastrucure yourself!
Don't use micro instances for production due to their unpredictable CPU throttle. It is more cost effective to run everything at single instance, but if you are planning to grow and scale it is better to design and develop your application in several instances.
In the long term it will be preferable to separate the application server from the database to allow maximum flexibility and scalability of each tier. RDS is a good option for now, but keep in mind it is limited to a single instance, if you have an unexpected surge of traffic beyond the capacity of the biggest instance, you might experience downtime, and then you'll need to set up clustering with additional instances, which is complex. Another option on EC2 is Xeround's cloud database service, it is different from RDS in that it can auto-scale to additional instances to accommodate additional throughput and handles the clustering automatically. As for the application server, you can auto scale it with Amazon's CloudWatch feature.