Vai al contenuto

GitHub separa le code di scrittura dei diversi branch

GitHub restringe il coordinamento delle scritture dai repository ai singoli riferimenti. Nei test interni le operazioni su riferimenti diversi raggiungono un throughput da tre a quattro volte superiore.

Che succede

Due sviluppatori fanno push su branch diversi e finiscono comunque nella stessa coda. È il problema descritto da GitHub: il coordinamento delle repliche tiene un blocco sull’intero repository finché una scrittura non è completata. Per i repository più trafficati, trasferire repliche su Azure aggiunge abbastanza latenza da rendere quella coda un ostacolo.

GitHub descrive una modifica che restringe il coordinamento ai singoli riferimenti Git, come quelli che identificano i branch. Le scritture che toccano lo stesso riferimento restano ordinate; quelle su riferimenti distinti possono procedere contemporaneamente. Ogni operazione continua a pagare la latenza fra le regioni, senza bloccare per questo le scritture indipendenti.

Nei test interni con traffico realistico, GitHub riporta un throughput da tre a quattro volte superiore per le scritture su riferimenti diversi, con latenza inferiore. Il guadagno riguarda il numero di scritture gestite sotto quel carico concorrente.

Il passaggio prepara anche la separazione fra archivio durevole e repliche che servono le letture, così da aumentare queste ultime senza replicare nello stesso modo tutto il sistema di scrittura. Le prime repliche di lettura descritte si aggiornano in background dall’archivio: per servire ogni tipo di lettura, GitHub deve ancora completare quel meccanismo di sincronizzazione.

Perché conta

Con più agenti e sviluppatori al lavoro, GitHub si trova a far passare molti push indipendenti da una coda unica. Spostare il coordinamento sui singoli riferimenti restituisce spazio a chi lavora su branch diversi, senza chiedergli di cambiare Git o modo di lavorare.

Vuoi sapere di più su pillole come questa?