ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с DNS Π² Kubernetes. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ постмортСм

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: это ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ постмортСма ΠΈΠ· ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠ³Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Preply. Π’ Π½Π΅ΠΌ описываСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с conntrack Π² Kubernetes-кластСрС, которая ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ частичному ΠΏΡ€ΠΎΡΡ‚ΠΎΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сСрвисов ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π°.

Данная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС ΠΎ постмортСмах ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с DNS Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с DNS Π² Kubernetes. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ постмортСм
Π­Ρ‚ΠΎ Π½Π΅ DNS
НС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это DNS
Π­Ρ‚ΠΎ Π±Ρ‹Π» DNS

НСмного ΠΎ постмортСмах ΠΈ процСссах Π² Preply

Π’ постмортСмС описываСтся сбой Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ событиС Π² ΠΏΡ€ΠΎΠ΄Π°ΡˆΠΊΠ½Π΅. ΠŸΠΎΡΡ‚ΠΌΠΎΡ€Ρ‚Π΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Ρ…Ρ€ΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ событий, описаниС воздСйствия Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΏΠ΅Ρ€Π²ΠΎΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ, дСйствия ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΡƒΡ€ΠΎΠΊΠΈ.

Seeking SRE

На Π΅ΠΆΠ΅Π½Π΅Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… совСщаниях с ΠΏΠΈΡ†Ρ†Π΅ΠΉ, Π² ΠΊΡ€ΡƒΠ³Ρƒ тСхничСской ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΌΡ‹ дСлимся Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΉ. Одной ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠ½ΠΈΡ… частСй Ρ‚Π°ΠΊΠΈΡ… совСщаний ΡΠ²Π»ΡΡŽΡ‚ΡΡ постмортСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡Π°Ρ‰Π΅ всСго ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ со слайдами ΠΈ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π°. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Β«Ρ…Π»ΠΎΠΏΠ°Π΅ΠΌΒ» послС постмортСмов, ΠΌΡ‹ стараСмся Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Ρƒ Β«Π±Π΅Π· ΡƒΠΏΡ€Π΅ΠΊΠΎΠ²Β» (blameless cluture). ΠœΡ‹ Π²Π΅Ρ€ΠΈΠΌ Π² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ написаниС ΠΈ прСдставлСниС постмортСмов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π½Π°ΠΌ (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ) Π² ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΎΠ² Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому ΠΌΡ‹ ΠΈ дСлимся ΠΈΠΌΠΈ.

Π›ΠΈΡ†Π°, Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Π΅ Π² ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Π½Π΅ΠΌ, Π½Π΅ опасаясь наказания ΠΈΠ»ΠΈ возмСздия. Никакого порицания! НаписаниС постмортСма β€” это Π½Π΅ Π½Π°ΠΊΠ°Π·Π°Π½ΠΈΠ΅, Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ обучСния для всСй ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.

Keep CALMS & DevOps: S is for Sharing

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с DNS Π² Kubernetes. ΠŸΠΎΡΡ‚ΠΌΠΎΡ€Ρ‚Π΅ΠΌ

Π”Π°Ρ‚Π°: 28.02.2020

Авторы: АмСт Π£., АндрСй Π‘., Π˜Π³ΠΎΡ€ΡŒ К., АлСксСй П.

Бтатус: Π—Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹ΠΉ

ΠšΡ€Π°Ρ‚ΠΊΠΎ: Частичная Π½Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ DNS (26 ΠΌΠΈΠ½) для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сСрвисов Π² Kubernetes-кластСрС

ВлияниС: 15000 событий потСряно для сСрвисов A, B ΠΈ C

ΠŸΠ΅Ρ€Π²ΠΎΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°: Kube-proxy Π½Π΅ смог ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡƒΡŽ запись ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ conntrack, поэтому Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСрвисы всС Π΅Ρ‰Π΅ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ΄Π°ΠΌ

E0228 20:13:53.795782       1 proxier.go:610] Failed to delete kube-system/kube-dns:dns endpoint connections, error: error deleting conntrack entries for UDP peer {100.64.0.10, 100.110.33.231}, error: conntrack command returned: ...

Π’Ρ€ΠΈΠ³Π³Π΅Ρ€: Из-Π·Π° Π½ΠΈΠ·ΠΊΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Kubernetes-кластСра, CoreDNS-autoscaler ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ» количСство ΠΏΠΎΠ΄ΠΎΠ² Π² Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ‚Π΅ с Ρ‚Ρ€Π΅Ρ… Π΄ΠΎ Π΄Π²ΡƒΡ…

РСшСниС: ΠžΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ прилоТСния ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π» созданиС Π½ΠΎΠ²Ρ‹Ρ… Π½ΠΎΠ΄, CoreDNS-autoscaler Π΄ΠΎΠ±Π°Π²ΠΈΠ» большС ΠΏΠΎΠ΄ΠΎΠ² для обслуТивания кластСра, Ρ‡Ρ‚ΠΎ спровоцировало ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ conntrack

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅: Prometheus ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» большоС количСство 5xx ошибок для сСрвисов A, B ΠΈ C ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π» Π·Π²ΠΎΠ½ΠΎΠΊ Π΄Π΅ΠΆΡƒΡ€Π½Ρ‹ΠΌ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌ

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с DNS Π² Kubernetes. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ постмортСм
5xx ошибки в Kibana

ДСйствия

ДСйствиС
Π’ΠΈΠΏ
ΠžΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ
Π—Π°Π΄Π°Ρ‡Π°

ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ автоскСйлСр для CoreDNS
ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€.
АмСт Π£.
DEVOPS-695

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ΅ΡˆΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ DNS-сСрвСр
ΡƒΠΌΠ΅Π½ΡŒΡˆ.
Макс Π’.
DEVOPS-665

ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ conntrack
ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€.
АмСт Π£.
DEVOPS-674

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΡƒΡ€ΠΎΠΊΠΈ

Π§Ρ‚ΠΎ пошло Ρ…ΠΎΡ€ΠΎΡˆΠΎ:

  • ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ сработал Ρ‡Π΅Ρ‚ΠΊΠΎ. РСакция Π±Ρ‹Π»Π° быстрой ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ
  • ΠœΡ‹ Π½Π΅ ΡƒΠΏΠ΅Ρ€Π»ΠΈΡΡŒ Π½ΠΈ Π² ΠΊΠ°ΠΊΠΈΠ΅ Π»ΠΈΠΌΠΈΡ‚Ρ‹ Π½Π° Π½ΠΎΠ΄Π°Ρ…

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π½Π΅ Ρ‚Π°ΠΊ:

  • ВсС Π΅Ρ‰Π΅ нСизвСстная Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ ΠΏΠ΅Ρ€Π²ΠΎΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° спСцифичСский Π±Π°Π³ Π² conntrack
  • ВсС дСйствия ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСдствия, Π½Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ (Π±Π°Π³)
  • ΠœΡ‹ Π·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Ρƒ нас ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с DNS, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ

Π“Π΄Π΅ Π½Π°ΠΌ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ:

  • ΠžΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π·Π°Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΈΠ» CoreDNS-autoscaler, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСзаписал Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ conntrack
  • Π”Π°Π½Π½Ρ‹ΠΉ Π±Π°Π³ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΠ» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ сСрвисов

Π₯ронология (EET)

ВрСмя
ДСйствиС

22:13
CoreDNS-autoscaler ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ» число ΠΏΠΎΠ΄ΠΎΠ² с Ρ‚Ρ€Π΅Ρ… Π΄ΠΎ Π΄Π²ΡƒΡ…

22:18
Π”Π΅ΠΆΡƒΡ€Π½Ρ‹Π΅ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ стали ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π·Π²ΠΎΠ½ΠΊΠΈ ΠΎΡ‚ систСмы ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°

22:21
Π”Π΅ΠΆΡƒΡ€Π½Ρ‹Π΅ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ Π½Π°Ρ‡Π°Π»ΠΈ Π²Ρ‹ΡΡΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ ошибок

22:39
Π”Π΅ΠΆΡƒΡ€Π½Ρ‹Π΅ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· послСдних сСрвисов Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ

22:40
5xx ошибки пСрСстали ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ, ситуация ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ

  • ВрСмя Π΄ΠΎ обнаруТСния: 4 ΠΌΠΈΠ½
  • ВрСмя Π΄ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ дСйствий: 21 ΠΌΠΈΠ½
  • ВрСмя Π΄ΠΎ исправлСния: 1 ΠΌΠΈΠ½

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация

Для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ использования процСссора, ядро Linux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ ΡˆΡ‚ΡƒΠΊΡƒ ΠΊΠ°ΠΊ conntrack. Если ΠΊΡ€Π°Ρ‚ΠΊΠΎ, Ρ‚ΠΎ это ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°, которая содСрТит список NAT-записСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранятся Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Когда ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠΎΠ΄Π° Π² Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠΎΠ΄ Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ IP-адрСс Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ рассчитан Π·Π°Π½ΠΎΠ²ΠΎ, Π° Π±ΡƒΠ΄Π΅Ρ‚ взят ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ conntrack.
ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с DNS Π² Kubernetes. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ постмортСм
Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ conntrack

Π˜Ρ‚ΠΎΠ³ΠΈ

Π­Ρ‚ΠΎ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΡˆΠΈΡ… постмортСмов с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ ссылками. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ дСлимся ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ компаниям. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π΅ боимся ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ошибок ΠΈ Π²ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΡˆΠΈΡ… постмортСмов ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ. Π’ΠΎΡ‚ Π΅Ρ‰Π΅ нСсколько интСрСсных ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… постмортСмов:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com