Search
Write a publication
Pull to refresh
47
0
Kirill Yegorov @coh

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

Send message

Автономный способ обхода DPI и эффективный способ обхода блокировок сайтов по IP-адресу

Reading time7 min
Views757K
Провайдеры Российской Федерации, в большинстве своем, применяют системы глубокого анализа трафика (DPI, Deep Packet Inspection) для блокировки сайтов, внесенных в реестр запрещенных. Не существует единого стандарта на DPI, есть большое количество реализации от разных поставщиков DPI-решений, отличающихся по типу подключения и типу работы.

Существует два распространенных типа подключения DPI: пассивный и активный.

Пассивный DPI

Пассивный DPI — DPI, подключенный в провайдерскую сеть параллельно (не в разрез) либо через пассивный оптический сплиттер, либо с использованием зеркалирования исходящего от пользователей трафика. Такое подключение не замедляет скорость работы сети провайдера в случае недостаточной производительности DPI, из-за чего применяется у крупных провайдеров. DPI с таким типом подключения технически может только выявлять попытку запроса запрещенного контента, но не пресекать ее. Чтобы обойти это ограничение и заблокировать доступ на запрещенный сайт, DPI отправляет пользователю, запрашивающему заблокированный URL, специально сформированный HTTP-пакет с перенаправлением на страницу-заглушку провайдера, словно такой ответ прислал сам запрашиваемый ресурс (подделывается IP-адрес отправителя и TCP sequence). Из-за того, что DPI физически расположен ближе к пользователю, чем запрашиваемый сайт, подделанный ответ доходит до устройства пользователя быстрее, чем настоящий ответ от сайта.
Читать дальше →

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

Reading time21 min
Views45K

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

Читать далее

Приёмы ускорения кода на JS и других языках: подборка от разработчика поиска Яндекса

Reading time17 min
Views70K
Привет! Меня зовут Виктор Хомяков, в Яндексе я работаю над скоростью страниц поиска. Однажды мне в голову пришла идея обобщить свой опыт и систематизировать приёмы ускорения работы кода на JavaScript. То, что получилось в итоге, собрано в этом материале.

Некоторые из приёмов будут полезны и тем, кто пишет на других языках. Все способы разделены на группы по убыванию специфичности: от наиболее общих до конкретных. Почти все примеры кода взяты из реальных проектов, из реального продакшена.


Читать дальше →

Почему мы перешли с Oracle на PostgreSQL, и как это сделать

Reading time19 min
Views23K


Всем привет!


Сегодня расскажем о сравнительно новой для нас теме — про перевод приложения с Oracle на Postgres Pro (далее в тексте везде сокращу до PG). В общем смысле тема не столь уж нова — многие компании этим также занимаются или даже уже прошли этот путь. Так, например, на ежегодной конференции pgConf всегда есть несколько интересных докладов по этой теме (https://pgconf.ru/). Если говорить о формальностях, то мы реализуем инициативу согласно (Приказ Министерства связи «Об утверждении плана по импортозамещению программного обеспечения» от 01.02.2015 № 96). По факту — ещё и денег экономим, слезая с "лицензионной иглы". На эту тему можно отдельную статью написать, а в этой речь пойдёт о программной стороне вопроса. Кому интересно, добро пожаловать под кат.

Читать дальше →

Гайд начинающего тимлида

Reading time14 min
Views58K

В данной статье хотелось бы помочь разобраться в профессии начинающим тимлидам, или тем, кто об этом только думает.

Всё это я проговаривал на вебинаре в Хекслете тут https://www.youtube.com/watch?v=y_HkXvFovAc

Однако я уверен, что есть такие люди, которым не хочется 2 часа смотреть вебинар, а хочется за 15 минут прочитать структурированный текст. Поэтому я размещу его тут, в надежде на то, что он найдет своего заинтересованного читателя.

Общий стаж моей работы в ИТ - около 14 лет. Я начинал с системного администрирования, потом перешел в разработку, поработав как в аутсорсе, так и в продукте. Не один раз проходил путь от рядового разработчика до тимлида.

Читать далее

Мифы об асинхронном PHP: он не по-настоящему асинхронный

Reading time12 min
Views13K

В последнее время было достаточно много обсуждений производительности в PHP. И даже несмотря на то, что у нас есть PHP8, JIT и куча других улучшений, многие по-прежнему продолжают жаловаться на то, что PHP "недостаточно производительный". Что PHP - это язык, подходящий только для модели запрос-ответ. Что PHP слишком медленный и его не нужно использовать для высоконагруженных систем. С одной стороны от части всё это правда. Если мы строим какую-то систему, для которой вопрос производительности критичен, то использовать классический блокирующий PHP явно не стОит. Большая часть функций и библиотек PHP созданы для работы в традиционном блокирующем окружении, что уже подразумевает собой не самую высокую производительность. Однако PHP может работать быстро, более того, он может работать очень быстро. Как? Обычно у нас может быть две причины, из-за чего будет проседать производительность: мы либо совершаем какие-то сложные вычисления, либо у нас есть блокирующй ввод-вывод. Первое к сожалению (или к счастью) мы не можем решить в PHP. Но блокирующий ввод-вывод для PHP совсем не проблема. В PHP-сообществе есть люди, которые пишут асинхронный код уже на протяжении несколько лет. Конечно одновременно с этим бОльшая часть сообщества по-прежнему считает асинхронный PHP - дикостью. Я часто слышал: "Ты наверно совсем отчаянный, если собираешься писать что-то асинхронное на PHP". По правде говоря, у нас у всех есть это предубеждение, что PHP не подходит для подобного рода задач. И в большинстве случаев это предубеждение основано на неверных представлениях о самой "асинхронности". Неверные предубеждения в свою очередь ведут к неправильным ожиданиям, что в свою очередь приводит к разочарованию и обвинениям в том, что PHP "не по-настоящему асинхронный".

Читать далее

Микросервисы — комбинаторный взрыв версий

Reading time4 min
Views4.8K
Привет, Хабр! Представляю вашему вниманию авторский перевод статьи Microservices – Combinatorial Explosion of Versions.
image

Во времена когда мир IT постепенно переходит на микросервисы и инструменты вроде Kubernetes, все более заметной становится лишь одна проблема. Эта проблема — комбинаторный взрыв версий микросервисов. Все же IT сообщество полагает, что сегодняшняя ситуация значительно лучше, чем «Dependency hell» предыдущего поколения технологий. Тем не менее, управление версиями микросервисов весьма сложная проблема. Одним из доказательств этому могут служить статьи вроде «Верните мне мой монолит».
Читать дальше →

DBA: «Кто-то слишком много ест!»

Reading time6 min
Views16K

Тема "распухания" таблиц и индексов из-за реализации MVCC - больная для пользователей и администраторов PostgreSQL.

Однажды я уже поднимал ее в статье "DBA: когда пасует VACUUM — чистим таблицу вручную", разобрав на конкретных примерах, насколько драматический эффект для производительности запросов может оказывать невовремя проведенный или бесполезно отработавший из-за конкурентных транзакций VACUUM.

Но, помимо влияния на скорость, есть еще и факт влияния на занятое место. Наверное, вы сильно удивитесь, если таблица с единственной "живой" записью после успешного прохода autovacuum продолжит занимать гигабайты пространства на дорогих SSD.

Сегодня немного поисследуем структуру хранения данных в файлах и копнем pg_catalog - схему с описанием базы PostgreSQL, чтобы понять, как можно определить таблицы, которые явно занимают подозрительно много места.

Читать далее

Ваш компьютер больше не принадлежит вам

Reading time3 min
Views119K

Все, приплыли, вы заметили?

Заголовок делает отсылку к предсказаниям Ричарда Столлмана 1997 года.

И Кори Докторов так же предупреждал нас.

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

Читать далее

Стажёр Вася и его истории об идемпотентности API

Reading time11 min
Views262K

Идемпотентность — звучит сложно, говорят о ней редко, но это касается всех приложений, использующих API в своей работе.


Меня зовут Денис Исаев, и я руковожу одной из бэкенд групп в Яндекс.Такси. Сегодня я поделюсь с читателями Хабра описанием проблем, которые могут возникнуть, если не учитывать идемпотентность распределенных систем в своем проекте. Для этого я выбрал формат вымышленных историй о стажёре Васе, который только-только учится работать с API. Так будет нагляднее и полезнее. Поехали.


image

Читать дальше →

Качественный аутсорсинг от А до Ё: работаем с типовыми слабостями

Reading time4 min
Views3.2K
На каждой фазе жизненного цикла сервиса всплывают то одни, то другие проблемы. Это зависит от специфики сервиса, ожиданий и уровня зрелости обеих сторон. Я выделил 8 типичных проблем, с которыми сталкиваюсь при аутсорсинге. Я обращаю на них внимание, чтобы у участников процесса сформировался своеобразный чек-лист вопросов, которые необходимо проработать с потенциальным поставщиком.

Читать дальше →

Финансовый план и ценообразование для ИТ-продукта: Курс «Создание программного продукта и управление его развитием»

Reading time8 min
Views15K
Привет, Хабр! Мы продолжаем серию постов о продакт-менеджменте от компании Acronis, и сегодня речь пойдет о финансовом плане и ценообразовании. Мы поговорим о том, почему «план по продажам», как часть финансового плана — это “самая большая ложь”, рассмотрим примеры удачного и неудачного ценообразование, а также пройдемся по базовым финансовым параметрам, которые необходимы для запуска любого проекта, претендующего на получение прибыли.


Читать дальше →

10 лайфхаков разработки рекомендательных систем

Reading time3 min
Views7.9K
В предыдущей статье мы обсудили основы устройства рекомендательных систем и кейсы использования. Узнали, что основной принцип заключается в рекомендации товаров, понравившихся людям с похожим вкусом, и применении алгоритма коллаборативной фильтрации.

В данной статье, будут рассмотрены лайфхаки рекомендательных систем на основе реальных бизнес кейсов. Будет показано, какие метрики лучше использовать, и какую степень близости выбрать для предсказания.


Читать дальше →

Двойная бухгалтерская запись в реляционной БД

Reading time9 min
Views22K

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


Разобраться и избежать кучи граблей в этом деле мне помогла данная статья. При этом информации по теме "как сделать свою платежную систему" довольно мало, а в учебниках по бухучету программисту сходу разобраться не так просто (и очень нудно). Надеюсь, этот материал окажется полезным тем, кто только собирается что-то такое делать.


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


Введение


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



Лука Пачоли, автор самой старой (15 век) дошедшей до нас книги с описанием принципов двойной записи


В системе с "простой записью" числовые значения записываются только один раз. В системе с "двойной записью" каждое значение записывается дважды, как кредит (положительное значение) и как дебет (отрицательное значение). При этом есть набор правил, определяющих связь между этими значениями. Эти правила вам легко опишет любой опытный бухгалтер, хотя он может и не представлять, как именно они могут быть представлены в реляционной БД.


Основные правила таковы:

Читать дальше →

Шесть рецептов для начинающего тимлида: как всё успевать и развивать команду

Reading time14 min
Views54K


Привет! Меня зовут Дмитрий Ли, я тимлид одной из команд разработки бэкенда в Badoo.

Когда я впервые стал тимлидом, я стал активно посещать конференции и читать умные книги об управлении командой. Однако в моей работе после этого менялось немногое. Я читал о том, каким я должен быть, в чём должен развиваться, но мне было неясно, что конкретно для этого нужно делать.

Мне пришлось не раз и не два наступить на одни и те же грабли, прежде чем я разобрался, что мешает наладить и улучшить мою работу. Поэтому для выступления на Saint TeamLead Conf я решил собрать из своего нынешнего опыта советы, которых мне не хватало на старте моей карьеры управленца. Эти вещи сильно упростили бы мне жизнь, если бы я знал о них раньше. 

Рецепты, которыми я хочу поделиться, в большей степени пригодятся начинающим тимлидам: я записал их как своеобразное наставление себе самому несколько лет назад. Эта статья написана по мотивам моего доклада на TeamLeads Conf.

Нам нужен другой Битрикс

Reading time6 min
Views30K
Как быстро определить, что на отдельно взятый сайт забили, и им никто не занимается? Если в подвале главной страницы в копирайте стоит не текущий год, а старый, то именно в этом году опека над сайтом скоропостижно оборвалась. Так и на странице входа в актуальную админку Битрикса на конец 2019-го года стоит 2016 год.
Читать дальше →

Психоанализ эффекта недооцененного специалиста. Часть 1. Кто и почему

Reading time18 min
Views18K

1. Вступление


Несправедливость неисчислима: исправляя одну, рискуешь совершить другую.
Ромен Роллан
Работая программистом с начала 90-ых, мне не однократно приходилось сталкиваться с проблемами недооцененности. Вот например, я такой молодой, умный, со всех сторон положительный, почему-то не двигаюсь по служебной лестнице. Ну не то чтобы совсем не двигаюсь, но двигаюсь как-то не так, как я того заслуживаю. Или мою работу оценивают недостаточно восторженно, не замечая всей красоты решений и того гигантского вклада, который Я, именно Я, вношу в общее дело. По сравнению с другими, я явно недополучаю плюшек и привилегий. То есть по лестнице профессиональных знаний я вскарабкиваюсь быстро и эффективно, а вот по служебной — мой рост упорно занижают и зажимают. Неужели они все слепы и равнодушны, или это заговор?

Пока Вы читаете и никто не слышит, сознайтесь честно, Вы же сталкивались с подобными проблемами!

Дожив до возраста «Аргентина – Ямайка», пройдя путь от разработчика к системному аналитику, менеджеру проектов и до директора и совладельца ИТ фирмы, я частенько наблюдал подобную картину, но уже с оборотной стороны. Многие сценарии поведения недооцененного сотрудника и недооценившего его менеджера прояснились и стали очевидны. Многие вопросы, осложнявшие мне жизнь и мешавшие самореализовываться долгое время, наконец-то получили ответы.

Эта статья может быть полезной как самим недооцененным сотрудникам, так и их менеджерам.
Об авторских тренингах на тему: «Социальная инженерия» подробнее можно узнать на моем YouTube канале
Читать дальше →

Производительность PHP: планируем, профилируем, оптимизируем

Reading time16 min
Views41K


Привет, Хабр! Два года назад мы писали о том, как перешли на PHP 7.0 и сэкономили миллион долларов. На нашем профиле нагрузки новая версия оказалась в два раза более эффективной по использованию CPU: ту нагрузку, которую раньше у нас обслуживали ~600 серверов, после перехода начали обслуживать ~300. В результате на протяжении двух лет у нас был запас мощностей.

Но Badoo растёт. Количество активных пользователей постоянно увеличивается. Мы совершенствуемся и развиваем нашу функциональность, благодаря чему пользователи проводят в приложении всё больше времени. А это, в свою очередь, отражается на количестве запросов, которое за два года увеличилось в 2—2,5 раза.

Мы оказались в ситуации, когда двукратный выигрыш в производительности нивелировался более чем двукратным ростом запросов, и мы опять стали приближаться к пределам нашего кластера. В ядре PHP снова ожидаются полезные оптимизации (JIT, предзагрузка), но они запланированы только на PHP 7.4, а эта версия выйдет не раньше, чем через год. Поэтому трюк с переходом сейчас повторить не удастся — нужно оптимизировать сам код приложения.

Под катом я расскажу, как мы подходим к таким задачам, какими пользуемся инструментами, и приведу примеры оптимизаций, идей и подходов, которые мы применяем и которые помогли нам в своё время.
Читать дальше →

Exist’енция железной дороги на рынке автозапчастей

Reading time10 min
Views18K
Минутка сюрреализма. Заброшенный железнодорожный переезд в глухой сибирской деревушке. Почти середина между Владивостоком и Москвой. Тускло мигает двойным красным светофор. Звуковой сигнал уже год как не работает. Навстречу друг другу, рассекая снежную пыль, приближаются товарняки. Один из них почти весь состоит из контейнеров ЖелДорЭкспедиции. На некоторых виднеется логотип Exist.ru. Другой состав принадлежит группе ВГС и везде там красуется их марка, а также эмблема IsNext.ru. Оба везут всевозможные автозапчасти на склады и со складов — заказы в интернет-магазинах. Каким-то чудесным образом заблудившийся в Сибири Владислав Доморацкий останавливается на своём авто перед этим переездом. Смотрит на такое железнодорожное совпадение. И в момент, когда один логотип на долю секунды равняется с другим, Доморацкий думает в пустоту: “А если они пойдут навстречу по одному пути — кто победит? ВГС — партнёр РЖД или ЖелДорЭкс — протеже Альфа-Групп?.. Глупости… Всё-таки хорошо, что я ушёл…”

image

Теперь это точно разные фото. Или нет?
Читать дальше →

Карьерные стероиды. Собаки

Reading time11 min
Views19K
Название этого карьерного стероида я взял из знаменитой матрицы BCG (Boston Consulting Group). Матрица простая, применяется для оценки и выработки продуктовой стратегии. Каждый продукт оценивается по двум шкалам – темпы роста рынка и доля на нем.

Всего там категорий четыре.

«Звезды» — продукты, которые имеют высокую долю на быстро растущем рынке. Звездами все хотят заниматься.

«Дойные коровы» — доля высокая, рынок растет медленно. Это, как правило, старые продукты, давно выведенные на рынок и приносящие стабильный доход. Все хотят сидеть на дойных коровах.

«Трудные дети» — доля мала, но рынок растет. Это новые продукты обычно, с которыми еще надо повозиться, но прогноз выглядит многообещающе. С опаской, но трудными детьми заниматься хотят многие.

И, наконец, наша аналогия — «собаки». Низкая доля на рынке, который не растет, или даже стагнирует. Такими продуктами заниматься никто не хочет – усилий надо приложить много, а результата полезного не предвидится.
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Registered
Activity