ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния Β«Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+Β»

ΠœΠΈΡ…Π°ΠΈΠ» Балосин (Π΄Π°Π»Π΅Π΅ – МБ): – ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚! МСня Π·ΠΎΠ²ΡƒΡ‚ ΠœΠΈΡ…Π°ΠΈΠ». Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ бэкСнд-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ MC2 Software, ΠΈ я расскаТу ΠΎΠ± использовании Go Π² бэкСндС мобильного прилоТСния Β«Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+Β».

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

ΠšΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΈΠ· ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π»ΡŽΠ±ΠΈΡ‚ Ρ…ΠΎΠΊΠΊΠ΅ΠΉ?

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

Π’ΠΎΠ³Π΄Π° это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для вас. Оно – для «Андроида» ΠΈ iOS, слуТит для просмотра трансляций Ρ€Π°Π·Π½Ρ‹Ρ… спортивных событий Π² ΠΎΠ½Π»Π°ΠΉΠ½Π΅ ΠΈ Π² записи. Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ различная статистика, тСкстовыС трансляции, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠΎ конфСрСнциям, ΠΏΠΎ Ρ‚ΡƒΡ€Π½ΠΈΡ€Π°ΠΌ ΠΈ прочая информация, полСзная для Π±ΠΎΠ»Π΅Π»ΡŒΡ‰ΠΈΠΊΠΎΠ².

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ такая ΡˆΡ‚ΡƒΠΊΠ°, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π΅ΠΎΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, Ρ‚. Π΅. ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ острыС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠ°Ρ‚Ρ‡Π΅ΠΉ (Π³ΠΎΠ»Ρ‹, Π΄Ρ€Π°ΠΊΠΈ, Π±ΡƒΠ»Π»ΠΈΡ‚Ρ‹ ΠΈ Π΄Ρ€.). Если Π²Π°ΠΌ Π½Π΅ хочСтся ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всю Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самоС интСрСсноС.

Π§Ρ‚ΠΎ использовали Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅?

Основная Ρ‡Π°ΡΡ‚ΡŒ Π±Ρ‹Π»Π° написана Π½Π° Go. Π’ΠΎΡ‚ API, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±Ρ‰Π°Π»ΠΈΡΡŒ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, Π±Ρ‹Π» написан Π½Π° Go. Π’Π°ΠΊΠΆΠ΅ Π½Π° Go Π±Ρ‹Π» написан сСрвис для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ push-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅. Π•Ρ‰Ρ‘ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ своё ORM, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ расскаТСм. Ну ΠΈ написаны Π½Π° Go ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ сСрвисы: рСсайзинг ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ для стороны рСдакторов…

Π’ качСствС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ использовали Β«ΠŸΠΎΡΡ‚Π³Ρ€Π΅ΡΒ» (PostgreSQL). Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ для Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² Π±Ρ‹Π» написан Π½Π° Ruby on Rails с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅ΠΌΠ° (gem) ActiveAdmin. На Β«Π ΡƒΠ±ΠΈΒ» написан ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ статистики ΠΈΠ· поставщика статистики.

Для систСмных тСстов API ΠΌΡ‹ использовали unittest Β«ΠŸΠΈΡ‚ΠΎΠ½Π°Β» (Python). Memcached ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ‚Ρ€ΠΎΡ‚Ρ‚Π»ΠΈΠ½Π³Π° ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ API-ΠΎΠΏΠ»Π°Ρ‚Ρ‹, Β«Π¨Π΅Ρ„Β» (Chef) – для контроля ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Zabbix – для сбора ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… статистичСских Π΄Π°Π½Π½Ρ‹Ρ… систСмы. Graylog2 – для сбора Π»ΠΎΠ³ΠΎΠ², Slate – это докумСнтация API для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ: Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» взаимодСйствия бэкСнда с ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, исходя ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… пунктов…

  • Π‘Π°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅: Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ всС, ΠΊΡ‚ΠΎ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ смотрит Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ обновлСния практичСски ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ.
  • Для упрощСния ΠΌΡ‹ приняли, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, Π½Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ, Π° ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π»Π°Π³ΠΎΠ².
  • ВсякиС Ρ€Π΅Π΄ΠΊΠΈΠ΅ запросы (Π²Ρ€ΠΎΠ΄Π΅ статистики, составов ΠΊΠΎΠΌΠ°Π½Π΄, статистики ΠΊΠΎΠΌΠ°Π½Π΄) ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ GET-запросами.
  • Плюс, систСма Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° спокойно Π²Ρ‹Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ 100 тысяч ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· этого, ΠΌΡ‹ ΠΈΠΌΠ΅Π»ΠΈ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°:

  1. Websocket’ы. Но Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΊΠ°Π½Π°Π»Ρ‹ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ сСрвСру. Нам Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ обновлСния с сСрвСра Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚, поэтому Π²Π΅Π±-сокСт – ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.
  2. Server-Sent Events (SSE) ΠΏΠΎΠ΄ΠΎΡˆΡ‘Π» Π² самый Ρ€Π°Π·! Он достаточно простой ΠΈ удовлСтворяСт Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ всСму, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ.

Server-Sent Events

ΠŸΠ°Ρ€Ρƒ слов ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ эта ΡˆΡ‚ΡƒΠΊΠ°β€¦

Она Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ²Π΅Ρ€Ρ… http-соСдинСния. ΠšΠ»ΠΈΠ΅Π½Ρ‚ отправляСт запрос, Π½Π° Π½Π΅Π³ΠΎ сСрвСр ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Content-Type: text/event-stream ΠΈ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ соСдинСниС с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² соСдинСниС Π΄Π°Π½Π½Ρ‹Π΅:

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

Π”Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, согласованном с ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ. Π’ нашСм случаС ΠΌΡ‹ отправляли Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅: Π² ΠΏΠΎΠ»Π΅ event ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΠ»ΠΎΡΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ измСнившСйся структуры (Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΈΠ³Ρ€ΠΎΠΊ), Π° Π² ΠΏΠΎΠ»Π΅ data – JSON с Π½ΠΎΠ²Ρ‹ΠΌΠΈ, ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹ΠΌΠΈ полями для ΠΈΠ³Ρ€ΠΎΠΊΠ°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ само взаимодСйствиС.

  • ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ опрСдСляСт, ΠΊΠΎΠ³Π΄Π° послСдний Ρ€Π°Π· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ синхронизация с сСрвисом: ΠΎΠ½ смотрит Π² свою Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π‘Π” ΠΈ опрСдСляСт Π΄Π°Ρ‚Ρƒ послСднСго измСнСния, записанного Ρƒ Π½Π΅Π³ΠΎ.
  • Он отправляСт запрос с этой Π΄Π°Ρ‚ΠΎΠΉ.
  • Π’ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΡ‹ отсылаСм Π΅ΠΌΡƒ всС обновлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ с этой Π΄Π°Ρ‚ΠΎΠΉ.
  • ПослС этого ΠΎΠ½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ соСдинСниС с live-ΠΊΠ°Π½Π°Π»ΠΎΠΌ ΠΈ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½Ρ‹ эти обновлСния:

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

ΠœΡ‹ ΡˆΠ»Ρ‘ΠΌ Π΅ΠΌΡƒ список ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π·Π°Π±ΠΈΠ» Π³ΠΎΠ» – измСняСм счёт ΠΌΠ°Ρ‚Ρ‡Π°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ‚Ρ€Π°Π²ΠΌΡƒ – Ρ‚ΠΎΠΆΠ΅ отправляСтся Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² Π»Π΅Π½Ρ‚Π΅ событий ΠΌΠ°Ρ‚Ρ‡Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π», Ρ‡Ρ‚ΠΎ сСрвСр Π½Π΅ ΡƒΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, ΠΌΡ‹ отправляСм Ρ€Π°Π· Π² 15 сСкунд timestamp – Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π·Π½Π°Π», Ρ‡Ρ‚ΠΎ всё Π² порядкС ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Как обслуТиваСтся live-соСдинСниС?

  • Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΡ‹ создаём ΠΊΠ°Π½Π°Π», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ обновлСния с Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ.
  • ПослС этого подписываСм этот ΠΊΠ°Π½Π°Π» Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ.
  • УстанавливаСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π½Π°Π», Ρ‡Ρ‚ΠΎ всё ok.
  • ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ping. ΠŸΡ€ΠΎΡΡ‚ΠΎ записываСм Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ timestamp соСдинСния.
  • ПослС этого Π² Ρ†ΠΈΠΊΠ»Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΊΠ°Π½Π°Π» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚. Π’ ΠΊΠ°Π½Π°Π» пСриодичСски ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈΠ±ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ timestamp, Π»ΠΈΠ±ΠΎ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ записываСм Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ соСдинСния.

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ соСдинСниС ΠΌΡ‹ создавали Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΈΠΊΠ°Π» Ρ€Π°Π· Π² 15 сСкунд – получаСтся, Ссли Ρƒ нас Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎ 6 тысяч соСдинСний с ΠΎΠ΄Π½ΠΎΠΉ машиной (с ΠΎΠ΄Π½ΠΈΠΌ API-сСрвСром), создавалось 6 тысяч Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ². Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ машина Π½Π΅ Π΄Π΅Ρ€ΠΆΠ°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ для нас, Π½ΠΎ Π½Π°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ, ΠΈ ΠΌΡ‹ Π΅Ρ‘ устранили.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас ping ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ°Π½Π°Π»Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ update.

БоотвСтствСнно, имССтся всСго ΠΎΠ΄ΠΈΠ½ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚ΠΈΠΊΠ°Π΅Ρ‚ Ρ€Π°Π· Π² 15 сСкунд.

Π—Π΄Π΅ΡΡŒ нСсколько Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ – ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, ΠΏΠΈΠ½Π³Π° ΠΈ самой структуры. Π’ΠΎ Π΅ΡΡ‚ΡŒ здСсь пСрСдаётся Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (person, match, season) ΠΈ сама информация ΠΎΠ± этой записи:

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Ρ‚ΠΎΠΌ, ΠΎΡ‚ΠΊΡƒΠ΄Π° бСрутся измСнСния. Π£ нас Π΅ΡΡ‚ΡŒ нСсколько Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ смотрят Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ. Они ΡΠΎΠ·Π΄Π°ΡŽΡ‚ всС события: ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ, ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ‚Ρ€Π°Π²ΠΌΡƒ, какая-Ρ‚ΠΎ замСна…

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CMS Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Π±Π°Π·Ρƒ. ПослС этого Π±Π°Π·Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Listen/Notify увСдомляСт ΠΎΠ± этом API-сСрвСры. API-сСрвСры ΡƒΠΆΠ΅ Ρ€Π°ΡΡΡ‹Π»Π°ΡŽΡ‚ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρƒ нас ΠΏΠΎ сути ΠΊ Π±Π°Π·Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ всСго нСсколько сСрвСров ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ особой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Π±Π°Π·Ρƒ Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с Π±Π°Π·ΠΎΠΉ Π½Π΅ взаимодСйствуСт:

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

PostgreSQL: Listen/Notify

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Listen/Notify Π² Β«ΠŸΠΎΡΡ‚Π³Ρ€Π΅ΡΠ΅Β» позволяСт ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡ‚ΡŒ подписчиков Π½Π° события ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ измСнилось ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ событиС – Π±Ρ‹Π»Π° создана какая-Ρ‚ΠΎ запись Π² Π±Π°Π·Π΅. Для этого ΠΌΡ‹ написали простой Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

ΠŸΡ€ΠΈ insert’С ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ записи ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ notify Π½Π° ΠΊΠ°Π½Π°Π»Π΅ data_updates, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Ρ‚ΡƒΠ΄Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ записи, которая Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° ΠΈΠ»ΠΈ вставлСна.

На всС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ синхронизированы с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, ΠΌΡ‹ опрСдСляСм Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ послС измСнСния / обновлСния записи Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π½Π° слайдС Π²Π½ΠΈΠ·Ρƒ.
Как API подписываСтся Π½Π° эти измСнСния?

Боздаётся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Fanout – ΠΎΠ½ рассылаСт сообщСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ. Он собираСт всС ΠΊΠ°Π½Π°Π»Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ рассылаСт обновлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΏΠΎ этим ΠΊΠ°Π½Π°Π»Π°ΠΌ:

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

Π—Π΄Π΅ΡΡŒ стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° pq, которая ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ Π±Π°Π·Π΅ ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» (data_updates), провСряСт, Ρ‡Ρ‚ΠΎ соСдинСниС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎ ΠΈ всё Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. Π― ΠΎΠΏΡƒΡΠΊΠ°ΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ошибок, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ мСсто (Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‡Ρ€Π΅Π²Π°Ρ‚ΠΎ).

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ асинхронно Π·Π°Π΄Π°Ρ‘ΠΌ Ticker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΡΡ‹Π»Π°Ρ‚ΡŒ ping Ρ€Π°Π· Π² 15 сСкунд, ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π», Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подписались. Если Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΡ‘Π» ΠΏΠΈΠ½Π³, ΠΌΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ этот ΠΏΠΈΠ½Π³. Если Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»Π° какая-Ρ‚ΠΎ запись, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ эту запись всСм подписчикам этого Fanout’a.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Fan-out?

По-русски это пСрСводится ΠΊΠ°ΠΊ Β«Ρ€Π°Π·Π²Π΅Ρ‚Π²ΠΈΡ‚Π΅Π»ΡŒΒ». Π£ нас Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСгистрируСт подписчиков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ обновлСния. И ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°ΠΏΠ΄Π΅ΠΉΡ‚ ΠΊ этому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚, ΠΎΠ½ раскладываСт это ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ всСм ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΡΡ Ρƒ Π½Π΅Π³ΠΎ подписчикам. Достаточно просто:

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

Как это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π° Go:

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

Π•ΡΡ‚ΡŒ структура, ΠΎΠ½Π° синхронизируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Mutex’ов. Π£ Π½Π΅Ρ‘ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сохраняСт состояниС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Fanout ΠΊ Π±Π°Π·Π΅, Ρ‚. Π΅. Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ обновлСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ список всСх ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² – map, ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся ΠΊΠ°Π½Π°Π» ΠΈ struct Π² Π²ΠΈΠ΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (ΠΏΠΎ сути ΠΎΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΈΠΊΠ°ΠΊ).

Π”Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – Connected ΠΈ Disconnected – ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Fanout’у, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ соСдинСниС с Π±Π°Π·ΠΎΠΉ, ΠΎΠ½ΠΎ появилось ΠΈ Ρ‡Ρ‚ΠΎ соСдинСниС с Π±Π°Π·ΠΎΠΉ ΠΎΠ±ΠΎΡ€Π²Π°Π½ΠΎ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС Π½ΡƒΠΆΠ½ΠΎ всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ большС Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈΡΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ соСдинСниС с Π½ΠΈΠΌΠΈ Π·Π°ΠΊΡ€Ρ‹Π»ΠΎΡΡŒ.

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Subscribe, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ добавляСт ΠΊΠ°Π½Π°Π» Π² Β«ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΠΈΒ»:

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

Π•ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Unsubscribe, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π» ΠΈΠ· ΡΠ»ΡƒΡˆΠ°ΡŽΡ‰ΠΈΡ…, Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Publish, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΎΡΠ»Π°Ρ‚ΡŒ сообщСниС всСм подписчикам.

Вопрос: – Π§Ρ‚ΠΎ ΠΏΠΎ этому ΠΊΠ°Π½Π°Π»Ρƒ пСрСдаётся?

МБ: – ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ΡΡ модСль, которая измСнилась ΠΈΠ»ΠΈ ΠΏΠΈΠ½Π³ (ΠΏΠΎ сути просто число, integer).

МБ: – МоТно Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π»ΡŽΠ±ΡƒΡŽ структуру ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°Ρ‚ΡŒ, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ – ΠΎΠ½Π° просто прСвращаСтся Π² JSON ΠΈ всё.

МБ: – ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½ΠΎΡ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈΠ· Β«ΠŸΠΎΡΡ‚Π³Ρ€Π΅ΡΠ°Β» – Π² Π½Π΅ΠΉ содСрТится Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. По названию Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½ΡƒΠΆΠ½ΡƒΡŽ Π½Π°ΠΌ запись, Π° ΡƒΠΆΠ΅ эту структуру отправляСм Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ.

Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°

Как это выглядит с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния инфраструктуры? Π£ нас 7 ΠΆΠ΅Π»Π΅Π·Π½Ρ‹Ρ… сСрвСров: ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π΄Π΅Π»Π΅Π½ ΠΏΠΎΠ΄ Π±Π°Π·Ρƒ, Π½Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΡˆΠ΅ΡΡ‚ΠΈ крутятся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΊΠΈ. Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ 6 ΠΊΠΎΠΏΠΈΠΉ API: каТдая Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΊΠ° с API крутится Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π½ΠΎΠΌ сСрвСрС – это для надёТности.

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

Π£ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… установлСн Keepalived для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ доступности, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² случаС Ρ‡Π΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ frontend ΠΌΠΎΠ³ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π•Ρ‰Ρ‘ – Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΠΈ CMS.

Π’Π°ΠΊΠΆΠ΅ имССтся ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‘Ρ€ статистики. Π•ΡΡ‚ΡŒ DB Slave, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ пСриодичСски Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ бэкапы. Π•ΡΡ‚ΡŒ Pigeon Pusher – Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ рассылаСт ΠΏΡƒΡˆΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ инфраструктурная Π²Π΅Ρ‰ΠΈ: Zabbix, Graylog2 ΠΈ Chef.

На самом Π΄Π΅Π»Π΅ эта инфраструктура ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ 100 тысяч ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ с мСньшим количСством сСрвСров. Но ΠΆΠ΅Π»Π΅Π·ΠΎ Π±Ρ‹Π»ΠΎ – ΠΌΡ‹ Π΅Π³ΠΎ использовали (Π½Π°ΠΌ сказали, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ – ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ ΠΈ Π½Π΅Ρ‚).

ΠŸΠ»ΡŽΡΡ‹ Go

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π°Π΄ этим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π²Ρ‹ΡΠ²ΠΈΠ»ΠΈΡΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ ΠΏΠ»ΡŽΡΡ‹ Go.

  • Классная http-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ достаточно ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Β«ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈΒ».
  • Плюс, ΠΊΠ°Π½Π°Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π½Π°ΠΌ ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ.
  • Π—Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΡˆΡ‚ΡƒΠΊΠ° Race detector ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Π½Π°ΠΌ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ нСсколько критичСских Π±Π°Π³ΠΎΠ² (staging-овая инфраструктура). Всё, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° staging’С – Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ, скомпилировано с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Race; ΠΈ ΠΌΡ‹, соотвСтствСнно, ΠΌΠΎΠΆΠ΅ΠΌ Π½Π° staging-ΠΎΠ²ΠΎΠΉ инфраструктурС ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.
  • Минимализм ΠΈ простота языка.

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

ΠœΡ‹ ΠΈΡ‰Π΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²! Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ – поТалуйста.

Вопросы

Вопрос ΠΈΠ· Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠΈ (Π΄Π°Π»Π΅Π΅ – Π’): – МнС каТСтся, Π²Ρ‹ пропустили ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Fan-out. Π― ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ понимаю, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ отправляСтС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΎΡ‚Π²Π΅Ρ‚, Π²Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚Π΅ΡΡŒ, Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ?

МБ: – НСт, ΠΌΡ‹ Π½Π΅ блокируСмся. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρƒ нас это всё находится Π·Π° nginx’ом, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅Ρ‚. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊΠ°Π½Π°Π» с Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ – ΠΏΠΎ сути ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° Π΄ΠΎ ста апдСйтов… Если ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΊΠ°Π½Π°Π», Ρ‚ΠΎ ΠΎΠ½ Π΅Π³ΠΎ удаляСт. Если ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Π½Π°Π» заблокировался, Ρ‚ΠΎ ΠΌΡ‹ просто Π·Π°ΠΊΡ€ΠΎΠ΅ΠΌ ΠΊΠ°Π½Π°Π», ΠΈ всё – ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ какая-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ здСсь Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚.

Π’: – НСльзя Π»ΠΈ Π±Ρ‹Π»ΠΎ сразу ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π² Listen/Notify запись, Π° Π½Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€?

МБ: – Π£ Listen/Notify Π΅ΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π² 8 тысяч Π±Π°ΠΉΡ‚ Π½Π° preload, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ отправляСт. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ, Ссли Π±Ρ‹ ΠΌΡ‹ ΠΈΠΌΠ΅Π»ΠΈ Π΄Π΅Π»ΠΎ с ΠΌΠ°Π»Ρ‹ΠΌ количСством Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΌΠ½Π΅ каТСтся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ [ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Π΅ΠΌ ΠΌΡ‹] просто Π½Π°Π΄Ρ‘ΠΆΠ½Π΅Π΅. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ – Π² самом Β«ΠŸΠΎΡΡ‚Π³Ρ€Π΅ΡΠ΅Β».

Π’: – ΠŸΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ обновлСния ΠΏΠΎ ΠΌΠ°Ρ‚Ρ‡Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡ… Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚?

МБ: – Π’ ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ, Π΄Π°. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‚Π°ΠΌ ΠΈΠ΄Ρ‘Ρ‚ 2-3 ΠΌΠ°Ρ‚Ρ‡Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, ΠΈ Ρ‚ΠΎ достаточно Ρ€Π΅Π΄ΠΊΠΎ. Если ΠΊΠ»ΠΈΠ΅Π½Ρ‚ смотрит Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ смотрит Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ΄Ρ‘Ρ‚. ΠŸΠΎΡ‚ΠΎΠΌ, Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ Π΅ΡΡ‚ΡŒ локальная Π±Π°Π·Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ всС эти обновлСния ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΈ Π΄Π°ΠΆΠ΅ Π±Π΅Π· ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΌΠ°Ρ‚Ρ‡, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Π°ΠΏΠ΄Π΅ΠΉΡ‚Ρ‹. По сути ΠΌΡ‹ свою Π±Π°Π·Ρƒ Π½Π° сСрвСрС синхронизируСм с локальной Π±Π°Π·ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΌΠΎΠ³ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π² ΠΎΡ„Π»Π°ΠΉΠ½Π΅.

Π’: – ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ сдСлали свою ORM?

АлСксСй (ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Β«Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+Β»): – На Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ (это Π±Ρ‹Π»ΠΎ Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄) ORM Π±Ρ‹Π»ΠΎ мСньшС, Ρ‡Π΅ΠΌ сСйчас, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… довольно ΠΌΠ½ΠΎΠ³ΠΎ. Из Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ORM ΠΌΠ½Π΅ большС всСго Π½Π΅ нравится Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° пустых интСрфСйсах. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² этих ORM, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π½Π° сСбя всё Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ: структуру, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ структуры, число, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ относящССся ΠΊ дСлу…

Наш ORM Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ структуры Π½Π° основС ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Π°ΠΌ. И поэтому всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π΅Ρ„Π»Π΅ΠΊΡΠΈΡŽ ΠΈ Ρ‚. Π΄. Они ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ структуры ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ структуры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΡ‚.

Π’: – Бколько Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ участвовало?

МБ: – На Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС участвовало Π΄Π²Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°. Π“Π΄Π΅-Ρ‚ΠΎ Π² июнС ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ, Π² августС основная Ρ‡Π°ΡΡ‚ΡŒ Π±Ρ‹Π»Π° Π³ΠΎΡ‚ΠΎΠ²Π° (пСрвая вСрсия). Π’ сСнтябрС Π±Ρ‹Π» Ρ€Π΅Π»ΠΈΠ·.

Π’: – Π’Π°ΠΌ, Π³Π΄Π΅ Π²Ρ‹ описываСтС SSE, Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ timeout. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ?

МБ: – Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ начистоту, Ρ‚ΠΎ SSE – это всё-Ρ‚Π°ΠΊΠΈ html5-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»: стандарт SSE ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для общСния с Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ, насколько я понимаю. Π£ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΈΡ‡ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ (ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅), Π½ΠΎ ΠΎΠ½ΠΈ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ нас Π±Ρ‹Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠœΡ‹ сдСлали скорСС Π½Π΅ SSE, Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° SSE. Π­Ρ‚ΠΎ Π½Π΅ сам ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ».
НС Π±Ρ‹Π»ΠΎ нСобходимости. Насколько я понимаю, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ практичСски с нуля. Им Π±Ρ‹Π»ΠΎ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ всё Ρ€Π°Π²Π½ΠΎ.

Π’: – КакиС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Π²Ρ‹ использовали?

МБ: – НаиболСС Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΌΡ‹ использовали govet ΠΈ golint, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ‚ΠΈΠ»ΡŒ Π±Ρ‹Π» Π΅Π΄ΠΈΠ½Ρ‹ΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ gofmt. Π‘ΠΎΠ»ΡŒΡˆΠ΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ использовали.

Π’: – Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‡Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ?

МБ: – ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΠΎ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счёту шла с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ тСстов. Никакого Π΄Π΅Π±Π°Π³Π³Π΅Ρ€Π°, GOP ΠΌΡ‹ Π½Π΅ использовали.

Π’: – ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ слайд, Π³Π΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° функция Publish? ΠžΠ΄Π½ΠΎΠ±ΡƒΠΊΠ²Π΅Π½Π½Ρ‹Π΅ названия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… вас Π½Π΅ ΡΠΌΡƒΡ‰Π°ΡŽΡ‚?

МБ: – НСт. Π£ Π½ΠΈΡ… достаточно «узкая» ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. Они Π½ΠΈΠ³Π΄Π΅, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠ°ΠΊ здСсь, большС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ (ΠΊΡ€ΠΎΠΌΠ΅ внутрСнностСй этого класса), ΠΈ ΠΎΠ½ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ – Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго 7 строк.

Π’: – Как-Ρ‚ΠΎ всё Ρ€Π°Π²Π½ΠΎ Π½Π΅ интуитивно…

МБ: – НСт-Π½Π΅Ρ‚, это настоящий ΠΊΠΎΠ΄! Π”Π΅Π»ΠΎ Π½Π΅ Π² стилС. ΠŸΡ€ΠΎΡΡ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ€Π½Ρ‹ΠΉ, совсСм малСнький класс – всСго 3 поля Π²Π½ΡƒΡ‚Ρ€ΠΈ класса…

ΠœΠΈΡ…Π°ΠΈΠ» Балосин. Golang Meetup. ИспользованиС Go Π² бэкСндС прилоТСния «Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+»

МБ: – По Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счёту, всС Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ (сСзонныС ΠΌΠ°Ρ‚Ρ‡ΠΈ, ΠΈΠ³Ρ€ΠΎΠΊΠΈ), Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Π“Ρ€ΡƒΠ±ΠΎ говоря, Ссли ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π²ΠΈΠ΄ спорта, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ‡, ΠΌΡ‹ просто Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° всё ΡƒΡ‡Ρ‚Ρ‘ΠΌ, Π° старыС вСрсии ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π±Π°Π½Π΅Π½Ρ‹.

Π’: – Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ сторонниС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для управлСния зависимостями?

МБ: – ΠœΡ‹ использовали go dep.

Π’: – Π’ Ρ‚Π΅ΠΌΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎ Π²ΠΈΠ΄Π΅ΠΎ, Π° Π² Π΄ΠΎΠΊΠ»Π°Π΄Π΅ ΠΏΡ€ΠΎ Π²ΠΈΠ΄Π΅ΠΎ Π½Π΅Ρ‚.

МБ: – НСт, Ρƒ мСня Π² Ρ‚Π΅ΠΌΠ΅ ΠΏΡ€ΠΎ Π²ΠΈΠ΄Π΅ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅Ρ‚. НазываСтся Β«Π‘ΠΌΠΎΡ‚Ρ€ΠΈ+Β» – это Ρ‚Π°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ называСтся.

Π’: – Π’Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ стримится Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹?..

МБ: – Π‘Ρ‚Ρ€ΠΈΠΌΠΈΠ½Π³ΠΎΠ²Ρ‹ΠΌ Π²ΠΈΠ΄Π΅ΠΎ ΠΌΡ‹ Π½Π΅ занимались. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π΄Π΅Π»Π°Π» Β«ΠœΠ΅Π³Π°Ρ„ΠΎΠ½Β». Π”Π°, я Π½Π΅ сказал, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ мСгафоновскоС.

МБ: – Go – для рассылки всСх Π΄Π°Π½Π½Ρ‹Ρ… – ΠΏΠΎ счёту, ΠΏΠΎ событиям ΠΌΠ°Ρ‚Ρ‡Π°, статистикС… Go – это Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ бэкСнд для прилоТСния. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ‚ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ссылку ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠ»Π΅Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ‡. Π£ нас Π΅ΡΡ‚ΡŒ ссылки Π½Π° Π²ΠΈΠ΄Π΅ΠΎ ΠΈ Π½Π° стримы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹.

НСмного Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹ πŸ™‚

Бпасибо, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Ρ‘Ρ‚Π΅ΡΡŒ с Π½Π°ΠΌΠΈ. Π’Π°ΠΌ нравятся наши ΡΡ‚Π°Ρ‚ΡŒΠΈ? Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ большС интСрСсных ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ²? ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ нас, ΠΎΡ„ΠΎΡ€ΠΌΠΈΠ² Π·Π°ΠΊΠ°Π· ΠΈΠ»ΠΈ ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π² Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ, ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ VPS для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΎΡ‚ $4.99, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³ entry-level сСрвСров, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½ Π½Π°ΠΌΠΈ для Вас: Вся ΠΏΡ€Π°Π²Π΄Π° ΠΎ VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps ΠΎΡ‚ $19 ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΄Π΅Π»ΠΈΡ‚ΡŒ сСрвСр? (доступны Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ с RAID1 ΠΈ RAID10, Π΄ΠΎ 24 ядСр ΠΈ Π΄ΠΎ 40GB DDR4).

Dell R730xd Π² 2 Ρ€Π°Π·Π° дСшСвлС Π² Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π΅ Equinix Tier IV Π² АмстСрдамС? Волько Ρƒ нас 2 Ρ… Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 Π’Π’ ΠΎΡ‚ $199 Π² НидСрландах! Dell R420 β€” 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB β€” ΠΎΡ‚ $99! Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ Как ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ инфраструктуру ΠΊΠΎΡ€ΠΏ. класса c ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ сСрвСров Dell R730xd Π•5-2650 v4 ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ 9000 Π΅Π²Ρ€ΠΎ Π·Π° ΠΊΠΎΠΏΠ΅ΠΉΠΊΠΈ?

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ