Обновить
29
0.4

backend developer, java, go

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

MathOps или математика в мониторинге

Время на прочтение18 мин
Охват и читатели12K
То, о чем я хочу рассказать, началось 30 декабря 2010 года, когда компания Etsy выложила на GitHub первый коммит своей системы StatsD. Эта, сейчас уже, суперпопулярная система, написанная на JavaScript (хипстеры ликуют), в которую можно отправлять метрики, замеры исполнения кусков вашего кода, а она их агрегирует и отправляет уже агрегированными в систему хранения time-series.



На фоне популярности StatsD и других time-series систем появилась идея «Monitor Everything»: чем больше различных вещей в системе измеряется, тем лучше, потому что в случае неожиданной ситуации будет возможно найти нужную, уже собранную метрику, которая позволит во всем разобраться.

Давайте вообще все, что можно, мониторить — и будет классно!

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

И так получилось, что есть много проблем со всем этим, про которые, собственно, нам и расскажет Павел Труханов ( tru_pablo ).

Практические советы по устранению утечек памяти в Go

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели23K

В этой статье я расскажу, что делать при обнаружении утечки в Go-приложении: чем могут быть вызваны утечки и с чего начать поиск источника проблемы.

Причины утечек

Для начала перечислим возможные причины утечки памяти:

1) Утечка горутин

При утечки горутины утекают также переменные, которые находятся в области ее видимости. Кроме того, стек горутины выделяется в куче

2) Бесконечная запись в глобальные переменные

Приложение может бесконечно писать в какую-нибудь глобальную мапу, в результате чего память будет утекать. Один раз я пытался найти утечку у приложения, которое использовало gorilla context. Особенность этой библиотеки в том, что при обработке http запроса она сохраняет указатель на запрос в глобальную мапу и не удаляет ключ мапы без явного указания в пользовательском коде. Начиная с Go 1.7, разработчики gorilla рекомендуют использовать http.Request.Context()

Читать далее

5 паттернов параллельного программирования в GO, которые сделают ваш следующий проект лучше

Время на прочтение10 мин
Охват и читатели25K

Параллельное программирование — одна из самых интересных фич, которые может предложить вам Golang. Идея, лежащая в основе параллелизма, заключается в одновременной работе над несколькими разными процессами, что помогает избежать застревания в задачах, выполнение которых занимает много времени.

Читать далее

Политика как код на Kubernetes вместе с Kyverno

Время на прочтение6 мин
Охват и читатели5.3K

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

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

Читать далее

Убьет ли HTTP/2 лонг поллинг и вебсокеты?

Время на прочтение8 мин
Охват и читатели16K

В новом тексте по итогам Ruby Russia 2022 Full-Stack разработчик и консультант Learning Tapestry Александр Уланов рассуждает, есть ли у Server-sent events потенциал обойти websocket-ы и long polling.

Читать далее

Домашняя приточная вентиляция малыми средствами

Время на прочтение14 мин
Охват и читатели115K

Последнюю пару лет я живу с приточной вентиляцией в городской квартире — и очень рад этому факту.

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

Коротко о главном:
• наружное расположение компонентов ради минимального уровня шума;
• минимум ручного труда в изготовлении и монтаже;
• общий ценник существенно ниже 50 тысяч рублей (ниже 30 тысяч — на момент изготовления два года назад).

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

Читать далее

Дриставрация стиков портативных игровых консолей — маленькое how-to

Время на прочтение6 мин
Охват и читатели7K

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


Последний месяц мои читатели и подписчики основательно решили меня подсадить на PlayStation. Сначала Фанат Мелины из Elden Ring подарил мне PSP E1008 Street, которую мы с вами оживили в соответствующей статье, затем подписчик Сашка Кондрат, который подарил мне PSVita из далекого края России и мой друг детства, который недавно написал "у меня есть подгон для тебя, нужны две PSP - 2008 и 1008?". Однако все консоли так или иначе требовали ремонта - такова тематика моего блога! И сегодня я покажу вам небольшую дриставрацию сразу двух консолей!

Читать далее

Создаем личное файловое облако легко и просто (и дешево)

Время на прочтение13 мин
Охват и читатели224K

А сегодня мы с вами быстро и решительно легко и просто поднимем свое личное файловое облако типа Google Drive или Яндекс.Диск, а если повезет, то еще и очень дешево.

Зачем? Ну, например, потому что не хотим зависеть от корпораций с их кабальными лицензионными соглашениями и сменой условий задним числом. Или потому что нам хочется приватности. Или просто потому что можем. А бонусом на нашем сервере вы потом сможете еще установить VPN или прокси для доступа к запрещенным сайтам, или поднять простенький веб-сайтик.

Я специально будут рассказывать все максимально подробно и пошагово, чтобы даже люди без большого опыта системного администрирования смогли все повторить. В наше время, благодаря развитому инструментарию, такому как docker и snap, установить и настроить все что нужно можно очень быстро всего лишь несколькими командами.

Читать далее

Обработка исключений в Java в функциональном стиле. Часть 2

Время на прочтение4 мин
Охват и читатели9.1K

Обработка исключений в Java в функциональном стиле. Часть 2.


В предыдущей статье была рассмотрена функциональная обработка исключений с помощью интерфейса Try<T>. Статья вызвала определенный интерес читателей и была отмечена в "Сезоне Java".


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

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

Golang-дайджест № 20 (1 – 31 августа  2022)

Время на прочтение3 мин
Охват и читатели7.7K

Свежая подборка новостей и материалов

Интересное в этом выпуске

Выпущена версия 1.19, GoLand Roadmap 2022.3, выпущен GoLand 2022.2, алгоритмы, реализованные в Go

Читать далее

Средние highload паттерны на Go

Время на прочтение20 мин
Охват и читатели15K

Привет, Хабр! Меня зовут Агаджанян Давид и ранее я опубликовал статью «простые highload паттерны на Go», в которой были рассмотрены простые подходы увеличения пропускной способности отдельно взятого экземпляра приложения без хардкора. Мне импонируют простые подходы, так как over engineering подходы требуются в исключительных проектах, и то чаще всего только в отдельно взятых подсистемах, в остальном можно воспользоваться давно известными лучшими практиками.

Читать далее

Глубокое погружение в Java Memory Model

Время на прочтение53 мин
Охват и читатели260K


Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.


В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.

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

Холостые циклы в Java

Время на прочтение19 мин
Охват и читатели22K

Привет, сегодня поговорим о тонкостях реализации холостых циклов (холостого ожидания) в Java. Эта задача встречается нечасто: за девять с небольшим лет работы я столкнулся с ней лишь пару раз. Тем не менее, тема видится интересной и по ней есть что сказать, так что добро пожаловать! Исходный код примеров доступен здесь.

Читать далее

Go To Memory

Время на прочтение9 мин
Охват и читатели75K

Как и многие языки, Go часто использует магию под названием хип (heap). Обычно, когда мы пишем наши джейсоно-гонятели, мы просто не задумываемся об этом, хоть и знаем, что это «где-то есть». Давайте попробуем заглянуть в кроличью нору поглубже и увидеть не только то, какими методами аллокатор Go старается облегчить программисту жизнь, но и то, из чего он состоит в целом.

Меня зовут Антон Киреев, я бэкенд-разработчик с опытом работы больше 11 лет. В настоящее время работаю техлидом в Авито. В жизни мне нравятся две вещи: приносить пользу своей работой и проводить свободное время с семьёй. Именно поэтому я люблю делать что-то быстро, но качественно, а потом отдыхать. Для этого я постоянно учусь и пытаюсь докапываться до сути вещей. Сегодня поговорим, как наша любимая Гошечка работает с памятью.

Читать далее

Имплементируем WebSocket протокол на Go

Время на прочтение9 мин
Охват и читатели32K

Статья для тех, кто хочет познакомиться с устройством технологии WebSocket или языком программирования Go.

Или узнать с какой простотой Go стал одним из самых популярных языков программирования для написания сетевых приложений.

Читать далее

Go, Allure и HTTP, или Как мило тестировать HTTP-сервисы на Go

Время на прочтение10 мин
Охват и читатели17K

Привет! Меня зовут Сергей, я старший разработчик в Ozon и раньше вообще не был замечен в QA.

Все мы привыкли к лёгкому написанию тестов на Python и Java — это основные языки автотестировщиков с богатым инструментарием утилит и всего, что упрощает жизнь. Что нужно для написания автотестов для HTTP-сервиса на Python или Java? Гугл, бутылочка крафта и два часа времени. 

А как быть в случае с Go? Как раз на нём мы в большинстве случаев пишем микросервисы. И если тесты написаны на другом языке, разработчики не могут внести в них свой вклад или отревьюить их. Поэтому внутри Ozon активно развивается Go-сообщество QA, и этим ребятам тоже нужно тестировать HTTP-сервисы и проверять отчёты в Allure. Как настоящие сварщики мы подумали: «Если чего-то не хватает, нужно написать своё». Сказано — сделано: встречайте опенсорс-библиотеку CUTE в BDD-стиле, которая облегчает тяготы создания автотестов и упрощает переход на Go. Главные фичи: создание HTTP-тестов, возможность реализовывать проверки из коробки, Allure-отчёты и низкий порог входа. Инструкция — под катом.

Читать далее

HTTP роутер для Go с обработкой ошибок

Время на прочтение3 мин
Охват и читатели5.5K

BunRouter это чрезвычайно быстрый Golang router с уникальной комбинацией возможностей: мидлвары, обработка ошибок, минималистическое и совместимое АПИ.

Читать далее

Сам себе PKI: Теория на примере Let’s Encrypt. (Статья 1)

Время на прочтение9 мин
Охват и читатели29K

За последние годы инфраструктура приватных ключей PKI (Public Key Infrastructure) незаметно окружила нас со всех сторон:

- Большинство сайтов в сети Интернет используют HTTPS протокол. Для его работоспособности необходимо получать сертификаты из удостоверяющих центров (Certificate Authority)

- Компании организуют доступ к своей IT инфраструктуре и информационным ресурсам с помощью ключей и сертификатов, которые сотрудники получают из специальных систем.

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

Давайте разберемся как работают системы PKI, т.к. они еще долго будут актуальны для обеспечения аутентификации и безопасной передачи данных. В данной статье рассмотрим теорию и в качестве примера PKI возьмём самую известную в мире реализацию PKI - HTTPS протокол в сети Интернет. В качестве удостоверяющего центра будем использовать бесплатный Let's Encrypt. В следующей статье "Сам себе PKI: Практика на примере OpenSSL и CA Smallstep" перейдем к практике и организуем безопасную передачу данных на основе TLS протокола.

На схеме упрощенная система PKI для организации HTTPS в сети Интернет.

Читать далее

Go ebiten: разбираемся с рендерингом и позиционированием текста

Время на прочтение11 мин
Охват и читатели8.2K

Перед вами первая заметка на тему разработки игр на Go с использованием библиотеки ebiten (также известный как Ebitengine).


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


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

Как работает неточное сравнение строк

Время на прочтение7 мин
Охват и читатели34K

https://fakt309.github.io/thisisthewall/

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

Но вот что если мы хотим не просто получать дискретное значение (true / false), а дифференцированное, например в процентах. Ведь согласитесь строки test и testing гораздо ближе к друг другу, чем test и abcd. Для данной проблемы существует множество решений, мы поговорим о самый популярных алгоритмах (также об их модификациях):

Расстояние Хэмминга

Расстояние Левенштейна

Сходство Джаро — Винклера

Коэффициент Сёренсена

Читать далее

Информация

В рейтинге
2 380-й
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность