Как стать автором
Обновить
13
0
Евгений @flr

Co-Founder/CTO at Roistat t.me/codeconv

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

Статический анализ в Go: как мы экономим время при проверке кода

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


Привет, Хабр. Меня зовут Сергей Рудаченко, я техлид в компании Roistat. Последние два года наша команда переводит различные части проекта в микросервисы на Go. Они разрабатываются несколькими командами, поэтому нам понадобилось задать жесткую планку качества кода. Для этого мы используем несколько инструментов, в этой статье речь пойдет об одном из них — о статическом анализе.


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


В статьях по этой теме часто встречается термин «линтер». Для нас это удобное название простых инструментов для статического анализа. Задача линтера — поиск простых ошибок и некорректного оформления.

Читать дальше →
Всего голосов 32: ↑31 и ↓1+30
Комментарии12

Разрабатываем систему real-time fulltext-поиска по error-логам на основе ClickHouse от Яндекса

Время на прочтение9 мин
Количество просмотров29K
UPDATE из будущего: Не используйте этот подход! Для поиска логов намного лучше подходит простой поиск по регулярному выражению или подстроке встроенными средствами ClickHouse. Эта статья была написана давно, как интересный эксперимент, и у меня на тот момент не. было полного понимания того, как ClickHouse работает и как его лучше всего готовить. Я вас предупредил. Привет участникам телеграм-чатика «ClickHouse не тормозит»!

В этой статье я расскажу о том, как разработать систему для индексирования и полнотекстового поиска error-логов (или любых других логов) на основе СУБД от Яндекса под названием ClickHouse. Про саму базу Яндекс писал на Хабре сначала когда база была закрытой, а потом когда они её заопенсорсили. База данных в первую очередь предназначена для аналитики и для реализации сервиса Яндекс.Метрика, но может на самом использоваться для чего угодно, если вам подходит загружать данные пачками, удалять их тоже огромными пачками и никогда не обновлять отдельные строки.

Что мы будем делать


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

CREATE TABLE Messages (
    message_id BIGINT PRIMARY KEY AUTO_INCREMENT,
    created_ts DATETIME,
    message_text BLOB
)


Мы научимся быстро отдавать результаты поиска по такому логу (то есть, всегда отсортированные по времени) и индексировать его в режиме реального времени.

Читать дальше →
Всего голосов 41: ↑37 и ↓4+33
Комментарии14

Запуск worker'ов сервиса с помощью systemd

Время на прочтение4 мин
Количество просмотров23K
После выхода Ubuntu 16.04 (новый LTS релиз), systemd стал реальностью всех основных дистрибутивов Linux, использующихся на серверах. Это означает, что можно закладываться на расширенные возможности systemd, не рискуя оставить часть пользователей приложения «за бортом».

Этот пост о том, как реализовать многоворкерное приложение средствами systemd.

Abstract: Использование шаблонов сервисов и target'ов для запуска нескольких инстансов сервиса (реализация «воркеров»). Зависимость PartOf. Немного про [install] секцию у unit'ов.

Вступление


Многие языки программирования с плохой или никакой многопоточностью (Python, Ruby, PHP, довольно часто C/C++) используют концепцию «воркера». Вместо того, чтобы городить сложные отношения между тредами внутри приложения, они запускают несколько однопоточных копий приложения, каждое из которых берёт на себя кусок нагрузки. Благодаря опции SO_REUSEPORT есть даже возможность «вместе» слушать на одном и том же порту, что покрывает большинство задач, в которых возникает потребность в воркерах (собственно, обычные серверные приложения, реализующие API или обслуживающие веб-сайт).

Но такой подход требует наличия «супервизора», который отвечает за запуск копий, следит за их состоянием, обрабатывает ошибки, завершает при всякого рода stop/reload и т.д. При кажущейся тривиальности — это совершенно не тривиальная задача, полная нюансов (например, если один из воркеров попал в TASK_UNINTERRUPTIBLE или получил SIGSTOP, то могут возникнуть проблемы при restart у не очень хорошо написанного родителя).

Есть вариант запуска без супервизора, но в этом случае задача reload/restart перекладывается на администратора. При модели «один процесс на ядро» перезапуск сервиса на 24-ядерном сервере становится кандидатом в автоматизацию, которая в свою очередь требует обработки всех тех же самых SIGSTOP и прочих сложных нюансов.

Одним из вариантов решения проблемы является использование шаблонов сервисов systemd вместе с зависимостью от общего target'а.
Читать дальше →
Всего голосов 20: ↑19 и ↓1+18
Комментарии20

Monitoring driven эксплуатация

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


Николай Сивко ( NikolaySivko, okmeter.io )


Рассказ о том, как устроена эксплуатация в компании HeadHunter, и как используется мониторинг для того, чтобы следить за качеством эксплуатации.
Всего голосов 13: ↑12 и ↓1+11
Комментарии13

Масштабирование базы данных через шардирование и партиционирование

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


Масштабирование базы данных через шардирование и партиционирование


Денис Иванов (2ГИС)


Всем привет! Меня зовут Денис Иванов, и я расскажу о масштабировании баз данных через шардирование и партиционирование. После этого доклада у всех должно появиться желание что-то попартицировать, пошардировать, вы поймете, что это очень просто, оно никак жрать не просит, работает, и все замечательно.

Немного расскажу о себе — я работаю в команде WebAPI в компании 2GIS, мы предоставляем API для организаций, у нас очень много разных данных, 8 стран, в которых мы работаем, 250 крупных городов, 50 тыс. населенных пунктов. У нас достаточно большая нагрузка — 25 млн. активных пользователей в месяц, и в среднем нагрузка около 2000 RPS идет на API. Все это располагается в трех датацентрах.

Перейдем к проблемам, которые мы с вами сегодня будем решать. Одна из проблем — это большое количество данных. Когда вы разрабатываете тот или иной проект, у вас в любой момент времени может случиться так, что данных становится очень много. Если бизнес работает, он приносит деньги. Соответственно, данных больше, денег больше, и с этими данными что-то нужно делать, потому что эти запросы очень долго начинают выполняться, и у нас сервер начинает не вывозить. Одно из решений, что с этими данными делать — это масштабирование базы данных.
Читать дальше →
Всего голосов 37: ↑34 и ↓3+31
Комментарии17

Введение в PHP 7: Что добавлено, что убрано

Время на прочтение12 мин
Количество просмотров300K
Одним из самых значительных событий, произошедших в мире PHP в 2015 году, стал выпуск PHP 7. Целых 10 лет отделяют его от выпуска первого релиза PHP с номером 5. С увеличением первой цифры в номере версии, в PHP 7 появилась масса новшеств, увеличилась и скорость работы.
Однако в седьмой версии была убрана устаревшая функциональность, что привело к некоторым проблемам с обратной совместимостью, затруднив перевод старых приложений на новую версию. Эта статья может послужить вам кратким руководством, если вы планируете написание новых или перевод своих существующих приложений на PHP 7.
Читать дальше →
Всего голосов 42: ↑39 и ↓3+36
Комментарии117

Что писать в блог компании: подробный гид по 15 видам постов

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

image

Какой контент повышает продажи, как его делать, и какие подводные камни. Cоздатель маркетинговой стартегии Amazon, NBC, GM, HP и основатель компании KISSmetrics Неил Патель дает советы, как рассказывать о продуктах и услугах в 15 разных форматах.

Материал перевела команда Newочём для Relap.io.
Читать дальше →
Всего голосов 10: ↑9 и ↓1+8
Комментарии1

Кейс NGINX: Как противостоять DDoS-атакам

Время на прочтение2 мин
Количество просмотров26K
Основная цель нашей работы состоит в том, чтобы сделать IaaS простым и понятным даже для тех, кто не сталкивался с ИТ-сферой. Поэтому мы проводим постоянную оптимизацию всех систем и рассказываем о том, что нам удалось сделать, в нашем блоге на Хабре.

Пара примеров:


Сегодня мы решили взглянуть на западный опыт и кратко проанализировать тему балансировки нагрузки. Нас привлекла заметка на тему работы с DDoS-атаками.

Читать дальше →
Всего голосов 34: ↑24 и ↓10+14
Комментарии5

Asterisk: ngrep, sipgrep, sngrep, protocol diagram

Время на прочтение2 мин
Количество просмотров25K
Это небольшая заметка о паре утилит, которые использую время от времени для работы с астериском (для отладки телефонии и просмотра SIP пакетов). Многие коллеги не знают о более простых утилитах, которые могли бы сэкономить минутку-другую рабочего времени.

Далее речь пойдет о ngrep, sipgrep, sngrep, js-sequence-diagrams
Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии10

Безопасность веб-ресурсов банков России

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

В нашей компании мы постоянно проводим различные исследования (список), выбирая интересную для нас тему и как итог — представляя общественности pdf с результатами.

Данная статья статья как раз из разряда таких исследований. Проводя работы по анализу защищенности мы приводим обычно очень схожие (общие для всех) советы, которым мало следует, некоторые best practices, которые или просто повышают общий уровень защищенности системы (например — применение CSP), или действительно позволяют предотвратить атаку.

Введение


Как известно, уровень безопасности системы определяется надежностью её самого слабого узла. На практике, после проведения анализа защищенности, основываясь на перечне найденных уязвимостей, выбирается одна брешь или целая цепочка и определяется наиболее проблемное звено. Сразу можно сказать, что зачастую правильно настроенная система может нивелировать риски существующей уязвимости. В ходе исследования мы выяснили, какие потенциальные векторы атак могут быть доступны злоумышленникам. Например, легко ли похитить сессионные данные пользователя при наличии уязвимости межсайтового скриптинга. Также нам было интересно посмотреть, насколько просто реализовать фишинговую атаку на пользователей банка. Пройдясь по этим пунктам и условно проставив “галочки”, злоумышленник может выстроить векторы дальнейших атак на банк и его пользователей.
Читать дальше →
Всего голосов 24: ↑19 и ↓5+14
Комментарии7

Эволюция структур данных в Яндекс.Метрике

Время на прочтение17 мин
Количество просмотров44K
Яндекс.Метрика сегодня это не только система веб-аналитики, но и AppMetrica — система аналитики для приложений. На входе в Метрику мы имеем поток данных — событий, происходящих на сайтах или в приложениях. Наша задача — обработать эти данные и представить их в подходящем для анализа виде.



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

Яндекс.Метрика работает с 2008 года — более семи лет. Каждый раз изменение подхода к хранению данных было обусловлено тем, что то или иное решение работало слишком плохо — с недостаточным запасом по производительности, недостаточно надёжно и с большим количеством проблем при эксплуатации, использовало слишком много вычислительных ресурсов, или же просто не позволяло нам реализовать то, что мы хотим.
Читать дальше →
Всего голосов 57: ↑55 и ↓2+53
Комментарии22

Забудьте про пресс-релиз – используйте лучше этот формат

Время на прочтение6 мин
Количество просмотров7.2K
Я устал от миллионов предпринимателей-технарей (что-то вас очень много появилось), и некоторых пиарщиков, которые вообще не имеют представления о том, как рекламировать свой проект мне и другим новостным сайтам. Их самореклама длинная и бессвязная. И они меня всё время спрашивают «могут ли они прислать дополнительную информацию». Да мне всё равно – как я узнаю, будет она интересной или нет, до того, как вы мне её отправите?!

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

Если б я принимал все эти предложения, мне бы не пришлось платить за еду или за кофе – но я бы и работой не смог заниматься. Конечно, всегда полезно попробовать сформировать отношения с журналистом, прежде чем рекламировать ему свою идею. И всегда лучше провести небольшое исследование, на какие темы этот журналист обычно пишет. Но вы меня не заинтересуете, если не будете сообщать сведения сжато и по делу.

Всё нижеизложенное применимо в большей степени к начинающим стартапам, которые понятия не имеют, как нужно общаться со СМИ. Удивительно, но часто я наталкиваюсь на пиарщиков, которые не в состоянии осветить все базовые вопросы в своём обращении. В любом случае, первые строчки их писем сводятся к: «Привет, мы существуем. Можете написать про нас пост на Techcrunch?». Глупость.

Самая лучшая реклама получается, когда ваша тема совпадает с текущими событиями. Например, Apple выпускает какие-нибудь наушники, а ваш стартап как раз имеет отношение к музыке, или к наушникам. В этот момент вам надо садиться СМИ на хвост – когда ваша история в тему, и вы можете пристроиться вслед горячим новостям. А не через 6 месяцев, когда все уже забыли про эти наушники.
Читать дальше →
Всего голосов 15: ↑13 и ↓2+11
Комментарии0

SIP-регистрация, транк, софтфон и другие страшные слова облачных АТС

Время на прочтение4 мин
Количество просмотров46K
Айти — необъятная отрасль знаний. Бывает, что пятнадцать лет делаешь разный софт, под разные операционки, на разных языках программирования. Вроде много всего знаешь. А потом шаг в сторону — а там Нарния SIP, RTP, SDP и PBX. Последние несколько месяцев я плотно занимаюсь голосовой телефонией и периодически ловлю себя на мысли, что для новичков эта область документирована не особо хорошо. Ну а если по какой-то теме еще не написано десять статей “xxx с нуля”, то это прекрасный повод написать Хабрапост для широкого круга читателей. Сегодня я расскажу небольшую, но интересную часть теорикрафта: как облачные системы телефонии взаимодействуют друг с другом и с телекомами. На примере VoxImplant, конечно же.

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

36 млн запросов в час, 10000+ постоянно работающих клиентов, на одном сервере, nginx+mysql

Время на прочтение5 мин
Количество просмотров114K
Сложилась ситуация, что участвую в проекте, который работает с достаточно большой нагрузкой. Как уже написал — 36 млн запросов в час. Я много чего прочитал и перепробовал за последний месяц, настраивая сервер; хотелось бы просто сжато и компактно выдать тезисно то, что работает хорошо в такой конфигурации.

Первое, что я заметил — множество советов как все настроить под большую нагрузку. Читайте их внимательно, обычно в тексте найдете, что речь про «высокую нагрузку» в 15-20 тысяч клиентов в сутки. У нас клиентов примерно миллион, активных, ежедневных.

У нас нет денег и мы все делаем за свой счет, поэтому экономим. Итог — весь миллион клиентов обслуживается на одном сервере, вот на таком — EX-60 на hetzner.
Читать дальше →
Всего голосов 111: ↑96 и ↓15+81
Комментарии102

Настраиваем Ubiquiti Wi-Fi и Cisco (Гостевой DHCP и VLANs)

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

В этой статье описан один из способов настройки гостевых и корпоративных беспроводных сетей используя решения Enterprise Wi-Fi Ubiquiti UniFi и Cisco Integrated Services Routers

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

Искусство командной строки

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


Вот уже как неделю английская версия the art of command line висит в секции trending на Github. Для себя я нашел этот материал невероятно полезным и решил помочь сообществу его переводом на русский язык. В переводе наверняка есть несколько недоработок, поэтому милости прошу слать пулл-реквесты мне сюда или автору оригинальной работы Joshua Levy вот сюда. (Если PR отправите мне, то я после того, как пересмотрю изменения отправлю их в мастер-бранч Джоша). Отдельное спасибо jtraub за помощь и исправление опечаток.

Enjoy!
Всего голосов 127: ↑122 и ↓5+117
Комментарии143

Brubeck — быстрый, statsd-совместимый агрегатор метрик от GitHub

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


История появления


Одной из главных целей команды разработчиков GitHub всегда была высокая производительность. У них даже существует поговорка: «it's not fully shipped until it's fast» (продукт считается готовым только тогда, когда он работает быстро). А как понять, что что-то работает быстро или медленно? Нужно мерять. Измерять правильно, измерять надёжно, измерять всегда. Нужно следить за измерениями, визуализировать всевозможные метрики, держать руку на пульсе, особенно, когда дело имеешь с высоконагруженными онлайн системами, такими как GitHub. Поэтому метрики — это инструмент, позволяющий команде предоставлять столь быстрые и доступные сервисы, почти без даунтаймов.

В своё время GitHub одними из первых внедрили у себя инструмент под названием statsd от разработчиков из Etsy. statsd — это агрегатор метрик, написанный на Node.js. Его суть состояла в том, чтобы собирать всевозможные метрики и агрегировать их в сервере, для последующего сохранения в любом формате, например, в Graphite в виде данных на графике. statsd — это хороший инструмент, построенный на UDP сокетах, удобный в использовании как на основном Rails приложении, так и для сбора простейших метрик, наподобие вызова nc -u. Проблема с ним начала проявляться позже, по мере роста количества серверов и метрик, отправляемых в statsd.
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии11

Свой облачный хостинг за 5 минут. Часть 1: Ansible, Docker, Docker Swarm

Время на прочтение11 мин
Количество просмотров137K
Cloud hosting

Привет Хабр! Последние 1.5 года я работал над своим проектом, которому был необходим надежный облачный хостинг. До этого момента я больше 10 лет занимался веб-программированием и когда я решил построить свой хостинг у меня были относительно поверхностные знания в этой области, я и сейчас не являюсь системным администратором. Все что я буду рассказывать может выполнить обычный программист в течение 5 минут, просто запустив набор сценариев для Ansible, которые я подготовил специально для вас и выложил на GitHub.
Читать дальше →
Всего голосов 64: ↑63 и ↓1+62
Комментарии42

Как сделать доклад на конференции, если вы этого никогда не делали

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

Для консультантов выступление на профильных конференциях — это часть работы, но вот я перестал быть консультантом, и оказалось, что для моих новых коллег выступление — это вызов. Это статья не про то, как «отгандапасить» аудиторию по всем правилам, цель — описать простой алгоритм подготовки выступления на конференции. Подготовить отличный доклад очень нетривиально, но сделать хороший доклад совсем не сложно.

Типичная схема организации выступления


Типичная схема выступления на конференции подразумевает следующие шаги:
  • Принятие решения о выступлении на конференции — примерно за 3 месяца до конференции.
  • Подача темы выступления и краткой аннотации (включая формат и длительность), а также резюме — примерно за 2 месяца до мероприятия.
  • Предоставление готовой презентации, расширенной аннотации, резюме и фотографии — за месяц и ближе к мероприятию.
  • Публикация точной программы — хорошо, если за неделю до мероприятия.
  • Собственно выступление.
  • Кулуарное общение и организация контактов на мероприятии.
  • Фиксация результатов выступления — в течение 3-х дней после мероприятия.

По желанию выступающего или по специфике мероприятия сроки могут пропорционально сокращаться.
Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии10

Верстка email рассылок от А до Я для чайников

Время на прочтение9 мин
Количество просмотров403K
Уже 3 с лишним года занимаюсь дизайном и версткой почтовых рассылок, которые ориентированы на англоязычных пользователей. За время работы перелопатили огромную кучу информации, перепробовали много вариантов верстки, набили достаточное количество шишек. Были найдены и исправлены типичные баги, которые в той или иной мере повторялись во всех почтовых клиентах. Также нашлись проблемы с некоторыми CSS свойствами — различные почтовые клиенты интерпретировали их по разному. Каждое письмо тестировалось на самых популярных почтовых клиентах: Gmail, Outlook, Yahoo, Android, iOS, MozillaThunderbird, Microsoft Outlook, The Bat. Рассылки ходят на сотни миллионов пользователей и приносят очень хорошие результаты. Итак, приступим к изучению.
Читать дальше →
Всего голосов 66: ↑62 и ↓4+58
Комментарии35
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность