TGViewer
Мамкін Архітектор Мамкін Архітектор @mamkin_architect · 3.24K subscribers
Post #700 2.66K
В Києві останнім часом тривога триває постійно, з дуже короткими перервами.

Раніше треба було знати одне: є тривога чи нема. Зараз питання інше: що конкретно ця тривога означає для тебе. Де летить, що летить і чи летить воно до тебе.

Найкраще з інформуванням населення справляються моніторингові канали. Проте працювати з ними трохи незручно, бо пишуть вони текстом, їх декілька, і потрібні ментальні зусилля, аби намалювати мапу в себе в голові по цим повідомленням. У Києві доволі багато різних місцевостей, і яка з них де знаходиться, я, наприклад, не всі знаю.

Тому вирішив зробити сайт, який об'єднував би всі ці повідомлення і показував їх на карті. Так з'явився проєкт Дрони на районі. Спробуйте, логін не потрібен, можна дивитись саме на свій район і бачити загрози для нього та сусідів.

Пишу про нього з двох причин. По-перше, щоб ви спробували, подивились і дали фідбек як професіонали, які можуть якісно оцінити технічний продукт. Буду дуже вдячний. По-друге, в процесі було декілька цікавих інженерних та архітектурних рішень, якими варто поділитись, і на один пост вони, мабуть, не влізуть.

Сайт на Python і HTMX. Ідея була використати мінімум JavaScript, але затягнути його все ж довелось. Service worker, щоб сайт працював в офлайні і показував, що дані неактуальні. Плюс схематична мапа, без клієнтського коду вона не працює. Ставку зробив на серверну генерацію контенту, і HTMX з цим справляється чудово.

Задеплоєно на моєму домашньому сервері, тому самому, що на балконі. Поки є електрика, він буде там. Коли почнуться проблеми з доступністю, можна буде перенести кудись у датацентр.

Оскільки воно працює локально, питання економії ресурсів стоїть доволі актуально.

Тому сайт закритий за Cloudflare. Безкоштовного плану вистачає, щоб підняти тунель і налаштувати CDN та кешування. Завдяки кешу значна частина запитів до самого сервера не долітає.

Щоб сторінка оновлювалась сама, спочатку взяв WebSocket. Потім згадав, що є server-sent events, які більш оптимальні для односторонньої комунікації. Але є проблема — кожен клієнт це окреме зʼєднання. І коли їх багато, то це дефіцит ресурсів. Тому перейшов на звичайний polling, коли клієнт робить періодичні запити за таймером. Тоді вся робота перекладається на клієнтів, і в поєднанні з кешем на Cloudflare частина тих запитів до мого сервера не доходить зовсім.

Кешування стоїть на 20 секунд. Розрахунок був такий: навіть якщо туди ломануться 10-20 тисяч людей і будуть регулярно оновлювати, до мене дійде приблизно один запит за ті 20 секунд на кожен фрагмент, тобто на район, на мапу, на сторінку.

З моменту запуску, а це чотири дні, Cloudflare віддав мільйон запитів. Трохи більше половини з них пішло з кешу, решта долетіла до мене. Все працює, нічого не падає, тому план, можна сказати, доволі успішний.

Споживання ресурсів: 162 мегабайти памʼяті з дозволених 512 і біля 2% одного ядра. Пік, який я зловив, 47 відсотків, то було на якомусь шальному рендері мапи. Тобто місце для росту є.

Сподіваюсь, після цього поста користувачів стане більше і вдасться потестити в стресовіших умовах. Про проєкт писатиму й далі.

Напишіть у коменти, що не працює або чого там не вистачає. Мені зараз найцінніше саме це. Ну або поставте лайкос — це теж дуже в тему :)
Дрони на районі Дрони на районі: тривога, дрони і ракети поруч із вами Тривога, дрони і ракети у вашому районі Києва і області за даними Telegram-каналів. Наживо, без реєстрації.
  • 🔥 75
  • 👍 25
  • ❤ 8
More from @mamkin_architect
  1. Oct 7, 2026Хтось не деплоїть по пʼятницях. Ми не деплоїмо, поки триває тривога. Ми різні
  2. Oct 6, 2026Оновив Portainer однією кнопкою Я вже не раз розповідав, як влаштований мій homelab: є сер…
  3. Oct 1, 2026Обіцяв технічні подробиці по Дронам на районі, тому ось вони. Стек частково вже називав: P…
  4. Sep 30, 2026‼️ увага ‼️ Я провтикав і випадково закрив коменти деяким підписникам пару днів назад. Зар…
  5. Sep 21, 2026Від умовного Скайнету чи Матриці нас рятувало те, що LLM-ки доволі повільні: довго відпові…
  6. Sep 19, 2026Полагодив Tailscale через Tailscale Я вже писав (буквально в минулому пості), шо в мене вд…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →