Back End Performático

Back End Performático

Apresentada durante o PHPWeekend 2019 (https://www.phpweekend.com.br/2019)

Trabalhar a performance no backend vai muito além de simplesmente "subir mais máquinas".

Vamos apontar alguns gargalos comuns que podem ser tratados ou evitados desde o começo do desenvolvimento, já que não dependem da tecnologia utilizada.

4ce43cd2535d0afe50065a743af646e9?s=128

Diana Arnos

July 27, 2019
Tweet

Transcript

  1. Backend Performático Além do “aumenta a máquina lá”

  2. @dianaarnos Dev, Sec, Music, Kung Fu. Dev / Arquiteta @

    Senhasegura Evangelista @ PHPSP Evangelista @ PHPWomenBR
  3. ERA UMA VEZ UMA APLICAÇÃO WEB...

  4. None
  5. None
  6. None
  7. None
  8. None
  9. None
  10. None
  11. ENTÃO, UM DIA...

  12. - CARA, A RESPOSTA TÁ MEIO LENTA...

  13. - AUMENTA A MÁQUINA LÁ

  14. - AUMENTA A MÁQUINA LÁ a.k.a.: escalonamento vertical

  15. None
  16. None
  17. - AINDA TÁ MEIO LENTO...

  18. - BOTA MAIS MÁQUINA LÁ

  19. - BOTA MAIS MÁQUINA LÁ a.k.a.: escalonamento horizontal

  20. None
  21. LOAD BALANCER

  22. E NUNCA MAIS TIVERAM PROBLEMAS.

  23. None
  24. SERÁ?

  25. None
  26. E VOCÊ, DEV?

  27. E VOCÊ, DEV? JÁ ANALISOU O SEU CÓDIGO?

  28. None
  29. None
  30. None
  31. DE QUAIS TABELAS VOCÊ PRECISA?

  32. COMO AS TABELAS ESTÃO ESTRUTURADAS?

  33. COMO VOCÊ FAZ AS QUERIES?

  34. MUITOS JOINS?

  35. MUITOS JOINS? ÚNICO GRANDE INSERT OU VÁRIOS PEQUENOS INSERTS?

  36. MUITOS JOINS? ÚNICO GRANDE INSERT OU VÁRIOS PEQUENOS INSERTS? QUANTAS

    REQUISIÇÕES AO BANCO POR MINUTO?
  37. PREPARED STATEMENT

  38. SEMPRE

  39. CACHE

  40. - BUSCAS FREQUENTES NO BANCO

  41. - BUSCAS FREQUENTES NO BANCO - OBJETOS

  42. - BUSCAS FREQUENTES NO BANCO - OBJETOS - RESPONSES INTEIRAS

  43. - MEMÓRIA

  44. - MEMÓRIA - SERVIÇO (EX. REDIS)

  45. - MEMÓRIA - SERVIÇO (EX. REDIS) - DISCO

  46. CUIDADO

  47. O “O QUÊ” É TÃO IMPORTANTE QUANTO O “COMO”

  48. None
  49. COMO VAI O SEU CÓDIGO? SUA LÓGICA? SEUS ALGORITMOS?

  50. BIG O

  51. FIBONACCI

  52. FIBONACCI public function getFibonacci (int $number): int { if ($number

    <= 1) { return $number; } else { return getFibonacci($number - 1) + getFibonacci($number - 2); } }
  53. FIBONACCI Quantas linhas de código vão rodar para dado input

    n? T(n)? T(0) = 2 T(1) = 2 T(2) = 3 + T(1) + T(0) T(3) = 3 + T(2) + T(1) T(4) = 3 + T(3) + T(2) ... Observando a progressão, temos: Dado n = 0 ou n =1, T(n) = 2
  54. FIBONACCI

  55. FIBONACCI Com o processamento de 1GHz, levaríamos aproximadamente 56 mil

    anos para calcular T(100)
  56. FIBONACCI

  57. FIBONACCI 0, 1, 1, 2, 3, 5, 8, 13, 21...

    0 + 1 = 1 0, 1, 1 1 + 1 = 2 0, 1, 1, 2 1 + 2 = 3 0, 1, 1, 2, 3 2 + 3 = 5 0, 1, 1, 2, 3, 5 3 + 5 = 8 0, 1, 1, 2, 3, 5, 8 ...
  58. FIBONACCI public function getFibonacci (int $number): int { $fibonacci[0] =

    0; $fibonacci[1] = 1; for ($i = 2; $i <= $number; $i++) { $fibonacci[$i] = $fibonacci[$i-1] + $fibonacci[$i-2]; } return $fibonacci[$number]; }
  59. FIBONACCI Calculando quantas linhas de código rodam para cada iteração,

    considerando que as 3 primeiras linhas e a última (return) vão rodar sempre: T(2) = 4 + 2 = 6 T(3) = 4 + 2 + 2 = 8 T(4) = 4 + 2 + 2 + 2 = 10 ... T(n) = 2n + 2
  60. MUITO MAIS RÁPIDO

  61. E LEMBREM-SE:

  62. None
  63. None
  64. OBRIGADA! Fale comigo: @dianaarnos (twitter, instagram, github)