ECN - Explicit Congestion Notification, грубо - это уведомления о перегруженности в сети, оперирующие на L4 уровне. Нужно для того, чтобы пакеты не отбрасывались, а складывались в очередь.
Priority Flow Control (PFC) IEEE 802.1Qbb — это механизм, который временно приостанавливает входящий трафик, уведомляя одноранговый узел о необходимости приостановить передачу, когда канал перегружен. Основная цель PFC — обеспечить приоритет RoCE-трафика над TCP-трафиком в условиях перегрузки сети хранения данных (SAN).
Чтобы определить кадры PFC, коммутатор или конечное устройство могут анализировать 3 бита заголовка VLAN на уровне L2 (PCP — Priority Code Point), или, если VLAN не используется, то применяется DSCP (Differentiated Services Code Point) на уровне L3. Если всё настроено правильно, кадры попадают в нужный буфер и не теряются. В противном случае происходит отбрасывание пакетов. Стоит отметить, что DSCP появился позже, чем PCP, и первоначально RoCEv2 работал только с VLAN.
При включенном PFC сети гарантируют доставку пакетов в рамках выбранного приоритета. Однако, несмотря на все преимущества, PFC может вызвать сценарий отказа, при котором очередь конечного порта (например, порта хоста, подключенного к сети) может не иметь возможности получать какой-либо трафик из сети и продолжать отправлять кадры паузы в сторону коммутатора. Если очередь конечного порта зависает на долгое время, буферы заполняются не только на одном коммутаторе, но и на всех коммутаторах с проблемными очередями портов на пути передачи трафика. Это приводит к появлению бесконечных кадров паузы PFC, также называемых штормом PFC.
Для предотвращения таких штормов реализован механизм PFC Watchdog. Когда коммутаторы обнаруживают эту ситуацию в любой очереди TC, все пакеты в очереди сбрасываются, а новые пакеты, предназначенные для той же очереди, также отбрасываются до тех пор, пока не закончится шторм PFC.
Data Center Bridging (DCB) — это расширение протокола Ethernet, предназначенное для устранения потерь данных, связанных с переполнением очередей для определенного класса трафика. По сути, DCB позволяет рассматривать разные приоритеты трафика, как если бы это были разные каналы. DCB различает потоки трафика, помечая их определенным значением от 0 до 7 (Class of Service, CoS).
Обычно потерянные пакеты данных не являются большой проблемой, поскольку они будут переданы повторно. Однако для трафика хранилища потерянные пакеты данных снижают производительность, поскольку приводят к задержкам ввода-вывода, что неприемлемо. DCB использует значения CoS, чтобы указать, какой трафик должен быть передан без потерь через сеть. Обычно сетевые коммутаторы поддерживают до восьми значений CoS.
Data Center Bridging Exchange (DCBX) является расширением протокола DCB, где «X» означает eXchange. Смысл DCBX заключается в автоматической передаче настроенных параметров DCB между коммутаторами и сетевыми картами серверов, что упрощает настройку и управление сетью.
При настройке VMware vSAN 8 в новой его версии ESA (Express Storage Architecture), есть весьма определенные требования к работе RoCEv2. А именно, что PFC должен быть равен 3, DSCP равен 26, должен быть включен DCBX, должно быть выставлено доверие L3 (qos trust L3) для работы того самого DSCP. И более того, со стороны VMware для RoCE определен особый порядок работы портов на сетевой карте, nic teaming работает исключительно в режиме, когда один порт активен, а другой standby и исключительно "use explicit failover order". Всё потому, что кадры маршрутизируемы и должны приходить исключительно на предопределенные порты. Если в конфигурации будет что-то не так, то RoCE просто не заработает, хотя в VMware будет показывать в меню, что функция включена.
Priority Flow Control (PFC) IEEE 802.1Qbb — это механизм, который временно приостанавливает входящий трафик, уведомляя одноранговый узел о необходимости приостановить передачу, когда канал перегружен. Основная цель PFC — обеспечить приоритет RoCE-трафика над TCP-трафиком в условиях перегрузки сети хранения данных (SAN).
Чтобы определить кадры PFC, коммутатор или конечное устройство могут анализировать 3 бита заголовка VLAN на уровне L2 (PCP — Priority Code Point), или, если VLAN не используется, то применяется DSCP (Differentiated Services Code Point) на уровне L3. Если всё настроено правильно, кадры попадают в нужный буфер и не теряются. В противном случае происходит отбрасывание пакетов. Стоит отметить, что DSCP появился позже, чем PCP, и первоначально RoCEv2 работал только с VLAN.
При включенном PFC сети гарантируют доставку пакетов в рамках выбранного приоритета. Однако, несмотря на все преимущества, PFC может вызвать сценарий отказа, при котором очередь конечного порта (например, порта хоста, подключенного к сети) может не иметь возможности получать какой-либо трафик из сети и продолжать отправлять кадры паузы в сторону коммутатора. Если очередь конечного порта зависает на долгое время, буферы заполняются не только на одном коммутаторе, но и на всех коммутаторах с проблемными очередями портов на пути передачи трафика. Это приводит к появлению бесконечных кадров паузы PFC, также называемых штормом PFC.
Для предотвращения таких штормов реализован механизм PFC Watchdog. Когда коммутаторы обнаруживают эту ситуацию в любой очереди TC, все пакеты в очереди сбрасываются, а новые пакеты, предназначенные для той же очереди, также отбрасываются до тех пор, пока не закончится шторм PFC.
Data Center Bridging (DCB) — это расширение протокола Ethernet, предназначенное для устранения потерь данных, связанных с переполнением очередей для определенного класса трафика. По сути, DCB позволяет рассматривать разные приоритеты трафика, как если бы это были разные каналы. DCB различает потоки трафика, помечая их определенным значением от 0 до 7 (Class of Service, CoS).
Обычно потерянные пакеты данных не являются большой проблемой, поскольку они будут переданы повторно. Однако для трафика хранилища потерянные пакеты данных снижают производительность, поскольку приводят к задержкам ввода-вывода, что неприемлемо. DCB использует значения CoS, чтобы указать, какой трафик должен быть передан без потерь через сеть. Обычно сетевые коммутаторы поддерживают до восьми значений CoS.
Data Center Bridging Exchange (DCBX) является расширением протокола DCB, где «X» означает eXchange. Смысл DCBX заключается в автоматической передаче настроенных параметров DCB между коммутаторами и сетевыми картами серверов, что упрощает настройку и управление сетью.
При настройке VMware vSAN 8 в новой его версии ESA (Express Storage Architecture), есть весьма определенные требования к работе RoCEv2. А именно, что PFC должен быть равен 3, DSCP равен 26, должен быть включен DCBX, должно быть выставлено доверие L3 (qos trust L3) для работы того самого DSCP. И более того, со стороны VMware для RoCE определен особый порядок работы портов на сетевой карте, nic teaming работает исключительно в режиме, когда один порт активен, а другой standby и исключительно "use explicit failover order". Всё потому, что кадры маршрутизируемы и должны приходить исключительно на предопределенные порты. Если в конфигурации будет что-то не так, то RoCE просто не заработает, хотя в VMware будет показывать в меню, что функция включена.
Реляционные базы данных, язык SQL
что такое реляционные базы данных
Таблица в SQL — это структура, которая хранит данные в виде строк и столбцов. Каждая таблица представляет собой определённый объект или сущность, например, "Пользователи", "Заказы" или "Продукты". Таблицы создаются с помощью команды CREATE TABLE.
Строка (или запись) — это отдельный элемент данных в таблице. Каждая строка представляет собой уникальный экземпляр сущности, описываемой таблицей. Например, в таблице "Users" каждая строка может содержать информацию о конкретном пользователе. Строки добавляются в таблицу с помощью команды INSERT.
Столбец — это отдельный атрибут или поле в таблице, которое описывает определённый аспект сущности. Каждый столбец имеет уникальное имя и определённый тип данных (например, текст, число, дата). В примере выше столбцы таблицы "Users" включают UserID, UserName, Email и RegistrationDate. Столбцы определяются при создании таблицы и могут быть изменены с помощью команды ALTER TABLE.
Связи между таблицами позволяют организовать данные более эффективно и избежать дублирования. В реляционных базах данных существуют несколько типов связей:
1) Один к одному (1:1): Каждая запись в одной таблице соответствует ровно одной записи в другой таблице. Например, у каждого пользователя может быть только один профиль.
2) Один ко многим (1:N): Одна запись в первой таблице может соответствовать нескольким записям во второй таблице. Например, один пользователь может иметь несколько заказов. Это реализуется с помощью внешнего ключа.
3) Многие ко многим (M:N): Записи в одной таблице могут соответствовать нескольким записям в другой таблице и наоборот. Например, студенты могут записываться на несколько курсов, а каждый курс может иметь нескольких студентов. Для реализации такой связи обычно создаётся промежуточная таблица.
продолжение в следующих трёх сообщениях
что такое реляционные базы данных
Таблица в SQL — это структура, которая хранит данные в виде строк и столбцов. Каждая таблица представляет собой определённый объект или сущность, например, "Пользователи", "Заказы" или "Продукты". Таблицы создаются с помощью команды CREATE TABLE.
-- Создание таблицы Users
CREATE TABLE Users (
UserID INT PRIMARY KEY, -- Уникальный идентификатор пользователя (целое число), первичный ключ, не может быть NULL
UserName VARCHAR(100), -- Имя пользователя (строка до 100 символов)
Email VARCHAR(100), -- Электронная почта пользователя (строка до 100 символов)
RegistrationDate DATE -- Дата регистрации пользователя (тип DATE)
);
Строка (или запись) — это отдельный элемент данных в таблице. Каждая строка представляет собой уникальный экземпляр сущности, описываемой таблицей. Например, в таблице "Users" каждая строка может содержать информацию о конкретном пользователе. Строки добавляются в таблицу с помощью команды INSERT.
-- Вставка нового пользователя в таблицу Users
INSERT INTO Users (User ID, UserName, Email, RegistrationDate)
VALUES (1, 'John Doe', 'john@example.com', '2023-01-01'); -- Значения для нового пользователя
Столбец — это отдельный атрибут или поле в таблице, которое описывает определённый аспект сущности. Каждый столбец имеет уникальное имя и определённый тип данных (например, текст, число, дата). В примере выше столбцы таблицы "Users" включают UserID, UserName, Email и RegistrationDate. Столбцы определяются при создании таблицы и могут быть изменены с помощью команды ALTER TABLE.
Связи между таблицами позволяют организовать данные более эффективно и избежать дублирования. В реляционных базах данных существуют несколько типов связей:
1) Один к одному (1:1): Каждая запись в одной таблице соответствует ровно одной записи в другой таблице. Например, у каждого пользователя может быть только один профиль.
2) Один ко многим (1:N): Одна запись в первой таблице может соответствовать нескольким записям во второй таблице. Например, один пользователь может иметь несколько заказов. Это реализуется с помощью внешнего ключа.
-- Создание таблицы Orders
CREATE TABLE Orders (
OrderID INT PRIMARY KEY, -- Уникальный идентификатор заказа (целое число)
UserID INT, -- Идентификатор пользователя, который сделал заказ (целое число)
OrderDate DATE, -- Дата заказа (тип DATE)
FOREIGN KEY (User ID) REFERENCES Users(UserID) -- Связь с таблицей Users по UserID
);
3) Многие ко многим (M:N): Записи в одной таблице могут соответствовать нескольким записям в другой таблице и наоборот. Например, студенты могут записываться на несколько курсов, а каждый курс может иметь нескольких студентов. Для реализации такой связи обычно создаётся промежуточная таблица.
-- Создание таблицы Courses
CREATE TABLE Courses (
CourseID INT PRIMARY KEY, -- Уникальный идентификатор курса (целое число)
CourseName VARCHAR(100) -- Название курса (строка до 100 символов)
);
-- Создание промежуточной таблицы StudentCourses для связи многие ко многим
CREATE TABLE StudentCourses (
StudentID INT, -- Идентификатор студента (целое число)
CourseID INT, -- Идентификатор курса (целое число)
PRIMARY KEY (StudentID, CourseID), -- Составной первичный ключ, состоящий из StudentID и CourseID
FOREIGN KEY (StudentID) REFERENCES Users(UserID), -- Связь с таблицей Users по StudentID
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID) -- Связь с таблицей Courses по CourseID
);
продолжение в следующих трёх сообщениях
В SQL существует множество типов данных, которые можно использовать для определения структуры таблиц. Основные типы данных, часто используемые в реляционных базах данных:
Числовые типы данных
INT: Целое число. Обычно занимает 4 байта.
SMALLINT: Малое целое число. Обычно занимает 2 байта.
TINYINT: Очень малое целое число. Обычно занимает 1 байт.
BIGINT: Большое целое число. Обычно занимает 8 байт.
FLOAT: Число с плавающей запятой (одинарной точности).
DOUBLE: Число с плавающей запятой (двойной точности).
DECIMAL(p, s): Число с фиксированной запятой, где p — общее количество цифр, а s — количество цифр после запятой.
Символьные типы данных
CHAR(n): Строка фиксированной длины n. Если строка короче, то она будет дополнена пробелами.
VARCHAR(n): Строка переменной длины до n символов. Не требует дополнения пробелами.
TEXT: Строка переменной длины, которая может хранить большие объемы текста (обычно до 65,535 символов).
Дата и время
DATE: Дата в формате 'YYYY-MM-DD'.
TIME: Время в формате 'HH:MM:SS'.
DATETIME: Дата и время в формате 'YYYY-MM-DD HH:MM:SS'.
TIMESTAMP: Отметка времени, которая автоматически обновляется при изменении записи.
YEAR: Год в формате 'YYYY'.
Логические типы данных
BOOLEAN: Логический тип данных, который может принимать значения TRUE или FALSE. В некоторых системах может быть представлен как BIT.
Другие типы данных
BLOB: Двоичный объект большого размера, используемый для хранения изображений, видео и других бинарных данных.
JSON: Тип данных для хранения JSON-форматированных данных (в некоторых СУБД, таких как PostgreSQL и MySQL).
XML: Тип данных для хранения XML-форматированных данных (в некоторых СУБД).
DDL (Data Definition Language) используется для определения и изменения структуры базы данных. Основные команды DDL:
1) CREATE: Создаёт новые объекты базы данных, такие как таблицы, индексы и представления.
2) ALTER: Изменяет существующие объекты базы данных, такие как таблицы.
3) DROP: Удаляет объекты базы данных, такие как таблицы или индексы.
DML (Data Manipulation Language) используется для манипуляции данными в базе данных. Основные команды DML:
1) SELECT: Извлекает данные из одной или нескольких таблиц.
2) INSERT: Вставляет новые записи в таблицу.
3) UPDATE: Обновляет существующие записи в таблице.
4) DELETE: Удаляет записи из таблицы.
DCL (Data Control Language) используется для управления доступом к данным в базе данных. Основные команды DCL:
1) GRANT: Предоставляет пользователю или роли определённые права доступа к объектам базы данных.
2) REVOKE: Отзывает ранее предоставленные права доступа.
TCL (Transaction Control Language) используется для управления транзакциями в базе данных. Основные команды TCL:
1) COMMIT: Подтверждает все изменения, сделанные в текущей транзакции.
2) ROLLBACK: Отменяет все изменения, сделанные в текущей транзакции.
Числовые типы данных
INT: Целое число. Обычно занимает 4 байта.
SMALLINT: Малое целое число. Обычно занимает 2 байта.
TINYINT: Очень малое целое число. Обычно занимает 1 байт.
BIGINT: Большое целое число. Обычно занимает 8 байт.
FLOAT: Число с плавающей запятой (одинарной точности).
DOUBLE: Число с плавающей запятой (двойной точности).
DECIMAL(p, s): Число с фиксированной запятой, где p — общее количество цифр, а s — количество цифр после запятой.
Символьные типы данных
CHAR(n): Строка фиксированной длины n. Если строка короче, то она будет дополнена пробелами.
VARCHAR(n): Строка переменной длины до n символов. Не требует дополнения пробелами.
TEXT: Строка переменной длины, которая может хранить большие объемы текста (обычно до 65,535 символов).
Дата и время
DATE: Дата в формате 'YYYY-MM-DD'.
TIME: Время в формате 'HH:MM:SS'.
DATETIME: Дата и время в формате 'YYYY-MM-DD HH:MM:SS'.
TIMESTAMP: Отметка времени, которая автоматически обновляется при изменении записи.
YEAR: Год в формате 'YYYY'.
Логические типы данных
BOOLEAN: Логический тип данных, который может принимать значения TRUE или FALSE. В некоторых системах может быть представлен как BIT.
Другие типы данных
BLOB: Двоичный объект большого размера, используемый для хранения изображений, видео и других бинарных данных.
JSON: Тип данных для хранения JSON-форматированных данных (в некоторых СУБД, таких как PostgreSQL и MySQL).
XML: Тип данных для хранения XML-форматированных данных (в некоторых СУБД).
DDL (Data Definition Language) используется для определения и изменения структуры базы данных. Основные команды DDL:
1) CREATE: Создаёт новые объекты базы данных, такие как таблицы, индексы и представления.
CREATE TABLE Users (
UserID INT PRIMARY KEY,
UserName VARCHAR(100),
Email VARCHAR(100)
);
2) ALTER: Изменяет существующие объекты базы данных, такие как таблицы.
ALTER TABLE Users ADD COLUMN RegistrationDate DATE; -- Добавление нового столбца
3) DROP: Удаляет объекты базы данных, такие как таблицы или индексы.
DROP TABLE Users; -- Удаление таблицы Users
DML (Data Manipulation Language) используется для манипуляции данными в базе данных. Основные команды DML:
1) SELECT: Извлекает данные из одной или нескольких таблиц.
SELECT * FROM Users; -- Извлечение всех данных из таблицы Users
2) INSERT: Вставляет новые записи в таблицу.
INSERT INTO Users (User ID, UserName, Email) VALUES (1, 'John Doe', 'john@example.com');
3) UPDATE: Обновляет существующие записи в таблице.
UPDATE Users SET Email = 'john.doe@example.com' WHERE UserID = 1; -- Обновление email пользователя
4) DELETE: Удаляет записи из таблицы.
DELETE FROM Users WHERE UserID = 1; -- Удаление пользователя с UserID = 1
DCL (Data Control Language) используется для управления доступом к данным в базе данных. Основные команды DCL:
1) GRANT: Предоставляет пользователю или роли определённые права доступа к объектам базы данных.
GRANT SELECT, INSERT ON Users TO user1; -- Предоставление прав на выборку и вставку данных пользователю user1
2) REVOKE: Отзывает ранее предоставленные права доступа.
REVOKE INSERT ON Users FROM user1; -- Отзыв прав на вставку данных у пользователя user1
TCL (Transaction Control Language) используется для управления транзакциями в базе данных. Основные команды TCL:
1) COMMIT: Подтверждает все изменения, сделанные в текущей транзакции.
COMMIT; -- Подтверждение всех изменений в текущей транзакции
2) ROLLBACK: Отменяет все изменения, сделанные в текущей транзакции.
ROLLBACK; -- Отмена всех изменений в текущей транзакции
JOIN-операции в SQL используются для объединения строк из двух или более таблиц на основе связанных между ними полей. Основные типы JOIN-операций: INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL JOIN.
1) INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах. Если в одной из таблиц нет соответствующих строк, то такие строки не будут включены в результат.
Этот запрос вернёт имена пользователей и идентификаторы заказов только для тех пользователей, которые имеют заказы. Если у пользователя нет заказов, он не будет включён в результат.
2) LEFT JOIN (или LEFT OUTER JOIN) возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если в правой таблице нет соответствующих строк, то в результирующем наборе будут NULL-значения для столбцов правой таблицы.
Этот запрос вернёт имена всех пользователей и идентификаторы их заказов. Если у пользователя нет заказов, то в поле OrderID будет NULL.
3) RIGHT JOIN (или RIGHT OUTER JOIN) возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если в левой таблице нет соответствующих строк, то в результирующем наборе будут NULL-значения для столбцов левой таблицы.
Этот запрос вернёт идентификаторы заказов и имена пользователей. Если у заказа нет соответствующего пользователя (например, если пользователь был удалён), то в поле User Name будет NULL.
4) FULL JOIN (или FULL OUTER JOIN) возвращает все строки из обеих таблиц. Если в одной из таблиц нет соответствующих строк, то в результирующем наборе будут NULL-значения для столбцов этой таблицы.
Этот запрос вернёт имена всех пользователей и идентификаторы всех заказов. Если у пользователя нет заказов, то в поле OrderID будет NULL, а если у заказа нет соответствующего пользователя, то в поле User Name будет NULL.
Проще говоря -
INNER JOIN: Пересечение двух таблиц.
LEFT JOIN: Все строки из левой таблицы + совпадения из правой таблицы.
RIGHT JOIN: Все строки из правой таблицы + совпадения из левой таблицы.
FULL JOIN: Все строки из обеих таблиц, с NULL для отсутствующих совпадений.
Агрегатные функции в SQL используются для выполнения вычислений над множеством значений и возвращают одно значение. Эти функции часто применяются в сочетании с оператором GROUP BY для группировки данных. Основные агрегатные функции: COUNT, SUM, AVG, MIN и MAX.
1) COUNT возвращает количество строк, соответствующих заданному условию. Она может использоваться для подсчёта всех строк или только тех, которые имеют ненулевые значения в указанном столбце.
2) SUM возвращает сумму значений в указанном числовом столбце. Она используется для вычисления общей суммы.
3) AVG возвращает среднее значение числового столбца. Она вычисляет среднее арифметическое для всех значений в указанном столбце.
1) INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах. Если в одной из таблиц нет соответствующих строк, то такие строки не будут включены в результат.
SELECT Users.UserName, Orders.OrderID
FROM Users
INNER JOIN Orders ON Users.UserID = Orders.UserID;
Этот запрос вернёт имена пользователей и идентификаторы заказов только для тех пользователей, которые имеют заказы. Если у пользователя нет заказов, он не будет включён в результат.
2) LEFT JOIN (или LEFT OUTER JOIN) возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если в правой таблице нет соответствующих строк, то в результирующем наборе будут NULL-значения для столбцов правой таблицы.
SELECT Users.UserName, Orders.OrderID
FROM Users
LEFT JOIN Orders ON Users.UserID = Orders.UserID;
Этот запрос вернёт имена всех пользователей и идентификаторы их заказов. Если у пользователя нет заказов, то в поле OrderID будет NULL.
3) RIGHT JOIN (или RIGHT OUTER JOIN) возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если в левой таблице нет соответствующих строк, то в результирующем наборе будут NULL-значения для столбцов левой таблицы.
SELECT Users.UserName, Orders.OrderID
FROM Users
RIGHT JOIN Orders ON Users.UserID = Orders.UserID;
Этот запрос вернёт идентификаторы заказов и имена пользователей. Если у заказа нет соответствующего пользователя (например, если пользователь был удалён), то в поле User Name будет NULL.
4) FULL JOIN (или FULL OUTER JOIN) возвращает все строки из обеих таблиц. Если в одной из таблиц нет соответствующих строк, то в результирующем наборе будут NULL-значения для столбцов этой таблицы.
SELECT Users.UserName, Orders.OrderID
FROM Users
FULL JOIN Orders ON Users.UserID = Orders.UserID;
Этот запрос вернёт имена всех пользователей и идентификаторы всех заказов. Если у пользователя нет заказов, то в поле OrderID будет NULL, а если у заказа нет соответствующего пользователя, то в поле User Name будет NULL.
Проще говоря -
INNER JOIN: Пересечение двух таблиц.
LEFT JOIN: Все строки из левой таблицы + совпадения из правой таблицы.
RIGHT JOIN: Все строки из правой таблицы + совпадения из левой таблицы.
FULL JOIN: Все строки из обеих таблиц, с NULL для отсутствующих совпадений.
Агрегатные функции в SQL используются для выполнения вычислений над множеством значений и возвращают одно значение. Эти функции часто применяются в сочетании с оператором GROUP BY для группировки данных. Основные агрегатные функции: COUNT, SUM, AVG, MIN и MAX.
1) COUNT возвращает количество строк, соответствующих заданному условию. Она может использоваться для подсчёта всех строк или только тех, которые имеют ненулевые значения в указанном столбце.
SELECT COUNT(*) AS TotalUsers FROM Users; -- Подсчёт всех пользователей
2) SUM возвращает сумму значений в указанном числовом столбце. Она используется для вычисления общей суммы.
SELECT SUM(OrderAmount) AS TotalSales FROM Orders; -- Подсчёт общей суммы продаж
3) AVG возвращает среднее значение числового столбца. Она вычисляет среднее арифметическое для всех значений в указанном столбце.
SELECT AVG(OrderAmount) AS AverageOrderAmount FROM Orders; -- Подсчёт среднего значения заказов
4) MIN возвращает минимальное значение в указанном столбце. Она может использоваться для нахождения наименьшего значения в наборе данных.
5) MAX возвращает максимальное значение в указанном столбце. Она используется для нахождения наибольшего значения в наборе данных.
Агрегатные функции часто используются вместе с оператором GROUP BY, чтобы сгруппировать результаты по определённому столбцу.
Оператор HAVING используется для фильтрации результатов, которые были агрегированы с помощью агрегатных функций (таких как COUNT, SUM, AVG, MIN, MAX). Он применяется после оператора GROUP BY и позволяет задавать условия для групп.
В этом запросе сначала происходит группировка данных по User ID, а затем с помощью HAVING фильтруются группы, у которых количество заказов больше 5.
Оператор ORDER BY используется для сортировки результатов запроса по одному или нескольким столбцам. По умолчанию сортировка происходит по возрастанию (ASC), но можно указать сортировку по убыванию (DESC).
В этом запросе сначала происходит группировка данных по User ID, затем вычисляется общая сумма потраченных средств для каждого пользователя, и, наконец, результаты сортируются по TotalSpent в порядке убывания.
Операторы HAVING и ORDER BY могут использоваться вместе в одном запросе для фильтрации и сортировки агрегированных данных.
Вложенные запросы (или подзапросы) в SQL — это запросы, которые находятся внутри другого запроса. Они могут использоваться для выполнения более сложных операций, таких как фильтрация, агрегация или получение данных из нескольких таблиц. Вложенные запросы могут быть использованы в различных частях SQL-запроса, включая SELECT, WHERE, FROM и HAVING
Внутренний подзапрос SELECT UserID, COUNT(OrderID) AS OrderCount FROM Orders GROUP BY UserID вычисляет количество заказов для каждого пользователя;
Внешний подзапрос SELECT MAX(OrderCount) FROM (...) находит максимальное количество заказов среди всех пользователей;
Внешний запрос фильтрует пользователей, у которых количество заказов больше максимального.
SELECT MIN(OrderAmount) AS LowestOrder FROM Orders; -- Нахождение минимального значения заказа
5) MAX возвращает максимальное значение в указанном столбце. Она используется для нахождения наибольшего значения в наборе данных.
SELECT MAX(OrderAmount) AS HighestOrder FROM Orders; -- Нахождение максимального значения заказа
Агрегатные функции часто используются вместе с оператором GROUP BY, чтобы сгруппировать результаты по определённому столбцу.
SELECT UserID, COUNT(OrderID) AS TotalOrders, SUM(OrderAmount) AS TotalSpent
FROM Orders
GROUP BY UserID; -- Подсчёт количества заказов и общей суммы потраченных средств для каждого пользователя
Оператор HAVING используется для фильтрации результатов, которые были агрегированы с помощью агрегатных функций (таких как COUNT, SUM, AVG, MIN, MAX). Он применяется после оператора GROUP BY и позволяет задавать условия для групп.
SELECT UserID, COUNT(OrderID) AS TotalOrders
FROM Orders
GROUP BY UserID
HAVING COUNT(OrderID) > 5; -- Возвращает только тех пользователей, у которых более 5 заказов
В этом запросе сначала происходит группировка данных по User ID, а затем с помощью HAVING фильтруются группы, у которых количество заказов больше 5.
Оператор ORDER BY используется для сортировки результатов запроса по одному или нескольким столбцам. По умолчанию сортировка происходит по возрастанию (ASC), но можно указать сортировку по убыванию (DESC).
SELECT UserID, SUM(OrderAmount) AS TotalSpent
FROM Orders
GROUP BY UserID
ORDER BY TotalSpent DESC; -- Сортировка по общей сумме потраченных средств в порядке убывания
В этом запросе сначала происходит группировка данных по User ID, затем вычисляется общая сумма потраченных средств для каждого пользователя, и, наконец, результаты сортируются по TotalSpent в порядке убывания.
Операторы HAVING и ORDER BY могут использоваться вместе в одном запросе для фильтрации и сортировки агрегированных данных.
SELECT UserID, COUNT(OrderID) AS TotalOrders, SUM(OrderAmount) AS TotalSpent
FROM Orders
GROUP BY UserID
HAVING COUNT(OrderID) > 2 -- Фильтрация пользователей с более чем 2 заказами
ORDER BY TotalSpent DESC; -- Сортировка по общей сумме потраченных средств в порядке убывания
Вложенные запросы (или подзапросы) в SQL — это запросы, которые находятся внутри другого запроса. Они могут использоваться для выполнения более сложных операций, таких как фильтрация, агрегация или получение данных из нескольких таблиц. Вложенные запросы могут быть использованы в различных частях SQL-запроса, включая SELECT, WHERE, FROM и HAVING
SELECT UserID, COUNT(OrderID) AS OrderCount
FROM Orders
GROUP BY UserID
HAVING COUNT(OrderID) > (
SELECT MAX(OrderCount)
FROM (
SELECT UserID, COUNT(OrderID) AS OrderCount
FROM Orders
GROUP BY UserID
) AS UserOrderCounts
);
Внутренний подзапрос SELECT UserID, COUNT(OrderID) AS OrderCount FROM Orders GROUP BY UserID вычисляет количество заказов для каждого пользователя;
Внешний подзапрос SELECT MAX(OrderCount) FROM (...) находит максимальное количество заказов среди всех пользователей;
Внешний запрос фильтрует пользователей, у которых количество заказов больше максимального.
В общепринятой модели сетевых взаимодействий OSI существует множество "слоёв" (или "уровней"), два из которых заслуживают отдельного внимания - это уровни 2 и 3, которые называют канальным и сетевым соответственно.
Особенностью этих уровней является то, что на них происходит обнаружение сетевых устройств и обмен трафиком - по физической информационной сети.
Канальный уровень (L2) относится к локальной сети (LAN или ЛВС) и обеспечивает передачу данных между устройствами в пределах этой сети - в пределах одного широковещательного домена; а сетевой уровень (L3) отвечает за межсетевое взаимодействие, включая маршрутизацию между множеством локальных (L2) сетей, логическую адресацию (с помощью IP) и управление трафиком (например, QoS, ACL).
По сути - L3 дополняет и расширяет L2, позволяя через маршрутизаторы обмениваться трафиком устройствам, находящихся в разных L2 сетях.
продолжение в следующем сообщении
Особенностью этих уровней является то, что на них происходит обнаружение сетевых устройств и обмен трафиком - по физической информационной сети.
Канальный уровень (L2) относится к локальной сети (LAN или ЛВС) и обеспечивает передачу данных между устройствами в пределах этой сети - в пределах одного широковещательного домена; а сетевой уровень (L3) отвечает за межсетевое взаимодействие, включая маршрутизацию между множеством локальных (L2) сетей, логическую адресацию (с помощью IP) и управление трафиком (например, QoS, ACL).
По сути - L3 дополняет и расширяет L2, позволяя через маршрутизаторы обмениваться трафиком устройствам, находящихся в разных L2 сетях.
продолжение в следующем сообщении
L2-сети хорошо масштабируются до 50–100 устройств.
- После 200 устройств производительность начинает снижаться из-за широковещательного трафика и переполнения CAM-таблиц.
- Для сетей с более чем 500 устройствами рекомендуется сегментировать сеть на разные VLAN и использовать L3 для связи между ними.
Ключевые различия между L2 и L3:
1) Единица передачи данных
- L2 (Канальный уровень):
- Передаётся кадр (frame).
- Кадр содержит MAC-адреса отправителя и получателя, а также полезную нагрузку (данные) и контрольную сумму (FCS).
- L3 (Сетевой уровень):
- Внутри полезной нагрузки кадра, передаётся пакет (packet).
- Пакет содержит IP-адреса отправителя и получателя, а также данные и служебную информацию (например, TTL, протокол).
2) Адресация
- L2:
- Используются MAC-адреса (физические адреса устройств).
- MAC-адреса уникальны для каждого сетевого интерфейса и "привязаны" к оборудованию.
- L3:
- Используются IP-адреса (логические адреса устройств).
- IP-адреса назначаются административно и могут изменяться.
3) Область действия
- L2:
- Работает в пределах одного широковещательного домена (например, одной VLAN или одной подсети).
- Коммутаторы пересылают кадры только внутри одного L2-сегмента.
- L3:
- Работает между разными сетевыми сегментами (подсетями).
- Маршрутизаторы пересылают пакеты между разными L3-сетями.
4) Устройства, используемые для передачи
- L2:
- Коммутаторы (switch) пересылают кадры на основе MAC-адресов.
- Коммутаторы работают только в пределах одного широковещательного домена.
- L3:
- Маршрутизаторы (router) пересылают пакеты на основе IP-адресов.
- Маршрутизаторы могут связывать разные сети (подсети).
5) Протоколы
- L2:
- Используются протоколы канального уровня:
- Ethernet (IEEE 802.3).
- ARP (Address Resolution Protocol) для поиска MAC-адреса по IP.
- STP (Spanning Tree Protocol) для предотвращения петель.
- L3:
- Используются протоколы сетевого уровня:
- IP (Internet Protocol).
- ICMP (Internet Control Message Protocol) для диагностики.
- Протоколы маршрутизации: OSPF, EIGRP, BGP.
6) Обработка широковещательного трафика
- L2:
- Широковещательные кадры (например, ARP-запросы) пересылаются на все устройства в пределах одного широковещательного домена.
- L3:
- Широковещательные пакеты (например, DHCP-запросы) могут быть ограничены маршрутизаторами и не пересылаются между подсетями.
7) Масштабируемость
- L2:
- Масштабируемость ограничена размером широковещательного домена. Большие L2-сети могут страдать от флудинга и перегрузок.
- L3:
- Масштабируемость выше, так как маршрутизация позволяет разделять сеть на подсети и эффективно управлять трафиком.
8) Пример передачи данных
- L2:
- Компьютер A отправляет кадр на MAC-адрес компьютера B через коммутатор.
- Коммутатор пересылает кадр только на порт, к которому подключен компьютер B (если MAC-адрес известен).
- L3:
- Компьютер A отправляет пакет на IP-адрес компьютера B в другой подсети.
- Маршрутизатор пересылает пакет через несколько сетей, пока он не достигнет сети компьютера B.
9) Заголовки
- L2:
- Заголовок кадра включает:
- MAC-адрес отправителя.
- MAC-адрес получателя.
- EtherType (указывает тип данных, например, IPv4 или ARP).
- L3:
- Заголовок пакета включает:
- IP-адрес отправителя.
- IP-адрес получателя.
- TTL (Time to Live) для предотвращения бесконечной циркуляции пакета.
- Протокол (например, TCP, UDP, ICMP).
10) Назначение
- L2:
- Обеспечивает передачу данных между устройствами в одной локальной сети (LAN).
- L3:
- Обеспечивает передачу данных между разными сетями (WAN или между подсетями в LAN).
- После 200 устройств производительность начинает снижаться из-за широковещательного трафика и переполнения CAM-таблиц.
- Для сетей с более чем 500 устройствами рекомендуется сегментировать сеть на разные VLAN и использовать L3 для связи между ними.
Ключевые различия между L2 и L3:
1) Единица передачи данных
- L2 (Канальный уровень):
- Передаётся кадр (frame).
- Кадр содержит MAC-адреса отправителя и получателя, а также полезную нагрузку (данные) и контрольную сумму (FCS).
- L3 (Сетевой уровень):
- Внутри полезной нагрузки кадра, передаётся пакет (packet).
- Пакет содержит IP-адреса отправителя и получателя, а также данные и служебную информацию (например, TTL, протокол).
2) Адресация
- L2:
- Используются MAC-адреса (физические адреса устройств).
- MAC-адреса уникальны для каждого сетевого интерфейса и "привязаны" к оборудованию.
- L3:
- Используются IP-адреса (логические адреса устройств).
- IP-адреса назначаются административно и могут изменяться.
3) Область действия
- L2:
- Работает в пределах одного широковещательного домена (например, одной VLAN или одной подсети).
- Коммутаторы пересылают кадры только внутри одного L2-сегмента.
- L3:
- Работает между разными сетевыми сегментами (подсетями).
- Маршрутизаторы пересылают пакеты между разными L3-сетями.
4) Устройства, используемые для передачи
- L2:
- Коммутаторы (switch) пересылают кадры на основе MAC-адресов.
- Коммутаторы работают только в пределах одного широковещательного домена.
- L3:
- Маршрутизаторы (router) пересылают пакеты на основе IP-адресов.
- Маршрутизаторы могут связывать разные сети (подсети).
5) Протоколы
- L2:
- Используются протоколы канального уровня:
- Ethernet (IEEE 802.3).
- ARP (Address Resolution Protocol) для поиска MAC-адреса по IP.
- STP (Spanning Tree Protocol) для предотвращения петель.
- L3:
- Используются протоколы сетевого уровня:
- IP (Internet Protocol).
- ICMP (Internet Control Message Protocol) для диагностики.
- Протоколы маршрутизации: OSPF, EIGRP, BGP.
6) Обработка широковещательного трафика
- L2:
- Широковещательные кадры (например, ARP-запросы) пересылаются на все устройства в пределах одного широковещательного домена.
- L3:
- Широковещательные пакеты (например, DHCP-запросы) могут быть ограничены маршрутизаторами и не пересылаются между подсетями.
7) Масштабируемость
- L2:
- Масштабируемость ограничена размером широковещательного домена. Большие L2-сети могут страдать от флудинга и перегрузок.
- L3:
- Масштабируемость выше, так как маршрутизация позволяет разделять сеть на подсети и эффективно управлять трафиком.
8) Пример передачи данных
- L2:
- Компьютер A отправляет кадр на MAC-адрес компьютера B через коммутатор.
- Коммутатор пересылает кадр только на порт, к которому подключен компьютер B (если MAC-адрес известен).
- L3:
- Компьютер A отправляет пакет на IP-адрес компьютера B в другой подсети.
- Маршрутизатор пересылает пакет через несколько сетей, пока он не достигнет сети компьютера B.
9) Заголовки
- L2:
- Заголовок кадра включает:
- MAC-адрес отправителя.
- MAC-адрес получателя.
- EtherType (указывает тип данных, например, IPv4 или ARP).
- L3:
- Заголовок пакета включает:
- IP-адрес отправителя.
- IP-адрес получателя.
- TTL (Time to Live) для предотвращения бесконечной циркуляции пакета.
- Протокол (например, TCP, UDP, ICMP).
10) Назначение
- L2:
- Обеспечивает передачу данных между устройствами в одной локальной сети (LAN).
- L3:
- Обеспечивает передачу данных между разными сетями (WAN или между подсетями в LAN).
Сравнение производительности сетевых протоколов для систем хранения данных
Пропускная способность — сколько данных можно передать за секунду.
Задержка — сколько времени занимает одна операция.
IOPS — сколько операций можно выполнить за секунду.
продолжение в следующем сообщении
Пропускная способность — сколько данных можно передать за секунду.
Задержка — сколько времени занимает одна операция.
IOPS — сколько операций можно выполнить за секунду.
продолжение в следующем сообщении
Что нужно для NVMe-RoCE
1. Сетевое оборудование
Для RoCEv2 требуется сеть Ethernet с поддержкой RDMA (Remote Direct Memory Access). Ключевые компоненты:
a) Сетевые адаптеры (NIC) с поддержкой RDMA:
Адаптеры должны поддерживать RDMA и RoCEv2.
b) Коммутаторы с поддержкой RoCEv2:
Коммутаторы должны поддерживать PFC (Priority Flow Control) и ECN (Explicit Congestion Notification) для обеспечения качества обслуживания (QoS) и предотвращения потерь пакетов.
Коммутаторы должны быть настроены для работы с RoCEv2, включая настройку приоритетов трафика и буферов.
2. Серверы и системы хранения
a) Серверы:
b) Системы хранения данных:
Системы хранения должны поддерживать NVMe-oF и RoCEv2.
Внутри системы хранения должны быть установлены NVMe-накопители и контроллеры, поддерживающие NVMe-oF.
3. Программное обеспечение
a) Драйверы и утилиты:
На серверах и системах хранения должны быть установлены драйверы для сетевых адаптеров с поддержкой RDMA (например, Mellanox OFED или Intel Ethernet Drivers).
Для Linux:
Установите пакеты nvme-cli, rdma-core и libibverbs.
Проверьте поддержку RoCEv2:
В выводе ищите строку transport_type: RoCE v2.
b) Настройка NVMe-oF:
На стороне системы хранения (Target) настройте экспорт NVMe-устройств через RoCEv2.
На стороне сервера (Initiator) используйте команды nvme connect для подключения к целевым устройствам. Пример:
Где:
-t rdma — тип транспорта (RoCEv2).
-n <nqn> — NQN (NVMe Qualified Name) целевого устройства.
-a <target_ip> — IP-адрес системы хранения.
-s 4420 — порт (по умолчанию 4420 для NVMe-oF).
4. Сеть
a) Требования к сети:
Высокая пропускная способность: Рекомендуется использовать сеть 25 Гбит/с, 40 Гбит/с, 50 Гбит/с или 100 Гбит/с.
Низкие задержки: Для RoCEv2 критически важны низкие задержки, поэтому сеть должна быть настроена для минимизации задержек.
PFC и ECN: Включите Priority Flow Control (PFC) и Explicit Congestion Notification (ECN) на коммутаторах для управления перегрузками.
b) Пример настройки PFC:
На коммутаторе (например, Mellanox Spectrum):
5. Проверка и мониторинг
a) Проверка подключения:
Используйте команду nvme list на сервере, чтобы убедиться, что устройства подключены через NVMe-oF.
Проверка статуса RDMA:
b) Мониторинг производительности:
Используйте инструменты, такие как perf, nvme perf или fio, для тестирования производительности.
Пример теста с fio:
1. Сетевое оборудование
Для RoCEv2 требуется сеть Ethernet с поддержкой RDMA (Remote Direct Memory Access). Ключевые компоненты:
a) Сетевые адаптеры (NIC) с поддержкой RDMA:
Адаптеры должны поддерживать RDMA и RoCEv2.
Примеры популярных адаптеров:
Mellanox ConnectX-5/6 (например, ConnectX-5 EN, ConnectX-6 Dx).
Broadcom NetXtreme-E (например, BCM57414).
Intel Ethernet 800 Series (например, E810-CQDA2).
b) Коммутаторы с поддержкой RoCEv2:
Коммутаторы должны поддерживать PFC (Priority Flow Control) и ECN (Explicit Congestion Notification) для обеспечения качества обслуживания (QoS) и предотвращения потерь пакетов.
Примеры коммутаторов:
Mellanox Spectrum (например, Spectrum-2).
Cisco Nexus 9000 Series.
Arista 7050X/7060X Series.
Коммутаторы должны быть настроены для работы с RoCEv2, включая настройку приоритетов трафика и буферов.
2. Серверы и системы хранения
a) Серверы:
Серверы должны иметь:
Современные процессоры (например, Intel Xeon Scalable или AMD EPYC).
Поддержку PCIe 3.0/4.0 для подключения сетевых адаптеров.
Операционную систему с поддержкой NVMe-oF и RoCEv2 (например, Linux с ядром 4.12+ или Windows Server 2019+).
b) Системы хранения данных:
Системы хранения должны поддерживать NVMe-oF и RoCEv2.
Примеры:
Pure Storage FlashArray//X.
Dell EMC PowerMax.
NetApp AFF A-Series.
Внутри системы хранения должны быть установлены NVMe-накопители и контроллеры, поддерживающие NVMe-oF.
3. Программное обеспечение
a) Драйверы и утилиты:
На серверах и системах хранения должны быть установлены драйверы для сетевых адаптеров с поддержкой RDMA (например, Mellanox OFED или Intel Ethernet Drivers).
Для Linux:
Установите пакеты nvme-cli, rdma-core и libibverbs.
Проверьте поддержку RoCEv2:
ibv_devinfo
В выводе ищите строку transport_type: RoCE v2.
b) Настройка NVMe-oF:
На стороне системы хранения (Target) настройте экспорт NVMe-устройств через RoCEv2.
На стороне сервера (Initiator) используйте команды nvme connect для подключения к целевым устройствам. Пример:
nvme connect -t rdma -n <nqn> -a <target_ip> -s 4420
Где:
-t rdma — тип транспорта (RoCEv2).
-n <nqn> — NQN (NVMe Qualified Name) целевого устройства.
-a <target_ip> — IP-адрес системы хранения.
-s 4420 — порт (по умолчанию 4420 для NVMe-oF).
4. Сеть
a) Требования к сети:
Высокая пропускная способность: Рекомендуется использовать сеть 25 Гбит/с, 40 Гбит/с, 50 Гбит/с или 100 Гбит/с.
Низкие задержки: Для RoCEv2 критически важны низкие задержки, поэтому сеть должна быть настроена для минимизации задержек.
PFC и ECN: Включите Priority Flow Control (PFC) и Explicit Congestion Notification (ECN) на коммутаторах для управления перегрузками.
b) Пример настройки PFC:
На коммутаторе (например, Mellanox Spectrum):
interface ethernet 1/1
priority-flow-control mode on
priority-flow-control priority 3 on
5. Проверка и мониторинг
a) Проверка подключения:
Используйте команду nvme list на сервере, чтобы убедиться, что устройства подключены через NVMe-oF.
Проверка статуса RDMA:
ibv_devinfo
b) Мониторинг производительности:
Используйте инструменты, такие как perf, nvme perf или fio, для тестирования производительности.
Пример теста с fio:
fio --filename=/dev/nvme0n1 --rw=read --bs=4k --iodepth=32 --runtime=60 --name=test
Stateless, Stateful, Serverless, Blockchain, Smart contract, dApp
продолжение в следующих трёх сообщениях
Blockchain (Блокчейн) - в переводе "цепочка блоков". Это децентрализованная база данных, где информация хранится в блоках, связанных в строгую последовательность через хеш-сумму предыдущего блока - непрерывно до первого "генезис" блока, а все данные дублируются на тысячах нод (узлов).
продолжение в следующих трёх сообщениях
Stateless (без состояния) - каждый запрос обрабатывается независимо, сервер не хранит информацию о предыдущих запросах. Весь необходимый контекст сессии (сеанса) сохраняется на стороне клиента и с каждым новым запросом повторно передаётся по сети. Например - большая языковая модель "DeepSeek" - не сохраняет историю переписки с пользователем и не обучается на поступающих запросах, в то время как пользовательский браузер, через который осуществляется взаимодействие с поисковой системой - отправляет чат-боту всю предыдущую историю переписки с ним при каждом новом сообщении (в рамках одного диалога). Примеры архитектур "без состояния": HTTP-протокол, REST API.
Stateful (с состоянием) - сервер сохраняет информацию о состоянии клиента между запросами. Удобно для сложных взаимодействий (например, онлайн-игры), однако сложнее масштабировать и возможны проблемы при отказе сервера. Примеры: сессии в веб-приложениях, базы данных, WebSockets.
HTTPS (протокол защищённой передачи данных) - является stateless. Он состоит из двух stateless частей: HTTP и TLS. HTTP передаёт session_id (идентификатор сессии, созданный в приложении), зашифрованный с помощью session_key в TLS. Session_id не входит в состав HTTPS (поскольку это часть приложения, а не протокола), а session_key может обновиться в любой момент - поэтому временное хранение session_key не делает TLS stateful. А вот backend-приложение, сверяющее расшифрованный session_id со своей базой - вот это уже stateful.
На физическом (L1) и канальном (L2) уровнях, stateful принципиально невозможен - на этих уровнях происходит обмен битами без понятия "сессии". На сетевом уровне (L3), IP-пакеты обрабатываются независимо, кроме тех случаев, когда используется NAT (трансляция адресов), который хранит таблицу соответствий "локальный IP:порт <=> публичный IP:порт". На траспортном уровне (L4), протокол UDP является stateless, так как передача данных происходит без установки соединения, а протокол TCP хранит состояние соединения (SYN/ACK, порядок пакетов, окно перегрузки), поэтому является stateful. Сеансовый урвень (L5) специально создан для управления сеансами (но редко реализуется явно в современных стеках). В качестве примеров stateful L5 можно привести токены авторизации Kerberos и диалоговые сессии в SIP-протоколе (VoIP). На уровне представления (L6) происходит шифрование и компрессия данных, которые обходятся без сохранения состояния, поэтому являются stateless. Прикладной уровень (L7) - является главным "доменом" stateful-логики: Веб-сессии (session_id в куках); Базы данных (транзакции); FTP (сервер помнит текущую директорию); WebSockets.
Serverless — "безсерверный" стиль работы. Конечно же, не означает отсутствие серверов - но означает отсутствие возни с ними. AWS Lambda, Google Cloud Functions, Azure Functions - предоставляют веб-интерфейс, через который можно загрузить в их облако код, который будет выполняться в ответ на события, а провайдер услуги берёт плату только за время выполнения кода. Так же возможно автоматическое масштабирование в случае увеличения роста потребностей у приложения. Однако, есть и минусы - холодный старт (задерка при первом запуске) и ограничения на время выполнения.
Blockchain (Блокчейн) - в переводе "цепочка блоков". Это децентрализованная база данных, где информация хранится в блоках, связанных в строгую последовательность через хеш-сумму предыдущего блока - непрерывно до первого "генезис" блока, а все данные дублируются на тысячах нод (узлов).
Stateful (с состоянием) - сервер сохраняет информацию о состоянии клиента между запросами. Удобно для сложных взаимодействий (например, онлайн-игры), однако сложнее масштабировать и возможны проблемы при отказе сервера. Примеры: сессии в веб-приложениях, базы данных, WebSockets.
HTTPS (протокол защищённой передачи данных) - является stateless. Он состоит из двух stateless частей: HTTP и TLS. HTTP передаёт session_id (идентификатор сессии, созданный в приложении), зашифрованный с помощью session_key в TLS. Session_id не входит в состав HTTPS (поскольку это часть приложения, а не протокола), а session_key может обновиться в любой момент - поэтому временное хранение session_key не делает TLS stateful. А вот backend-приложение, сверяющее расшифрованный session_id со своей базой - вот это уже stateful.
На физическом (L1) и канальном (L2) уровнях, stateful принципиально невозможен - на этих уровнях происходит обмен битами без понятия "сессии". На сетевом уровне (L3), IP-пакеты обрабатываются независимо, кроме тех случаев, когда используется NAT (трансляция адресов), который хранит таблицу соответствий "локальный IP:порт <=> публичный IP:порт". На траспортном уровне (L4), протокол UDP является stateless, так как передача данных происходит без установки соединения, а протокол TCP хранит состояние соединения (SYN/ACK, порядок пакетов, окно перегрузки), поэтому является stateful. Сеансовый урвень (L5) специально создан для управления сеансами (но редко реализуется явно в современных стеках). В качестве примеров stateful L5 можно привести токены авторизации Kerberos и диалоговые сессии в SIP-протоколе (VoIP). На уровне представления (L6) происходит шифрование и компрессия данных, которые обходятся без сохранения состояния, поэтому являются stateless. Прикладной уровень (L7) - является главным "доменом" stateful-логики: Веб-сессии (session_id в куках); Базы данных (транзакции); FTP (сервер помнит текущую директорию); WebSockets.
Serverless — "безсерверный" стиль работы. Конечно же, не означает отсутствие серверов - но означает отсутствие возни с ними. AWS Lambda, Google Cloud Functions, Azure Functions - предоставляют веб-интерфейс, через который можно загрузить в их облако код, который будет выполняться в ответ на события, а провайдер услуги берёт плату только за время выполнения кода. Так же возможно автоматическое масштабирование в случае увеличения роста потребностей у приложения. Однако, есть и минусы - холодный старт (задерка при первом запуске) и ограничения на время выполнения.
Blockchain (Блокчейн) - в переводе "цепочка блоков". Это децентрализованная база данных, где информация хранится в блоках, связанных в строгую последовательность через хеш-сумму предыдущего блока - непрерывно до первого "генезис" блока, а все данные дублируются на тысячах нод (узлов).
Как хранится блокчейн:
1) Полные ноды (Full Nodes): Полные ноды хранят весь блокчейн, то есть каждую транзакцию и каждый блок, начиная с самого первого (генезис-блока). Они выполняют критически важную задачу проверки и обеспечения согласованности сети. Пример: В сети Bitcoin полные ноды поддерживают всю цепочку блоков. На данный момент размер блокчейна Bitcoin составляет около 647 гигабайт. Это данные для полной ноды, которая хранит всю историю транзакций с момента создания сети в 2009 году. Максимальный размер блока сети Bitcoin составляет 1 мегабайт. Это ограничение введено для обеспечения стабильной работы сети и предотвращения слишком больших нагрузок на ноды.
2) Легкие ноды (Light Nodes): Легкие ноды хранят только небольшую часть данных, необходимую для проверки транзакций. Обычно это называется "заголовок блока" (header), который включает в себя хеш и метаданные. Они полагаются на полные ноды для получения детальной информации о цепочке. Используются в мобильных кошельках и приложениях, где важно сохранить низкий объем хранимых данных.
"Классический" блокчейн не фрагментируется между нодами, каждая полная нода хранит одну и ту же копию всей цепочки. Весь блокчейн не "разделен" между узлами, а реплицируется (дублируется) на всех полных нодах сети. В некоторых новых блокчейнах, таких как Polkadot или Solana, применяются подходы для повышения масштабируемости, такие как шрдинг и деление по уровням. Шардинг (Sharding): Делит данные между нодами по сегментам, где каждая нода обрабатывает только часть данных. Однако это сложная технология, и шардинг отличается от традиционной репликации блокчейнов. Хранение в слоях (Layered Storage): Вторая или третья инфраструктура хранит часть менее используемых данных.
Связь хеш-сумм с содержанием блоков и зависимость между всеми следующими друг за другом хеш-суммами говорит о том, что для того, чтобы подделать (подменить) информацию в блоке, который уже был включён в цепь - необходимо пересчитать хеш сумму этого блока, что приведёт к изменению всех остальных следующих из неё хеш-сумм. Это приведёт к тому, что возникнет разница в данных, которые уже были записаны на другие ноды, с новыми данными, которые пытается переписать злоумышленник. До тех пор, пока этот злоумышленник не владеет 51% (и более) вычислительных мощностей всей сети - ему не удастся внести изменения в цепь таким образом, чтобы с ним согласилась вся остальная сеть.
Вся надёжность технологии блокчейна сводится к сложности концентрации более чем 51% ресурсов в руках злоумышленников.
Если атака 51% будет обнаружена, разработчики и сообщество могут принять решение "инициировать форк" - о создании новой цепочки, которая исключает внесенные злоумышленником изменения. Это произошло, например, в результате атаки на Ethereum в 2016 году, когда был инициирован хард-форк, разделивший сеть на Ethereum и Ethereum Classic.
Консенсус — это механизм, с помощью которого ноды (узлы) сети договариваются о текущем состоянии блокчейна. Без консенсуса блокчейн превратился бы в набор противоречивых данных, а децентрализация стала бы невозможной. В традиционных системах (например, банковских) есть центральный сервер, который определяет, какие транзакции valid. В блокчейне нет центрального органа, поэтому ноды должны сами приходить к соглашению: Какие транзакции включать в блок; Какой блок считать "правильным"; Как обрабатывать конфликты (например, если две ноды создали блок одновременно).
Существует несколько алгоритмов консенсуса, но общий принцип такой:
1) Ноды предлагают новые блоки (с транзакциями).
2) Сеть проверяет их по строгим правилам (корректность хешей, подписей и т.д.).
3) Выбирается одна версия блокчейна (та, которую поддерживает большинство).
1) Полные ноды (Full Nodes): Полные ноды хранят весь блокчейн, то есть каждую транзакцию и каждый блок, начиная с самого первого (генезис-блока). Они выполняют критически важную задачу проверки и обеспечения согласованности сети. Пример: В сети Bitcoin полные ноды поддерживают всю цепочку блоков. На данный момент размер блокчейна Bitcoin составляет около 647 гигабайт. Это данные для полной ноды, которая хранит всю историю транзакций с момента создания сети в 2009 году. Максимальный размер блока сети Bitcoin составляет 1 мегабайт. Это ограничение введено для обеспечения стабильной работы сети и предотвращения слишком больших нагрузок на ноды.
2) Легкие ноды (Light Nodes): Легкие ноды хранят только небольшую часть данных, необходимую для проверки транзакций. Обычно это называется "заголовок блока" (header), который включает в себя хеш и метаданные. Они полагаются на полные ноды для получения детальной информации о цепочке. Используются в мобильных кошельках и приложениях, где важно сохранить низкий объем хранимых данных.
"Классический" блокчейн не фрагментируется между нодами, каждая полная нода хранит одну и ту же копию всей цепочки. Весь блокчейн не "разделен" между узлами, а реплицируется (дублируется) на всех полных нодах сети. В некоторых новых блокчейнах, таких как Polkadot или Solana, применяются подходы для повышения масштабируемости, такие как шрдинг и деление по уровням. Шардинг (Sharding): Делит данные между нодами по сегментам, где каждая нода обрабатывает только часть данных. Однако это сложная технология, и шардинг отличается от традиционной репликации блокчейнов. Хранение в слоях (Layered Storage): Вторая или третья инфраструктура хранит часть менее используемых данных.
Связь хеш-сумм с содержанием блоков и зависимость между всеми следующими друг за другом хеш-суммами говорит о том, что для того, чтобы подделать (подменить) информацию в блоке, который уже был включён в цепь - необходимо пересчитать хеш сумму этого блока, что приведёт к изменению всех остальных следующих из неё хеш-сумм. Это приведёт к тому, что возникнет разница в данных, которые уже были записаны на другие ноды, с новыми данными, которые пытается переписать злоумышленник. До тех пор, пока этот злоумышленник не владеет 51% (и более) вычислительных мощностей всей сети - ему не удастся внести изменения в цепь таким образом, чтобы с ним согласилась вся остальная сеть.
Вся надёжность технологии блокчейна сводится к сложности концентрации более чем 51% ресурсов в руках злоумышленников.
Если атака 51% будет обнаружена, разработчики и сообщество могут принять решение "инициировать форк" - о создании новой цепочки, которая исключает внесенные злоумышленником изменения. Это произошло, например, в результате атаки на Ethereum в 2016 году, когда был инициирован хард-форк, разделивший сеть на Ethereum и Ethereum Classic.
Консенсус — это механизм, с помощью которого ноды (узлы) сети договариваются о текущем состоянии блокчейна. Без консенсуса блокчейн превратился бы в набор противоречивых данных, а децентрализация стала бы невозможной. В традиционных системах (например, банковских) есть центральный сервер, который определяет, какие транзакции valid. В блокчейне нет центрального органа, поэтому ноды должны сами приходить к соглашению: Какие транзакции включать в блок; Какой блок считать "правильным"; Как обрабатывать конфликты (например, если две ноды создали блок одновременно).
Существует несколько алгоритмов консенсуса, но общий принцип такой:
1) Ноды предлагают новые блоки (с транзакциями).
2) Сеть проверяет их по строгим правилам (корректность хешей, подписей и т.д.).
3) Выбирается одна версия блокчейна (та, которую поддерживает большинство).
Основные алгоритмы консенсуса:
1) Proof of Work (PoW) — "Доказательство работы": Участники сети (майнеры) решают вычислительно сложные задачи, чтобы найти подходящий хеш. Победитель добавляет блок в цепочку и получает вознаграждение. Где используется: Bitcoin, Ethereum (до перехода на PoS). Плюсы: Надежная защита, атака 51% требует огромных затрат. Минусы: Очень высокое энергопотребление.
2) Proof of Stake (PoS) — "Доказательство доли": Валидаторы блокируют свои монеты (ставят их на кон) для получения права добавлять блоки. Вероятность выбора зависит от размера доли. Где используется: Ethereum (после The Merge), Cardano, Solana. Плюсы: Энергоэффективность, экономичность. Минусы: Удержание власти крупными держателями токенов.
3) Delegated Proof of Stake (DPoS) — "Делегированное доказательство доли": Владельцы токенов голосуют за валидаторов, которые создают блоки от имени сети. Где используется: EOS, TRON. Плюсы: Высокая скорость и низкие затраты. Минусы: Риск централизации из-за малой группы валидаторов.
4) Proof of Authority (PoA) — "Доказательство авторитета": Только валидаторы с подтвержденным статусом получают право добавлять блоки. Где используется: VeChain, Ethereum в частных сетях. Плюсы: Скорость и высокая надежность. Минусы: Централизация и необходимость доверия к валидаторам.
5) Proof of Burn (PoB) — "Доказательство сжигания": Участники уничтожают часть своих токенов, чтобы получить возможность добавлять блоки. Где используется: Slimcoin. Плюсы: Энергоэффективность и простота. Минусы: Потеря части токенов на участие в процессе.
6) Proof of Capacity (PoC) — "Доказательство объема": Участники предоставляют свободное место на своих дисках для хранения данных блокчейна. Где используется: Burstcoin. Плюсы: Экологичность и низкие затраты. Минусы: Требуются значительные ресурсы для хранения.
7) Proof of Activity (PoA) — "Доказательство активности": Комбинация PoW и PoS, где майнеры решают задачи, а валидаторы подтверждают блоки. Где используется: Decred. Плюсы: Баланс между безопасностью и энергоэффективностью. Минусы: Усложнение процесса.
8) Proof of Time and Space (PoTS) — "Доказательство времени и пространства": Узлы выделяют дисковое пространство и время для участия в консенсусе. Где используется: Chia. Плюсы: Низкое энергопотребление. Минусы: Требования к дисковому пространству.
Смарт-контракт - это программный код, который автоматически выполняет заданные условия, записанные в блокчейне. Например, он может автоматически переводить средства при выполнении определённых условий. Смарт-контракт — это "строительный блок" для dApps, обеспечивающий логику работы приложения. Смарт-контракты поддерживаются не всеми блокчейнами, например, Биткоин - не использует смарт-контракты и на нём невозможно запустить свой код. Участники сети Биткоин тратят свои вычислительные ресурсы только на вычисление новых блоков и проведение транзакций - за что и получают свои комиссии. Однако другие блокчейны, такие как Ethereum, позволяют работать со смарт-контрактами, выполняя программный код, записанный в блоках, на нодах-участниках сети, за что они получают плату в виде так называемого "газа" (Gas), который затем "сжигается", чтобы удерживать инфляцию. Пример: Сделка на платформе Ethereum — смарт-контракт может обрабатывать передачу NFT или средств.
dApp (распределённое приложение) - это полноценное приложение, построенное на основе блокчейна, которое включает в себя интерфейс для взаимодействия пользователей и может опираться на один или несколько смарт-контрактов. dApp — это конечный продукт, который использует смарт-контракты для выполнения задач, таких как финансы (DeFi), игры, NFT и т.д. Пример: Uniswap — децентрализованная биржа, использующая множество смарт-контрактов для обработки обмена токенов.
1) Proof of Work (PoW) — "Доказательство работы": Участники сети (майнеры) решают вычислительно сложные задачи, чтобы найти подходящий хеш. Победитель добавляет блок в цепочку и получает вознаграждение. Где используется: Bitcoin, Ethereum (до перехода на PoS). Плюсы: Надежная защита, атака 51% требует огромных затрат. Минусы: Очень высокое энергопотребление.
2) Proof of Stake (PoS) — "Доказательство доли": Валидаторы блокируют свои монеты (ставят их на кон) для получения права добавлять блоки. Вероятность выбора зависит от размера доли. Где используется: Ethereum (после The Merge), Cardano, Solana. Плюсы: Энергоэффективность, экономичность. Минусы: Удержание власти крупными держателями токенов.
3) Delegated Proof of Stake (DPoS) — "Делегированное доказательство доли": Владельцы токенов голосуют за валидаторов, которые создают блоки от имени сети. Где используется: EOS, TRON. Плюсы: Высокая скорость и низкие затраты. Минусы: Риск централизации из-за малой группы валидаторов.
4) Proof of Authority (PoA) — "Доказательство авторитета": Только валидаторы с подтвержденным статусом получают право добавлять блоки. Где используется: VeChain, Ethereum в частных сетях. Плюсы: Скорость и высокая надежность. Минусы: Централизация и необходимость доверия к валидаторам.
5) Proof of Burn (PoB) — "Доказательство сжигания": Участники уничтожают часть своих токенов, чтобы получить возможность добавлять блоки. Где используется: Slimcoin. Плюсы: Энергоэффективность и простота. Минусы: Потеря части токенов на участие в процессе.
6) Proof of Capacity (PoC) — "Доказательство объема": Участники предоставляют свободное место на своих дисках для хранения данных блокчейна. Где используется: Burstcoin. Плюсы: Экологичность и низкие затраты. Минусы: Требуются значительные ресурсы для хранения.
7) Proof of Activity (PoA) — "Доказательство активности": Комбинация PoW и PoS, где майнеры решают задачи, а валидаторы подтверждают блоки. Где используется: Decred. Плюсы: Баланс между безопасностью и энергоэффективностью. Минусы: Усложнение процесса.
8) Proof of Time and Space (PoTS) — "Доказательство времени и пространства": Узлы выделяют дисковое пространство и время для участия в консенсусе. Где используется: Chia. Плюсы: Низкое энергопотребление. Минусы: Требования к дисковому пространству.
Смарт-контракт - это программный код, который автоматически выполняет заданные условия, записанные в блокчейне. Например, он может автоматически переводить средства при выполнении определённых условий. Смарт-контракт — это "строительный блок" для dApps, обеспечивающий логику работы приложения. Смарт-контракты поддерживаются не всеми блокчейнами, например, Биткоин - не использует смарт-контракты и на нём невозможно запустить свой код. Участники сети Биткоин тратят свои вычислительные ресурсы только на вычисление новых блоков и проведение транзакций - за что и получают свои комиссии. Однако другие блокчейны, такие как Ethereum, позволяют работать со смарт-контрактами, выполняя программный код, записанный в блоках, на нодах-участниках сети, за что они получают плату в виде так называемого "газа" (Gas), который затем "сжигается", чтобы удерживать инфляцию. Пример: Сделка на платформе Ethereum — смарт-контракт может обрабатывать передачу NFT или средств.
dApp (распределённое приложение) - это полноценное приложение, построенное на основе блокчейна, которое включает в себя интерфейс для взаимодействия пользователей и может опираться на один или несколько смарт-контрактов. dApp — это конечный продукт, который использует смарт-контракты для выполнения задач, таких как финансы (DeFi), игры, NFT и т.д. Пример: Uniswap — децентрализованная биржа, использующая множество смарт-контрактов для обработки обмена токенов.
Содержание / Contents
Hitachi VSP e590 Volumes Deattach
FC Multimode vs Single mode
Routing L1 L2 L3
OSI Open Systems Interconnection
Subnet Mask CIDR Classless Inter-Domain Routing Бесклассовая адресация
Витая пара Twisted pair RJ45 8P8C gigabit ethernet MDI-X Medium Dependent Interface crossover
Витая пара Twisted pair Cat BASE-T distance speed limits
Serial cable Rollover Cisco Консольный кабель
MAC Media Access Control (OSI L2)
CSMA/CD Carrier Sense Multiple Access with Collision Detection
Межкадровые интервалы Fast Ethernet IPG InterPacket Gap
Ethernet frame VLAN
Ethernet Jumbo frame efficiency
Ethernet frame detailed детализация кадра
EtherType values значения
ARP Address Resolution Protocol, DHCP Dynamic Host Configuration Protocol
IEEE 802 Institute of Electrical and Electronical Engineers
Transport OSI L4 Ports транспортный уровень типы портов
Password reset factory default Сброс паролей (к заводским настройкам) для систем хранения данных HPE MSA
Broadcom Brocade G620 - Сброс паролей доступа к устройству Password factory default reset
LANMAN, NTLM, MD5, SHA-1 and SHA-2 checksum hash
Windows DHCP lifehack
(Legacy) BIOS basic input-output system => MBR master boot record; UEFI; CMOS; Secrue Boot
RAM Random Access Memory; SRAM; DRAM; DIMM; RDIMM; LRDIMM; Channel, Rank, Timings, CAS Latency, Frequency
VPN Virtual Private Network
Bytes and Bits
RAID1 vs RAID0 .. RAID6, RAID-DP; Checksum, Parity, Stripe, Chunk, Column, Row
Cache, Buffer, Index and Register; Partitions and Files; Headers, Dividers and Pointers
Буфер обмена, политики кэширования
Физический диск, указатели, спецсимволы, файлы
Индекс, регистр
CPU's cycles on basic tasks
Шифрование данных, симметричное, ассиметричное, RSA
Процессоры: техпроцесс и маркетинг
Виртуализация
Кластеризация
SQL Structured Query Language; NoSQL
Контейнеризация
Микросервисная архитектура
Процесс, алгоритм, программа, язык программирования, компиляция, декомпиляция, исходный код
Flexibility: Block storage > Object storage > File storage
Размеры блоков, файловые системы
Системы счисления и простые множители - особенности операций с плавающей точкой
CPU - Central Processing Unit Центральный Процессор
Физические Серверы и все остальные виды серверов
Сегментация сетей передачи данных
Виртуальная сеть VLAN, Zoning
Бэкапы: резервное копирование и репликация - синхронная и асинхронная
Snapshot, Incremental, Differential, Full backup
Compression and Deduplication, RLE, RAR, ZIP
Топологии сетей, NAT
Bus, Loopback (localhost), Stack, Cluster, Quorum
Гайд по преднастройке импортозамещённых коммутаторов
Двухфакторная аутентификация (2FA) и защищённый криптопроцессор: средства доверенной загрузки, токены, смарт-карты и электронная цифровая подпись, Авторизация, Аутентификация
Конденсаторы, полупроводники, диоды, биполярные и полевые транзисторы, флеш-память
MOSFET, SRAM, DRAM, NAND, NOR
Операционные, файловые и символьные системы
FAT, NTFS, EXT4, LTFS
Гайд: сервер видеонаблюдения на Raspberry Pi 3 Model B
Peripherals: SCSI vs USB NVMe - Компьютерная переферия, скази и usb
SAS, SATA, Fibre Channel, iSCSI, PCI-e
Etherchannel: Network Interface Controller (NIC) Teaming, Bonding, Link Aggregation Group (LAG)
Multipath I/O (input/output) - многопутевой ввод/вывод
Проектирование информационных систем и схемы межсетевых взаимодействий
Многомерные базы данных (MDB), Онлайн-аналитическая обработка (OLAP)
TCPDUMP
Linux Command Line: Bash
Перехват сетевых пакетов: ARP Spoofing, Man In The Middle, Wireshark, снифферинг
YouTube без VPN!
Побайтовое копирование в Linux: dd
RDP Remote Desktop, VDI Virtual Desktop Infrastructure, RDS Remote Desktop Service
ProxMox
Docker
Kubernetes (K8S)
Ansible
Terraform
Git
Jenkins
Network Bridging, Flooding, Broadcasting, Spanning Tree Protocol, Routing
Таблица маршрутизации (routing table)
VRF (Virtual Routing and Forwarding), VXLAN, BGP, EVPN
Распределённый кэш; от простого до продвинутого: Memcached, Redis, Couchbase, KeyDB
Hitachi VSP e590 Volumes Deattach
FC Multimode vs Single mode
Routing L1 L2 L3
OSI Open Systems Interconnection
Subnet Mask CIDR Classless Inter-Domain Routing Бесклассовая адресация
Витая пара Twisted pair RJ45 8P8C gigabit ethernet MDI-X Medium Dependent Interface crossover
Витая пара Twisted pair Cat BASE-T distance speed limits
Serial cable Rollover Cisco Консольный кабель
MAC Media Access Control (OSI L2)
CSMA/CD Carrier Sense Multiple Access with Collision Detection
Межкадровые интервалы Fast Ethernet IPG InterPacket Gap
Ethernet frame VLAN
Ethernet Jumbo frame efficiency
Ethernet frame detailed детализация кадра
EtherType values значения
ARP Address Resolution Protocol, DHCP Dynamic Host Configuration Protocol
IEEE 802 Institute of Electrical and Electronical Engineers
Transport OSI L4 Ports транспортный уровень типы портов
Password reset factory default Сброс паролей (к заводским настройкам) для систем хранения данных HPE MSA
Broadcom Brocade G620 - Сброс паролей доступа к устройству Password factory default reset
LANMAN, NTLM, MD5, SHA-1 and SHA-2 checksum hash
Windows DHCP lifehack
(Legacy) BIOS basic input-output system => MBR master boot record; UEFI; CMOS; Secrue Boot
RAM Random Access Memory; SRAM; DRAM; DIMM; RDIMM; LRDIMM; Channel, Rank, Timings, CAS Latency, Frequency
VPN Virtual Private Network
Bytes and Bits
RAID1 vs RAID0 .. RAID6, RAID-DP; Checksum, Parity, Stripe, Chunk, Column, Row
Cache, Buffer, Index and Register; Partitions and Files; Headers, Dividers and Pointers
Буфер обмена, политики кэширования
Физический диск, указатели, спецсимволы, файлы
Индекс, регистр
CPU's cycles on basic tasks
Шифрование данных, симметричное, ассиметричное, RSA
Процессоры: техпроцесс и маркетинг
Виртуализация
Кластеризация
SQL Structured Query Language; NoSQL
Контейнеризация
Микросервисная архитектура
Процесс, алгоритм, программа, язык программирования, компиляция, декомпиляция, исходный код
Flexibility: Block storage > Object storage > File storage
Размеры блоков, файловые системы
Системы счисления и простые множители - особенности операций с плавающей точкой
CPU - Central Processing Unit Центральный Процессор
Физические Серверы и все остальные виды серверов
Сегментация сетей передачи данных
Виртуальная сеть VLAN, Zoning
Бэкапы: резервное копирование и репликация - синхронная и асинхронная
Snapshot, Incremental, Differential, Full backup
Compression and Deduplication, RLE, RAR, ZIP
Топологии сетей, NAT
Bus, Loopback (localhost), Stack, Cluster, Quorum
Гайд по преднастройке импортозамещённых коммутаторов
Двухфакторная аутентификация (2FA) и защищённый криптопроцессор: средства доверенной загрузки, токены, смарт-карты и электронная цифровая подпись, Авторизация, Аутентификация
Конденсаторы, полупроводники, диоды, биполярные и полевые транзисторы, флеш-память
MOSFET, SRAM, DRAM, NAND, NOR
Операционные, файловые и символьные системы
FAT, NTFS, EXT4, LTFS
Гайд: сервер видеонаблюдения на Raspberry Pi 3 Model B
Peripherals: SCSI vs USB NVMe - Компьютерная переферия, скази и usb
SAS, SATA, Fibre Channel, iSCSI, PCI-e
Etherchannel: Network Interface Controller (NIC) Teaming, Bonding, Link Aggregation Group (LAG)
Multipath I/O (input/output) - многопутевой ввод/вывод
Проектирование информационных систем и схемы межсетевых взаимодействий
Многомерные базы данных (MDB), Онлайн-аналитическая обработка (OLAP)
TCPDUMP
Linux Command Line: Bash
Перехват сетевых пакетов: ARP Spoofing, Man In The Middle, Wireshark, снифферинг
YouTube без VPN!
Побайтовое копирование в Linux: dd
RDP Remote Desktop, VDI Virtual Desktop Infrastructure, RDS Remote Desktop Service
ProxMox
Docker
Kubernetes (K8S)
Ansible
Terraform
Git
Jenkins
Network Bridging, Flooding, Broadcasting, Spanning Tree Protocol, Routing
Таблица маршрутизации (routing table)
VRF (Virtual Routing and Forwarding), VXLAN, BGP, EVPN
Распределённый кэш; от простого до продвинутого: Memcached, Redis, Couchbase, KeyDB