JeevanisM Posted August 29, 2020 Share Posted August 29, 2020 Hello friends, Got a new project inquiry, the general requirements as below - Website Type - Online Examination Questions - Multiple choice Question with one selection for answer Expected Attendees - 25,000 students Registration required ( with OTP for confirmation ) with Online Payment mode After the exam, a student can see the score with results Admin - various type of lists ( highest mark scored students, categories of percentage etc ) Now, I have a doubt, what kind of Server hosting I should suggest to my client ? Is this 25,000 at a time very high load ? I dont know much about the server load / bandwidth . As like that, the requirement, is Processwire a suitable tool to achieve the goal ? if so, what are the modules, I should use, or a general structure / approach ? thank you 1 Link to comment Share on other sites More sharing options...
Jonathan Lahijani Posted August 29, 2020 Share Posted August 29, 2020 It's definitely possible. I built a complicated online scholarship application with ProcessWire, while not the same thing as an exam, it did have some similarities. An application would be initiated by a nominator on behalf of the person being nominated, and then there were 3 reference people per application (it got pretty complicated). Notification emails, application statuses, a bunch of other things. In my case, the public interface was mostly the in admin, so it had no "frontend" (other than some templates that would be used for redirecting to the edit url). That meant using roles, permissions and hooks accordingly to lock things down. In your use case, I would say to build a custom front-end for it and not do it the way I did it. It will be easier and I think it makes more sense for your use case (ie, multiple choice questions as opposed to all kinds of various fields from files, rich text, etc.). One crucial thing to test heavily is making sure the test takers don't get logged out for some reason. In my situation, that happened and I could not exactly pinpoint why, but it caused a lot of trouble especially since the application involved people filling out long-form answers, which would then be wiped when they hit the save button and their session had expired. I'll have to figure that out in the next iteration, but that was bad. You may want to have one question per page. This is how online / computer-based tests usually do it anyway. As for structure, maybe this could work: Home Exams Exam 1 Question 1 ('question' template) Answer Option 1 ('answer' template) Answer Option 2 Answer Option 3 Question 2 Answer Option 1 Answer Option 2 Answer Option 3 Submissions Submission 1 ('submission' template) Submission 2 question template title - the question being asked answer template title - the answer text correct - checkbox indicating this is the correct answer submission template (title -- make the field not required and hide it, rather than removing it as a global field... a trick I use) user - page field for parent /admin/access/users/; the person who took the test; maybe use the autocomplete inputfield here since loading 25,000 things into a select list will be problematic exam - page field for parent /exams/; the exam that was taken answers - multi-select page field (asm-select) that has all the answers they chose for the particular exam (any other relevant data you need to store) With some code you can check the correct answers of an exam vs. the submission answers and go from there. 8 1 Link to comment Share on other sites More sharing options...
JeevanisM Posted August 30, 2020 Author Share Posted August 30, 2020 13 hours ago, Jonathan Lahijani said: You may want to have one question per page. This is how online / computer-based tests usually do it anyway. thank you for your valid advice ... and yes this one is exactly what I thought, in order to save any complication 1 Link to comment Share on other sites More sharing options...
Sergio Posted August 30, 2020 Share Posted August 30, 2020 (edited) Although doable, I'd only recommend a system like this to be implemented using ProcessWire if the rest of the project must (or already is) be highly coupled with PW and it doesn't make sense to decouple it for whatever reason. Otherwise I'd recommend you to implement it using another framework. PW shines in the content management part, and I love it, but it may present you with some limitations in its developer-experience department when you need to implement some business logic that relies heavily on integration of payment systems, user data input, generation of reports and especially tests. There's also a myriad of similar systems like this already implemented that you can use as a base, like this one https://github.com/LaravelDaily/Laravel-Test-Result-PDF (demo: https://www.youtube.com/watch?v=GmLFHGud7I8). Edited August 31, 2020 by Sergio typo 4 Link to comment Share on other sites More sharing options...
JeevanisM Posted August 31, 2020 Author Share Posted August 31, 2020 On 8/30/2020 at 3:23 PM, Sergio said: Although doable, I'd only recommend a system like this to be implemented using ProcessWire if the rest of the project must, or already is, be highly coupled with PW and it doesn't make sense to decouple it for whatever reason. Otherwise I'd recommend you to implement it using another framework. PW shines in the content management part, and I love it, but it may present you with some limitations in it's developer-experience department when you need to implement some business logic that relies heavily on integration of payment systems, user data input, generation of reports and especially tests. There's also a myriad of similar systems like this already implemented that you can use as a base, like this one https://github.com/LaravelDaily/Laravel-Test-Result-PDF (demo: https://www.youtube.com/watch?v=GmLFHGud7I8). thanx for the input, I was thinking about the Laravel first but wanted to ask some expert opinion Link to comment Share on other sites More sharing options...
JeevanisM Posted August 31, 2020 Author Share Posted August 31, 2020 On 8/29/2020 at 9:12 PM, JeevanisM said: Now, I have a doubt, what kind of Server hosting I should suggest to my client ? Is this 25,000 at a time very high load ? I dont know much about the server load / bandwidth . Any suggestion for this ? Link to comment Share on other sites More sharing options...
Sergio Posted August 31, 2020 Share Posted August 31, 2020 1 hour ago, JeevanisM said: Any suggestion for this ? 25,000 per hour/day/week? It all depends. From what you described about the app, even 25k users a day should be fine to start with a VPS with 2GB of RAM. If its usage increase a lot you can move the database to another VPS on its own AND/OR increase the VPS CPU and RAM resources very quick. My advice is to keep things simple and not try to over-engineer the application performance from the start. But if you feel "adventurous" ? or think that the project will have this many users right away on day one (which I doubt) you can start with a "serverless" approach where the infrastructure is scaled on-demand, using https://vapor.laravel.com/ and you don't have to worry. There's a course about this approach that is very interesting: https://serverlesslaravelcourse.com/ 2 1 Link to comment Share on other sites More sharing options...
JeevanisM Posted September 1, 2020 Author Share Posted September 1, 2020 15 hours ago, Sergio said: 25,000 per hour/day/week? It all depends. From what you described about the app, even 25k users a day should be fine to start with a VPS with 2GB of RAM. If its usage increase a lot you can move the database to another VPS on its own AND/OR increase the VPS CPU and RAM resources very quick. My advice is to keep things simple and not try to over-engineer the application performance from the start. But if you feel "adventurous" ? or think that the project will have this many users right away on day one (which I doubt) you can start with a "serverless" approach where the infrastructure is scaled on-demand, using https://vapor.laravel.com/ and you don't have to worry. There's a course about this approach that is very interesting: https://serverlesslaravelcourse.com/ //25,000 per hour/day/week?// This will happen at particular date from 10 AM to 11AM only. This will not happen everyday, only once in a month or so Link to comment Share on other sites More sharing options...
LostKobrakai Posted September 1, 2020 Share Posted September 1, 2020 1 hour ago, JeevanisM said: This will happen at particular date from 10 AM to 11AM only. This will not happen everyday, only once in a month or so If you have highly variable load I'd suggest going with something like heroku for manual scaling (if planable) or even solutions, which can automatically scale. No need to run a super beefy server for a whole month if only a single day has actual load. 25k/hour is around 7req/s (likely higher for varying load over the duration of the hour), so either requests must be served in <1/7s or you need more server instances. 2 Link to comment Share on other sites More sharing options...
bernhard Posted September 1, 2020 Share Posted September 1, 2020 On 8/29/2020 at 5:42 PM, JeevanisM said: After the exam, a student can see the score with results As number? As chart? As PDF? On 8/29/2020 at 5:42 PM, JeevanisM said: Admin - various type of lists ( highest mark scored students, categories of percentage etc ) For that part (when using ProcessWire), I'd have a look at RockFinder3 and http://tabulator.info/ (and definitely go with a one-page-per-question/answer route!) 1 Link to comment Share on other sites More sharing options...
AndZyk Posted September 2, 2020 Share Posted September 2, 2020 Sorry, if I didn't understand your case, but if you are looking for a survey tool I can recommend LimeSurvey. Of course you could do this with ProcessWire, but a survey tool has most of your points already covered. ? 1 Link to comment Share on other sites More sharing options...
JeevanisM Posted September 4, 2020 Author Share Posted September 4, 2020 On 9/1/2020 at 3:26 PM, bernhard said: As number? As chart? As PDF? For that part (when using ProcessWire), I'd have a look at RockFinder3 and http://tabulator.info/ (and definitely go with a one-page-per-question/answer route!) Just as one page, no need of chart, just tabular data with possible option to export as PDF Link to comment Share on other sites More sharing options...
JeevanisM Posted September 4, 2020 Author Share Posted September 4, 2020 On 9/2/2020 at 3:53 PM, AndZyk said: Sorry, if I didn't understand your case, but if you are looking for a survey tool I can recommend LimeSurvey. Of course you could do this with ProcessWire, but a survey tool has most of your points already covered. ? thanks for the reply, but not a Survey, its just an online examination but after reading your comment, seems like a Survey and a Multiple choice exam look alike ? Link to comment Share on other sites More sharing options...
JeevanisM Posted September 4, 2020 Author Share Posted September 4, 2020 On 9/1/2020 at 1:02 PM, LostKobrakai said: If you have highly variable load I'd suggest going with something like heroku for manual scaling (if planable) or even solutions, which can automatically scale. No need to run a super beefy server for a whole month if only a single day has actual load. 25k/hour is around 7req/s (likely higher for varying load over the duration of the hour), so either requests must be served in <1/7s or you need more server instances. yes that right, I will check the options you provided . thankx Link to comment Share on other sites More sharing options...
bernhard Posted September 4, 2020 Share Posted September 4, 2020 1 hour ago, JeevanisM said: Just as one page, no need of chart, just tabular data with possible option to export as PDF http://tabulator.info/docs/4.7/download#pdf 1 Link to comment Share on other sites More sharing options...
JeevanisM Posted September 4, 2020 Author Share Posted September 4, 2020 1 hour ago, bernhard said: http://tabulator.info/docs/4.7/download#pdf thank you Link to comment Share on other sites More sharing options...
Recommended Posts