История началась в конце 2019 года... На тот момент я уже работал ведущим разработчиком в хайлоад стартапе в Москве в технически сильной команде, которая прошла школу топовых интернет компаний России. Такого буста я не получал давно, хотя всегда был разносторонним и находил, чем занять себя помимо рутинной работы в офисе над одним и тем же проектом. Были у меня и свои активно развивающиеся идеи, и аутсорсинг - все параллельно. Но пришло время менять место. Так я и попал (далее со слов CEO) в динамично развивающуюся компанию, готовую покорить не только локальный, но и зарубежный рынки. Спустя год мне была предложена возможность переехать в Англию, а именно самому получить Tier-1 Exceptional Talent визу и помочь компании закрепиться в Европе. Ну такая себе возможность, подумал я... Слишком сложная, целиком и полностью от меня зависящая. Да и не понятно кто на кого больше пашет в данной истории. Я выделил полгода своего времени на поиск и наработку пруфов, подготовку пакета документов, подачу заявления и разовую апелляцию. При этом пожертвовал хорошими офферами в компании - конкуренты и, положа руку на сердце, не самым удачным оффером в Яндекс. И хотя передо мной таким образом все же успело переехать несколько человек, закончилось все вполне себе ожидаемо.
Разработчик
Пишем свой capped expirationd модуль для tarantool
Какое-то время назад перед нами встала проблема чистки кортежей в спейсах tarantool. Чистку нужно было запускать не тогда, когда у tarantool уже заканчивалась память, а заранее и с определенной периодичностью. Для этой задачи в tarantool есть модуль, написанный на Lua, под названием expirationd. После непродолжительного использования этого модуля мы поняли, что нам он не подходит: на постоянных чистках больших объемов данных Lua висел в GC. Поэтому мы задумались о разработке своего capped expirationd модуля, надеясь, что код, написанный на нативном языке программирования, решит наши задачи наилучшим образом.
Хорошим примером нам послужил модуль tarantool под названием memcached. Используемый в нем подход основывается на том, что в спейсе заводится отдельное поле, в котором указывается время жизни кортежа, иными словами, ttl. Модуль в фоне сканирует спейс, сравнивает ttl с текущим временем и принимает решение о том, удалять кортеж или нет. Код модуля memcached простой и элегантный, но слишком общий. Во-первых, он не учитывает тип индекса, по которому осуществляется обход и удаление. Во-вторых, на каждом проходе сканируются все кортежи, количество которых может быть довольно большим. И если в модуле expirationd первая проблема была решена (tree-индекс выделен в отдельный класс), то второй все так же не уделено никакого внимания. Это предопределило выбор в пользу написания своего кода.
Определение неиспользуемых настроек в библиотеке libconfig
Большие приложения используют конфиги для передачи настроек. И часто случаетя так, что редактирование и удаление фич приводит к рассинхронизации между кодом приложения и тем, что хранится в этих самых настройках. Попросту, в последних оседают данные, которыми вы больше никогда не воспользуетесь. Такие настройки в идеале хотелось бы отслеживать и помечать как deprecated, либо вовсе удалять.
Проблема частого создания и удаления объектов в C++
Основной особенностью является то, что наши сервисы работают с нелимитированным входящим трафиком, поэтому очень важно использовать все ресурсы рабочих станций максимально эффективно. В этом нам помогает большой опыт разработки на современном C++, включая последние стандарты и набор библиотек под названием Boost.
Information
- Rating
- Does not participate
- Location
- London, England - London, Великобритания
- Date of birth
- Registered
- Activity