System Design. №1 Требования
Писала тут, что начала проходить курс по SD. Решила вести собственные конспекты, чтобы лучше укладывалось в голове.
🍊 Первое - нужно ответить себе на вопрос:
Отсюда определить фкц и нефкц требования:
✨ Фкц - это фичи. Которые будут нужны, даже если у нас суперкомпьютер с неограниченными ресурсами и ничего никогда не ломается.
✨ Нефкц - вопросики к ограничениям системы, большинство замеряются метриками
Основные вот эти:
1. Производительность и масштабируемость
⚫️ Requests/Queries per second (RPS/QPS) - запросы в сек
⚫️ Connections per second (CPS) - соединения к серверу в сек
⚫️ Throughput - пропускная способность в байтах/сек
⚫️ Latency - задержка отклика (сеть, диск) в мс. Оптимально < 100ms
2. Отзывчивость
⚫️ First Contentful Paint (FCP) - время загрузки первого элемента на страничке. Оптимально < 1.8s
⚫️ Largest Contentful Paint (LCP) - время загрузки самого большого элемента на страничке. Оптимально < 2.5s
⚫️ Time To Interactive (TTI) - время загрузки всех интерактивных элементов
⚫️ Time To First Byte (TTFB) - время получения первого байта видоса
⚫️ Bitrate - скорость передачи данных, бит/с
3. Надёжность и доступность
⚫️ Uptime - процент времени работы системы
⚫️ Availability - процент времени работы системы с учетом ее обслуживания, т.е. эта метрика может быть ниже
⚫️ Mean time between failures (MTBF) - время работы между отказами
⚫️ Mean Time To Repair (MTTR) - время восстановления после сбоя
4. Безопасность
Это соблюдение стандартов безопасности, защита от несанкционированного доступа, шифрование и т.д.
Тут можно потыкаться в метриках и потестить сайтики
#system_design
Писала тут, что начала проходить курс по SD. Решила вести собственные конспекты, чтобы лучше укладывалось в голове.
Зачем нужна эта система?
Отсюда определить фкц и нефкц требования:
Основные вот эти:
1. Производительность и масштабируемость
2. Отзывчивость
3. Надёжность и доступность
4. Безопасность
Это соблюдение стандартов безопасности, защита от несанкционированного доступа, шифрование и т.д.
Тут можно потыкаться в метриках и потестить сайтики
#system_design
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3🤔1
Как я забила всю оперативку
⭐️ Нужно было переложить табличку из кх в s3 через Airflow. Табличка небольшая, проблем быть не должно
Идея №1
1️⃣ Считать табличку из кх в pandas dataframe
2️⃣ Сохранить датафрейм в .csv файл
3️⃣ Залить в s3 через либу boto3
Пока тестирую и отлаживаю на 10 строках - все ок. Убираю лимит - и Airflow становится очень плохо, он не прогружается и не дает завершить таску 🥲
Смотрю в источник - там 12млн строк. Неужели pandas не может столько переварить? Очевидно, надо искать другой способ
Идея №2
Я раньше сталкивалась, что в кх можно прям запросом читать из s3. Вот так:
Оказывается, это работает и на запись!
В эту функцию можно добавлять разные настройки. Из полезного - разбить вашу табличку на несколько файликов. Примерно такой код у меня работает:
Что тут есть?
⚫️ {_partition_id} – это переменная, которая пробрасывается сама. Просто счетчик от 0
Если вставлять этот код в строку, нужно обязательно обрамить скобками {} дважды – иначе s3 воспринимает это по-другому и падает с ошибкой
⚫️ .gz – алгоритм компрессии файликов
⚫️ CSVWithNames – мы включаем названия столбцов первой строкой
⚫️ PARTITION BY [столбец] - можно выбрать существующий или просто задать рандомно
И этот метод работает просто в разы быстрее. Теперь табличка на 12 млн строк пишется за несколько секунд🙂
Идея №1
Пока тестирую и отлаживаю на 10 строках - все ок. Убираю лимит - и Airflow становится очень плохо, он не прогружается и не дает завершить таску 🥲
Смотрю в источник - там 12млн строк. Неужели pandas не может столько переварить? Очевидно, надо искать другой способ
Идея №2
Я раньше сталкивалась, что в кх можно прям запросом читать из s3. Вот так:
SELECT * FROM s3()
Оказывается, это работает и на запись!
INSERT INTO FUNCTION s3()
SELECT * FROM your_table
В эту функцию можно добавлять разные настройки. Из полезного - разбить вашу табличку на несколько файликов. Примерно такой код у меня работает:
INSERT INTO FUNCTION
s3(
'filename_{{_partition_id}}.csv.gz',
'S3_ACCESS_KEY',
'S3_SECRET_ACCESS_KEY',
'CSVWithNames'
)
PARTITION BY rand % 10
SELECT * FROM your_table;
Что тут есть?
Если вставлять этот код в строку, нужно обязательно обрамить скобками {} дважды – иначе s3 воспринимает это по-другому и падает с ошибкой
И этот метод работает просто в разы быстрее. Теперь табличка на 12 млн строк пишется за несколько секунд
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21 19👍3
Я прочитала DAMA-DMBOK
Это книжка на 830 страниц - "Свод знаний по управлению данными". Мне ее как-то советовали прочитать, и вот полтора месяца я упорно это делала📖
Вкратце эта книга про фреймворк DAMA (Data Management Association). Про то, как должно быть. Он включает такие аспекты:
🔵 архитектура и моделирование данных
🔵 хранение
🔵 безопасность
🔵 интеграции
🔵 основные данные
🔵 метаданные
🔵 качество данных
и еще несколько (на картинке - колесо DAMA)
Я по ходу чтения записывала интересные, новые для меня моменты, буду постепенно делиться)
❔ Зачем это все нужно?
Одни и те же данные складываются по-разному, называются по-разному. Одинаковые метрики считаются по-разному.
Глобальная цель - чтобы я из маркетинга и Оля из любой другой команды понимали, что цена всегда до ндс, а clientid имеет тип string и обозначает человека, который купил у нас продукт.
Это нужно, чтобы больше не переписываться в почте на тему "А это что означает? А что заложено в эту метрику?". Мы делаем каталог данных, и каждый ходит туда и смотрит нужные ему вещи:
🟡 бизнес-смысл
🟠 бизнес-правила
🟡 источник
🟠 логика преобразований из системы в систему (lineage)
🙂 Еще сквозь всю книгу красной линией проходит мысль - бизнес и IT должны работать вместе. Кстати, у нас когда-то вставал вопрос - нужно ли IT-командам на 100% понимать, как их работа влияет на метрики бизнеса?
В Сбере есть активность "Random Coffee", где рандомно подбирается зареганный собеседник. И несколько человек мне ответили, что они просто крутят модельки и жизнь прекрасна🌼
Что думаете?
#dama_dmbok
Это книжка на 830 страниц - "Свод знаний по управлению данными". Мне ее как-то советовали прочитать, и вот полтора месяца я упорно это делала
Вкратце эта книга про фреймворк DAMA (Data Management Association). Про то, как должно быть. Он включает такие аспекты:
и еще несколько (на картинке - колесо DAMA)
Я по ходу чтения записывала интересные, новые для меня моменты, буду постепенно делиться)
Одни и те же данные складываются по-разному, называются по-разному. Одинаковые метрики считаются по-разному.
Глобальная цель - чтобы я из маркетинга и Оля из любой другой команды понимали, что цена всегда до ндс, а clientid имеет тип string и обозначает человека, который купил у нас продукт.
Это нужно, чтобы больше не переписываться в почте на тему "А это что означает? А что заложено в эту метрику?". Мы делаем каталог данных, и каждый ходит туда и смотрит нужные ему вещи:
В Сбере есть активность "Random Coffee", где рандомно подбирается зареганный собеседник. И несколько человек мне ответили, что они просто крутят модельки и жизнь прекрасна
Что думаете?
#dama_dmbok
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23 6❤5👍2
Кейс про паркеты
Предыстория
Мы хотим перекладывать паркет-файлики из одной системы в другую. Выложили их на s3. Все, можно забирать. Казалось бы, что может пойти не так?
Но этот процесс прошел несколько итераций, прежде чем я сказала "все ок"😊
1️⃣
Проблема: Illegal Parquet type: FIXED_LEN_BYTE_ARRAY
Смысл: паркет не умеет читать тип FixedString из кх
Решение: удаляем столбец или сохраняем в формате String
2️⃣
Проблема: Required field 'codec' was not present!
Смысл: связано с несопоставимыми алгоритмами компрессии файлов
Решение: используем другой алгоритм (н-р, Snappy)
3️⃣
Проблема: Строковые типы отображаются вот так: [57 65 62 4B 69 74]
Смысл: отображается в бинарном виде
Решение:
(или без unhex)
Но это неудобно все преобразовывать на этапе чтения
4️⃣
Проблема: делаю printSchema() и вижу, что все строковые поля имеют тип binary
Решение: сохраняем в string
5️⃣
Проблема: date в формате 20031
Смысл: это количество дней от 1970-01-01
Решение:
6️⃣
Проблема: функция date_from_unix_date появилась в версии 3.5.0, а у нас ниже
Решение: делаем примерно так и кладем все в string на этапе записи
Ура😑
Предыстория
Мы хотим перекладывать паркет-файлики из одной системы в другую. Выложили их на s3. Все, можно забирать. Казалось бы, что может пойти не так?
Но этот процесс прошел несколько итераций, прежде чем я сказала "все ок"
Проблема: Illegal Parquet type: FIXED_LEN_BYTE_ARRAY
Смысл: паркет не умеет читать тип FixedString из кх
Решение: удаляем столбец или сохраняем в формате String
Проблема: Required field 'codec' was not present!
Смысл: связано с несопоставимыми алгоритмами компрессии файлов
Решение: используем другой алгоритм (н-р, Snappy)
Проблема: Строковые типы отображаются вот так: [57 65 62 4B 69 74]
Смысл: отображается в бинарном виде
Решение:
SELECT unhex(regexp_replace(StartURL, ' ', ''))
(или без unhex)
Но это неудобно все преобразовывать на этапе чтения
Проблема: делаю printSchema() и вижу, что все строковые поля имеют тип binary
Решение: сохраняем в string
Проблема: date в формате 20031
Смысл: это количество дней от 1970-01-01
Решение:
df.withColumn(
'new_date',
F.date_from_unix_date(date)
)
Проблема: функция date_from_unix_date появилась в версии 3.5.0, а у нас ниже
Решение: делаем примерно так и кладем все в string на этапе записи
SELECT date_add('1970-01-01', 20031) AS new_date
Ура
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
Он будет:
Движуха на целый день с едой!
Кто не в мск - будет онлайн стрим
Кто боится ходить на такие сходки - у меня дома для мотивации уже сколько лет висит цитата Коко Шанель:
Если вы хотите иметь то, что никогда не имели, вам придётся делать то, что никогда не делали.
Я еще в прошлый раз хотела сходить - практически выиграла билеты, но что-то пошло не так( Так что собираюсь в этот раз обязательно быть
Когда будете покупать билет, введите в поле "Онлайн/Офлайн, Компания" промокод DATAENGINE. Тогда есть большой шанс, что следующий бигдатник для вас будет бесплатным!
За билетами сюда
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13 5🔥4👍1
Ураа, мне пришла приглашалка на митап 🌼 Неужели я достигла уровня значимых факапов?
🍿 А в комментах можете поделиться, были ли у вас неудачи и как вы из них выпутывались. Было бы интересно посмотреть)
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13👍1
Advent of Code
Advent of SQL
На sql я наткнулась только недавно. Возможно, он проводится в первый раз?
А вот про advent of code мне рассказали в 2020 году в кругу американских прогеров и математиков
В общем, это интересная штука, потому что:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤25👍9
System Design. №2 Расчет ресурсов
Как же это все интересно, куча циферок...☺️
Нужно учитывать 4 пункта:
1️⃣ Пользователи
MAU, DAU, сколько в пик, прирост в день/месяц/несколько лет, отношение чтения к записи, сколько генерится контента
💬 MAU/DAU (Monthly/Daily Active Users) - сколько пользаков в месяц/день
2️⃣ Сеть
Сколько одновременных соединений, трафик, какие данные и сколько передают пользаки в день, RPS
Ну и облака - это медленнее, чем физические сервера
3️⃣ Вычисления
Сколько rps на получение текста, на чтение и запись в бд, на запуск ML-моделей
Недавно общалась с одним коллегой из отдела биометрии, он сказал, что на прохождение даже одной модельки может уходить время 200ms. А если их несколько - вот ты уже стоишь у кассы и ждешь несколько секунд, пока пройдет оплата😐
4️⃣ Хранение
Сколько нужно сейчас, сколько будет прирастать в течение длительного периода
Что мы будем хранить на HDD, SSD, RAM. Горячие/теплые/холодные/ледяные данные
Сколько нужно заложить на репликацию
➖ ➖ ➖ ➖ ➖
Пока я поняла, что нужно:
- прикинуть DAU, MAU
- научиться считать RPS, скорость, соединения, количество данных
- экстраполировать это на несколько лет вперед
- взять цены и просуммировать
Если вообще нет представлений, то можно поковыряться в планах облачных провайдеров и составить общую картинку.
Но с осознанием пока сложно, чувствую, надо это все еще раз пересмотреть)
#system_design
Как же это все интересно, куча циферок...
Нужно учитывать 4 пункта:
MAU, DAU, сколько в пик, прирост в день/месяц/несколько лет, отношение чтения к записи, сколько генерится контента
Сколько одновременных соединений, трафик, какие данные и сколько передают пользаки в день, RPS
Ну и облака - это медленнее, чем физические сервера
Сколько rps на получение текста, на чтение и запись в бд, на запуск ML-моделей
Недавно общалась с одним коллегой из отдела биометрии, он сказал, что на прохождение даже одной модельки может уходить время 200ms. А если их несколько - вот ты уже стоишь у кассы и ждешь несколько секунд, пока пройдет оплата
Сколько нужно сейчас, сколько будет прирастать в течение длительного периода
Что мы будем хранить на HDD, SSD, RAM. Горячие/теплые/холодные/ледяные данные
Сколько нужно заложить на репликацию
Пока я поняла, что нужно:
- прикинуть DAU, MAU
- научиться считать RPS, скорость, соединения, количество данных
- экстраполировать это на несколько лет вперед
- взять цены и просуммировать
Если вообще нет представлений, то можно поковыряться в планах облачных провайдеров и составить общую картинку.
Но с осознанием пока сложно, чувствую, надо это все еще раз пересмотреть)
#system_design
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🤷2
Рекомендасьон
Мой коллега по парте сходил на конфу Highload 2-3 декабря
Эксклюзивный контент🔥
И вообще пишет про классные штуки
Мой коллега по парте сходил на конфу Highload 2-3 декабря
Эксклюзивный контент
И вообще пишет про классные штуки
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DataSkewer
🔆 Вот и подошел к концу Highload++ 2024.
Первый раз был на такой крупной конференции, и я конечно же восхищен.
Вот что я могу сказать, из плюсов
➕Очень удобный бот конференции в котором можно отслеживать доклады и устроить Random Coffee
➕Очень широкий спектр тем (от даты до архитектуры, маркетинга и безопасности)
➕Прекрасный кейтеринг
➕Куча C-levelов российского бигтеха с которыми можно вживую поговорить и задать вопросы (переборов страх быть кринжовым)
➕Колоссальные возможности для нетворкинга - я поставил себе цель, познакомиться и обменяться контактами с 10+ специалистами и перевыполнил эту цель в 1.5 раза, без особых усилий.
Из минусов (каинда):
➖стоит разделить конференцию на фестивальную часть и часть докладов - невозможно физически посетить все доклады и все стенды - я старался держать баланс, но охватил от силы 30 процентов стендов и 20 процентов докладов. (Доклады к тому же шли в параллель)
➖Звездами этой конференции были PHP и Golang - у меня немного другой стек
Ну и подводя итог, рекомендовал бы посетить эту конференцию, специалистам уровня Middle+
Тк у многих докладов есть неслабый порог вхождения, и вам нужно быть хотя бы специалистом конкретно вашей области + иметь хорошие знания в general computer science (вспоминаем о входителях в айти, говорящих, что алгоритмы, паттерны проектирования и прочая БАЗА никому не нужна) - иначе для вас конференция сведется лишь к фестивальной части.
В следующем посте, на основе данных этой конференции, расскажу о том когда вашему хадупу/S3 стоит задуматься об использовании Apache Iceberg.
Первый раз был на такой крупной конференции, и я конечно же восхищен.
Вот что я могу сказать, из плюсов
➕Очень удобный бот конференции в котором можно отслеживать доклады и устроить Random Coffee
➕Очень широкий спектр тем (от даты до архитектуры, маркетинга и безопасности)
➕Прекрасный кейтеринг
➕Куча C-levelов российского бигтеха с которыми можно вживую поговорить и задать вопросы (переборов страх быть кринжовым)
➕Колоссальные возможности для нетворкинга - я поставил себе цель, познакомиться и обменяться контактами с 10+ специалистами и перевыполнил эту цель в 1.5 раза, без особых усилий.
Из минусов (каинда):
➖стоит разделить конференцию на фестивальную часть и часть докладов - невозможно физически посетить все доклады и все стенды - я старался держать баланс, но охватил от силы 30 процентов стендов и 20 процентов докладов. (Доклады к тому же шли в параллель)
➖Звездами этой конференции были PHP и Golang - у меня немного другой стек
Ну и подводя итог, рекомендовал бы посетить эту конференцию, специалистам уровня Middle+
Тк у многих докладов есть неслабый порог вхождения, и вам нужно быть хотя бы специалистом конкретно вашей области + иметь хорошие знания в general computer science (вспоминаем о входителях в айти, говорящих, что алгоритмы, паттерны проектирования и прочая БАЗА никому не нужна) - иначе для вас конференция сведется лишь к фестивальной части.
В следующем посте, на основе данных этой конференции, расскажу о том когда вашему хадупу/S3 стоит задуматься об использовании Apache Iceberg.
Решила завести свой профиль и канал в сетке
Тык для канала
Тык для профиля
📱 Пока что моя лента на 90% состоит из мемов, но там ещё есть вакансии, новости, истории и т.д. По сути сетка - это "линкедин дома"
Подписывайтесь, если уже там, или залетайте, если ещё нет🌼
Тык для канала
Тык для профиля
Подписывайтесь, если уже там, или залетайте, если ещё нет
Please open Telegram to view this post
VIEW IN TELEGRAM
По следам F*ckup Meetup
🎙️ Вчера прошёл митап, где рассказывали про фейлы. В заявке нужно было рассказать свою историю, самые крутые зачитали со сцены)
Просто🩷 звездочка🩷 - это фейл с видоса
А также такие:
Из докладов особенно понравились вот эти:
1️⃣ Тестировали на проде в пт в 17:00 на АЭС с эвакуацией целого региона (почти).
Запустили скрипт, сервак не ответил, все ушли домой, а скрипт был зациклен🌚 В итоге когда сервак подключился, в правительство полетела куча отбивок о превышении уровня радиации
2️⃣ На графике платежей начали появляться 7-значные цифры. Причём у клиентов не списывались деньги, потому что у платежного шлюза был лимит в 100к (но на это не было нормальных логов)
А у нас в бд я тоже видела аномалии по типу "150 млрд пользователей в день", но там проблема с переполнением)
3️⃣ Что-то умное про кафку и карафку (kafka для ruby) 😅 Как решали инцидент с 12 до 21, как тасовали консьюмер группы, как перезапускали кластер без перебалансировки. И что в итоге была проблема в лишнем топике, который когда-то удалили, но где-то он остался
➖ ➖ ➖ ➖
Считаю вечер продуктивным!
⭕️ митап интересный
⭕️ фуршет был
⭕️ встретила 2х знакомых и познакомилась ещё с 4мя
Просто
А также такие:
Перенастраивал систему авторизации, в итоге удалил токены всех существующих пользаков
Ввёл регламент проведения работ на проде. В тот же вечер сам зашёл и случайно удалил там все конфиги
1го апреля дропнула бд на проде. Все узнали только 2го, потому что никто не верил.
Но на следующий день пришёл бизнес, и все поверили
Из докладов особенно понравились вот эти:
Запустили скрипт, сервак не ответил, все ушли домой, а скрипт был зациклен🌚 В итоге когда сервак подключился, в правительство полетела куча отбивок о превышении уровня радиации
А у нас в бд я тоже видела аномалии по типу "150 млрд пользователей в день", но там проблема с переполнением)
Считаю вечер продуктивным!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍7 5
Прошла неделя Advent of SQL
Поделитесь, как у вас дела? Кто ещё проходит?
💻 Мне реально зашла эта штука! sql я люблю, задания прикольные, даже пришлось научиться парсить xml (не знаю зачем, но все же)
🐸 💬 На реддите тоже завели треды под это дело. Оказывается, в DuckDB и Snowflake можно вот так в одном селекте обращаться к столбцам, которые мы только что посчитали, очень удобно 🔥
Поделитесь, как у вас дела? Кто ещё проходит?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍19
This media is not supported in your browser
VIEW IN TELEGRAM
Про лаги в тг
Заметила такой лаг:
1. Пишу второй коммент под постом
2. Выхожу из поста в канал
3. Вижу только 1 коммент
4. Захожу обратно, вижу 2
5. Выхожу
6. Вижу 2 коммента, но нет картинки профиля
7. В момент клика снова вижу, как стал 1 коммент
8. Выхожу
9. Вижу 2 коммента, вижу появление своей аватарки
В свете курса по System Design могу предположить, что проблема с консистентностью)
💎 Есть известная теорема CAP, она состоит из 3х понятий. Я попросила AI помочь объяснить вам примеры нарушений как для 5летних😁
C - Consistency - пользователь видит одинаковые данные
🎙 Представь, что ты и твой друг строите башню из LEGO. Вы договорились, что башня будет зелёной. Но, когда он уходит, ты делаешь её красной.
A - Availability - при любом обращении система возвращает ответ
🎙 Вы с друзьями устроили вечер настолок. Все готовы играть, но ты не можешь найти свои карточки. Все друзья ждут, а потом скучают и уходят(
P - Partition Tolerance - система работает, даже если между нодами сетевые проблемы
🎙 Представь, что ты и твой друг решили сделать "крутой рисунок". Ты рисуешь в одной комнате, а он - в другой. Двери закрыты. В итоге ты нарисовал динозавра, а он - единорога.
Всегда можно обеспечить только 2 из 3. 3 из 3 - это уже невозможно.
🕰 Есть также Eventual Consistency - прямо сейчас данные отличаются, но через какое-то время они будут одинаковыми. И такой подход: автор всегда видит свои данные, но другие могут увидеть их чуть попозже. Например, мы записали данные в master, а читаем из slave. Из-за задержки репликации данные могут опаздывать, поэтому на разных нодах разные результаты
Заметила такой лаг:
1. Пишу второй коммент под постом
2. Выхожу из поста в канал
3. Вижу только 1 коммент
4. Захожу обратно, вижу 2
5. Выхожу
6. Вижу 2 коммента, но нет картинки профиля
7. В момент клика снова вижу, как стал 1 коммент
8. Выхожу
9. Вижу 2 коммента, вижу появление своей аватарки
В свете курса по System Design могу предположить, что проблема с консистентностью)
C - Consistency - пользователь видит одинаковые данные
A - Availability - при любом обращении система возвращает ответ
P - Partition Tolerance - система работает, даже если между нодами сетевые проблемы
Всегда можно обеспечить только 2 из 3. 3 из 3 - это уже невозможно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4💅3