Software Engineering

Высоконагруженные приложения - Глава 3 - Подсистемы хранения и извлечение данных

Высоконагруженные приложения - Глава 3 - Подсистемы хранения и извлечение данных

Переводы: EN

Ранее в этом году книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

Глава 3:

  • Структуры данных:
    • Log-structured. SSTables / LSM-деревья (когда мы ничего не обновляем, а пишем в конец). Очень крутая идея, как хранить данные.
      • Отсортированные файлы.
      • Индексы для каждого.
      • Более того, индексы могут быть созданы не для всех записей, потому что они отсортированы, и если размеры записей одинаковы, то поиск между двумя известными проиндексированными записями является бинарным поиском O(log n).
      • Мы всегда пишем в последний файл.
      • Процесс слияния файлов - это школьный алгоритм: как записать O(n) слияние двух отсортированных массивов в один отсортированный массив.
    • Обновление-на-месте. B-деревья (когда мы напрямую обновляем записи). Тоже очень умно.
      • Деревья - более простая идея, но тут классно придумано с сегментами заточенными под работу дисков - и отсюда возможные проблемы с SSD т.к. много перезаписей сегментов
  • Индексирование: первичное, вторичное, многоколоночное, полнотекстовое
    • По поводу индексов - очевидно, что чудес не бывает и нужны дополнительные конструкции.
    • Интересно, что иногда значения могут храниться внутри индексов.
    • К сожалению, о полнотекстовом поиске написано очень мало - интересно узнать о нем больше.
  • OLTP vs OLAP. Четкое разделение OLAP / OLTP очень интересно.
  • Столбцово-ориентированное хранилище.
    • Есть очень интересный аспект сжатия данных: сколько нулей, сколько единиц - своего рода компрессор. Это возможно только в памяти - только на одну следующую SSTable

Намного больше деталей в майнд-мапе:

Высоконагруженные приложения - Глава 2 - Модели данных и языки запросов

Высоконагруженные приложения - Глава 2 - Модели данных и языки запросов

Переводы: EN

Ранее в этом году книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

Глава 2:

  • Что такое модель данных.
  • Различные отношения между данными.
  • Реляционные, документные, графовые модели данных. Какая лучше и когда.
  • Схема-на-запись, схема-на-чтение (без схемы). Локальность данных.
  • Языки запросов: императивный, декларативный, MapReduce. Почему NoSQL переизобретает SQL 😀
  • Хранение графов. Языки запросов для графов: Cypher, SPARQL, Datalog.

Скачать всю майнд-мапу в PDF

Высоконагруженные приложения - Глава 1 - Надежные, масштабируемые и удобные в сопровождении приложения

Высоконагруженные приложения - Глава 1 - Надежные, масштабируемые и удобные в сопровождении приложения

Переводы: EN

Ранее в этом году книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно (чтобы лучше усвоить) я подготовил краткий обзор и майнд-мапу.

Глава 1:

  • Строительные блоки приложений
  • Что такое надежность, масштабируемость и ремонтопригодность. Примеры и определения.
    • Неисправности и отказы
    • Производительность, нагрузка, задержка и время отклика
    • Работоспособность, простота, эволюционируемость
  • Почему вы должны убивать свои сервера случайным образом 😅
  • Как Twitter доставляет 12 000 твитов в секунду до 300 000 пользователей в секунду. (Очень интересно!)
  • Сколько денег Amazon теряет за каждые 100мс задержки ответа
  • Как быстро рассчитать персентили для мониторинга времени отклика в PROD

Скачать всю майнд-мапу в PDF

Golang вводит дженерики

Golang вводит дженерики

Переводы: EN

Golang НАКОНЕЦ-ТО представляет ДЖЕНЕРИКИ (aka тимплейты, aka параметры типов) в релизе 1.18 (февраль 2022)

Я помню начало 2000-х, когда в C # были добавлены дженерики, и то, как их ожидали…

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

Моя майнд-мапа с ключевыми вещами, которые вам следует знать:

Чистая Архитектура - Часть IV - Принципы дизайна

Чистая Архитектура - Часть IV - Принципы дизайна

Переводы: EN

Книжный клуб у нас в компании выбрал следующую чудесную книгу для чтения:

Роберт Мартин - Чистая Архитектура - Искусство Разработки Программного Обеспечения

Robert Martin - Clean Architecture - a Craftsman’s Guide to Software Structure and Design

Четвертая часть книги посвящена принципам объединения компонентов в программные системы.

Эта часть более интересна. Она содержит:

  • Обзор истории компонентов: возможность перемещения в памяти, линкеры
  • Три принципа связности компонентов
    • REP: Принцип эквивалентности повторного использования и выпусков
    • CCP: Принцип согласованного изменения
    • CRP: Принцип совместного повторного использования
  • Три принципа соединения компонентов
    • ADP: Принцип ацикличности зависимостей
    • SDP: Принцип устойчивых зависимостей
    • SAP: Принцип устойчивости абстракций

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

Golang: учебные курсы

Golang: учебные курсы

Последние три года я много собеседую Golang-разработчиков. Go - это замечательный язык. Удачные концепции горутин и каналов позволяют очень просто и эффективно разрабатывать высоконагруженные приложения.

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

Эти курсы и я сам когда-то проходил и очень сильно их рекомендую всем разработчикам!

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

Чистая Архитектура - Часть III - Принципы дизайна

Чистая Архитектура - Часть III - Принципы дизайна

Переводы: EN

Книжный клуб у нас в компании выбрал следующую чудесную книгу для чтения:

Роберт Мартин - Чистая Архитектура - Искусство Разработки Программного Обеспечения

Robert Martin - Clean Architecture - a Craftsman’s Guide to Software Structure and Design

👍

Третья часть книги посвящена принципам SOLID.

SOLID
  • Принцип единственной ответственности: модуль должен быть ответственным перед одним и только одним действующим лицом.
  • Принцип открытости-закрытости: программный артефакт должен быть открыт для расширения, но закрыт для модификации.
  • Принцип подстановки Барбары Лисков: S является подтипом T, если вместо экземпляра T мы всегда можем использовать экземпляр S
  • Принцип разделения интерфейсов: используйте интерфейсы для уменьшения зависимости от изменений.
  • Принцип инверсии зависимостей: избегайте зависимостей от летучих конкретных элементов.

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

Сравнение Front-end фреймворков: Angular, React, Vue

Сравнение Front-end фреймворков: Angular, React, Vue

Переводы: EN

При запуске нового проекта по разработке ПО необходимо выбрать технологию для Frontend. В настоящее время существуют три ведущие технологии: Angular, React и Vue.

Но как выбрать из них?

Наша команда имеет опыт работы со всеми из них, но обычно выбор делается на основе «кто доступен в команде, и что они предпочитают».

Я хотел более глубокое сравнение плюсов и минусов, и я нашел его в отличном коротком курсе Udemy:

React JS, Angular & Vue JS - Quickstart & Comparison

Чистая Архитектура - Часть II - Начальные основы: парадигмы программирования

Чистая Архитектура - Часть II - Начальные основы: парадигмы программирования

Переводы: EN

Книжный клуб у нас в компании выбрал следующую чудесную книгу для чтения:

Роберт Мартин - Чистая Архитектура - Искусство Разработки Программного Обеспечения

Robert Martin - Clean Architecture - a Craftsman’s Guide to Software Structure and Design

👍

Книга пока поверхностная. Вот обзор второй части:

Есть три парадигмы программирования:

  • Структурированное программирование - накладывает ограничение на прямую передачу управления.
  • Объектно-ориентированное программирование - накладывает ограничение на косвенную передачу управления.
  • Функциональное программирование - накладывает ограничение на присваивание.

Все три парадигмы говорят о том, чего НЕ ДЕЛАТЬ.

Чистая Архитектура - Часть I - Введение

Чистая Архитектура - Часть I - Введение

Переводы: EN

Книжный клуб у нас в компании выбрал следующую чудесную книгу для чтения:

Роберт Мартин - Чистая Архитектура - Искусство Разработки Программного Обеспечения

Robert Martin - Clean Architecture - a Craftsman’s Guide to Software Structure and Design

👍

Краткий обзор первой части:

  • Цель архитектуры ПО
    • уменьшить человеческие трудозатраты на создание и сопровождение системы
  • Две ценности ПО
    • Поведение (функционал) - удовлетворить требованиям заинтересованных сторон
    • Структура (архитектура) - сложность внесения изменений должна быть пропорциональна содержанию, а не “форме” изменений
  • Легкость внесения изменений более важна чем фунционал!
    • Разработчик ПО должен бороться 🤺 за это с другими заинтересованными сторонами!
Part I - Introduction

Скачать всю майнд-мапу в PDF