Funcții

Versiunea scurtă sus, detaliile complete mai jos.

  • NNTP cu pipelining la viteza liniei: 8.31 Gbps măsurați pe 10 GbE.
  • Pipeline într-o singură trecere: decodarea, verificarea și extragerea se suprapun; volumele RAR nu ating niciodată discul; arhivele imbricate se despachetează în aceeași trecere.
  • Disponibilitate prin uniune multi-provider: complet din uniunea serverelor tale, sau abandon timpuriu.
  • Buget de memorie: RAM limitat, spill elegant, fără swap niciodată.
  • Reluare sigură la blocare: jurnal la nivel de articol; kill −9 în mijlocul unui job și continuă de unde a rămas.
  • API compatibil SABnzbd + NZBGet JSON-RPC: Sonarr/Radarr/nzb360/LunaSea funcționează nemodificate.
  • Indexer integrat: scanează grupurile într-un index local, căutabil, care servește Newznab.
  • Perete de postere: grafică, note, distribuție, grile de episoade; fără chei API.
  • Preluare automată watchlist + upgrade-uri de calitate: preluare la prima apariție, upgrade până la calitatea țintă.
  • Un singur executabil de sine stătător: par2 + dezarhivare RAR integrate.

Motor și viteză

  • NNTP cu pipelining. Mai multe cereri ținute simultan în tranzit pe fiecare conexiune înving și latența dus-întors, și degradarea ferestrei de congestie TCP. Măsurăm între +12% și +270% față de preluarea serială, iar circa 8 conexiuni per server sunt de ajuns ca să saturăm linia.
  • Decodarea yEnc SIMD (rapidyenc, cu kernele NEON și AVX) rulează la 4.95 GB/s per nucleu, chiar pe loc, pe măsură ce octeții sosesc în calea de recepție.
  • Coadă partajată între servere. Providerii se autoechilibrează până la ~2% fără nicio reglare. Rata reală a fiecăruia e urmărită, iar coada unui job e expediată în dublu, ca un singur server lent să nu poată întârzia finalul.
  • Suprapunere între joburi. Coada jobului N se suprapune cu începutul jobului N+1, așa că linia rămâne aprinsă de la un capăt la altul de-a lungul întregii cozi: 2% inactiv aici, față de 61% întuneric la SABnzbd în același benchmark.
  • Câine de pază pentru joburi lente. O descărcare care se târăște pe un singur server lent, în timp ce restul stau degeaba, e trimisă la coada cozii (progresul se păstrează) și reia când coada se eliberează.
  • Preîncărcare pe serverele inactive: un server pe care jobul activ nu-l poate folosi, pentru că articolele lui nu sunt stocate acolo, pornește în schimb următorul job din coadă, în loc să stea degeaba.
  • Scară de reglare a conexiunilor. În loc să ghicească, măsoară unde se oprește de fapt din urcat debitul fiecărui provider (conexiuni cerute față de conexiuni acordate) și se așază acolo.
  • Regulator automat de viteză: un regulator RTT opțional, în stil LEDBAT, care cedează în fața traficului din casa ta și ia ce mai rămâne din linie.
  • Limite de viteză și un planificator săptămânal: plafoane ajustabile în timp real, un program în ora locală (sigur la trecerea la ora de vară) și o „pauză de N minute” care se reia singură.
  • Buget de memorie. Un singur buget global de RAM (automat: un sfert din RAM, plafonat, dar care poate fi suprascris). Când se strânge, se micșorează întâi bufferele, apoi datele trec pe disc și sunt citite înapoi odată ce jobul se așază. Nu face niciodată swap. Un job de 190 GB se încheie într-un buget de 1 GB, la ~1.1 GB RSS de vârf, iar pentru NAS-uri există un profil de 2 GB, măsurat și documentat.
  • Contrapresiune. Un disc lent frânează socketurile în loc să lase RAM-ul să se umple. Se menține în ±1% dintr-un plafon de scriere, iar RAM-ul chiar scade sub presiune.
  • Eliberarea memoriei după job: odată inactiv, daemonul returnează memoria eliberată sistemului de operare și coboară la circa 8 MB între joburi pe macOS.

Pipeline-ul într-o singură trecere

  • Scrie o singură dată. Articolele decodate sunt scrise (pwrite) direct la offset-urile lor finale din fișier. Fără fișiere temporare, fără o trecere separată de asamblare.
  • Verificare PAR2 în flux. Fiecare bloc primește un hash MD5 din bufferele de decodare pe măsură ce sosește, așa că verificarea se încheie exact în momentul în care se termină descărcarea. E mai riguroasă decât verificarea rapidă cu care se mulțumesc ceilalți clienți și nu costă nimic.
  • Extragere directă: postările RAR în mod store (majoritatea release-urilor scene) sunt mapate și extrase chiar în timpul descărcării, așa că volumele nu ajung deloc pe disc. Se scrie pe disc conținut × 1.0, iar discul necesar e 1×, acolo unde alții cer cam 2×.
  • Arhive imbricate, iar adâncimea aproape nu costă nimic. Arhivele din arhive - RAR în RAR, 7z într-un RAR, scări adânci de multe niveluri - sunt dezimbricate pe măsură ce sosesc octeții, în interiorul trecerii pe care oricum o făceam. Aici e toată diferența: un client care scrie fiecare strat pe disc, îl închide, îl redeschide și îl scanează din nou plătește o trecere întreagă per nivel, așa că fiecare strat coborât îl costă încă un drum dus-întors pe disc. Ale noastre merg în prima trecere, iar conținutul iese dintr-o scară de zece niveluri la fel cum iese dintr-una de un nivel. O copie pe disc, acolo unde scrie-și-rescanează ține două sau trei.
  • Deobfuscare. Postările obfuscate sunt redenumite din metadatele lor PAR2, numele amestecate cu ROT13 sunt recuperate, iar gunoiul cu nume de tip hash e clasificat și blocat.
  • Reparare exact potrivită. Blocurile deteriorate sunt cunoscute pe măsură ce apar, așa că se preia doar setul de volume de recuperare cu cel mai mic număr de octeți (o rezolvare de tip rucsac), iar repararea atinge numai zonele deteriorate.
  • Înregistrări de recuperare RAR. Când PAR2 e epuizat, sau nu a fost postat niciodată, înregistrările de recuperare RAR încorporate repară volumele deteriorate pe loc.
  • Reparare la orice adâncime. Un set PAR2 împachetat într-un strat interior e găsit și rulat la propriul lui nivel, iar o postare doar-par (datele șterse, lăsat în urmă un set cu recuperare 100%) e reconstruită întreagă și apoi despachetată.
  • Rezervă pentru comprimat și criptat: postările non-store se materializează și se dezarhivează prin motorul RAR nativ, totul de la RAR4 până la noul RAR7, suprapuse cu restul cozii. Seturile criptate sunt parcate cu un mesaj clar, în loc să eșueze în tăcere.
  • Caută singur parola. Majoritatea postărilor criptate nu au nevoie de tine. Încearcă metadatele NZB-ului și convenția de nume {{pw}}, API-ul *arr, apoi orice notiță text scurtă postată lângă fișiere și, în lipsa lor, numele release-ului și ale fișierelor. Reia căutarea la fiecare nivel: un lanț care ascunde parola fiecărui strat în stratul de deasupra - o parolă diferită la fiecare nivel - se deschide până la capăt fără să tastezi nimic. Ce rămâne cu adevărat trece prin deblocarea 🔑 din panou: deblochează în fundal, apoi arhivează normal.
  • Bariere de siguranță. Volumele sursă reparate sunt protejate la scriere cât timp rulează reextragerea, suma de control proprie a fișierului final e verificată cap-coadă (activată implicit), iar codul de ieșire raportează „succes” doar când starea finală e cu adevărat utilizabilă.

Fiabilitate și disponibilitate

  • Verificare de disponibilitate preflight. Sweep-urile STAT cu pipelining construiesc în câteva secunde o matrice per articol × per server și marchează jobul COMPLETE, REPAIRABLE sau IMPOSSIBLE înainte să se descarce vreun octet de conținut. O postare imposibilă abandonează după ce n-a tras aproape nimic.
  • Rutare prin uniune. Un articol e considerat lipsă abia după ce fiecare server activ l-a refuzat; până atunci, e direcționat către serverul care îl are. Backbone-urile diferă la retenție și la retrageri, așa că uniunea completează discret postări pe care niciun server luat singur nu le-ar putea completa.
  • Jurnal sigur la blocare. Jurnalul lucrează la granularitate de articol. Trimite un kill −9 în mijlocul unui job și revine, repreluând doar ce nu apucase să fie salvat; coada și istoricul supraviețuiesc repornirilor.
  • Parcare și reîncercare: joburile eșuate rămân parcate în istoric, iar o reîncercare preia doar bucățile încă lipsă.
  • Testat pentru haos. Un server NNTP simulat rulează zece scenarii de eșec cap-la-cap (430-uri, corupere, trunchiere, blocaje, servere moarte, kill −9) la fiecare rulare de test.
  • Scor de fiabilitate a providerilor. Ratele de completitudine per server sunt păstrate definitiv și afișate în panou, cu un avertisment sub 98%.
  • Analizor de diversitate a serverelor. Eșantionează cu STAT pe serverele tale și le grupează după lacunele comune, ca să vezi care provideri „diferiți” sunt de fapt același backbone înainte să plătești pentru o redundanță pe care n-o ai cu adevărat.
  • Cote, conturi bloc și pază de disc: cote zilnice și lunare, bugete de octeți pe toată durata de viață pentru conturile bloc (excluse automat odată consumate), o pauză la disc redus și un istoric zilnic de utilizare per provider.
  • Detectare duplicate: dupekey și dupescore, cu o alternativă reținută promovată automat în clipa în care o preluare eșuează.
  • Rutare conștientă de retenție. Postările mai vechi decât retenția unui server îl ocolesc complet, iar orice nu poate servi niciun server eșuează imediat, în loc să se învârtă degeaba.

Automatizare și integrări

  • API compatibil SABnzbd: toată suprafața pe care o folosesc efectiv *arr-urile: addfile/addurl, categorii, priorități, pauză/reluare per job, reîncercare, paginare, chei API pe două niveluri. Sonarr și Radarr vorbesc cu el ca și cum ar fi SABnzbd.
  • Fațadă NZBGet JSON-RPC. nzb360, LunaSea și alte telecomenzi NZBGet se conectează nemodificate.
  • Server Newznab. Indexul tău local răspunde la t=search/tvsearch/movie, așa că *arr-urile pot trata propriile tale scanări ca pe un indexer.
  • Preluare automată RSS: fluxul unui indexator este același lucru la care se abonează un cititor de știri, doar că listează ce tocmai a fost postat pe Usenet. Tot ce se potrivește cu filtrele se descarcă singur. Feeduri filtrate cu un limbaj în stil NZBGet, adăugate și editate live din panou.
  • Watchlist. Enumeră serialele și filmele pe care le vrei, chiar și pe cele încă nedifuzate. Fiecare episod e preluat la prima apariție și îmbunătățit până atinge calitatea-țintă (de pildă, 720p → 1080p REMUX), iar copia înlocuită e ștearsă abia după ce upgrade-ul a fost verificat. Un calendar de difuzare arată ce urmează.
  • Folder monitorizat. Pui un .nzb înăuntru și se descarcă; fișierul dispare odată ce a fost preluat.
  • Foldere inteligente: reguli de regex, cuvinte-cheie și dimensiune sortează descărcările pe categorii chiar la punerea în coadă, cu arhivare TV opțională în Show/Season NN/Show - S01E02.ext.
  • Reguli de curățare: extensiile-gunoi sunt eliminate odată ce un job se finalizează.
  • Mutare pe un NAS: după dezarhivare și redenumire, descărcările finalizate merg într-un folder de destinație cu structura pe categorii păstrată, iar destinațiile per categorie pot trimite serialele și filmele pe share-uri diferite. Dacă share-ul nu e accesibil, fișierele rămân pe loc.
  • Scripturi de post-procesare. Respectă contractul de mediu SAB_* al SABnzbd, așa că scripturile pe care le ai deja rulează ca atare.
  • Migrare cu un clic. Importă serverele dintr-un ini SABnzbd sau dintr-un conf NZBGet și citește direct sabnzbd.ini, dacă asta e tot ce găsește.
  • Ingestie Spotnet: verificarea semnăturii spot-urilor și sinteza NZB, integrate direct.

Previzualizare și bibliotecă

Panou și setări

Coadă cu un sertar de detalii per descărcare: bare de progres per fișier, blocuri de verificare, contribuție per server
Sertarul cozii: bare per fișier, blocuri de verificare, contribuție per server.
Setări: editor de servere și controale live de viteză/programare
Fiecare setare editabilă în browser. Majoritatea se aplică live.
Aspectul de telefon al panoului
Aspect de telefon așa cum trebuie, același daemon.
  • Grafice live, fără biblioteci. Totul se interoghează o dată pe secundă (o arie de debit, o arie stivuită per provider, o cronologie a sănătății verificării, un burn-down al cozii, o histogramă de viteză), iar graficele își lărgesc fereastra de timp pe măsură ce lărgești browserul.
  • Monitor de resurse: CPU, RAM față de buget, scrieri pe disc și rețea, toate pe un singur grafic, cu un avertisment de disc redus.
  • Clasament al providerilor. Serverele se resortează singure după performanța live, fiecare arătând octeții pe sesiune, numărul de conexiuni, gradul de utilizare și fiabilitatea.
  • Gestionarea cozii: tragi pentru reordonare, setezi prioritatea și categoria pe loc, deschizi un sertar per descărcare, pui pauză optimist sau alegi „pauză de N minute”.
  • Totul se configurează în browser: servere (cu teste de conexiune live), viteză și program, conexiuni/fereastră/decodoare, disc și cotă, foldere monitorizate și scripturi, filtre de indexare, bibliotecă, RSS și securitate cu rotația cheilor. Setările supraviețuiesc repornirilor.
  • Diagnostice integrate: un vizualizator de jurnal în interfață, un benchmark de sistem care îți găsește plafoanele de rețea, calcul și disc și îți spune ce să faci cu ele, analizorul de diversitate a serverelor și scara de conexiuni.
  • Consum de date: bare stivuite pe 14 zile per provider, istoric zilnic și contoare pe toată durata de viață pentru conturile bloc.
  • 28 de limbi. Panoul vine complet localizat, inclusiv scrierile de la dreapta la stânga; manualul și acest site sunt în 16.
  • Confort de utilizare. Tragi și plasezi un .nzb oriunde, notificări pe desktop, sunete la finalizare, un asistent la prima rulare și serve --open.

Implementare