Вот из недавнего буквально - в одной из команд разработки появился новый разраб (глубь финтеха, чтобы попасть, нужно было пройти несколько этапов, как ХРных, так и технических).
Разраб как разраб, в инфраструктурных вопросах плавает, ну да ладно, с кем не бывает, мы, девопсы, народ понимающий. Первые сомнения начали закрадываться, когда человек поплыл на базе базовой, вроде включения метрик в сервисе. А разраб - мидл джавист, сервис на спринге. Ну и ещё с десяток таких звоночков было, это уже постфактум понимаю.
А потом как-то разговорились в неформальной обстановке, и таки да, рассказал свою историю - курсы-ментор-псевдомидл-шестизначная зп. От нас уволился в другой финтех на чуть ли не х2 зарплату.
И вот соовсем недавно ещё пяток таких "мидлов" появилось.
Чую и надеюсь, что этот порочный клубок из гадов обоюдно себя пожрёт.
Честно, с номадом последний раз работал ещё до появления номад-пака, тогда весь деплой делали на кастомных ансибл ролях с хранением всего и вся в консуле. Когда увидел анонс пака, уже начал работу в другом месте, где основным (и единственным) рантаймом снова стал кубер. Пак настолько сырой?
Всё описанное очень сильно похоже на... Nomad. Всё описывается в HCL нативно (ну ещё бы), пакетный менеджер из коробки (Nomad Pack), всё состояние хранится в распределенном Consul KV.
Даже немного обидно, что номад не популярен, приходилось с ним работать, и лично мне он показался гибче и проще в настройке и обслуживании, чем кубер. Плюс, умеет в оркестрацию не только контейнеров, но и, например, джавовых сервлетов и обычных бинарей
Про самое интересное и не рассказали - как измерить АКТУАЛЬНОЕ отставание по времени. Дельта между now() и таймстэмпом сообщения не показательна, потому что когда по этой дельте мы переваливаем за SLO, то уже поздно пить боржоми.
Для себя вывел подход вычислять реальное отставание через лаг в штуках, деленный на скорость обработки за интервал. Не идеально, но подсвечивает проблему заранее.
Ну и уже традиционное замечание по kafka-go - незачем городить свой велосипед для вычисления лага - у ридера есть стата с этой метрикой. А для консьюмер групп всё равно нужно запускать по ридеру на партицию, тогда метрика всегда будет корректная.
Конвейер-молотилка данных. Исходно писался, чтобы подразобраться в тонкостях работы с разными штуками, сейчас тихонько работает, перемалывая геоданные и всякие событийные вещи - https://github.com/gekatateam/neptunus
... паузы GC неприемлемы. Именно поэтому крупные компании всё чаще выбирают Rust (или даже C++) в этих средах
А что, когда-то было иначе? Где-то, где важен каждый такт, были языки с ГЦ? По личному опыту, там всегда сидели плюсы, которые сейчас вытесняются растом.
Ну а Го осел в нишах, где нужна параллельность-конкуррентность
Плюс в том, что пока горутины, запущенные в Start(), не завершат работу, клиент не отдаст ОК на перебалансировку. Это даёт время дообработать и закоммитить уже вычитанное.
DevSecOps - очередная попытка натянуть сову на глобус заткнуть несколько позиций одной вакансией. В лучшем случае на выходе имеется выгоревший инженер, в худшем к этому добавляется дыра в безопасности. Доколе же будет страдать бедная сова?
На андроид почему-то не обрабатывается нажатие кнопки "назад" (что вверху слева, что системной), обратно в ленту из поста приходится возвращаться переходом на главную по иконке
нам нужно снимать экран, действия пользователя, сайты, на которых он сидит, и используемые приложения
Это точно функционал, которому место в тайм-трекере? Во-первых, кажется, что без этого переход с электрона не нужОн, во-вторых, не вяжется с позиционированием продукта; цитата с сайта:
ведите учёт рабочего времени без нарушения личных границ
Каждая клетка - отдельный класс, реализующий интерфейс:
type Cell interface {
GetState() state
NextState() error
UpdateState() error
}
Где state - специальный отдельный тип, под капотом маппящий 1 как "жив" и 0 как "мёртв", чтоб можно было расширяться и добавлять новые состояния.
При вызове NextState() каждая клетка должна сходить в один из апи-сервисов, узнать состояние соседей, высчитать своё следующее состояние и приготовиться обновиться по вызову UpdateState().
Создаем сервис-менеджер, который может хранить в себе кусочек поля:
Менеджеры клеток можно разделить по нескольким дата-центрам, каждый из менеджеров может обслуживать свой кусочек поля. Next() и Update(), конечно, асинхронные.
Для большей ентерпрайзности можно положить всё в кубер, а каждый менеджер пусть хранит данные в выделенной базёнке, и чтоб всё масштабировалось налету в зависимости от изначально заданного размера поля.
Теперь нам нужен апи-сервис. Апи-сервис должен знать о расположении всех менеджеров (допустим, что эта информация хранится в кластере Consul). Когда апи получает команду на обновление, он асинхронно кидает команду на менеджеры о вычислении следующего состояния. Когда все вычисления завершаются, отдаётся команда на обновление.
К апи-сервису прилагается какой-нибудь веб-сервер с фронтом, который отображает красивую картинку.
P.S. не воспринимайте серьёзно, просто идея за обеденной чашкой кофе.
Обеими руками за подобного рода статьи, но пока что ваши тексты, вопреки заголовкам, акцентируют внимание на спутнике.
Уделяйте внимание и другим вакцинам, пожалуйста. Без этого, пока что, всё вот это смотрится как очередная реклама, которая на фоне, во-первых, отсутствия в РФ иностранных вакцин, во-вторых, непризнания спутника ВОЗ, степень доверия не сильно-то и повышает
Есть смутное ощущение, что Metabase может закрыть все потребности. Логику вынести в экшены, отображение данных на витрины.
А знаете, я с вами согласен.
Вот из недавнего буквально - в одной из команд разработки появился новый разраб (глубь финтеха, чтобы попасть, нужно было пройти несколько этапов, как ХРных, так и технических).
Разраб как разраб, в инфраструктурных вопросах плавает, ну да ладно, с кем не бывает, мы, девопсы, народ понимающий. Первые сомнения начали закрадываться, когда человек поплыл на базе базовой, вроде включения метрик в сервисе. А разраб - мидл джавист, сервис на спринге. Ну и ещё с десяток таких звоночков было, это уже постфактум понимаю.
А потом как-то разговорились в неформальной обстановке, и таки да, рассказал свою историю - курсы-ментор-псевдомидл-шестизначная зп. От нас уволился в другой финтех на чуть ли не х2 зарплату.
И вот соовсем недавно ещё пяток таких "мидлов" появилось.
Чую и надеюсь, что этот порочный клубок из гадов обоюдно себя пожрёт.
Честно, с номадом последний раз работал ещё до появления номад-пака, тогда весь деплой делали на кастомных ансибл ролях с хранением всего и вся в консуле. Когда увидел анонс пака, уже начал работу в другом месте, где основным (и единственным) рантаймом снова стал кубер. Пак настолько сырой?
Всё описанное очень сильно похоже на... Nomad. Всё описывается в HCL нативно (ну ещё бы), пакетный менеджер из коробки (Nomad Pack), всё состояние хранится в распределенном Consul KV.
Даже немного обидно, что номад не популярен, приходилось с ним работать, и лично мне он показался гибче и проще в настройке и обслуживании, чем кубер. Плюс, умеет в оркестрацию не только контейнеров, но и, например, джавовых сервлетов и обычных бинарей
Ожидание: нехватка юнион-типов, недостаточно гибкие дженерики, нужен ли тернарный оператор или его функциональный аналог
Реальность: как вкатиться?? как назвать папки??? зочем софты????
А Го тут каким боком вообще?
Какой-то неполноценный гайд, семафор есть в виде конкретной реализации с весами - https://pkg.go.dev/golang.org/x/sync/semaphore, равно как есть готовый рейт-лимитер с управлением всплесками и прочим - https://pkg.go.dev/golang.org/x/time/rate
В реальности без burst-control в RL и без весов в семафоре почти не обходится
Увидел заголовок, долго думал, чем женщинам не угодил hex...
Про самое интересное и не рассказали - как измерить АКТУАЛЬНОЕ отставание по времени. Дельта между now() и таймстэмпом сообщения не показательна, потому что когда по этой дельте мы переваливаем за SLO, то уже поздно пить боржоми.
Для себя вывел подход вычислять реальное отставание через лаг в штуках, деленный на скорость обработки за интервал. Не идеально, но подсвечивает проблему заранее.
Ну и уже традиционное замечание по kafka-go - незачем городить свой велосипед для вычисления лага - у ридера есть стата с этой метрикой. А для консьюмер групп всё равно нужно запускать по ридеру на партицию, тогда метрика всегда будет корректная.
Конвейер-молотилка данных. Исходно писался, чтобы подразобраться в тонкостях работы с разными штуками, сейчас тихонько работает, перемалывая геоданные и всякие событийные вещи - https://github.com/gekatateam/neptunus
А что, когда-то было иначе? Где-то, где важен каждый такт, были языки с ГЦ? По личному опыту, там всегда сидели плюсы, которые сейчас вытесняются растом.
Ну а Го осел в нишах, где нужна параллельность-конкуррентность
Этак выходит, что можно оформить рассрочку, тут же оплатить полностью и получить скидку?
Не надо так
Ридер не следит за тем, что коммитит, после реблансировки консьюмеров можно внезапно обнаружить, что произошел коммит в уже чужую партицию.
Лучше создать консьюмер группу и в её рамках обрабатывать старт нового поколения - https://pkg.go.dev/github.com/segmentio/kafka-go#Generation.Start
Плюс в том, что пока горутины, запущенные в
Start()
, не завершат работу, клиент не отдаст ОК на перебалансировку. Это даёт время дообработать и закоммитить уже вычитанное.DevSecOps - очередная попытка
натянуть сову на глобусзаткнуть несколько позиций одной вакансией. В лучшем случае на выходе имеется выгоревший инженер, в худшем к этому добавляется дыра в безопасности. Доколе же будет страдать бедная сова?Исправил, спасибо
На андроид почему-то не обрабатывается нажатие кнопки "назад" (что вверху слева, что системной), обратно в ленту из поста приходится возвращаться переходом на главную по иконке
Это точно функционал, которому место в тайм-трекере? Во-первых, кажется, что без этого переход с электрона не нужОн, во-вторых, не вяжется с позиционированием продукта; цитата с сайта:
Предлагаю ЖизньЕнтерпрайзЕдишн (по аналогии)
Каждая клетка - отдельный класс, реализующий интерфейс:
Где state - специальный отдельный тип, под капотом маппящий 1 как "жив" и 0 как "мёртв", чтоб можно было расширяться и добавлять новые состояния.
При вызове NextState() каждая клетка должна сходить в один из апи-сервисов, узнать состояние соседей, высчитать своё следующее состояние и приготовиться обновиться по вызову UpdateState().
Создаем сервис-менеджер, который может хранить в себе кусочек поля:
Менеджеры клеток можно разделить по нескольким дата-центрам, каждый из менеджеров может обслуживать свой кусочек поля. Next() и Update(), конечно, асинхронные.
Для большей ентерпрайзности можно положить всё в кубер, а каждый менеджер пусть хранит данные в выделенной базёнке, и чтоб всё масштабировалось налету в зависимости от изначально заданного размера поля.
Теперь нам нужен апи-сервис. Апи-сервис должен знать о расположении всех менеджеров (допустим, что эта информация хранится в кластере Consul). Когда апи получает команду на обновление, он асинхронно кидает команду на менеджеры о вычислении следующего состояния. Когда все вычисления завершаются, отдаётся команда на обновление.
К апи-сервису прилагается какой-нибудь веб-сервер с фронтом, который отображает красивую картинку.
P.S. не воспринимайте серьёзно, просто идея за обеденной чашкой кофе.
@NavalnyTeam прокомментируйте, пожалуйста.
Если описанное имеет место быть (во что очень верится), под угрозой находится каждый, кто что-либо делал на вашем сайте.
Если метрики вам действительно необходимы, может, стоит перейти на Гугл аналитикс?
Обеими руками за подобного рода статьи, но пока что ваши тексты, вопреки заголовкам, акцентируют внимание на спутнике.
Уделяйте внимание и другим вакцинам, пожалуйста. Без этого, пока что, всё вот это смотрится как очередная реклама, которая на фоне, во-первых, отсутствия в РФ иностранных вакцин, во-вторых, непризнания спутника ВОЗ, степень доверия не сильно-то и повышает
Эту тему, в рамках эссе об аниме, подробно разбирал Кунгуров на личном канале
Строго рекомендуется к ознакомлению, даже если аниме вам не нравится