від А до Я розберемо написання сервісів в Go на прикладі чату підтримки банку.глобальне завдання курсу - написати з нуля бекенд для чату підтримки банку з усіма наслідками, що випливають. Після проходження курсу не повинно залишитися незрозумілих моментів в тому, як можуть бути розроблені і влаштовані сервіси на Go.
Почнемо з обговорення архітектури, організації пакетів, директорій та інструментів, необхідних для локальної розробки. Спроектуємо і реалізуємо клієнтське і менеджерське API, пограємося з фреймворками і кодогенерацією. Підключимо аутентифікацію, сховище і черги. Не забудемо про логування, конфігурування і розгортання. І, звичайно, тести!
Курс розділений на дві частини – 7 основних тижнів, присвячених безпосередньо сервісу, і 2 дод.тижні, присвячених його горизонтальному масштабування, деплою і моніторингу.
Ви отримуєте
- доступ до просунутої теорії по темі курсу і списками літератури
- розроблений вами повноцінний сервіс, який можна додати в резюме
- Рев'ю процесу розробки сервісу викладачами
- Чат з підтримкою групи на час навчання
- вебінари з питаннями і відповідями протягом курсу
01 тиждень перший. Вступна
На цьому тижні ми повинні зрозуміти правила гри, навчитися проходити уроки, виконувати завдання і здавати рубіжні контролі. Також ми з висоти пташиного польоту подивимося на архітектуру (birds eye view) і усвідомлюємо, що ж нам належить зробити за курс.
До кінця тижня у вас повинен бути налаштований Git-репозиторій, що містить скелет проекту і необхідні для грамотної розробки дрібниці на зразок лінтерів, запускатора локальних завдань, логування, конфігурації і debug-сервера.
02 тиждень другий. Стає цікавіше
Цього тижня почнемо з запуску залежностей за допомогою docker-compose. Перше на черзі-сховище PostgreSQL. Щоб два рази не вставати, відразу прикрутимо sentry.
Відпочинемо від докерів І пограємося з кодогенерацією – нам знадобляться ідентифікатори сутностей. Будемо генерувати їх типи. Щоб ідентифікатори не повисли до кращих часів, відразу їх заіспользуем: назад згенеруємо гошную обв'язку над сховищем, попередньо по кісточках розібравши схему даних.
Додамо ще одну залежність, яка вирішить за нас завдання аутентифікації і авторизації – Keycloak. Заведемо новий контейнер в docker-compose, познайомимося з фронтенд частиною сервісу (не лякайтеся, вона буде готовою), додамо користувачів в Keycloak і напишемо HTTP-клієнт до нього.
Вишенька на торті цього тижня – обмазатися Swagger-ом. Напишемо специфікацію клієнтського API, згенеруємо обв'язку, навісимо миддлварей.
До кінця тижня у вас повинна бути СУБД і код по роботі з нею, вирішена задача аутентифікації і авторизації, каркас клієнтського API.
03 тиждень третій. Архітектура
Новий тиждень-Нові виклики.
Почнемо з огляду архітектурних принципів, на які будемо орієнтуватися при розробці сервісу. TL; DR: ми будемо намагатися робити все добре. Шарувата Архітектура, правильне вибудовування напрямку залежностей-наше все.
Змінимо теорію практикою. Будемо Від і до робити перший usecase-отримання історії повідомлень в чаті клієнта банку. Запив шар репозиторію. Запив юзкейс, який буде цим репозиторієм користуватися. І все? Ні, ще додамо м'яса в хендлер, який згенерували минулого тижня. Готовий юзкейс протестуємо-запустимо UI і подивимося, як отримуємо повідомлення.
Закріпимо засвоєне в попередньому уроці-зробимо ще один хендлер, але тепер по відправці повідомлення в чат. Перед тим, як кидатися в бій, все ж почитаємо трохи теорії про ідемпотентність. Помацаємо E2E-тести. І, як водиться, дивлячись в заготовку, реалізуємо відправку повідомлення.
Наприкінці тижня ми повинні мати два запущені API-методи.
А ще зберемося на вебінарі і відповімо на накопичені питання.
04 тиждень четвертий. Складні приколи
Новий тиждень, тиждень кодинга.
Outbox. Ми робимо все надійно, атомарно, тому без реалізації цього широко відомого у вузьких колах патерну не обійтися. На вході, як зазвичай, теорія, тести і верхнеуровневое API компонента.
Outbox-у потрібен хтось, хто буде відправляти події в шину даних (спойлер – це буде Kafka). Будемо цього когось називати продюсером. Завдання продюсера інкапсулювати в собі логіку по шифруванню повідомлення і взаємодії з Kafka. За традицією-теорія, заготівля з тестами. Щоб вас не мучити при написанні інтеграційних тестів, конфігурацію Kafka в docker-compose даємо відразу
Йде четвертий тиждень, а менеджери, які допомагають клієнтам вирішувати проблеми, сидять неохопленими. Охоплення почнемо з написання компонентів "пул менеджерів" і сервісу їх завантаженості. Перший компонент-видає незайнятих менеджерів, готових допомогти своїм клієнтам (тобто змушує працювати). Другий компонент гарантує, що менеджер не надто багато працює (адже ми освічені капіталісти і дбаємо про всіх, чи не так?).
У заключному уроці тижня звернемо увагу на API менеджера. Піднімемо окремий сервер, підключимо менеджерський UI, заведемо пару нових методів API по вже відпрацьованим методикам.
В кінці тижня триває складатися пазл. Додасться парочка хитрих сервісів, почнеться робота над менеджерським API.
05 тиждень п'ятий. Працюємо!
Ласкаво просимо на новий тиждень. На ній продовжимо кодувати цікаві штуки.
Почнемо з WebSocket-ів. Чат-сервіс вимагає краси, повідомлення повинні з'являтися в real-time, без перезавантаження сторінки. Насамперед сформулюємо ідеологію їх застосування. Потім почитаємо теоретичні вичавки, щоб точно розуміти, що відбувається, і, нарешті, приступимо до справи – реалізуємо пакет, інкапсулює в собі роботу з вебсокетами. Він буде апгрейдити з'єднання до вебсокетного, підтримувати його пінгами-понгами, читати події з якогось "потоку" (реалізуємо трохи згодом), писати їх в WS-з'єднання.
Продовжимо збирати шматочки пазла-реалізуємо той самий "потік" подій. Спойлер: в кінці уроку ми зможемо побачити, як відправлена подія в одній вкладці, з'явиться в іншій вкладці Публічний API компонента "потоку" ми вже знаємо. Будуть тести, залишилося зробити так, щоб вони проходили. Заведемо події в openapi-схему, покодогенеріруем, зробимо адаптер і почнемо їх писати в "потік".
AFC. На вході буде Docker-образ спеціально навченого Шукати" небезпечні " повідомлення контейнера. Його ми і називаємо AFC-емулятор. Емулятор або блокує, або дозволяє публікацію повідомлення Користувача. Наше завдання-обробляти" вердикти " емулятора. Готуйтеся до написання Kafka-консумера
В кінці тижня у нас з вами буде готовий скелет вебсокетів, який залишиться тільки збагатити новими типами подій. Потік подій також буде реалізований. Буде підтримана AFC-обробка повідомлень.
06 тиждень шостий. Добиваємо менеджерський флоу
Новий тиждень. Чуйна перепочимо, навантаження буде поменше!
Реалізуємо компонент, що розподіляє проблеми користувачів (як звучить-то) на менеджерів. Про те, що менеджер призначений на якусь проблему потрібно повідомляти не тільки менеджера, але і користувача (не дарма ми заводили всякі потоки і вебсокети минулого тижня). Але річ не в цьому. Тут не буде звичних тестів, на які можна спиратися. Треба буде написати все самим, спираючись на словесний опис. Так само, як у реальному житті
На другому уроці реалізуємо історію повідомлень для менеджера, майже за аналогією з клієнтом. Обмеження на видимість будуть тільки злегка інші. Ще нагадаємо, що у менеджера є ще й сам список чатів, щоб вирішувати проблеми різних користувачів. Треба буде зробити ще й це. Після того, як ви це зробите, подивіться, як легко заїжджають нові ручки
Вишенька на торті – урок так і називається. Навчимо менеджера відправляти повідомлення. За стандартом заведемо: ручку, юзкейс, пару методів в репозиторії, outbox-завдання. Після реалізації можна буде залогінитися клієнтом і менеджером, і спробувати попереписуватися.
В кінці все повинно працювати. Тут ми з вами дійшли до MVP, який вже не соромно показати світу.
07 тиждень сьомий, фінальний. Вільне плавання
На останньому сьомому тижні вам буде надана можливість самостійно реалізувати нові фічі з використанням будь-яких технологій та інструментів, яких вимагає ваша душа.
08 [IN DEV] тиждень восьмий, додатковий. Готуємося до продукту
Попередньо:
1 введення
2 впровадження трейсингу
3 впровадження моніторингу
4 Підготовка до масштабування
5 рубіжний контроль
09 [IN DEV] тиждень дев'ятий, додатковий. Інфраструктура
Попередньо:
1 введення
2 знайомство з Kubernetes
3 розгортання сервісу в minikube
4 рубіжний контроль
5 Висновок по другій частині курсу
На цьому тижні ми повинні зрозуміти правила гри, навчитися проходити уроки, виконувати завдання і здавати рубіжні контролі. Також ми з висоти пташиного польоту подивимося на архітектуру (birds eye view) і усвідомлюємо, що ж нам належить зробити за курс.
До кінця тижня у вас повинен бути налаштований Git-репозиторій, що містить скелет проекту і необхідні для грамотної розробки дрібниці на зразок лінтерів, запускатора локальних завдань, логування, конфігурації і debug-сервера.
02 тиждень другий. Стає цікавіше
Цього тижня почнемо з запуску залежностей за допомогою docker-compose. Перше на черзі-сховище PostgreSQL. Щоб два рази не вставати, відразу прикрутимо sentry.
Відпочинемо від докерів І пограємося з кодогенерацією – нам знадобляться ідентифікатори сутностей. Будемо генерувати їх типи. Щоб ідентифікатори не повисли до кращих часів, відразу їх заіспользуем: назад згенеруємо гошную обв'язку над сховищем, попередньо по кісточках розібравши схему даних.
Додамо ще одну залежність, яка вирішить за нас завдання аутентифікації і авторизації – Keycloak. Заведемо новий контейнер в docker-compose, познайомимося з фронтенд частиною сервісу (не лякайтеся, вона буде готовою), додамо користувачів в Keycloak і напишемо HTTP-клієнт до нього.
Вишенька на торті цього тижня – обмазатися Swagger-ом. Напишемо специфікацію клієнтського API, згенеруємо обв'язку, навісимо миддлварей.
До кінця тижня у вас повинна бути СУБД і код по роботі з нею, вирішена задача аутентифікації і авторизації, каркас клієнтського API.
03 тиждень третій. Архітектура
Новий тиждень-Нові виклики.
Почнемо з огляду архітектурних принципів, на які будемо орієнтуватися при розробці сервісу. TL; DR: ми будемо намагатися робити все добре. Шарувата Архітектура, правильне вибудовування напрямку залежностей-наше все.
Змінимо теорію практикою. Будемо Від і до робити перший usecase-отримання історії повідомлень в чаті клієнта банку. Запив шар репозиторію. Запив юзкейс, який буде цим репозиторієм користуватися. І все? Ні, ще додамо м'яса в хендлер, який згенерували минулого тижня. Готовий юзкейс протестуємо-запустимо UI і подивимося, як отримуємо повідомлення.
Закріпимо засвоєне в попередньому уроці-зробимо ще один хендлер, але тепер по відправці повідомлення в чат. Перед тим, як кидатися в бій, все ж почитаємо трохи теорії про ідемпотентність. Помацаємо E2E-тести. І, як водиться, дивлячись в заготовку, реалізуємо відправку повідомлення.
Наприкінці тижня ми повинні мати два запущені API-методи.
А ще зберемося на вебінарі і відповімо на накопичені питання.
04 тиждень четвертий. Складні приколи
Новий тиждень, тиждень кодинга.
Outbox. Ми робимо все надійно, атомарно, тому без реалізації цього широко відомого у вузьких колах патерну не обійтися. На вході, як зазвичай, теорія, тести і верхнеуровневое API компонента.
Outbox-у потрібен хтось, хто буде відправляти події в шину даних (спойлер – це буде Kafka). Будемо цього когось називати продюсером. Завдання продюсера інкапсулювати в собі логіку по шифруванню повідомлення і взаємодії з Kafka. За традицією-теорія, заготівля з тестами. Щоб вас не мучити при написанні інтеграційних тестів, конфігурацію Kafka в docker-compose даємо відразу
Йде четвертий тиждень, а менеджери, які допомагають клієнтам вирішувати проблеми, сидять неохопленими. Охоплення почнемо з написання компонентів "пул менеджерів" і сервісу їх завантаженості. Перший компонент-видає незайнятих менеджерів, готових допомогти своїм клієнтам (тобто змушує працювати). Другий компонент гарантує, що менеджер не надто багато працює (адже ми освічені капіталісти і дбаємо про всіх, чи не так?).
У заключному уроці тижня звернемо увагу на API менеджера. Піднімемо окремий сервер, підключимо менеджерський UI, заведемо пару нових методів API по вже відпрацьованим методикам.
В кінці тижня триває складатися пазл. Додасться парочка хитрих сервісів, почнеться робота над менеджерським API.
05 тиждень п'ятий. Працюємо!
Ласкаво просимо на новий тиждень. На ній продовжимо кодувати цікаві штуки.
Почнемо з WebSocket-ів. Чат-сервіс вимагає краси, повідомлення повинні з'являтися в real-time, без перезавантаження сторінки. Насамперед сформулюємо ідеологію їх застосування. Потім почитаємо теоретичні вичавки, щоб точно розуміти, що відбувається, і, нарешті, приступимо до справи – реалізуємо пакет, інкапсулює в собі роботу з вебсокетами. Він буде апгрейдити з'єднання до вебсокетного, підтримувати його пінгами-понгами, читати події з якогось "потоку" (реалізуємо трохи згодом), писати їх в WS-з'єднання.
Продовжимо збирати шматочки пазла-реалізуємо той самий "потік" подій. Спойлер: в кінці уроку ми зможемо побачити, як відправлена подія в одній вкладці, з'явиться в іншій вкладці Публічний API компонента "потоку" ми вже знаємо. Будуть тести, залишилося зробити так, щоб вони проходили. Заведемо події в openapi-схему, покодогенеріруем, зробимо адаптер і почнемо їх писати в "потік".
AFC. На вході буде Docker-образ спеціально навченого Шукати" небезпечні " повідомлення контейнера. Його ми і називаємо AFC-емулятор. Емулятор або блокує, або дозволяє публікацію повідомлення Користувача. Наше завдання-обробляти" вердикти " емулятора. Готуйтеся до написання Kafka-консумера
В кінці тижня у нас з вами буде готовий скелет вебсокетів, який залишиться тільки збагатити новими типами подій. Потік подій також буде реалізований. Буде підтримана AFC-обробка повідомлень.
06 тиждень шостий. Добиваємо менеджерський флоу
Новий тиждень. Чуйна перепочимо, навантаження буде поменше!
Реалізуємо компонент, що розподіляє проблеми користувачів (як звучить-то) на менеджерів. Про те, що менеджер призначений на якусь проблему потрібно повідомляти не тільки менеджера, але і користувача (не дарма ми заводили всякі потоки і вебсокети минулого тижня). Але річ не в цьому. Тут не буде звичних тестів, на які можна спиратися. Треба буде написати все самим, спираючись на словесний опис. Так само, як у реальному житті
На другому уроці реалізуємо історію повідомлень для менеджера, майже за аналогією з клієнтом. Обмеження на видимість будуть тільки злегка інші. Ще нагадаємо, що у менеджера є ще й сам список чатів, щоб вирішувати проблеми різних користувачів. Треба буде зробити ще й це. Після того, як ви це зробите, подивіться, як легко заїжджають нові ручки
Вишенька на торті – урок так і називається. Навчимо менеджера відправляти повідомлення. За стандартом заведемо: ручку, юзкейс, пару методів в репозиторії, outbox-завдання. Після реалізації можна буде залогінитися клієнтом і менеджером, і спробувати попереписуватися.
В кінці все повинно працювати. Тут ми з вами дійшли до MVP, який вже не соромно показати світу.
07 тиждень сьомий, фінальний. Вільне плавання
На останньому сьомому тижні вам буде надана можливість самостійно реалізувати нові фічі з використанням будь-яких технологій та інструментів, яких вимагає ваша душа.
08 [IN DEV] тиждень восьмий, додатковий. Готуємося до продукту
Попередньо:
1 введення
2 впровадження трейсингу
3 впровадження моніторингу
4 Підготовка до масштабування
5 рубіжний контроль
09 [IN DEV] тиждень дев'ятий, додатковий. Інфраструктура
Попередньо:
1 введення
2 знайомство з Kubernetes
3 розгортання сервісу в minikube
4 рубіжний контроль
5 Висновок по другій частині курсу
https://privatelink.de/?https://www.golang-courses.ru/writing-go-service