VCNews e Performance

Estou real­mente empen­hado no pro­jeto VCNews (apelido). Esta’ muito inter­es­sante desen­volver esse pro­jeto, a quan­ti­dade de infor­ma­cao col­ida e manip­u­lada e’ real­mente grande. Nao esta­mos ape­nas lidando com Twit­ter mais. E so’ o Twit­ter gera muita, mas muita infor­ma­cao para ser manip­u­lada. O que e’ muito bacana, tra­bal­har em algo que tem ser performatico.

  • drive do twit­ter 100% ok com as novas regras da api deles
  • manip­u­la­cao de usuar­ios, sta­tus e tags do twit­ter melhorada
  • geren­ci­a­mento interno de tags e links funcionando
  • agru­pa­mento de instru­coes no drive de banco. Toda oper­a­cao feita no VCNews nao ira’ na mesma hora ao banco de dados.  Recurso novo do UDB. Depois falo sobre isso.
  • come­cei a manip­u­la­cao de noti­cias como Yahoo! News

E para isso fun­cionar a plataforma (Uni­verse) teve de ser mel­ho­rada, o que foi muito bom. Podemos con­tar agora com Thread­ings mel­ho­radas e com auto-balanceamento de carga.

UDB tambem foi mel­ho­rado. Para resumir, ele cria uma lista de instru­coes para dar ao banco de dados que ele esta’ conec­tado, por exem­plo o MySQL (o que usamos no VCNews), e cria um “mock” para alguma busca ou qual­quer outra instru­cao que dev­era’ trazer aquele dado. Com isso usamos menos carga na rede com o banco de dados e ao mesmo tempo, fazer um insert ou select para cada view/acao nao me parece muito inteligente se podemos deixar em um processo mais rapido.

Per­for­mance

Sou a favor de per­for­mance sem­pre no max­imo pos­sivel. Para mim per­for­mance nao e’ ape­nas ter o resul­tado mais rapido, mas tambem usar menos recur­sos, ou seja… Economizar.

Menos uso da CPU, faz com que adi­ante a entrada do modo ocioso, sal­vando ai alguns watts. Imag­ine isso em uma grande escala. Voce esta’ sal­vando tempo e din­heiro. Ate’ mesmo em um note­book. Esses “watts” econ­o­miza­dos serao a difer­enca entre acabar a bate­ria em 4 horas ou em 4 horas e 30 min­u­tos, por exemplo.

Algu­mas coisas que gosto de comen­tar sobre isso:

  • Evi­tar polling. Serio pes­soal. Polling e’ ruim. OK, exis­tem algu­mas coisas que com polling e’ “mel­hor” de se fazer. Porem o abuso desta tec­nica e’ real­mente hor­rivel para per­for­mance. Tente fazer algo com msgs. Um exem­plo de soft­ware que abusa ou abusava deste recurso, o gksu. Ele chega a checar mil vezes por segundo se exis­tem dados em um pipe. Meio exager­ado nao e’?
  • Agru­par timers sem­pre que pos­sivel e usar um para  realizar varias tare­fas. Nunca um timer para cada sta­tus ou alguma coisa que voce esta’ usando. Assim voce econ­o­miza em chamadas no cpu deixando o ocioso por mais tempo.
  • Pen­sar em usar lin­gua­gens de alto nivel. Elas sao mais rap­i­das no desen­volvi­mento, porem a per­for­mance e’ muito abaixo de uma lin­guagem como C. Nao estou de olho no “quadro de luz” de cada lin­guagem script. Porem pre­fira Python a Ruby. Java e Visual C#… O que falar destes. Ultima vez que dei uma olhada, as duas ficavam bem pare­ci­das. E gas­tavam mais que os testes usando python e ruby juntos.

Um cpu ocioso con­some em media 1 watt em media, claro depende do fabricante/modelo,  em carga total leva uma media de 34watts e em usa meia carga tem uma media de 24watts. Se voce levar para cal­cu­lar algum processo em 1 segundo com poten­cia max­ima do cpu voce ira’ usar 34watts e se fizer em metade da carga levara’ o dobro de tempo, ou seja… 2 x 24 = 48watts.

Gos­tou do assunto? Um site que recomendo e’ http://www.lesswatts.org

  1. Parabéns pelo artigo! Real­mente este tema é muito inter­es­sante. Por favor, con­tinue escrevendo! ;-)

    []‘s, HB!

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>