Этот совет хорош, если не нужно, чтобы контент индексировался в гугле :) Но проще прописать в robots.txt вот такую штуку:
User-agent: * Disallow: /
Уже месяц прошел с момента выхода Go 1.17, но еще никто не написал об этом :( golang.org/doc/go1.17 .
Самое крутое изменение — теперь аргументы передаются в функции через регистры процессора вместо стека. Это поднимает производительность программ на 5%, одновременно уменьшая их размер на 3%. См. golang.org/doc/go1.17#compiler . Дженерики пока что не подвезли (и это здорово!)
Трасса Одесса-Рени построена вопреки прежней власти и благодаря Саакашвили —
Трасса Львов-Мукачево построена к Евро-2012 как часть трассы Киев-Чоп.
Еще скажите, что Киев-Одесса тоже в 2016 году была построена.
З 1990 року. Перечислите дороги, отремонтированные в
Нагуглил еще несколько интересных видосиков про ремонт дорог в
* youtube.com/c/PavelAvdokushyn
* youtube.com/.../UC9QugCMG0FZg16zUcY5sG2g
*
* Про папередников —
Не знаю, насколько профессиональны люди, отвечающие сейчас за ремонт дорог между городами. Но есть следующие факты:
Конечно, пока рано делать выводы. Посмотрим, что будет с этими дорогами через лет пять-десять.
Насчет дорог не согласен. В течение последних двух лет ремонтируется намного больше дорог по всей Украине по сравнению с предыдущими годами. Попробуйте выехать на авто за пределы Киева, чтобы увидеть это своими глазами.
P.s. В Киеве дороги с мостами остаются в ужасном состоянии. Спасибо за мэра :)
Вы видели программу на node.js сложнее, чем hello world application, чтобы в ней не было каллбэков?
Не припомните, какие популярные среды исполнения js (браузеры, node.js) поддерживали async / await в 2015 году?
Тогда определенно берем redis/memcached/etc и не занимаемся фигней
Redis/memcached не подходят из-за больших накладных расходов на сериализацию и передачу данных между процессами.
Спрашивается- нафига нам 10 потоков, если потоки ничего не делают кроме как ломятся в один участок памяти через системные блокировки?
В задании ничего не сказано про один участок памяти. Кэш содержит много записей. Никто не мешает шардировать их по ключу, чтобы снизить вероятность блокировок между потоками при обращении к данным в кэше.
Даже если удастся в этом конкретном сугубо теоретическом случае получить меньшую стоимость доступа к примитивному хранилищу, то на практике ее не будет видно абсолютно, а вот на архитектуру накладывает ограничение, ибо эта самопальная бд наглухо прикручена к процессу сервиса. На практике таких внутрипроцессорных кэшей больших не должно быть, чтобы пришлось экономить на озу, будь он выделенным у каждого процесса на ядро
Еще раз повторяю — это задача из моей практики. Был сервис на node.js , обрабатывающий запросы на рекламу (aka ad server). Он хранил в памяти состояние по текущим рекламным кампаниям (тот самый кэш, про который
упомянуто выше). Все было ОК, пока нагрузка на него была низкой. При росте нагрузки уперлись в однопоточность node.js. Проблему пытались решить путем запуска параллельных процессов node.js. Вот только была небольшая проблемка — как расшарить между этими процессами состояние по рекламным кампаниям. Пытались применить всякие костыли вроде shared memory с изощренными межпроцессными блокировками. Затем за неделю переписали сервис на Go — и он стал автоматически масштабироваться на произвольное количество ядер CPU. При этом код стал проще в поддержке по сравнению с кодом на node.js, т.к. теперь там не было callback’ов, была понятная обработка ошибок и была статическая типизация.
В Go эта асинхронность скрыта от глаз программиста — там просто пишется линейный код без коллбэков, который проще понять, проще поддерживать, проще рефакторить и проще дебажить по сравнению с callback hell’ом в асинхронном коде.
Мне лень, читать очередные манифесты почему js неправильный
Зря вы так — статья 2015 года. Тогда даже async / await еще не было, а статью про него уже написали :)
беру я значит N процессов по количеству ядер, соответственно каждый инстанс имеет свой key-value хранилище в своем адресном пространстве и делаю балансировку по ключу mod N балансиром
Так не пойдет, т.к. в задании указано, что кэш — глобальный, т.е. любой запрос может обратиться к любым записям в кэше. Шардировать запросы по процессам с индивидуальными кэшами не получится.
Метрики из statsd можно отправлять напрямую в VictoriaMetrics без необходимости заводить промежуточный statsd_exporter — docs.victoriametrics.com/...ble-agents-such-as-statsd
Задача из реальной жизни: написать сервис, обрабатывающий 100к запросов в секунду при следующих условиях:
Жду решений этой задачи на node.js .
Т.е. по-вашему лучше ломать голову над правильной расстановкой async / await либо над правильной цепочкой асинхронных вызовов (aka callback hell) вместо того, чтобы писать простой и понятный код в синхронном стиле на Go?
Почитайте классику про async/await функции — journal.stuffwithstuff.com/...t-color-is-your-function
Так и запишем — Kubernetes — не продакшн система, а небольшая утилита, т.к. написана на Go. Ну или github.com/...iaMetrics/VictoriaMetrics — не полноценное решение для мониторинга продакшн-систем, а небольшой сервис, т.к. написан на Go.
Не знаю насчет говнокода, но нормальный код на Go тоже работает на 5% быстрее при переходе с компилятора go1.16 на go1.17.