O soluție pentru MySQL foarte lent

Încercam ieri să testez o îmbunătățire la un algoritm de căutare, când am observat că containerul docker cu mysql răspundea foarte foarte greu. Cam peste câteva secunde așa.

Prima încercare a fost restart – nu mă luați la rost, era serverul local vroiam doar să pot testa! În fine chiar și după restart rezultatul a fost același – mysql era foarte lent.
O scurtă verificare a logurilor a scos la iveală următoarele

[Warning] IP address '172.17.0.4' could not be resolved: Temporary failure in name resolution

Aparent, în mod implicit mysql încearcă să rezolve domeniile utilizatorilor conectați, iar asta adaugă timp prețios la fiecare cerere.
Pentru a sări acești timpi putem adăuga următorii parametri în fișierul my.cnf:

skip-name-resolve
skip-host-cache

Cu skip-name-resolve mysql nu va mai rezolva host-ul la fiecare conexiune nouă iar skip-host-cache va ignora cache-ul dns intern. Mai multe puteți afla aici: https://dev.mysql.com/doc/refman/5.5/en/host-cache.html .
De asemeea aceste setări nu sunt recomandate în producție fără o testare în prealabil.

Motive pentru a folosi micro-servicii

Micro-serviciile, un concept și nou și vechi, e din nou la modă. Acum doi ani nu prea îi dădeam prea mare importanță, însă azi dacă aș avea de proiectat un serviciu sau produs nou, aș folosi cu plăcere acest model. Iată câteva dintre motivele mele:

  1. Sunt mai ușor de întreținut: când o aplicație monolit are un defect, vei fi nevoit să descarci tot codul sursă (de obicei câteva zeci de mii de linii de cod), să reproduci problema și să faci deployment-ul. În cazul unui micro-serviciu ai doar câteva clase și câteva sute de linii de cod – găsirea problemei și rezolvarea ei va fi mult mai ușoară.
  2. Mai puțin cod rezultă mai puține defecte, și mai ușor de testat.
  3. De obicei, micro-serviciile oferă mai multe opțiuni de configurare, pentru că depind de alte micro-servicii. Asta face migrarea lor mai ușoară și cuplarea cu alte micro-servicii.
  4. Mai ușor de scalat, și în multe cazuri și costuri mai mici: fiindcă micro-serviciile de obicei au un scop foarte limitat, poți monitoriza mai ușor și scala doar acele micro-servicii care a căror performanță este direct dependentă de resurse.
  5. Mai ușor de monitorizat.
  6. Mai puțin dependente de platformă: doar în cazuri foarte rare, un micro serviciu este dependent de un furnizor de servicii cloud, de exemplu dacă folosești ca micro serviciu un serviciu specific acelui furnizor, cum este Mailchimp sau SES. Dar atunci când îți implementezi propriile servicii le poți face să comunice prin HTTP cu interfețe REST, și ai din start independență față de infrasctructură sau rețea.

Sper că v-am convins să considerați micro-serviciile pentru următorul proiect. Chiar dacă e nevoie de o planificare mai laboriaosă a componentelor și interfeței de comunicare/autentificare e un exercițiu foarte bun.

Condiția de om sărac, pentru copii mari și mici – partea I

O poveste scurtă în care o să vedem cum ajung oamenii săraci și cum influențează asta societetatea pe termen lung.

Într-un sat, locuiesc trei oameni: Ion, Petre și Primarul. Toți trei sunt vecini. Ion și Petre au o turmă de oi de unde vând brânza și lâna și câștigă bani. Primarul primește salariul din taxele pe care le colectează de la cei doi și le ține contabilitatea.

Într-un an, vine o boală și toate oile mor, iar Ion și Petre, se văd nevoiți să-și strângă economiile și să cumpere vaci.

Aceștia, se duc la piață să cumpere 2 vaci, dar fiindcă nu se pot înțelege pe care să le cumpere, se ceartă și decid să-și cumpere fiecare vaca lui.

Amândouă vacile sunt bune și dau lapte, iar cei doi se descurcă bine, dar anul următor, apare o boală mortală la vaci. Ion se duce la veterinar și își cumpără medicamente dar Petre, fiind prins cu alte lucruri nu apucă să se ducă la timp și vaca lui moare.

Lui Petre îi e ciudă că i-a murit vaca, și acum fiindcă nu mai are bani, trebuie să lucreze pentru Ion. Acesta din urmă, reușind să strângă niște bani mai ia o vacă. Acum Ion are 2 vaci, iar Petre îi datorează primarului câteva sute de lei pe taxe.

Primarul îl somează pe Petre să plătească, iar Ion văzând că Petre e harnic îl împrumută el cu banii pentru taxe cu condiția să rămână să lucreze la el încă un an.

Peste un an, în sat sunt alegeri, iar Primarul vrea să-și păstreze postul, așa că merge la Petre și-i promite că dacă îl votează, o să-i dea și lui o vacă.

Și lui Ion îi face aceeași promisiune, dar acesta nu îl crede, și-i spune că se va vota pe el ca primar, pentru că și el candidează. Tensiunile dintre cei doi cresc, dar Primarul o ține sus și tare, că cine o să-l voteze o să primească o vacă!

Ion, își dădea seama de unde venea ”vaca” cadou a Primarului – din grajdul său, pentru că el este singurul din sat care are două vaci. La fel își dădea seama și Petre, dar Primarul își dorea foarte mult să rămână primar iar Petre își dorea foarte mult of vacă.

Așa se face că Petre îl votează pe Primar, iar cu 2 voturi pentru și unul împotrivă, Primarul rămâne în funcție.

A doua zi, după alegeri, Petre se duce la primar să-și primească vaca, iar Primarul adoptă o ordonanță de urgență prin care toate persoanele cu mai mult de o vacă din sat trebuie să doneze una primăriei.

Ziua următoare, o vacă de-a lui Ion este confiscată și dată lui Petre. Acum și Petre și Ion au câte o vacă.

Întâmplarea face ca peste un an, să apară o boală mortală la vaci, Petre își vaccinează vaca, dar Ion fiind prins cu alte treburi, nu apucă să o vaccineze și vaca lui moare.

Cu deznădejde, Ion se vede nevoit să se angajeze la Petre ca să câștige niște bani.

Peste 2 ani, au venit alegerile, iar Ion era determinat să își ia vaca înapoi.

~ va urma ~

Runlocal.sh – alternativă la eb local run

Runlocal este un script bash care simulează funcționarea lui eb local run. Așadar, dacă aveți un Dockerfile în proiect puteți să-l rulați cu ajutorul lui runlocal fără a avea nevoie de utilitarul eb.

Runlocal, construiește imagine din Dockerfile, lansează containerul și (opțional) urmărește log-ul containerului (cu opționea -f). Apoi curăță automat containerul și imaginea la ieșire (CTRL+C dacă urmăriți logurile).

De asemenea puteți integra runlocal în propriul vostru script:

Scriptul este disponibil ca un gist aici.

De ce să-ți vaccinezi copilul?

De ce să-ți vaccinezi copilul? Chiar așa, e sănătos, mănâncă bine, râde și se joacă – de ce să riști să ți-l îmbolnăvești de de autism?

Am citit câteva articole și postări pe facebook despre epidemia de rujeolă din județul Cluj și deși e un subiect pe care nu l-aș dezbate în mod normal pe blog, mi-e greu să nu zic și eu ceva. Umblă vorba prin “comună” că vaccinul ROR, ar putea cauza autism. Dar după cum bine știm, unii dintre noi, și cum ne informează și google , autismul este o afecțiune congenitală. Altfel spus te naști cu ea, nu ai cum să te îmbolnăvești. Persoanele autiste sunt așa de la naștere, și acest lucru se poate observa în diferite stagii de dezvoltare. Iar una dintre cauzele suspectate ale autismului este chiar virusul rubeolei – rubeola congenitală – care se transmite de la mamă la făt.

Așadar nu știm exact care sunt cauzele sale, dar nu este ca o boală pe care o primești, și cu certitudine nu poate fi cauzată de un vaccin.

Acum că am stabilit un lucru, să vedem de ce ai alege, totuși să nu îți vaccinezi copilul? Presupunând că nu citești atâtea articole pe net, și ai auzit și tu că, copilul tău se poate îmbolnăvi de autism, deși nimeni nu a dovedit încă asta, dar ai tu o frică așa. Ia gândește-te la tine, tu ai fost vaccinat? dar la mama ta, la familia ta, – sunt vaccinați? dar la vecinii din cartier – sunt vaccinați? Ei da, și uite că sunt oameni la casa lor cu copii mulți dintre ei și nici unu nu are autism. Și cel mai important – trăiesc și în ziua de azi! Problema asta o putem pune cam așa: acum mi-e frică să trec drumu că poate mă calcă o mașină – da dacă nu treci să iei niște apă mâine o să mori de sete!

Un alt risc la care ne supunem nepoții, dacă nu ne vaccinăm copiii este că aceștia să facă rubeolă congenitală. Pe lîngă că reprezintă un risc pentru ceilalți copii, copilul nevaccinat, dacă ajunge la maturitate probabil că o să vrea să facă și el copii. Cum are șanse foarte mari să se îmbolnăvească de rujeolă sau rubeolă, se va transmite automat la copilaș – care nu are nici o vină că mămica mămicii ei nu a imunizat-o. Și nici nu-mi place să-mi amintesc care sunt efectele acestui virus asupra fătului, cauzând la sugari și autism.

Acum câteva milioane de ani, când specia umană nu avea nici un mod de apărare împotriva virușilor, parte a populației era sacrifcată până ce unii dintre indivizi dezvoltau anticorpi – ăsta era modul natural de viață. Însă în 2016 nu sunt sigur dacă vreau să experimentez așa ceva oricât de natural ar fi.

Desigur ca orice lucru făcut de om, imunizarea cu ROR în masă are și unele dezavantaje cum ar fi riscul unor complicații ușoare, care apar în unele cazuri foarte rare. Nu este perfect; dar este un pronostic incontestabil mai bun decât cel al unei epidemii.