Как стать автором
Обновить
34
2.5

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

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

Создаем свой аналог sqlite c нуля. Часть #1

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

Это цикл статей где мы создаем базу данных с нуля. За образец автор взял sqlite, так как простая база данных, где вся база данных храниться в одном файле и меньше фич по сравнению с mysql.

Мы ответим на эти вопросы: В каком формате данные будут сохранены(в памяти или на диске), Когда они должны сохраняться на диск? Почему первичный ключ(primary key) является единственным на одну таблицу?, и так далее

В этой части мы создадим REPL, которое принимает команды, обрабатывает ошибки.

Читать далее
Всего голосов 13: ↑12.5 и ↓0.5+12
Комментарии9

Terraform в России

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров8.8K

Сейчас в связи с санкциями публичный Terraform репозиторий https://registry.terraform.io блокирует доступ из подсанкционных регионов.

Как я пришёл к тому, что сделал опенсорс зеркало.

Читать далее
Всего голосов 19: ↑17.5 и ↓1.5+16
Комментарии17

Использование Docker in Docker в GitLab

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

Привет, Хабр! Давайте рассмотрим способы запуска Docker в Docker контейнере (вложенное использование Docker). Такой подход не является повседневным использованием, но иногда помогает решить задачи при построении пайплайна CI/CD в GitLab или Jenkins для создания образов Docker и их публикации в реджестри (реестре образов), при...

Читать далее
Всего голосов 21: ↑20 и ↓1+19
Комментарии12

Пишем на Go простой балансировщик

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

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

Поигравшись с профессиональными балансировщиками наподобие NGINX, я попробовал ради веселья создать простенький балансировщик. Написал я его на Go, это современный язык, поддерживающий полноценный параллелизм. Стандартная библиотека в Go имеет широкие возможности и позволяет писать высокопроизводительные приложения с меньшим количеством кода. К тому же для простоты распространения она генерирует единственный статически скомпонованный бинарник.
Читать дальше →
Всего голосов 79: ↑73 и ↓6+67
Комментарии32

Хост KVM в паре строчек кода. Примеры на C++ и на Python от эксперта Timeweb

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

Сегодня публикуем статью о том, как написать хост KVM. Мы увидели ее в блоге Serge Zaitsev, перевели и дополнили собственными примерами на Python для тех, кто не работает с языком С++.

KVM (Kernel-based Virtual Machine) — это технология виртуализации, которая поставляется с ядром Linux. Другими словами, KVM позволяет запускать несколько виртуальных машин (VM) на одном виртуальном хосте Linux. Виртуальные машины в этом случае называются гостевыми (guests). Если вы когда-нибудь использовали QEMU или VirtualBox на Linux, вы знаете, на что способен KVM.

Но как это работает под капотом?
Читать дальше →
Всего голосов 39: ↑39 и ↓0+39
Комментарии9

Внутри S3. Доклад Яндекса

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

Привет, я Паша, разработчик в Yandex Infrastructure, и я катаю гусей. С 2019 года я развиваю S3-хранилище как для внутренних пользователей Яндекса, так и для клиентов Yandex Cloud. А «гусём» называется наш бэкенд S3 API: он написан на Go, а из словосочетания Go + S3 получился goose. Возможно, вы также слышали про GeeseFS — это наш высокопроизводительный FUSE-клиент для S3. C его помощью вы можете на своём ноутбуке или виртуалке подмонтировать папку, которая будет работать с бакетом S3. 

Для чего нам «гуси» и прочая орнитология? Яндексовая инсталляция хранилища S3 хранит миллиарды файлов. Это огромные объёмы данных, а также метаданных. Для хранения метаданных мы научились использовать умное шардирование, и теперь сами управляем распределением занятого места и нагрузкой между шардами баз.

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

Читать далее
Всего голосов 82: ↑81 и ↓1+80
Комментарии52

Для начинающих программистов

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров15K

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

Читать далее
Всего голосов 22: ↑20 и ↓2+18
Комментарии57

Зачем и как хранить объекты на примере MinIO

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

Наша биг дата проанализировала Telegram-чаты, форумы и разговоры в кулуарах IT-мероприятий и пометила объектные хранилища как инструмент, который ещё не все осмеливаются использовать в своих проектах. Хочу поделиться с вами своим опытом в формате статьи-воркшопа. Если вы пока не знакомы с этой технологией и паттернами её применения, надеюсь, эта статья поможет вам начать использовать её в своих проектах. 

Начать хранить файлы
Всего голосов 28: ↑26 и ↓2+24
Комментарии8

MinIO Multi-Node Multi-Drive

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

Объектное хранилище — название отражает принцип работы, хранение данных в виде объектов с уникальным индексом.

Хочу расcказать о своем опыте работы с одним из них.Меня заинтересовал один конкретный продукт — MinIO, из‑за достаточно простой установки, настройки и не плохого функционала. Есть несколько вариантов инсталляции MinIO:

Читать далее
Всего голосов 6: ↑5 и ↓1+4
Комментарии3

Проектируем микросервисы с Reactive Manifesto: 4 принципа распределенных систем

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров2K

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

На помощь приходит Reactive Manifesto — документ, который обобщил опыт целого ряда компаний по созданию распределенных систем. Манифест формулирует главные принципы, на которые стоит опираться на этапе проектирования и эксплуатации таких систем.

Меня зовут Андрей Василевский, я системный архитектор в Lamoda Tech. В этой статье я на примерах из своей работы покажу, как применять Reactive Manifesto на практике. Статья будет полезна тем, кто только начал изучать распределенные системы, хочет закрепить теорию или тем, кто хочет структурировать проектирование микросервисов в своей компании.

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

Домашняя виртуальная лаборатория. Готовим собственный сервер виртуализации для обучения. 2. Выбираем сервер

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров12K

В предыдущем уроке мы проговорили для чего может понадобиться домашняя лаборатория и самое главное — кому она нужна. Допустим вы решили, что вам она нужна. Тут же встанет вопрос: «На чем строить эту виртуальную лабораторию?». Вопрос не такой простой, как может показаться на первый взгляд. Как минимум здесь два важных пункта, которые очень тесно связаны друг с другом:

Читать далее
Всего голосов 15: ↑13 и ↓2+11
Комментарии51

TOTP без смартфона

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров14K

Когда я решил избавиться от необходимости постоянно носить с собой смартфон, одной из проблем оказалась двухфакторная аутентификация (2FA, приложение Google Authenticator). Остаться без возможности авторизации на множестве сервисов было неприемлемо, нужна была альтернатива.

Беглый поиск вывел меня на утилиту oathtool: командная строка, POSIX, OSS — всё, как я люблю, проблема в принципе решена. Но, как и большинство CLI утилит, её удобно использовать в сочетании с другими утилитами, а для этого полезно написать скриптовую обвязку. Собственно этой обвязкой, а также опытом использования, я и решил поделиться.

Читать далее
Всего голосов 66: ↑66 и ↓0+66
Комментарии83

Когда пишешь приложения для себя

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров28K

require 'glimmer-dsl-libui'
include Glimmer
window('hello world').show

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

А как насчёт написать для своей семьи мобильное приложение? Это уже новый уровень.
Читать дальше →
Всего голосов 79: ↑77 и ↓2+75
Комментарии7

Надежный обход блокировок в 2024: протоколы, клиенты и настройка сервера от простого к сложному

Уровень сложностиСредний
Время на прочтение45 мин
Количество просмотров134K

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

Вы, наверняка, помните отличный цикл статей на Хабре в прошлом году от пользователя MiraclePtr, который рассказывал о разных методах блокировок, о разных методах обхода блокировок, о разных клиентах и серверах для обходов блокировок, и о разных способах их настройки (раз, два, три, четыре, пять, шесть, семь, восемь, десять, десять, и вроде были еще другие), и можете спросить, а зачем еще одна? Есть две основные причины для этого.

Читать далее
Всего голосов 506: ↑498 и ↓8+490
Комментарии351

Как сайты обнаруживают ботов по TLS

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров5.9K

Порой случается так что несмотря на то что мы в точности повторяем запрос к сайту из своего любимого HTTP клиента в ответ мы получаем ошибку. Но ведь в браузере запрос проходит! В чём же дело? В этой статье мы с этим разберемся!

Читать далее
Всего голосов 23: ↑22 и ↓1+21
Комментарии6

Защищаем сервис от перегрузки с помощью HAProxy

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

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

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

Читать далее
Всего голосов 18: ↑18 и ↓0+18
Комментарии0

Радикальная асинхронщина

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров10K

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

Читать далее
Всего голосов 20: ↑17 и ↓3+14
Комментарии53

Как вообще этот ваш CI CD настроить

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

Привет, Хабр!

Хочется рассказать о нашем опыте внедрения CI/CD в компанию. О том, как в целом работать с ним и как это работает у нас.

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

Приятного прочтения, всем peace!

Читать и так далее
Всего голосов 23: ↑17 и ↓6+11
Комментарии13

Анонимная P2P-база знаний, где никто не может подделать чужое авторство | Магия асимметричных ключей на практике

Уровень сложностиСредний
Время на прочтение31 мин
Количество просмотров10K


На днях, как это обычно и бывает перед сном, мой мозг решил, что было бы очень забавно перед экзаменом не спать, а заняться брейнштормом. Как результат я получил слитую сессию и безумное желание сделать свой P2P WEB 228.0 — ну вы знаете…

Вот вы никогда не задумывались, что Tor является весьма экстраординарным способом преодоления трансляторов сетевых адресов? По сути, он позволяет создавать туннель между двумя любыми удалёнными узлами, находящимися за NAT, выдавая им уникальные onion-адреса из очень большого диапазона.

Аналогичную же задачу решает переход на ipv6, но при этом он требует поддержки со стороны самого транслятора, в то время как Tor абсолютно самостоятелен, хоть он и не является настоящим p2p.

Чисто технически (при должном monkey patch`инге) можно даже заставить его работать как пробрасыватель портов для RDP, онлайн-игр и Vиртуальных Pриватных туннелей, которые нынче нельзя называть.
Читать дальше →
Всего голосов 59: ↑59 и ↓0+59
Комментарии32

Личное облако на Proxmox

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров19K

В прошлой статье (https://habr.com/ru/articles/794508/) я писал как поставить Proxmox 8 на Orange Pi 5(b). Это даже получилось, но я уперся в то, что производитель железки не выпускает свежие ядра под нее. Для железки есть 5.10.160 и оно устарело для Proxmox 8. Виртуалки работают, но есть проблемы с фаерволом. Производитель обещает вот-вот выпустить новое, но ждать я не стал и решил сделать инфраструктуру по другому. О чем и напишу. Получается уже цикл статей. Эта будет описывать цель и первые шаги к ней.

Читать далее
Всего голосов 26: ↑23 и ↓3+20
Комментарии59
1
23 ...

Информация

В рейтинге
1 046-й
Зарегистрирован
Активность