I would like to add a few more things here and also I want to note here: All my requests to parse server is cloud code request.
From my observation:
1 - Parse server is cpu hungry. Generally speaking cpu will be bottleneck. Monitor your server cpu usage and check this.
2 - Parse doesn’t need too much ram. 500Mb per parse server would be more than enough. I have server with 2.5gb ram and 4 cpu. 500Mb for OS and 500mb for one parse instance. I run 4 parse server in the same machine. Works great.
3 - Redis Cache decreases performance. I was expecting that if I use redis cache (redis installed in seperate machine) performance would increase. Because you know redis will reduce requests to database and this means more performance. But It didnt worked like that. My server performance decreased by 50%
4 - Simple MongoDB server will take you too long. I realized this today. I was doing some benchmark tests to see How my parse server will behave under some stress. I didn’t like the results. I monitored my database server. When I was doing some benchmark test, My database servers CPU usage went to over 90%. And I tought “This is my problem”. My database server was 2cpu and 2gb ram. I rescaled this to 4 cpu and 8gb ram. But when I re-do benchmark, my performance didnt increase. Because database wasn’t the problem. So I rescaled my server to 2gb ram and 2 cpu. Then I found my problem(See next). And when I solved it my request per second got doubled even my database specs stays same. A well indexed database with SSD disk will take you too long.
5 - You have to scale parse server If you wanna keep the performance. From my observation, single parse server can handle 20-25 request per second(Cloud code request, didnt test normal requests, This value also depends on what you do on your cloud code. I do 4 queries and return array of parse objects. This number can be as high as hundreds if cloud code is simple enough). So if your server gets20 request per second, parse server can feed them. But If your server is getting more than that for example you have one parse server but server getting 100 request, this slows things down and your users get timeout error or even socket error which means users cannot connect to parse server. This is similar to Ddos attacks. But users doesnt want to take the server down. They want to connect. But connection also consume some system resource. And Parse server was also cpu hungry remember(see number 1). You have to scale parse server(horizontaly or vertically). For 100 request per second 5 parse server would do job. But previously said this numbers depends on your code. You have to test it to find the correct number.
Like I said, these are my observations. If you have a different experience, please tell me so I can fix my error and learn something new.