Kupakia video ya gigabaiti mbili kupitia WiFi ya mkahawa ni jaribio la matumaini. Unatazama kielelezo cha maendeleo kikijikokota kuelekea asilimia sabini, kisha muunganisho unakatika-katika. Upakiaji unashindwa. Unapojaribu tena, seva inatarajia faili jipya kabisa. Unaanza upya kutoka sifuri. Kwa yeyote anayeunda programu inayoshughulikia video zinazotengenezwa na watumiaji, hili si jambo la nadra. Ni hali ya kawaida. Itifaki ya tus ilijengwa mahususi ili kutatua tatizo hili. Ni kiwango cha wazi kinachofanya kazi kupitia HTTP ya kawaida na kuipa upakiaji kumbukumbu. Mtandao unapopatikana tena, uhamishaji wa faili unaendelea pale ulipoishia.

Kwa Nini Upakiaji wa Kawaida Unashindwa

Upakiaji wa faili wa kawaida wa multipart unachukulia mzigo (payload) wote kama muamala mmoja. Kivinjari au programu inafungua muunganisho wa TCP, inatuma bayti kwa mtiririko, na kutarajia 200 OK mwishoni. Ikiwa muunganisho utakatika kwa sababu mtumiaji amebadilisha kutoka LTE kwenda WiFi, au kwa sababu laptop imelala, seva haina njia ya kujua ni bayti zipi zilifika salama. Mifumo mingi inatupa tu data hiyo ya sehemu tu. Mtumiaji anabakiwa na fomu iliyofeli na hali mbaya ya hisia. Faili za video huongeza maumivu haya kwa sababu ni kubwa, mara nyingi hupakiwa kutoka kwenye vifaa vya mkononi kwenye mitandao isiyo thabiti, na mara nyingi hufungwa katika mifumo ambayo haiwezi kuchakatwa hadi faili lote liwe kamili.

Jinsi Tus Inavyobadilisha Mchezo

Tus inatafakari upakiaji kama mazungumzo yenye hali (stateful) badala ya utoaji wa mara moja. Badala ya kutuma faili katika mtiririko mmoja wa bayti, mteja hugawanya mzigo katika vipande (chunks). Muhimu zaidi, seva inakumbuka offset, ambayo ni idadi kamili ya bayti ilizopokea hadi sasa. Uhifadhi huu wa hali ndio unaofanya uwezekano wa kuendelea (resumption) upatikane. Itifaki hii ni rahisi kwa makusudi. Haihitaji WebSockets, gRPC, au SDK za kampuni binafsi. Inatumia mbinu za HTTP unazozijua tayari.

Maombi Matatu Yanayowezesha Kuendelea

Kila upakiaji wa tus unafuata mfululizo unaotabirika.

Kwanza, mteja hutuma ombi la POST kwenye endpoint inayojulikana ya tus. Vichwa vya habari (headers) vinaelezea faili. Kichwa cha habari cha Upload-Length kinaonyesha ukubwa wa mwisho katika bayti, na metadata ya hiari kama vile jina la faili au aina ya maudhui (content type) husafirishwa kwenye kichwa cha habari cha Upload-Metadata kama orodha ya jozi za funguo-thamani (key-value pairs) zilizofungwa kwa base64 na kutenganishwa na koma. Seva inatengeneza rasilimali ya upakiaji tupu na kujibu kwa hali ya 2