Вы больше не можете создать сервер авторизации с помощью @EnableAuthorizationServer, потому что Spring Security OAuth задеприкейтили, а проект Spring Authorization Server всё ещё экспериментальный? Выход есть! Напишем авторизацию своими руками... Что?.. Нет?.. Не хочется? И вообще получаются какие-то костыли и велосипеды? Ну ладно, тогда давайте возьмём уже что-то готовое. Например, Keycloak.
инженер широкого профиля
Алгоритмы сортировки и их производительность
Здравствуйте, давно читаю Хабр и все хотел написать кому-нибудь статью, но не знал с чего начать и о чем писать. Но решил что тянуть кота за причинное место. Надо просто взять и написать обзор о чем то что я знаю и что будет просто для начало. Поэтому решил описать алгоритмы сортировки в размере 37 штук. Я понимаю, что на Хабре есть подобные статьи, одна постараюсь их добавить количеством алгоритмов и приведением небольшого числа графиков.
Разбираемся с Redis
Этот материал представляет собой глубокое исследование всего, что связано с Redis. В частности — речь пойдёт о различных способах организации хранилищ Redis, о постоянном хранении данных, о форках процессов.
Развертывание GitLab CE в контейнерах Docker за обратным прокси
В этом руководстве мы рассмотрим, как быстро поднять свой GitLab сервер на контейнерах Docker, находящийся за обратным прокси сервером NGINX. Предполагается, что у вас уже установлен движок контейнеризации приложений Docker и Compose, а также обратный прокси сервер NGINX.
WireMock – швейцарский нож в арсенале тестировщика. Часть 1
Всем привет! Меня зовут Анатолий Калмыков, и я отвечаю за качество создаваемых решений в «Ростелеком ИТ». Сегодня я расскажу вам про WireMock – это одновременно и утилита, и библиотека на Java для создания HTTP заглушек над веб-сервисами. Он создает HTTP-сервер, к которому мы могли бы подключиться, как к реальному веб-сервису.
Статья получилась длинной, поэтому в первой части я расскажу, что такое WireMock и в каких случаях его необходимо использовать, как его разворачивать и настраивать, как правильно сопоставлять запросы с заглушками и как использовать журналирование. Сегодня речь пойдет исключительно о WireMock в амплуа утилиты и standalone http-сервер, который можно настроить как душе угодно, не зная языков программирования.
Fluent Generics in C#
Дженерики - мощная фича доступная во многих статически типизированных языках программирования. С их помощью можно писать код, который постоянно работает со множеством разных типов, делая упор на их общие особенности, нежели на сами типы. Они позволяют создавать гибкие и переиспользуемые компоненты без нужды в дублировании кода и жертвы безопасности типов.
Несмотря на то, что дженерики давно в C#, мне всё же удаётся найти новые интересные способы их применения. Например, в одной из моих предыдущих статей я написал об уловке, позволяющей добиться return type inference, что может облегчить работу с контейнерными union types.
Недавно, мне также довелось работать над кодом, использующим дженерики. Тогда передо мной встала нетипичная задача: было необходимо определить сигнатуру, где все типовые параметры опциональны и могут использоваться друг с другом в произвольных комбинациях. Первая попытка подступиться к решению заключалась в манипуляциях с перегрузками типов, однако такой подход оказался довольно непрактичным и не увлекательным.
После нескольких экспериментов, я нашёл способ решить проблему элегантно, используя подход схожий с паттерном проектирования fluent interface, который был применён не к объектам, а к типам. Мой подход предлагает domain-specific language, который позволяет разработчику построить нужный тип за несколько логических шагов, последовательно его "конфигурируя".
В данной статье я расскажу, что из себя представляет этот подход и как его можно использовать для того, чтобы сложные обобщённые типы писать просто.
Blue-green deployment, canary release: рецепт приготовления безрисковых релизов
Банковские сервисы по умолчанию не должны падать, и даже прилечь на секундочку, и даже когда мы обновляемся. Ведь даже секунды могут привести к потерям с множеством нулей. Чтобы этого не произошло мы используем blue-green deployment.
Простым языком blue-green deployment - способ развертывания, который позволяет обновлять приложения не отклоняя ни одного запроса, без остановок. Как это сделать, расскажу и покажу на примере. Статья подойдет DevOps-инженерам и бэкенд-разработчикам, особенно на HighLoad-проектах, а также моим будущим коллегам, как методичка по безрисковым релизам, чтобы прод не падал каждые 2 недели по графику релизов (а такое тоже бывало).
Wildcard-сертификат Let's Encrypt для внутренних сервисов в Kubernetes-кластере
У вас есть кластер, в котором хочется разместить как можно больше рабочих сервисов и продуктов для внутреннего использования, ибо удобно: систему управления версиями, репозиторий Docker-образов, S3-хранилище, базы данных, тестовые среды и т.д. Но есть "но": многие из них, как например, репозиторий Docker-образов, могут работать только с использованием TLS. У вас есть два пути: получить сертификат от одного из сертификационных центров, платных или бесплатных, вроде Let's Encrypt, или сгенерировать самому. Устанавливать на каждого клиента сертификат нашего "левого" самопровозглашённого центра не хочется, поэтому самоподписанный сертификат отпадает. Денег платить каждый год не хочется, поэтому выбираем Let's Encrypt. Но и тут есть проблема (помимо необходимости автоматизации перевыпуска сертификата не реже раза в три месяца): внутренние сервисы нельзя выставлять в публичную сеть, а значит и HTTP-01 вариант подтверждения владения доменом нам недоступен. Остаётся только DNS-01 метод, который имеет свои подводные камни.
В данной статье я расскажу о своём опыте автоматизации выпуска/перевыпуска wildcard-сертификата для домена второго уровня (wildcard, чтобы два раза не вставать, но можно выпускать сертификаты и для каждого отдельного поддомена) для использования внутренними сервисами, расположенными в Kubernetes-кластере, с помощью cert-manager и бесплатного сервиса поддержки DNS-зон Яндекс.Коннект.
Powered by ZeroTier. Практическое руководство по строительству виртуальных сетей. Часть 2
Это не заняло много времени, хотя каждый из этих узлов и добавлялся в сеть по-одному. А как быть, если к виртуальной сети ZeroTier нужно подключить не один, а все находящиеся в физической сети узлы? Такая задача встала однажды передо мной, когда я озадачился вопросом организации доступа из виртуальной сети к сетевым принтеру и маршрутизатору.
Попробовал использовать описанный выше способ — получилось не быстро и не везде просто. Например, сетевой принтер — просто так не подключишь. Mikrotik — ZeroTier не поддерживает. Что делать? Много погуглив и проанализировав матчасть, я пришёл к выводу, что нужно организовывать сетевой мост.
Сетевой мост (также бридж с англ. bridge) — сетевое устройство второго уровня модели OSI, предназначенное для объединения сегментов (подсети) компьютерной сети в единую сеть.
Историей о том, как я это сделал, я и хочу поделиться в этой статье..
Powered by ZeroTier. Практическое руководство по строительству виртуальных сетей. Часть 1
Продолжая рассказ о ZeroTier, от теории, изложенной в статье «Интеллектуальный Ethernet-коммутатор для планеты Земля», перехожу к практике, в которой:
- Создадим и настроим частный сетевой контроллер
- Создадим виртуальную сеть
- Настроим и подключим к ней узлы
- Проверим сетевую связность между ними
- Закроем доступ к GUI сетевого контроллера извне
Интеллектуальный Ethernet-коммутатор для планеты Земля
«Создать решение (решить проблему) можно несколькими способами, но, не всегда самый дорогой или/и популярный способ — самый эффективный!»
Преамбула
Года три назад, в процессе разработки дистанционной модели аварийного восстановления данных, я столкнулся с одним, незамеченным сразу, препятствием — недостатком информации о новых оригинальных решениях для виртуализации сетей в комьюнити-источниках.
-> Введение. Теоретическая часть. Интеллектуальный Ethernet-коммутатор для планеты Земля
-> Практическое руководство по строительству виртуальных сетей. Часть 1
-> Практическое руководство по строительству виртуальных сетей. Часть 2
DDD, Hexagonal, Onion, Clean, CQRS… как я собрал всё это вместе
Эта статья — часть «Хроники архитектуры программного обеспечения», серии статей об архитектуре ПО. В них я пишу о том, что узнал об архитектуре программного обеспечения, что я думаю об этом и как использую знания. Содержание этой статьи может иметь больше смысла, если вы прочитаете предыдущие статьи в серии.
После окончания университета я начал работать учителем средней школы, но несколько лет назад уволился и пошёл в разработчики программного обеспечения на полный рабочий день.
С тех пор я всегда чувствовал, что мне нужно восстановить «потерянное» время и узнать как можно больше, как можно быстрее. Поэтому я стал немного увлекаться экспериментами, много читать и писать, уделяя особое внимание дизайну и архитектуре программного обеспечения. Вот почему я пишу эти статьи, чтобы помочь себе в обучении.
Подсвечиваем проблемные зоны на коленке с SonarQube и Docker Desktop
Привет, меня зовут Андрей Голяков, я руководитель бэкенд разработки компании Бимейстер.
Хочу поделиться опытом быстрого подсвечивания возможных проблемных зон объёмного и малознакомого кода.
Как попробовать ELK-стек за один вечер и наконец-то перестать grep'ать логи
Как часто вы, в очередной раз матерясь и grep'ая простыню текста, говорили себе, что вот-вот перестанете хранить логи в файлах и переедете на ELK?
Я - часто, а виной тому кажущаяся сложность настройки всей системы в целом.
Наверное, так оно и есть, но для того, чтобы складывать логи и искать по ним, как оказалось, много ума не нужно.
Дисклеймер: я не знаю всех тонкостей ELK стека и возможно данный сетап не подойдет для огромной компании с сотней проектов и терабайтами логов, но там и без этой статьи все знают. Судите строго, давайте советы мне и другим в комментариях - я буду только рад.
В данной статье мы: разберем компоненты ELK стека и развернем его одной командой; законфижим Filebeat и научим его собирать и отправлять логи; рассмотрим интерфейс Kibana и научимся искать по логам; настроим Kibana и разберемся с правами доступа; поговорим об индексах, шаблонах и об автоудалении индексов (неактуальных логов);
.NET 6: PriorityQueue
В .NET 6 появилась новая коллекция — PriorityQueue<TElement,TPriority>. До этого очереди с приоритетами уже были в .NET, но только в виде внутренних классов — они использовались под капотом разных механизмов в WPF, Rx.NET и в других частях фреймворка.
Но в .NET 6 PriorityQueue стала новой коллекцией, которой теперь можно пользоваться из клиентского кода. Давайте посмотрим, что предлагает эта очередь, как она устроена внутри и насколько быстро работает. Под катом будет постепенное погружение: от примеров использования в коде к введению n-арные деревья.
Технология CRUD-матрицы. Практический опыт
Технология CRUD-матрицы — это хороший инструмент для каждого члена Agile-команды на протяжении всего жизненного цикла продукта. CRUD-матрица позволяет наладить адекватный диалог с клиентом и выявить дублирование функционала, а также устранить противоречивость модели. Что касается оценки времени, то в этом моменте CRUD-матрица значительно уступает такому инструменту, как “planning poker”, который позволяет провести адекватную оценку с учетом объективных причин.
Пример микросервисной архитектуры с Saga на MassTransit
Привет, Хабр! В общем работаю я значит Архитектором Программных Решений. Мы тут монолиты на микросервисы переводим поэтому я решил для наших разработчиков написать пример проекта с сагой и за одно может оно и вам понадобиться поэтому выложил сюда. Статья будет дополняться по мере поступления вопросов от вас и от наших разработчиков
NBomber как альтернатива JMeter для .NET разработчика
Как и многие разработчики, впервые столкнувшиеся с нагрузочным тестированием, я начал с JMeter. Для ознакомления и простых сценариев JMeter полностью меня устраивал, но с усложнением задач и потребностью в большем контроле я начал задумываться о поиске более удобной альтернативы. Особенно хотелось чтобы инструмент легко адаптировался или уже был адаптирован под экосистему .NET.
В этой статье мы рассмотрим NBomber как легкую для освоения альтернативу JMeter, а также постараемся ответить на вопрос "Почему я должен проводить нагрузочное тестирование именно с NBomber ?".
Эта статья предназначена для .NET разработчиков, которые хотят пополнить свой инструментарий удобным инструментом для нагрузочного тестирования, а также тем кто рассматривает альтернативы JMeter для экосистемы .NET.
Развёртывание Kubernetes-кластера на домашнем сервере
Дано: домашний сервер под управлением Debian 11 с установленным гипервизором Xen.
Требуется: развернуть Kubernetes-кластер для получения опыта, связанного с настройкой и управлением Kubernetes-кластера, и дальнейшего его использования для разработки и хостинга персональных проектов.
Развёртывание Debian и Xen, а также миграция с Hyper-V на Xen нескольких Windows-виртуальных машин описана в моей статье Миграция домашнего сервера с Hyper-V на Xen Project на Debian. В ней также описана конфигурация моей сети.
В данной статье я исхожу из того, что читатель имеет представление о том, что такое Kubernetes, как он работает, из каких компонентов состоит и знаком с необходимой терминологией. Многие идеи и код я брал из статьи Разворачиваем среду для работы с микросервисами. Часть 1 установка Kubernetes HA на bare metal (Debian), но местами адаптировал под свои нужды и окружение. Задача данной статьи дать читателям готовое решение, требующее минимальных усилий для повторения и, вместе с тем, не требующее дополнительных инструментов (вроде Ansible или Terraform), а также показать новичкам некоторые моменты работы с Linux, Kubernetes и используемыми пакетами. Повествование разбито на несколько шагов, каждый из которых заключается в запуске скрипта и нескольких ручных командах.
Миграция домашнего сервера с Hyper-V на Xen Project на Debian
В данной статье я опишу свой опыт миграции домашнего сервера на гипервизоре Hyper-V, установленного на Windows Server 2012 R2, на гипервизор Xen Project 4.14, установленного на Debian 11. Я ни в коем случае не являюсь экспертом в Linux, всю свою карьеру в основном использовал операционные системы Microsoft, но времена и технологии меняются, и нужно соответствовать.
Зачем мне нужен домашний сервер? Для меня — это во многом песочница, где я могу исследовать и пробовать технологии, которые не могу потестировать на десктопе. Помимо этого, конечно, он несёт и утилитарные функции: контроллер домена, файловый сервер, хостинг для сайта моей жены, TFS-сервер (да, до сих пор, но собираюсь поменять на GitLab) и др. Всё это разложено по виртуалкам для более эффективного управления и использования ресурсов. Разворачивал я Hyper-V версию лет 7 назад, с тех пор существенных изменений не производил, однако, какое-то время назад, решил мигрировать его на Linux. Наконец-то у меня дошли руки до этого. В этой статье собран мой опыт «не совсем новичка» в Linux (ранее опыт ограничивался в основном использованием Ubuntu в WSL) и платформах виртуализации (Hyper-V, VMWare).
Для меня всё, описанное в данной статье, — прежде всего, мой практический опыт, без которого любая теория — ничто. Для новичков, думаю, подробность повествования даст хорошее понимание принципов работы с Linux.
Информация
- В рейтинге
- Не участвует
- Откуда
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Дата рождения
- Зарегистрирован
- Активность