Le mie scuse se questo è il sito di scambio di stack sbagliato per questa domanda. Per favore, fammi sapere se dovrei chiedere questo in un posto diverso.
Recentemente sono andato a un colloquio. L'intervista riguardava la posizione di senior full stack engineer. In quell'intervista mi è stata posta la domanda:
How would you design a scalable web application
Mentre la domanda si concentrava sulla scalabilità, era intesa nel senso di un'applicazione moderna e reattiva.
Proverò a riprodurre la risposta che ho dato nel miglior modo possibile.
Mi è stato detto che la mia risposta, sebbene abbia alcuni punti positivi, non era esattamente quello che si aspettavano e che era più vicina alla risposta che si sarebbero aspettati da qualcuno che si candidasse per una posizione di medio livello piuttosto che per quella più anziana.
Sono curioso di sapere come migliorare la mia risposta.
La risposta:
Well, there are three things to consider, the frontend, the backend and the data base. Since I am mainly experienced with React, Django and MongoDB, I will assume these technologies.
Beginning with the frontend, I would be serving a html file with a javascript bundle. Since we want to minimise the size of the bundle, to get it across as fast as possible, I would see if there are libraries we can do without or where we can only import partially. For example, loadash allows partial imports, to avoid bundling the entire library. I would also be cautious how many requests I make to the backend and how much information I retrieve at one time. If we had to display a very long list of items, I would go for a infinite scroller strategy rather then trying to fetch all data at once. Another thing I would look at is using something like rselect in order to minimise the number of computations we do when the dom tree re renders.
Moving to the backend, we would have a RESTful architecture. Our Django views would be mapped to different methods and endpoints and their role would be to communicate with the data base. I would use mongoengine rather then the lower level pymongo. We couldn't have only one server so I would deploy this under a load balancer. Another thing I would ensure is we serve everything over https. I would redirect all http traffic to https, in order to improve security.
Coming to the database, we would need a cluster, in order to be able to scale horizontally. In order to optimise performance I would index the database. Additionally, I would ensure we had different machines used for reading and writing, in order to distribute the load more evenly.
Quali sono le cose più importanti da menzionare quando si parla di ridimensionamento per ciascuno dei tre componenti dello stack?
Altro quindi ridimensionamento, quali sono le altre caratteristiche della moderna applicazione Web?
Che cos'è una risposta completa e completa a questa domanda?