SlideShare a Scribd company logo
1 of 36
Download to read offline
ПодПод капотом серверного ПО:капотом серверного ПО:
нюансы разработкинюансы разработки
Дмитрий Еманов
dimitr@firebirdsql.org
FirebirdSQL Project
http://www.firebirdsql.org/
2
Что прячется за определением «серверное»

Сложность

Количественная или качественная?

Цена неудачного решения

Производительность

Баланс между скоростью выполнения и красотой кода

Важность каждой мелочи

Оглядка на железо

Кроссплатформенность

Борьба против стандартов или все своими руками

QA, QA и еще раз QA
3
Программная архитектура

OSRI/DSRI

Единый API для всех компонентов

Объекты и обмен сообщениями

Диспетчер и провайдеры (подсистемы)

Каждый компонент архитектуры понимает ее механику,
но не семантику

Диспетчер (Y-valve)

Шлюз между клиентом и провайдером

Опрос подсистем

Поддержка абстрактных дескрипторов

Двухфазная фиксация транзакций (2PC)
4
Программная архитектура
ENGINE
DB
Y-valve
REMOTE
SERVER
REMOTE
CLIENT
Y-valve
CLIENT
APP Клиент
Сервер
5
Программная архитектура
ENGINE
DB
Y-valve
REMOTE
SERVER
REMOTE
CLIENT
Y-valve
CLIENT
APP
REMOTE
CLIENT
Клиент
Сервер
6
Программная архитектура
ENGINE
DB
Y-valve
REMOTE
SERVER
REMOTE
CLIENT
Y-valve
CLIENT
APP
REMOTE
CLIENT
Клиент
Сервер
7
Программная архитектура
ENGINE 1DB 1 Y-valve
REMOTE
SERVER
REMOTE
CLIENT
ENGINE 2DB 2
ENGINE 3DB 3
8
Программная архитектура
ENGINEDB Y-valve
REMOTE
SERVER
REMOTE
CLIENT
ORACLE
GATEWAY
9
Программная архитектура
LOGGER
DB
Y-valve
REMOTE
SERVER
REMOTE
CLIENT
ENGINE
10
Программная архитектура
REMOTE
CLIENT
Y-valve
CLIENT
APP
11
Программная архитектура
ENGINEY-valve
CLIENT
APP DB
12
Программная архитектура
ENGINEY-valve
CLIENT
APP DB
REMOTE
CLIENT
13
Программная архитектура

Эволюция

Новый OO API, замена macros hell
на виртуальную диспетчеризацию

Переход от статической компоновки провайдеров
к динамической

Конфигурирование списка доступных провайдеров

Вынос авторизации из ядра на уровень remote server

Proof of concept

30 лет не требовала значительных изменений
и не мешала разработке новых идей на ее основе

Пережила несколько ОС и два сетевых протокола
14
Библиотека классов

Изначальные проблемы

Boost существовал скорее теоретически

STD++ был убог и слабо стандартизирован

Невозможность жесткого управления памятью

Недружелюбность к пулам памяти

Универсальность против производительности

Решения

Своя библиотека под существующую архитектуру
работы с памятью

Алгоритмы, заточенные под собственные потребности

Свои велосипеды — самые лучшие!
15
Синхронизация

Очевидное и не совсем

Лучше жить вообще без конкуренции, но не получается

Внимательно смотрим на реализацию
и прикладываем ее к своей специфике

RW-lock и с чем его едят

Честность обслуживания против производительности,
что такое lock starvation

Размещение примитивов синхронизации
16
Синхронизация

Очевидное и не совсем

Лучше жить вообще без конкуренции, но не получается

Внимательно смотрим на реализацию
и прикладываем ее к своей специфике

RW-lock и с чем его едят

Честность обслуживания против производительности,
что такое lock starvation

Размещение примитивов синхронизации
THD1 THD2 THD3 THD1 THD2 THD3
SYN
OBJ
SYN1
OBJ
SYN2 SYN3
17
Синхронизация

Level Up

Кросспроцессная синхронизация и IPC

Множественные состояния локов (SR, PR, SW, PR, EX)

Гарантированно честное обслуживание

Кеширование локов, механизм BAST

Обнаружение и решение дедлоков

Мониторинг графов ожидания и т. п.

Распределенный менеджер блокировок
18
Архитектура работы с памятью

Общие принципы

Минимизация обращений к менеджеру памяти

Внутренние структуры (по возможности) не должны
требовать динамического расширения

Каждый поток (по возможности) должен работать
со своим менеджером памяти

Пулы памяти

Предварительная аллокация

Изоляция данных различных объектов друг от друга

Раздельный учет памяти

Возможность «delete by pool»
19
Архитектура работы с памятью

Иерархические пространства памяти

Каждый пул порождается родительским пулом

Каждый значимый рантайм объект имеет
свой собственный пул

Существует иерархия типов рантайм объектов,
связанных принципами порождения и времени жизни

Каждая аллокация «внизу» приводит к рекурсивному
пересчету статистики родительских пулов

Существует возможность получать и отображать статистику
всех рантайм объектов
20
Архитектура работы с памятью

Иерархические пространства памяти
База данныхБаза данных
Сессия 1Сессия 1 Сессия 2Сессия 2
Тр-ция 1Тр-ция 1 Тр-ция 2Тр-ция 2 Тр-ция 3Тр-ция 3 Тр-ция 4Тр-ция 4
Запрос 2Запрос 2
Запрос 1Запрос 1 Запрос 3Запрос 3
Запрос 4Запрос 4 Запрос 6Запрос 6
Запрос 5Запрос 5 Запрос 7Запрос 7
Запрос 8Запрос 8
21
Архитектура работы с памятью

Чем мы за это платим?
RecordBuffer::RecordBuffer(MemoryPool& pool, const Format* format)
: length(format->fmt_length), count(0)
{
space = FB_NEW(pool) TempSpace(pool, SCRATCH);
record = FB_NEW(pool) Record(pool, length);
record->rec_length = length;
}
template <typename T, typename InternalTypes = BitmapTypes_64>
class SparseBitmap : public AutoStorage
{
public:
// Default constructor, stack placement
SparseBitmap()
: tree(&getPool()), defaultAccessor(this)
{}
// Pooled constructor
explicit SparseBitmap(MemoryPool& p)
: AutoStorage(p), tree(&getPool()), defaultAccessor(this)
{}
22
Сравнение менеджеров памяти

Percona research, © mysqlperformanceblog.com
23
Сравнение менеджеров памяти

Percona research, © mysqlperformanceblog.com
24
Эволюция менеджера памяти

1-е поколение

Список свободных блоков + алгоритм «best fit» + mutex

Аллокация больших блоков через ОС
25
Эволюция менеджера памяти

1-е поколение

Список свободных блоков + алгоритм «best fit» + mutex

Аллокация больших блоков через ОС

2-е поколение (200% - 150x)

Бинарное дерево свободных блоков + mutex

Аллокация больших блоков через ОС + кеш больших блоков
26
Эволюция менеджера памяти

1-е поколение

Список свободных блоков + алгоритм «best fit» + mutex

Аллокация больших блоков через ОС

2-е поколение (200% - 150x)

Бинарное дерево свободных блоков + mutex

Аллокация больших блоков через ОС + кеш больших блоков

3-е поколение (50% - 10x)

Хеш-таблица малых блоков + CAS

Список средних блоков + алгоритм «first fit» + mutex

Аллокация больших блоков через ОС + кеш больших блоков
27
Работа с диском

Что мы все знаем

Дисковый I/O был и остается узким местом

Блочное выделение места в файле и I/O операции

Кеширование блоков, FIFO/LIFO

Файловый кеш и синхронная запись

Фрагментация и raw partitions

Нюансы

HDD против SSD

Компрессия как способ уменьшения дискового I/O

SYNC/FLUSH — доверяй, но проверяй!
28
Работа с диском

Компрессия

Баланс между скоростью и степенью сжатия

Формат данных в памяти

Компактификация, RLE и иже с ними

Префиксная компрессия

Индексация внутри блоков

Второй уровень кеширования

Распакованные данные

Структуры поиска

Затраты на синхронизацию
29
ACID и архитектура I/O

Журнал транзакций (WAL)

Изменения пишутся в журнал синхронно и последовательно

Фоновый перенос из журнала в основной файл

Чекпойнты

Обратное проигрывание журнала при восстановлении
30
ACID и архитектура I/O

Журнал транзакций (WAL)

Изменения пишутся в журнал синхронно и последовательно

Фоновый перенос из журнала в основной файл

Чекпойнты

Обратное проигрывание журнала при восстановлении

Принцип careful writes

Журнала нет

Дисциплина зависимости блоков друг от друга

Запись выполняется в соответствии с графом зависимостей

Мгновенное восстановление, отложенный reuse
31
ACID и архитектура I/O

Сравнение WAL против CW

Синхронная последовательная запись быстрее синхронной
случайной записи (иногда есть возможность
асимптотического приведения второй к первой)

Одинарная запись теоретически быстрее двойной, но не
надо забывать про SYNC vs ASYNC

Что меняется в случае SSD?
32
Теневая копия

Принцип

Физическая копия файла, аналог RAID 1

Читаем из основного файла, пишем в оба

Переключение на тень при сбое I/O операции

Режим SYNC одинаков для обоих файлов
33
Теневая копия

Принцип

Физическая копия файла, аналог RAID 1

Читаем из основного файла, пишем в оба

Переключение на тень при сбое I/O операции

Режим SYNC одинаков для обоих файлов

Нестандартные применения

Синхронный standby — основной файл локальный,
тень удаленная (через NFS)
34
Теневая копия

Принцип

Физическая копия файла, аналог RAID 1

Читаем из основного файла, пишем в оба

Переключение на тень при сбое I/O операции

Режим SYNC одинаков для обоих файлов

Нестандартные применения

Синхронный standby — основной файл локальный,
тень удаленная (через NFS)

Кеширование чтения — основной файл на RAM-диске,
тень на физическом диске
35
Теневая копия

Принцип

Физическая копия файла, аналог RAID 1

Читаем из основного файла, пишем в оба

Переключение на тень при сбое I/O операции

Режим SYNC одинаков для обоих файлов

Нестандартные применения

Синхронный standby — основной файл локальный,
тень удаленная (через NFS)

Кеширование чтения — основной файл на RAM-диске,
тень на физическом диске

Оптимизация чтения — основной файл на SSD, тень на HDD
36
Вопросы?Вопросы?

More Related Content

What's hot

"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresProit-people
 
Максим Жилинский: "Контейнеры: под капотом"
Максим Жилинский: "Контейнеры: под капотом"Максим Жилинский: "Контейнеры: под капотом"
Максим Жилинский: "Контейнеры: под капотом"Olga Lavrentieva
 
Операционные системы 2015, лекция № 5
Операционные системы 2015, лекция № 5Операционные системы 2015, лекция № 5
Операционные системы 2015, лекция № 5Aleksey Bragin
 
Miscosoft Singularity - konkurs presentation
Miscosoft Singularity - konkurs presentationMiscosoft Singularity - konkurs presentation
Miscosoft Singularity - konkurs presentationVasilii Diachenko
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015OSLL
 
Innodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusInnodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusOntico
 
Whats new in_mikro_tik_ros_6_(megis,_mosсow_2013)_(russian_translate_by_white...
Whats new in_mikro_tik_ros_6_(megis,_mosсow_2013)_(russian_translate_by_white...Whats new in_mikro_tik_ros_6_(megis,_mosсow_2013)_(russian_translate_by_white...
Whats new in_mikro_tik_ros_6_(megis,_mosсow_2013)_(russian_translate_by_white...sami_11
 
Лекция №9 Организация ЭВМ и систем
Лекция №9 Организация ЭВМ и системЛекция №9 Организация ЭВМ и систем
Лекция №9 Организация ЭВМ и системpianist2317
 
Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1Aleksey Bragin
 
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский) Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский) Ontico
 
Базы данных. Distributed Commit
Базы данных. Distributed CommitБазы данных. Distributed Commit
Базы данных. Distributed CommitVadim Tsesko
 
Операционные системы 2015, лекция № 3
Операционные системы 2015, лекция № 3Операционные системы 2015, лекция № 3
Операционные системы 2015, лекция № 3Aleksey Bragin
 
Эволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover ClusteringЭволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover ClusteringYuriy Denisov
 
Работа высоконагруженного DNS-сервера
Работа высоконагруженного DNS-сервераРабота высоконагруженного DNS-сервера
Работа высоконагруженного DNS-сервераudmlug
 
Облачный Росомаха
Облачный РосомахаОблачный Росомаха
Облачный РосомахаCEE-SEC(R)
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Mikhail Kurnosov
 
Обзор файловой системы GlusterFS
Обзор файловой системы GlusterFSОбзор файловой системы GlusterFS
Обзор файловой системы GlusterFSOSLL
 

What's hot (20)

Multimaster2
Multimaster2Multimaster2
Multimaster2
 
Data line cloud solutions
Data line cloud solutionsData line cloud solutions
Data line cloud solutions
 
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
 
Максим Жилинский: "Контейнеры: под капотом"
Максим Жилинский: "Контейнеры: под капотом"Максим Жилинский: "Контейнеры: под капотом"
Максим Жилинский: "Контейнеры: под капотом"
 
Операционные системы 2015, лекция № 5
Операционные системы 2015, лекция № 5Операционные системы 2015, лекция № 5
Операционные системы 2015, лекция № 5
 
Miscosoft Singularity - konkurs presentation
Miscosoft Singularity - konkurs presentationMiscosoft Singularity - konkurs presentation
Miscosoft Singularity - konkurs presentation
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
 
Innodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusInnodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 Rus
 
Лекция № 3 Организация ЭВМ и систем
Лекция № 3 Организация ЭВМ и системЛекция № 3 Организация ЭВМ и систем
Лекция № 3 Организация ЭВМ и систем
 
Whats new in_mikro_tik_ros_6_(megis,_mosсow_2013)_(russian_translate_by_white...
Whats new in_mikro_tik_ros_6_(megis,_mosсow_2013)_(russian_translate_by_white...Whats new in_mikro_tik_ros_6_(megis,_mosсow_2013)_(russian_translate_by_white...
Whats new in_mikro_tik_ros_6_(megis,_mosсow_2013)_(russian_translate_by_white...
 
Лекция №9 Организация ЭВМ и систем
Лекция №9 Организация ЭВМ и системЛекция №9 Организация ЭВМ и систем
Лекция №9 Организация ЭВМ и систем
 
Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1
 
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский) Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
Как построить высокопроизводительный Front-end сервер (Александр Крижановский)
 
Базы данных. Distributed Commit
Базы данных. Distributed CommitБазы данных. Distributed Commit
Базы данных. Distributed Commit
 
Операционные системы 2015, лекция № 3
Операционные системы 2015, лекция № 3Операционные системы 2015, лекция № 3
Операционные системы 2015, лекция № 3
 
Эволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover ClusteringЭволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover Clustering
 
Работа высоконагруженного DNS-сервера
Работа высоконагруженного DNS-сервераРабота высоконагруженного DNS-сервера
Работа высоконагруженного DNS-сервера
 
Облачный Росомаха
Облачный РосомахаОблачный Росомаха
Облачный Росомаха
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
 
Обзор файловой системы GlusterFS
Обзор файловой системы GlusterFSОбзор файловой системы GlusterFS
Обзор файловой системы GlusterFS
 

Similar to Дмитрий Еманов — Под капотом серверного ПО

Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Ontico
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...ForkConf
 
Современные серверы DEPO Storm и системы хранения DEPO Storage
Современные серверы DEPO Storm и системы хранения DEPO StorageСовременные серверы DEPO Storm и системы хранения DEPO Storage
Современные серверы DEPO Storm и системы хранения DEPO StorageDEPO Computers
 
Traditional relational databases architecture
Traditional relational databases architectureTraditional relational databases architecture
Traditional relational databases architectureDeutscheBank
 
Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Mikhail Chusavitin
 
Android Telegram S Optimizations
Android Telegram S OptimizationsAndroid Telegram S Optimizations
Android Telegram S OptimizationsStepan Korshakov
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Ontico
 
phpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем храненияphpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем храненияSlach
 
Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"IT Event
 
Oracle Timesten
Oracle TimestenOracle Timesten
Oracle TimestenOntico
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев кировqasib
 
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Ontico
 
Лекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системЛекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системpianist2317
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Badoo Development
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустяYuriy Nasretdinov
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Ontico
 
Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Andrey Akulov
 

Similar to Дмитрий Еманов — Под капотом серверного ПО (20)

Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
Современные серверы DEPO Storm и системы хранения DEPO Storage
Современные серверы DEPO Storm и системы хранения DEPO StorageСовременные серверы DEPO Storm и системы хранения DEPO Storage
Современные серверы DEPO Storm и системы хранения DEPO Storage
 
Traditional relational databases architecture
Traditional relational databases architectureTraditional relational databases architecture
Traditional relational databases architecture
 
2056
20562056
2056
 
Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?Совместимы ли понятия SDS и производительность?
Совместимы ли понятия SDS и производительность?
 
Android Telegram S Optimizations
Android Telegram S OptimizationsAndroid Telegram S Optimizations
Android Telegram S Optimizations
 
Distributed systems
Distributed systemsDistributed systems
Distributed systems
 
Data storage systems
Data storage systemsData storage systems
Data storage systems
 
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
Практика использования NoSQL в высоконагруженном проекте (Дмитрий Ананьев)
 
phpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем храненияphpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем хранения
 
Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"
 
Oracle Timesten
Oracle TimestenOracle Timesten
Oracle Timesten
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев киров
 
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
 
Лекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системЛекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и систем
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)
 

More from Daria Oreshkina

Антон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. ПрезентацияАнтон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. ПрезентацияDaria Oreshkina
 
Валкин, Мокевнин — Развитие IT-среды в Ульяновске
Валкин, Мокевнин — Развитие IT-среды в УльяновскеВалкин, Мокевнин — Развитие IT-среды в Ульяновске
Валкин, Мокевнин — Развитие IT-среды в УльяновскеDaria Oreshkina
 
Максим Семенкин — Открытие
Максим Семенкин — ОткрытиеМаксим Семенкин — Открытие
Максим Семенкин — ОткрытиеDaria Oreshkina
 
Сергей Парамонов — Что наша жизнь — игра!
Сергей Парамонов — Что наша жизнь — игра!Сергей Парамонов — Что наша жизнь — игра!
Сергей Парамонов — Что наша жизнь — игра!Daria Oreshkina
 
Кирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программированиеКирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программированиеDaria Oreshkina
 
Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantDaria Oreshkina
 
Иван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать житьИван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать житьDaria Oreshkina
 
Лев Валкин — Программируем функционально
Лев Валкин — Программируем функциональноЛев Валкин — Программируем функционально
Лев Валкин — Программируем функциональноDaria Oreshkina
 
Александр Жарков — Эволюция команды разработки: взгляд изнутри
Александр Жарков — Эволюция команды разработки: взгляд изнутриАлександр Жарков — Эволюция команды разработки: взгляд изнутри
Александр Жарков — Эволюция команды разработки: взгляд изнутриDaria Oreshkina
 
Алексей Шалдышев — Проектное управление
Алексей Шалдышев — Проектное управлениеАлексей Шалдышев — Проектное управление
Алексей Шалдышев — Проектное управлениеDaria Oreshkina
 
Артём Рудаковский — Как мы электронное правительство делали
Артём Рудаковский — Как мы электронное правительство делалиАртём Рудаковский — Как мы электронное правительство делали
Артём Рудаковский — Как мы электронное правительство делалиDaria Oreshkina
 
Наталья Желнова — Как обзавестись аналитиками и получить от них пользу в проекте
Наталья Желнова — Как обзавестись аналитиками и получить от них пользу в проектеНаталья Желнова — Как обзавестись аналитиками и получить от них пользу в проекте
Наталья Желнова — Как обзавестись аналитиками и получить от них пользу в проектеDaria Oreshkina
 
Асхат Уразбаев — Value Stream Mapping
Асхат Уразбаев — Value Stream MappingАсхат Уразбаев — Value Stream Mapping
Асхат Уразбаев — Value Stream MappingDaria Oreshkina
 
Алексей Ситников. Итоговая презентация группы « Социальная политика». 19 апреля
Алексей Ситников. Итоговая презентация группы « Социальная политика». 19 апреляАлексей Ситников. Итоговая презентация группы « Социальная политика». 19 апреля
Алексей Ситников. Итоговая презентация группы « Социальная политика». 19 апреляDaria Oreshkina
 
Булат Столяров. Итоговая презентация дискуссионной группы «Защита прав гражд...
Булат Столяров. Итоговая презентация дискуссионной группы «Защита  прав гражд...Булат Столяров. Итоговая презентация дискуссионной группы «Защита  прав гражд...
Булат Столяров. Итоговая презентация дискуссионной группы «Защита прав гражд...Daria Oreshkina
 

More from Daria Oreshkina (15)

Антон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. ПрезентацияАнтон Веретенников и Илья Семаков. Презентация
Антон Веретенников и Илья Семаков. Презентация
 
Валкин, Мокевнин — Развитие IT-среды в Ульяновске
Валкин, Мокевнин — Развитие IT-среды в УльяновскеВалкин, Мокевнин — Развитие IT-среды в Ульяновске
Валкин, Мокевнин — Развитие IT-среды в Ульяновске
 
Максим Семенкин — Открытие
Максим Семенкин — ОткрытиеМаксим Семенкин — Открытие
Максим Семенкин — Открытие
 
Сергей Парамонов — Что наша жизнь — игра!
Сергей Парамонов — Что наша жизнь — игра!Сергей Парамонов — Что наша жизнь — игра!
Сергей Парамонов — Что наша жизнь — игра!
 
Кирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программированиеКирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программирование
 
Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с Vagrant
 
Иван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать житьИван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать жить
 
Лев Валкин — Программируем функционально
Лев Валкин — Программируем функциональноЛев Валкин — Программируем функционально
Лев Валкин — Программируем функционально
 
Александр Жарков — Эволюция команды разработки: взгляд изнутри
Александр Жарков — Эволюция команды разработки: взгляд изнутриАлександр Жарков — Эволюция команды разработки: взгляд изнутри
Александр Жарков — Эволюция команды разработки: взгляд изнутри
 
Алексей Шалдышев — Проектное управление
Алексей Шалдышев — Проектное управлениеАлексей Шалдышев — Проектное управление
Алексей Шалдышев — Проектное управление
 
Артём Рудаковский — Как мы электронное правительство делали
Артём Рудаковский — Как мы электронное правительство делалиАртём Рудаковский — Как мы электронное правительство делали
Артём Рудаковский — Как мы электронное правительство делали
 
Наталья Желнова — Как обзавестись аналитиками и получить от них пользу в проекте
Наталья Желнова — Как обзавестись аналитиками и получить от них пользу в проектеНаталья Желнова — Как обзавестись аналитиками и получить от них пользу в проекте
Наталья Желнова — Как обзавестись аналитиками и получить от них пользу в проекте
 
Асхат Уразбаев — Value Stream Mapping
Асхат Уразбаев — Value Stream MappingАсхат Уразбаев — Value Stream Mapping
Асхат Уразбаев — Value Stream Mapping
 
Алексей Ситников. Итоговая презентация группы « Социальная политика». 19 апреля
Алексей Ситников. Итоговая презентация группы « Социальная политика». 19 апреляАлексей Ситников. Итоговая презентация группы « Социальная политика». 19 апреля
Алексей Ситников. Итоговая презентация группы « Социальная политика». 19 апреля
 
Булат Столяров. Итоговая презентация дискуссионной группы «Защита прав гражд...
Булат Столяров. Итоговая презентация дискуссионной группы «Защита  прав гражд...Булат Столяров. Итоговая презентация дискуссионной группы «Защита  прав гражд...
Булат Столяров. Итоговая презентация дискуссионной группы «Защита прав гражд...
 

Дмитрий Еманов — Под капотом серверного ПО

  • 1. ПодПод капотом серверного ПО:капотом серверного ПО: нюансы разработкинюансы разработки Дмитрий Еманов dimitr@firebirdsql.org FirebirdSQL Project http://www.firebirdsql.org/
  • 2. 2 Что прячется за определением «серверное»  Сложность  Количественная или качественная?  Цена неудачного решения  Производительность  Баланс между скоростью выполнения и красотой кода  Важность каждой мелочи  Оглядка на железо  Кроссплатформенность  Борьба против стандартов или все своими руками  QA, QA и еще раз QA
  • 3. 3 Программная архитектура  OSRI/DSRI  Единый API для всех компонентов  Объекты и обмен сообщениями  Диспетчер и провайдеры (подсистемы)  Каждый компонент архитектуры понимает ее механику, но не семантику  Диспетчер (Y-valve)  Шлюз между клиентом и провайдером  Опрос подсистем  Поддержка абстрактных дескрипторов  Двухфазная фиксация транзакций (2PC)
  • 7. 7 Программная архитектура ENGINE 1DB 1 Y-valve REMOTE SERVER REMOTE CLIENT ENGINE 2DB 2 ENGINE 3DB 3
  • 13. 13 Программная архитектура  Эволюция  Новый OO API, замена macros hell на виртуальную диспетчеризацию  Переход от статической компоновки провайдеров к динамической  Конфигурирование списка доступных провайдеров  Вынос авторизации из ядра на уровень remote server  Proof of concept  30 лет не требовала значительных изменений и не мешала разработке новых идей на ее основе  Пережила несколько ОС и два сетевых протокола
  • 14. 14 Библиотека классов  Изначальные проблемы  Boost существовал скорее теоретически  STD++ был убог и слабо стандартизирован  Невозможность жесткого управления памятью  Недружелюбность к пулам памяти  Универсальность против производительности  Решения  Своя библиотека под существующую архитектуру работы с памятью  Алгоритмы, заточенные под собственные потребности  Свои велосипеды — самые лучшие!
  • 15. 15 Синхронизация  Очевидное и не совсем  Лучше жить вообще без конкуренции, но не получается  Внимательно смотрим на реализацию и прикладываем ее к своей специфике  RW-lock и с чем его едят  Честность обслуживания против производительности, что такое lock starvation  Размещение примитивов синхронизации
  • 16. 16 Синхронизация  Очевидное и не совсем  Лучше жить вообще без конкуренции, но не получается  Внимательно смотрим на реализацию и прикладываем ее к своей специфике  RW-lock и с чем его едят  Честность обслуживания против производительности, что такое lock starvation  Размещение примитивов синхронизации THD1 THD2 THD3 THD1 THD2 THD3 SYN OBJ SYN1 OBJ SYN2 SYN3
  • 17. 17 Синхронизация  Level Up  Кросспроцессная синхронизация и IPC  Множественные состояния локов (SR, PR, SW, PR, EX)  Гарантированно честное обслуживание  Кеширование локов, механизм BAST  Обнаружение и решение дедлоков  Мониторинг графов ожидания и т. п.  Распределенный менеджер блокировок
  • 18. 18 Архитектура работы с памятью  Общие принципы  Минимизация обращений к менеджеру памяти  Внутренние структуры (по возможности) не должны требовать динамического расширения  Каждый поток (по возможности) должен работать со своим менеджером памяти  Пулы памяти  Предварительная аллокация  Изоляция данных различных объектов друг от друга  Раздельный учет памяти  Возможность «delete by pool»
  • 19. 19 Архитектура работы с памятью  Иерархические пространства памяти  Каждый пул порождается родительским пулом  Каждый значимый рантайм объект имеет свой собственный пул  Существует иерархия типов рантайм объектов, связанных принципами порождения и времени жизни  Каждая аллокация «внизу» приводит к рекурсивному пересчету статистики родительских пулов  Существует возможность получать и отображать статистику всех рантайм объектов
  • 20. 20 Архитектура работы с памятью  Иерархические пространства памяти База данныхБаза данных Сессия 1Сессия 1 Сессия 2Сессия 2 Тр-ция 1Тр-ция 1 Тр-ция 2Тр-ция 2 Тр-ция 3Тр-ция 3 Тр-ция 4Тр-ция 4 Запрос 2Запрос 2 Запрос 1Запрос 1 Запрос 3Запрос 3 Запрос 4Запрос 4 Запрос 6Запрос 6 Запрос 5Запрос 5 Запрос 7Запрос 7 Запрос 8Запрос 8
  • 21. 21 Архитектура работы с памятью  Чем мы за это платим? RecordBuffer::RecordBuffer(MemoryPool& pool, const Format* format) : length(format->fmt_length), count(0) { space = FB_NEW(pool) TempSpace(pool, SCRATCH); record = FB_NEW(pool) Record(pool, length); record->rec_length = length; } template <typename T, typename InternalTypes = BitmapTypes_64> class SparseBitmap : public AutoStorage { public: // Default constructor, stack placement SparseBitmap() : tree(&getPool()), defaultAccessor(this) {} // Pooled constructor explicit SparseBitmap(MemoryPool& p) : AutoStorage(p), tree(&getPool()), defaultAccessor(this) {}
  • 24. 24 Эволюция менеджера памяти  1-е поколение  Список свободных блоков + алгоритм «best fit» + mutex  Аллокация больших блоков через ОС
  • 25. 25 Эволюция менеджера памяти  1-е поколение  Список свободных блоков + алгоритм «best fit» + mutex  Аллокация больших блоков через ОС  2-е поколение (200% - 150x)  Бинарное дерево свободных блоков + mutex  Аллокация больших блоков через ОС + кеш больших блоков
  • 26. 26 Эволюция менеджера памяти  1-е поколение  Список свободных блоков + алгоритм «best fit» + mutex  Аллокация больших блоков через ОС  2-е поколение (200% - 150x)  Бинарное дерево свободных блоков + mutex  Аллокация больших блоков через ОС + кеш больших блоков  3-е поколение (50% - 10x)  Хеш-таблица малых блоков + CAS  Список средних блоков + алгоритм «first fit» + mutex  Аллокация больших блоков через ОС + кеш больших блоков
  • 27. 27 Работа с диском  Что мы все знаем  Дисковый I/O был и остается узким местом  Блочное выделение места в файле и I/O операции  Кеширование блоков, FIFO/LIFO  Файловый кеш и синхронная запись  Фрагментация и raw partitions  Нюансы  HDD против SSD  Компрессия как способ уменьшения дискового I/O  SYNC/FLUSH — доверяй, но проверяй!
  • 28. 28 Работа с диском  Компрессия  Баланс между скоростью и степенью сжатия  Формат данных в памяти  Компактификация, RLE и иже с ними  Префиксная компрессия  Индексация внутри блоков  Второй уровень кеширования  Распакованные данные  Структуры поиска  Затраты на синхронизацию
  • 29. 29 ACID и архитектура I/O  Журнал транзакций (WAL)  Изменения пишутся в журнал синхронно и последовательно  Фоновый перенос из журнала в основной файл  Чекпойнты  Обратное проигрывание журнала при восстановлении
  • 30. 30 ACID и архитектура I/O  Журнал транзакций (WAL)  Изменения пишутся в журнал синхронно и последовательно  Фоновый перенос из журнала в основной файл  Чекпойнты  Обратное проигрывание журнала при восстановлении  Принцип careful writes  Журнала нет  Дисциплина зависимости блоков друг от друга  Запись выполняется в соответствии с графом зависимостей  Мгновенное восстановление, отложенный reuse
  • 31. 31 ACID и архитектура I/O  Сравнение WAL против CW  Синхронная последовательная запись быстрее синхронной случайной записи (иногда есть возможность асимптотического приведения второй к первой)  Одинарная запись теоретически быстрее двойной, но не надо забывать про SYNC vs ASYNC  Что меняется в случае SSD?
  • 32. 32 Теневая копия  Принцип  Физическая копия файла, аналог RAID 1  Читаем из основного файла, пишем в оба  Переключение на тень при сбое I/O операции  Режим SYNC одинаков для обоих файлов
  • 33. 33 Теневая копия  Принцип  Физическая копия файла, аналог RAID 1  Читаем из основного файла, пишем в оба  Переключение на тень при сбое I/O операции  Режим SYNC одинаков для обоих файлов  Нестандартные применения  Синхронный standby — основной файл локальный, тень удаленная (через NFS)
  • 34. 34 Теневая копия  Принцип  Физическая копия файла, аналог RAID 1  Читаем из основного файла, пишем в оба  Переключение на тень при сбое I/O операции  Режим SYNC одинаков для обоих файлов  Нестандартные применения  Синхронный standby — основной файл локальный, тень удаленная (через NFS)  Кеширование чтения — основной файл на RAM-диске, тень на физическом диске
  • 35. 35 Теневая копия  Принцип  Физическая копия файла, аналог RAID 1  Читаем из основного файла, пишем в оба  Переключение на тень при сбое I/O операции  Режим SYNC одинаков для обоих файлов  Нестандартные применения  Синхронный standby — основной файл локальный, тень удаленная (через NFS)  Кеширование чтения — основной файл на RAM-диске, тень на физическом диске  Оптимизация чтения — основной файл на SSD, тень на HDD