Как стать автором
Обновить
-1
0

Пользователь

Отправить сообщение

SSL сертификат для Docker web-app

Время на прочтение4 мин
Количество просмотров54K
В данной статье я хочу поделиться с вами способом создания SSL сертификата для вашего веб-приложения работающего на Docker, т.к. в рускоязычной части интернета — подобного решения я не нашел.

image

Подробнее под катом.
Читать дальше →
Всего голосов 8: ↑5 и ↓3+6
Комментарии26

Preload в php 7.4: Composer и выбор файлов для предзагрузки

Время на прочтение9 мин
Количество просмотров12K
Мы в Badoo активно занимаемся переходом на PHP 7.4 и с большим энтузиазмом ждём возможности использовать новую функцию preload. Не так давно мы рассказывали о наших экспериментах с ней.

Судя по всему, сообщество взбудоражено не меньше, чем мы. Разработчики фреймворков активно обсуждают возможности внедрения прелоада (а некоторые уже сделали его поддержку). Теперь дошла очередь и до менеджера зависимостей Composer. 



Italo Baeza написал статью, в которой высказал своё мнение о том, как Composer должен работать с прелоадом. Я решил поделиться переводом этого текста, а заодно и переводом другой его статьи — о том, что ответили на предложение сами разработчики Composer, а также о новом инструменте, который облегчает работу с прелоадом.
Читать дальше →
Всего голосов 51: ↑51 и ↓0+51
Комментарии4

Прослушиватели событий и веб-воркеры

Время на прочтение6 мин
Количество просмотров9.3K
Недавно я разбирался с API Web Workers. Очень жаль, что я не уделил время этому отлично поддерживаемому инструменту раньше. Современные веб-приложения очень требовательны к возможностям главного потока выполнения JavaScript. Это воздействует на производительность проектов и на их возможности по обеспечению удобной работы пользователей. Веб-воркеры — это именно то, что в наши дни способно помочь разработчику в деле создания быстрых и удобных веб-проектов.


Читать дальше →
Всего голосов 18: ↑16 и ↓2+27
Комментарии6

Ускоряем PHP-коннекторы для Tarantool с помощью Async, Swoole и Parallel

Время на прочтение6 мин
Количество просмотров4.8K


В экосистеме PHP на данный момент существует два коннектора для работы с сервером Tarantool ― это официальное расширение PECL tarantool/tarantool-php, написанное на С, и tarantool-php/client, написанный на PHP. Я являюсь автором последнего.

В этой статье я хотел бы поделиться результатами тестирования производительности обеих библиотек и показать, как с помощью минимальных изменений в коде можно добиться 3-5 прироста производительности (на синтетический тестах!).
Читать дальше →
Всего голосов 46: ↑46 и ↓0+46
Комментарии1

Уровни изолированности транзакций для самых маленьких

Время на прочтение5 мин
Количество просмотров264K


Сегодня хотел бы довести крайне интересный, но часто покрытый тайнами для обычных смертных программистов раздел базы данных (БД) — уровни изолированности транзакций. Как показывает практика, многие люди, связанные с IT, в частности с работой с БД, слабо понимают зачем нужны эти уровни и как их можно использовать себе во благо.

Немного теории


Сами транзакции особых объяснений не требуют, транзакция — это N (N≥1) запросов к БД, которые выполнятся успешно все вместе или не выполнятся вовсе. Изолированность же транзакции показывает то, насколько сильно влияют друг на друга параллельно выполняющиеся транзакции.
Выбирая уровень транзакции, мы пытаемся прийти к консенсусу в выборе между высокой согласованностью данных между транзакциями и скоростью выполнения этих самых транзакций.
Стоит отметить, что самую высокую скорость выполнения и самую низкую согласованность имеет уровень read uncommitted. Самую низкую скорость выполнения и самую высокую согласованность — serializable.
Читать дальше →
Всего голосов 42: ↑36 и ↓6+30
Комментарии21

Я больше не хочу работать, никогда и ни над чем. Но из меня научились выжимать результаты

Время на прочтение7 мин
Количество просмотров272K


Дерьмовое утро удалёнщика всегда начинается одинаково. Если детский плач не смог вытащить меня из кровати, то нытье жены сделает это с гарантией. Сумасшедшие девять утра, через час дейли-синк-ап, а за вчера, как всегда, сделано нихрена. Быстро варю кофе и за комп. За пять минут до созвона пулл реквест с кодом энтерпрайзного качества увесисто встал в очередь на билд. Иду курить, но по дороге телефон заорал — я зачем-то установил на него скайп, и теперь работа может добраться до меня где угодно. Курение откладывается, я готовлюсь возмущаться, что мне позвонили раньше положенного. Напялил наушники, принял вызов. Вместо привычной девушки менеджера созвон начал какой-то незнакомый мне чел. «Всем привет, Аня заболела, я буду её замещать». Окей, кому какое дело, с таким же успехом они могли бы прислать нам в качестве менеджера собаку — ничего бы не изменилось.
Читать дальше →
Всего голосов 420: ↑345 и ↓75+353
Комментарии780

Docker + Laravel + RoadRunner = ❤

Время на прочтение8 мин
Количество просмотров31K

picture


Данный пост написан по заявкам трудящихся, которые с завидной периодичностью спрашивают о том "Как запустить Illuminate / Symfony / MyOwnPsr7 приложение в докере". Давать ссылку на ранее написанный пост уже не хочется, так как взгляды относительно того, как следует решать поставленную задачу, довольно сильно изменились.


Всё, что будет написано ниже, является субъективным опытом, который (как и всегда) не претендует на право считаться единственно верным решением, но некоторые подходы и решения, возможно, тебе покажутся интересными и полезными.


В качестве приложения так же буду использовать Laravel, так как он мне наиболее знаком и довольно широко распространен. Адаптировать под другие PSR-7-based фреймворки/компоненты возможно, но этот рассказ не про это.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии10

Если вы что-то создаёте, избегайте расписания менеджера

Время на прочтение5 мин
Количество просмотров54K


В книге ”Masters of Doom” о компании id Software и её влиянии на массовую культуру Дэвид Кушнер размышлял о необычном стиле работы ведущего программиста Джона Кармака.

Чтобы повысить производительность и не отвлекаться от работы над движком Quake, тот принял агрессивный подход — начал постепенно смещать начало рабочего дня. В конце концов Джон садился программировать вечером, а заканчивал перед рассветом. Эти непрерывные отрезки тишины, изоляции и глубокой работы позволили ему создать первый в мире сверхбыстрый 3D-движок. Игра Quake произвела настоящий фурор.
Читать дальше →
Всего голосов 134: ↑131 и ↓3+128
Комментарии98

RabbitMQ против Kafka: отказоустойчивость и высокая доступность в кластерах

Время на прочтение14 мин
Количество просмотров39K


Отказоустойчивость и высокая доступность — большие темы, так что посвятим RabbitMQ и Kafka отдельные статьи. Данная статья о RabbitMQ, а следующая — о Kafka, в сравнении с RabbitMQ. Статья длинная, так что устраивайтесь поудобнее.

Рассмотрим стратегии отказоустойчивости, согласованности и высокой доступности (HA), а также компромиссы, на которые приходится идти в каждой стратегии. RabbitMQ может работать на кластере узлов — и тогда классифицируется как распределенная система. Когда речь заходит о распределенных системах, мы часто говорим о согласованности и доступности.

Эти понятия описывают, как система ведет себя при сбое. Сбой сетевого соединения, сбой сервера, сбой жесткого диска, временная недоступность сервера из-за сборки мусора, потеря пакетов или замедление сетевого соединения. Все это может привести к потере данных или конфликтам. Оказывается, практически невозможно поднять систему, одновременно и полностью непротиворечивую (без потери данных, без расхождения данных), и доступную (будет принимать операции чтения и записи) для всех вариантов сбоя.
Читать дальше →
Всего голосов 46: ↑45 и ↓1+44
Комментарии4

Нейросети и глубокое обучение, глава 5: почему глубокие нейросети так сложно обучать?

Время на прочтение18 мин
Количество просмотров18K

Представьте, что вы – инженер, и вас попросили разработать компьютер с нуля. Как-то раз вы сидите в офисе, изо всех сил проектируете логические контуры, распределяете вентили AND, OR, и так далее,- и вдруг входит ваш босс и сообщает вам плохие новости. Клиент только что решил добавить неожиданное требование к проекту: схема работы всего компьютера должна иметь не более двух слоёв:



Вы поражены, и говорите боссу: «Да клиент спятил!»

Босс отвечает: «Я тоже так думаю. Но клиент должен получить то, что хочет».
Читать дальше →
Всего голосов 29: ↑26 и ↓3+23
Комментарии2

Ограничения машинного обучения

Время на прочтение10 мин
Количество просмотров18K
Привет, Хабр! Представляю вашему вниманию перевод статьи “The Limitations of Machine Learning“ автора Matthew Stewart.

Большинство людей, читающих эту статью, вероятно, знакомы с машинным обучением и соответствующими алгоритмами, используемыми для классификации или прогнозирования результатов на основе данных. Тем не менее, важно понимать, что машинное обучение не является решением всех проблем. Учитывая полезность машинного обучения, может быть трудно согласиться с тем, что иногда это не лучшее решение проблемы.

Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Комментарии16

Проблемы при работе с кэшем и способы их решения

Время на прочтение12 мин
Количество просмотров39K
Привет, Хабр!

Меня зовут Виктор Пряжников, я работаю в SRV-команде Badoo. Наша команда занимается разработкой и поддержкой внутреннего API для наших клиентов со стороны сервера, и кэширование данных — это то, с чем мы сталкиваемся каждый день.

Существует мнение, что в программировании есть только две по-настоящему сложные задачи: придумывание названий и инвалидация кэша. Я не буду спорить с тем, что инвалидация — это сложно, но мне кажется, что кэширование — довольно хитрая вещь даже без учёта инвалидации. Есть много вещей, о которых следует подумать, прежде чем начинать использовать кэш. В этой статье я попробую сформулировать некоторые проблемы, с которыми можно столкнуться при работе с кэшем в большой системе.



Я расскажу о проблемах разделения кэшируемых данных между серверами, параллельных обновлениях данных, «холодном старте» и работе системы со сбоями. Также я опишу возможные способы решения этих проблем и приведу ссылки на материалы, где эти темы освещены более подробно. Я не буду рассказывать, что такое кэш в принципе и касаться деталей реализации конкретных систем.

При работе я исхожу из того, что рассматриваемая система состоит из приложения, базы данных и кэша для данных. Вместо базы данных может использоваться любой другой источник (например, какой-то микросервис или внешний API).
Читать дальше →
Всего голосов 62: ↑62 и ↓0+62
Комментарии22

Настройка PHP-FPM: используем pm static для максимальной производительности

Время на прочтение5 мин
Количество просмотров28K


Неотредактированная версия статьи была изначально опубликована на haydenjames.io и публикуется здесь с разрешения ее автора.


Я в двух словах расскажу, как лучше всего настроить PHP-FPM, чтобы увеличить пропускную способность, снизить задержку и более стабильно использовать процессорные ресурсы и память. По умолчанию строка PM (process manager, менеджер процессов) в PHP-FPM имеет значение dynamic, а если у вас не хватает памяти, то лучше установить ondemand. Давайте сравним 2 варианта управления на основе документации php.net и посмотрим, чем от них отличается мой любимый static pm для большого объема трафика:


pm = dynamic — количество дочерних процессов настраивается динамически на основе следующих директив: pm.max_children, pm.start_servers,pm.min_spare_servers, pm.max_spare_servers.
pm = ondemand — процессы создаются по требованию (в отличие от динамического создания, когда pm.start_servers запускаются при запуске сервиса).
pm = static — количество дочерних процессов фиксировано и указывается параметром pm.max_children.

Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии1

Структура данных B-дерево

Время на прочтение5 мин
Количество просмотров57K
Всем привет! Мы запустили новый набор на курс «Алгоритмы для разработчиков» и сегодня хотим поделиться интересным переводом, подготовленным для студентов данного курса.



В деревьях поиска, таких как двоичное дерево поиска, AVL дерево, красно-чёрное дерево и т.п. каждый узел содержит только одно значение (ключ) и максимум двое потомков. Однако есть особый тип дерева поиска, который называется B-дерево (произносится как Би-дерево). В нем узел содержит более одного значения (ключа) и более двух потомков. B-дерево было разработано в 1972 году Байером и МакКрейтом и называлось Сбалансированное по высоте дерево поиска порядка m (Height Balanced m-way Search Tree). Свое современное название B-дерево получило позже.
Читать дальше →
Всего голосов 19: ↑13 и ↓6+7
Комментарии5

Symfony CLI — новый инструмент для локальной разработки

Время на прочтение5 мин
Количество просмотров15K

В декабре 2018-го, на конфиренции Lisbon SymfonyCon Фабиэн Потансье — создетель фреймворка Symfony представил некий symfony.phar — инструмент для быстрого создания Symfony-приложений на основе официальных шаблонов проекта: skeleton, website-skeleton или demo. Также он позволяет запускать локальный веб-сервер для разработки.


Затем инструмент был переписан на языке Golang, что позволило реализовать много дополнительных возможностей таких, как поддержка https протокола для локального веб-сервера, тесная интеграция с SymfonyCloud и прочее! Приглашаю тебя, уважаемый читатель, познакомиться с этим инструментом подробнее, поскольку он работает не только в контексте фреймворка Symfony.

Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии20

Как айтишнику найти работу в США и ЕС: 9 лучших ресурсов

Время на прочтение5 мин
Количество просмотров169K
Мировой рынок IT стремительно развивается. С каждым годом профессия разработчика софта становится все более востребованной — уже в 2017 году в мире насчитывался примерно 21 миллион программистов различных направлений.

К сожалению, русскоговорящий рынок IT находится еще на начальной стадии развития — уже есть крупные и успешные проекты, но рынок еще долго не сможет сравняться с европейским и американским, которые производят до 85% всех IT-продуктов мира.
Читать дальше →
Всего голосов 53: ↑52 и ↓1+51
Комментарии25

Руководство по выживанию с MongoDB

Время на прочтение12 мин
Количество просмотров36K
Все хорошие стартапы либо быстро умирают, либо дорастают до необходимости масштабироваться. Мы смоделируем такой стартап, который сначала про фичи, а потом про перфоманс. Перфоманс будем улучшать с MongoDB — это популярное NoSQL-решение для хранения данных. С MongoDB легко стартовать, и многие проблемы имеют решения «из коробки». Однако, когда нагрузка растет, вылезают грабли, о которых вас заранее никто не предупреждал… до сегодняшнего дня!

image

Моделирование проводит Сергей Загурский, который отвечает за инфраструктуру бэкенда вообще, и MongoDB в частности, в Joom. Также был замечен в серверной части разработки MMORPG Skyforge. Как сам себя описывает Сергей — «профессиональный набиватель шишек собственным лбом и граблями». Под микроскопом — проект, который использует стратегию накопления для управления техническими долгом. В этой текстовой версии доклада на HighLoad++ будем двигаться в хронологическом порядке от возникновения проблемы до решения с помощью MongoDB.
Читать дальше →
Всего голосов 58: ↑58 и ↓0+58
Комментарии9

Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы сделали

Время на прочтение9 мин
Количество просмотров77K
Вот уже около трех лет я использую в работе принципы Spec By Example, Domain Driven Design и CQRS. За это время накопился опыт практического применения этих практик на платформе .NET. В статье я хочу поделиться нашим опытом и выводами, которые могут быть полезными командам, желающим использовать эти подходы в разработке.

Факты, цифры, код
Всего голосов 39: ↑39 и ↓0+39
Комментарии45

Видео с Badoo PHP Meetup #2: о тестах и качестве кода

Время на прочтение2 мин
Количество просмотров7K


16 марта мы собрали вторую встречу PHP-сообщества в офисе Badoo. По правде говоря, получилась целая мини-конференция — так много участников было в этот раз.

Обсуждали вопросы автотестов для PHP-разработчиков, разбирали реальные кейсы из практики, дискутировали о качестве кода и много общались. Спасибо участникам и спикерам за полезную субботу!

Под катом — слайды, записи докладов и панельная дискуссия со спикерами из Badoo, EPAM, Avito и Lamoda.
Всего голосов 49: ↑49 и ↓0+49
Комментарии2

Изучаем Docker, часть 4: уменьшение размеров образов и ускорение их сборки

Время на прочтение8 мин
Количество просмотров149K
В этой части перевода серии материалов, которая посвящена Docker, мы поговорим о том, как оптимизировать размеры образов и ускорить их сборку. В прошлых материалах мы сравнивали образы Docker с пиццей, термины с пончиками, а инструкции файлов Dockerfile с бубликами. Сегодня же не будет никакой выпечки. Пришло время посидеть на диете.

Часть 1: основы
Часть 2: термины и концепции
Часть 3: файлы Dockerfile
Часть 4: уменьшение размеров образов и ускорение их сборки
Часть 5: команды
Часть 6: работа с данными


Для того чтобы разобраться с тем, о чём мы будем тут говорить, вам будет полезно освежить в памяти то, о чём шла речь в третьей части этой серии материалов. А именно, там мы говорили об инструкциях файлов Dockerfile. Знание этих инструкций и тех особенностей Docker, которые мы обсудим сегодня, поможет вам оптимизировать файлы образов Docker.
Читать дальше →
Всего голосов 42: ↑42 и ↓0+42
Комментарии1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность