SlideShare a Scribd company logo
Архитектура
Apache Ignite.NET
Владимир Озеров
GridGain
План
2
• Почему
• Interop
• Native
Кто?
3
План
4
• Почему
• Interop
• Native
Почему: тонкие клиенты
5
Почему: тонкие клиенты
6
За:
• Легко сделать
Против:
• Ограниченный
Почему: объединить Java client и server
7
Почему: объединить Java client и server
8
За:
• Полноценный
Против:
• Тяжелее
Почему: создание с нуля
9
Почему: создание с нуля
10
За:
• Естественно
• Перфоманс
• Полноценный
Против:
• С нуля
• Надо менять Java
• Поддержка
Создание с нуля: поддержка
11
Создание с нуля: поддержка
12
13
Создание с нуля: поддержка
14
Создание с нуля: поддержка
Почему: переиспользование Java core
15
Почему: переиспользование Java core
16
За:
• Общий код
• Легко сделать
• Полноценный
Против:
• Странно!
• Медленнее
нативного
Переиспользование Java core
17
Переиспользование Java core
18
OVERHEAD!
План
19
• Почему
• Interop
• Native
Сериализация
20
Сериализация
21
За:
• Нет классов
Сериализация
22
Сериализация
23
За:
• Нет классов!
Против:
• Не десериализовать
Идентификаторы: TYPE_ID и FIELD_ID
24
1: class DotNetPerson {
2: string Name { ... }
3:
4: ...
5: }
1: class JavaPerson {
2: private String name;
3:
4: ...
5: }
TYPE_ID(DotNetPerson) == TYPE_ID(JavaPerson)
FIELD_ID(DotNetPerson.Name) == FIELD_ID(JavaPerson.name)
Формат сериализации
25
Header
• Type ID – тип объекта
• Hash code – для быстрого поиска в кэше
• Length – для «пропусков»
• Flags – внутренности
26
GetField("name") => OK
HasField("name") => OK
Формат сериализации
27
GetField("name") => OK
HasField("name") => OK
O(N)!
Формат сериализации
Поиск полей за O(1)
28
Header
• Schema ID – «отпечаток» полей
• Footer offset – быстрая навигация в футер
Footer
• Идентификаторы полей и их смещения
29
int fieldId = GetFieldId("name");
Поиск полей за O(1)
30
int fieldId = GetFieldId("name");
int order = GetOrder(schemaId, fieldId);
Поиск полей за O(1)
31
int fieldId = GetFieldId("name");
int order = GetOrder(schemaId, fieldId);
int offsetPos = footerPos + [X] * order;
Поиск полей за O(1)
32
int fieldId = GetFieldId("name");
int order = GetOrder(schemaId, fieldId);
int offsetPos = footerPos + [X] * order;
int offset = Read(offsetPos);
Поиск полей за O(1)
Interop: metadata
33
Interop: metadata
34
Interop: metadata
35
Interop: metadata
36
Interop: metadata
37
План
38
• Почему
• Interop
• Native
Embedded JVM
39
Embedded JVM
40
Embedded JVM
41
External JVM
42
Проблемы GC
43
Проблемы GC
44
Проблемы GC
45
.NET -> Java: полагаемся на финализацию
46
1: unsafe class UnmanagedTarget : CriticalHandle
2: {
3: public UnmanagedTarget(void* target)
4: {
5: SetHandle(new IntPtr(target));
6: }
7:
8: protected override bool ReleaseHandle() {
9: UnmanagerUtils.Release(this);
10: }
11: }
Java -> .NET: освобождаем явно
47
1: class PlatformListener {
2: private long ptr;
3: private boolean released;
4:
5: public void use() {
6: READ_LOCK {
7: if (!released)
8: NativeUtils.use(ptr);
9: }
10: }
11:
12: public void release() {
13: WRITE_LOCK {
14: NativeUtils.use(ptr);
15: released = true;
16: }
17: }
18: }
Native: unique pointers
48
1: HandleRegistry registry;
2:
3: T Get<T>(long ptr) {
4: T target = (T)registry.Get(ptr);
5:
6: if (target == null)
7: throw new ResourceReleasedException();
8:
9: return target;
10: }
Java -> .NET: освобождаем явно
49
1: class PlatformListener {
2: private long ptr;
3:
4: public void use() {
5: NativeUtils.use(ptr);
6: }
7:
8: public void release() {
9: NativeUtils.use(ptr);
10: }
11: }
Уникальные указатели
50
0 < ptr < X
• Это индекс в массиве
• Для долгоживущих объектов (cache store, listeners, etc.)
ptr >= X
• Это ключ в ConcurrentDictionary
• Для короткоживущих объектов (jobs, etc.)
Передаем данные
51
Особенности:
• Храним пре-аллоцированные куски в thread-local
• Флаги кодируют «природу» памяти (пул или нет, Java или .Net)
Передаем данные
52
1: using (long inPtr = MemoryManager.Allocate()) {
2: using (long outPtr = MemoryManager.Allocate()) {
3: Marshal(input, inPtr);
4:
5: Invoke(inPtr, outPtr);
6:
7: return Unmarshal<T>(outPtr);
8: }
9: }
Уменьшаем оверхед
53
Кэширование
• Если объект read-only, то сериализуем его 1 раз, а далее
передаем только «хэндл»
Coalescense
• Один большой вызов вместо нескольких мелких
Отложенная сериализация
• Если подозреваем, что сериализация не понадобиться, то
пытаемся обойтись GCHandle
Контакты
54
Twitter:
• https://twitter.com/devozerov
LinkedIn:
• https://www.linkedin.com/in/devozerov
55
Вопросы?

More Related Content

PDF
Автоматизация нагрузочного тестирования — Григорий Липин
PDF
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
PPTX
Курс Java-2016. Занятие 01. Введение в Java как технологию
PDF
Практика разработки веб-серверов на Rust
PDF
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
PPTX
Курс Java-2016. Занятие 13. Spring
PPTX
Vagrant puppet
PDF
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Автоматизация нагрузочного тестирования — Григорий Липин
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Курс Java-2016. Занятие 01. Введение в Java как технологию
Практика разработки веб-серверов на Rust
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Курс Java-2016. Занятие 13. Spring
Vagrant puppet
Артём Ерошенко «Рецепт приготовления облачных тестингов»

What's hot (18)

PPT
Maven как средство сборки проекта
PPTX
Обзор Haxe & OpenFl
PDF
Мой маленький уютный PaaS / Илья Беда (bro.agency)
PDF
Курс Java-2016. Занятие 09. Web
PDF
Docker & Puppet: как их скрестить и надо ли вам это?
PPT
PHP: SAPI
PPTX
антон веснин Rails Application Servers
PDF
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
PDF
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
PDF
Phalcon. Что нового?
PPTX
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
PPTX
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
PDF
Кроссплатформенная разработка на Haxe
PDF
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
PPTX
системы сборок проектов
PDF
Иван Крутов - Автоматизация сборки Java-проекта
PDF
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
PPT
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Maven как средство сборки проекта
Обзор Haxe & OpenFl
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Курс Java-2016. Занятие 09. Web
Docker & Puppet: как их скрестить и надо ли вам это?
PHP: SAPI
антон веснин Rails Application Servers
Zabbix 3.2 - мониторинг качественно нового уровня / Алексей Владышев (Zabbix)
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Phalcon. Что нового?
Как сделать проект с 1 500 000 просмотров в сутки, который не ломается - IzhD...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Кроссплатформенная разработка на Haxe
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
системы сборок проектов
Иван Крутов - Автоматизация сборки Java-проекта
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Ad

Viewers also liked (20)

PDF
Apache conbigdata2015 christiantzolov-federated sql on hadoop and beyond- lev...
KEY
Infinispan, Data Grids, NoSQL, Cloud Storage and JSR 347
PDF
JBoss Community Introduction
PDF
Building Wall St Risk Systems with Apache Geode
PDF
Apache Geode - The First Six Months
PDF
Infinispan Servers: Beyond peer-to-peer data grids
PDF
Hacking Infinispan: the new open source data grid meets NoSQL
KEY
Infinspan: In-memory data grid meets NoSQL
PDF
Infinispan from POC to Production
PDF
Keeping Infinispan In Shape: Highly-Precise, Scalable Data Eviction
PDF
Redis adaptor for Apache Geode
PPTX
Apache geode
PDF
Introduction to Apache Geode (Cork, Ireland)
PPTX
Apache Geode Clubhouse - WAN-based Replication
PDF
인메모리 클러스터링 아키텍처
ODP
Infinispan and Enterprise Data Grid
PDF
Building Apps with Distributed In-Memory Computing Using Apache Geode
PDF
Data Grids and Data Caching
PPTX
An Introduction to Apache Geode (incubating)
PPTX
Going asynchronous with netty - SOSCON 2015
Apache conbigdata2015 christiantzolov-federated sql on hadoop and beyond- lev...
Infinispan, Data Grids, NoSQL, Cloud Storage and JSR 347
JBoss Community Introduction
Building Wall St Risk Systems with Apache Geode
Apache Geode - The First Six Months
Infinispan Servers: Beyond peer-to-peer data grids
Hacking Infinispan: the new open source data grid meets NoSQL
Infinspan: In-memory data grid meets NoSQL
Infinispan from POC to Production
Keeping Infinispan In Shape: Highly-Precise, Scalable Data Eviction
Redis adaptor for Apache Geode
Apache geode
Introduction to Apache Geode (Cork, Ireland)
Apache Geode Clubhouse - WAN-based Replication
인메모리 클러스터링 아키텍처
Infinispan and Enterprise Data Grid
Building Apps with Distributed In-Memory Computing Using Apache Geode
Data Grids and Data Caching
An Introduction to Apache Geode (incubating)
Going asynchronous with netty - SOSCON 2015
Ad

Similar to Архитектура Apache Ignite .NET (20)

PDF
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
PDF
JPoint 2016 - Bytecode
PDF
Zero Downtime PHP Deployment with Envoyer And Forge
PDF
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
PPTX
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
PPTX
Java 9: Platform
PDF
Netty jprof 2019_pdf
PDF
JPHP - О проекте на простом языке
PDF
How to cook a blockchain and not get burned
PPTX
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
PDF
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
PDF
Docker networking
PDF
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
PDF
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
PPTX
Автоматизация отладки в windbg
PDF
Docker & puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
PDF
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
PDF
Scala performance под капотом
PDF
Разговор про Java 9. Extended version
PPTX
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
JPoint 2016 - Bytecode
Zero Downtime PHP Deployment with Envoyer And Forge
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Java 9: Platform
Netty jprof 2019_pdf
JPHP - О проекте на простом языке
How to cook a blockchain and not get burned
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Docker networking
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
Автоматизация отладки в windbg
Docker & puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Scala performance под капотом
Разговор про Java 9. Extended version
SECON'2016. Чубарь Алексей, Мобильные грабли Unity

More from Mikhail Shcherbakov (20)

PPTX
Delegates and events in C#
PPTX
Mythbusters - Web Application Security
PPTX
Михаил Щербаков "WinDbg сотоварищи"
PPTX
Apache Ignite.NET в действии
PPTX
Знакомство с In-Memory Data Grid
PDF
сценарии использования статического анализатора
PPTX
WCF. Легко или проблемно
PDF
Поиск ошибок в программах на языке C#
PPTX
Когда в C# не хватает C++ . Часть 3.
PDF
Project Rider
PPTX
WinDbg в руках .NET разработчика
PPTX
Structured logging
PPTX
RESTful API: Best practices, versioning, design documentation
PPTX
Простой и кросс-платформенный WEB-сервер на .NET
PPTX
Использование Visual Studio Tools for Apache Cordova в реальных проектах
PPTX
Sandboxing in .NET CLR
PPTX
Когда в C# не хватает C++ . Часть 2.
PDF
Распространённые ошибки оценки производительности .NET-приложений
PPTX
Когда в C# не хватает C++
PDF
Как это работает: DLR
Delegates and events in C#
Mythbusters - Web Application Security
Михаил Щербаков "WinDbg сотоварищи"
Apache Ignite.NET в действии
Знакомство с In-Memory Data Grid
сценарии использования статического анализатора
WCF. Легко или проблемно
Поиск ошибок в программах на языке C#
Когда в C# не хватает C++ . Часть 3.
Project Rider
WinDbg в руках .NET разработчика
Structured logging
RESTful API: Best practices, versioning, design documentation
Простой и кросс-платформенный WEB-сервер на .NET
Использование Visual Studio Tools for Apache Cordova в реальных проектах
Sandboxing in .NET CLR
Когда в C# не хватает C++ . Часть 2.
Распространённые ошибки оценки производительности .NET-приложений
Когда в C# не хватает C++
Как это работает: DLR

Архитектура Apache Ignite .NET