How does a server side programming language handle this type of request?
La maggior parte dei linguaggi di programmazione non si occupa di questo. Invece, questo problema è generalmente risolto dai database, che è progettato per risolvere questo tipo di problemi usando le transazioni.
Ora la domanda si sposta su, come fanno i database a risolverlo? Una varietà di modi, vecchi database relazionali utilizzati per bloccare i record in modo che solo una richiesta possa modificare un determinato valore allo stesso tempo. I database relazionali moderni utilizzavano una tecnica denominata MVCC (controllo della concorrenza a più versioni), che utilizzava una struttura dati basata su log per consentire a più lettori e più scrittori di accedere allo stesso record in modo sicuro e simultaneo e di rilevare e eseguire il rollback in caso di conflitti di aggiornamento. Alcuni database distribuiti non relazionali eliminano la necessità di una rigida coerenza dei dati e consentono invece temporaneamente dati incoerenti, con garanzia "alla fine coerente".
Al livello più elementare, la primitiva utilizzava un'istruzione della CPU chiamata compare-and-swap. Ad un livello superiore, si dispone di una struttura dati un registro / diario di scrittura in anticipo, che tiene traccia delle modifiche in un file di sola aggiunta prima che le modifiche vengano incorporate nella struttura dati corrente. A livello di infrastruttura distribuita, disponi di vari algoritmi di consenso come Paxos o Raft e un numero di libri misti distribuiti specializzati per garantire una contabilità coerente su più macchine.
Il contatore delle visualizzazioni di YouTube impiega probabilmente un'infrastruttura distribuita con un contatore "alla fine coerente" piuttosto che un contatore completamente coerente. Ciò significa che in qualsiasi momento, il contatore di ciascuna replica potrebbe non riflettere mai il conteggio della vista universale reale, ma presumibilmente se il mondo smette di accedere a YouTube e al sistema viene concesso un po 'di tempo per raggiungere uno stato stabile, l'infrastruttura distribuita alla fine convergere al conteggio delle visualizzazioni reali.
can two requests access a variable or any sort of data and change its value at the same time? is the first arrived request to be handled first and then the second waits for its turn?
Con i database che utilizzano i blocchi, sì, solo una richiesta può accedere a un dato alla volta, la richiesta successiva deve attendere il completamento del primo. Con i database che impiegano MVCC, è possibile passare contemporaneamente più richieste, ma viene rilevato un conflitto di scrittura e la richiesta che si impegna in seguito viene interrotta. Con un contatore distribuito, eventualmente coerente, sono possibili più scrittori, ma sacrifichi una visualizzazione coerente dei dati.
Question:could it happen only by chance or 100% of the time?
Accade tutto il tempo, non necessariamente il 100% delle volte, ma spesso è sufficiente che quando un'applicazione deve essere ridimensionata, è necessario tenerne conto.
Question:What type of vulnerability is this? does it have a specific definition?
Se gestito correttamente, non dovrebbe esserci vulnerabilità. Le applicazioni devono definire il livello di garanzia di coerenza di cui ha bisogno. Le applicazioni finanziarie in genere richiedono una strong garanzia di coerenza, mentre il conteggio delle visualizzazioni di YouTube può offrire una consistenza più flessibile per prestazioni migliori.