Blog

Passar a espais de treball més grans sense fer esperar ningú

Cada projecte de Mythex té el seu propi espai de treball: un petit ordinador al núvol on l'agent escriu codi i on s'executa la vista prèvia de la teva app. Havíem passat els espais nous de 1 GB de memòria a 2 GB, però els més antics es van quedar a 1 GB: el dia que ho vam comprovar, un quart aproximadament. La nostra primera correcció movia un projecte a un espai de treball més gran quan es tornava a obrir. El seu primer dia en producció, va fer esperar una persona set minuts. Vam posar un límit de temps estricte, i després vam treure el trasllat de l'acte d'obrir un projecte.

Per què els espais antics es van quedar petits

El nostre proveïdor de sandbox fixa la mida d'un espai de treball quan es crea, i la conserva a través de totes les pauses i reprises. Canviar la plantilla —la recepta a partir de la qual es construeixen els espais nous— només afecta els espais creats després del canvi. Res no redimensiona els que ja existeixen.

Això importava. Un dels espais petits es va quedar sense memòria durant un git push mentre s'iniciava la seva vista prèvia, i va deixar de respondre durant 11 minuts. Una publicació va fallar per culpa d'això.

Primer intent: moure el projecte en despertar-lo

Els espais de treball es pausen quan ningú els fa servir i es desperten quan s'obre el projecte. Despertar-lo semblava el moment adequat per moure el projecte, perquè ningú no hi està treballant encara.

El trasllat funcionava així:

  1. Comprova la mida. Si l'espai de treball és més petit de 2 GB, el mou. Si la mida és desconeguda, no fa res.
  2. No molestis una publicació. Una publicació llegeix els fitxers de l'espai de treball, així que si n'hi ha una en curs, s'omet el trasllat.
  3. Empaqueta el projecte. Arxiva tot el projecte —inclosa la seva història de git, que són tots els punts de control que té el projecte, i el fitxer .env de l'app, que pertany al propietari— però deixa fora les dependències instal·lades (node_modules), que es poden tornar a instal·lar.
  4. Copia-ho directament. Transmet l'arxiu des de l'espai de treball antic cap a un de nou de 2 GB, de manera que mai no ha de cabre a la memòria del nostre propi servidor.
  5. Compara abans de canviar. Compta els fitxers, llegeix l'últim punt de control i compta els punts de control, a tots dos espais de treball. Canvia només si les tres coses coincideixen.
  6. Conserva l'antic en qualsevol fallada. Qualsevol error o qualsevol discrepància descarta el nou espai de treball i obre el projecte a l'antic, com abans.

Un detall de la comparació importava més del que sembla. La comprovació s'executa com a compte d'administrador, i git es nega a llegir un repositori que pertany a un altre usuari. No va imprimir res en cap dels dos costats —i «res» coincidia amb «res», de manera que la comprovació passava sense comparar cap historial—. Vam dir a git que confiés en el directori, i vam afegir una prova perquè això no es pugui colar de nou.

Què va sortir malament el primer dia

El seu primer dia en producció, empaquetar un projecte va topar amb un límit de cinc minuts per a les ordres, dins del despertar. El propietari va esperar set minuts a que el seu espai de treball s'obrís. I com que el trasllat havia fallat, el projecte encara era petit, de manera que la següent obertura ho hauria intentat de nou i els hauria fet esperar de nou.

Una migració que fa esperar algú mentre obre el seu propi projecte és un mal intercanvi. El sentit de fer-ho en despertar era que ningú no ho notés.

Segon intent: un pressupost fix

Aquell mateix dia vam canviar quatre coses:

  • Un minut per a tot el trasllat. Cada pas —comprovar la mida, empaquetar, crear el nou espai de treball, copiar, desempaquetar, comparar— comparteix un únic pressupost de 60 segons. Quan s'acaba, el projecte s'obre a l'espai de treball antic.
  • Atura el treball, no només l'espera. Renunciar nosaltres no n'hi ha prou si l'arxivat encara s'executa dins de l'espai de treball que el propietari està a punt d'utilitzar. Ara cada ordre d'arxivat es mata dins de l'espai de treball poc abans que s'acabi el pressupost. Si el nou espai de treball arriba quan ja ho hem abandonat, es descarta.
  • No facis esperar el propietari per a la neteja. Eliminar l'arxiu temporal ara es fa en segon pla.
  • No ho tornis a intentar en cada obertura. Un projecte que no s'ha pogut moure es deixa en pau durant 24 hores, de manera que una fallada costa com a màxim un retard al dia, no un per obertura.

Tercer intent: treu-ho del despertar

Això reduïa el pitjor cas a un minut. Però un minut continua sent un minut, i ens vam adonar que el trasllat no havia d'estar en el camí de ningú.

Ja no es crea cap espai de treball d'1 GB. Per tant, això no és un procés continu; és una feina puntual amb una llista fixa d'espais de treball. Fer-ho dins del despertar volia dir que una persona real pagava cada trasllat lent, i l'única manera de saber que un espai no es mourria era que algú acabés d'esperar-lo.

Així que vam treure el trasllat del despertar per complet. Obrir un projecte fa el que feia abans. Els espais de treball petits que queden es gestionen com un lot supervisat: ningú no hi espera, i un espai de treball que no es mou apareix a l'informe del lot, on el podem mirar, en lloc de davant de la persona que n'és la propietària.

Què n'hem après

  • Redimensionar no sempre és possible. Quan una plataforma fixa una mida en crear-se, pujar el valor per defecte només ajuda les coses noves. Planifica per a les antigues.
  • «Ningú no ho fa servir encara» vol dir igualment que algú hi espera. La feina feta en el camí cap a un producte és feina que una persona observa.
  • Posa un pressupost a qualsevol cosa que estigui en el camí de l'usuari, i atura la feina quan s'acabi. Excedir el temps pel nostre cantó mentre una ordre continua executant-se en un altre lloc només trasllada el problema.
  • Una migració puntual pertany a una feina puntual. Amagar-la dins d'accions quotidianes la fa més barata d'escriure i més cara d'executar.
  • Prova les teves comprovacions de seguretat. Una comparació que no compara res es veu exactament igual que una que ha passat.

Si construeixes sobre Mythex, no hi ha res a fer: l'objectiu és simplement que hi hagi menys espais de treball sense memòria, i que obrir un projecte sigui tan ràpid com abans. Com es pausen i es despertan els espais de treball està explicat a la documentació, a espai de treball privat. Per una altra història de falta de memòria, vegeu l'error de memòria que s'amagava en una etiqueta de progrés.

Mythex · Pricing · Crea qualsevol cosa amb IA · Plantilles de llocs web i aplicacions · Mythex comparat · Glossari de creació d’aplicacions amb IA · Eines gratuïtes per crear aplicacions amb IA · English

English አማርኛ العربية Български বাংলা Bosanski Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)