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
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
PDF
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
PDF
Unsafe: to be or to be removed?
PDF
Незаурядная Java как инструмент разработки высоконагруженного сервера
PPT
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
PDF
Atomics, CAS and Nonblocking algorithms
PPTX
Dz Java Hi Load 0.4
PDF
JEE Conf: Архитектура Android приложений: полезные и вредные советы
PDF
Управление памятью в Java: Footprint
PPT
Dotnet
PPTX
Multithreading in java past and actual
PDF
андрей паньгин
PPTX
Expert Java Day: Java concurrency
PDF
In the sun.misc.Unsafe bowels
PPTX
Валерий Петров «Модель памяти .NET»
PDF
Синхронизация без блокировок и СМС
PPTX
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
PDF
Разговор про Java 9. Extended version
PPTX
Знакомство с In-Memory Data Grid
PDF
"Optimizing Memory Footprint in Java" @ JEEConf 2013, Kiev, Ukraine
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
Unsafe: to be or to be removed?
Незаурядная Java как инструмент разработки высоконагруженного сервера
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Atomics, CAS and Nonblocking algorithms
Dz Java Hi Load 0.4
JEE Conf: Архитектура Android приложений: полезные и вредные советы
Управление памятью в Java: Footprint
Dotnet
Multithreading in java past and actual
андрей паньгин
Expert Java Day: Java concurrency
In the sun.misc.Unsafe bowels
Валерий Петров «Модель памяти .NET»
Синхронизация без блокировок и СМС
Droidcon Moscow 2015. Android NDK - стоит ли игра свеч Дмитрий Юницкий - Mail...
Разговор про Java 9. Extended version
Знакомство с In-Memory Data Grid
"Optimizing Memory Footprint in Java" @ JEEConf 2013, Kiev, Ukraine

More from Mikhail Shcherbakov (20)

PPTX
Delegates and events in C#
PPTX
Mythbusters - Web Application Security
PPTX
Михаил Щербаков "WinDbg сотоварищи"
PPTX
Apache Ignite.NET в действии
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
PPTX
Visual Studio 2015 Diagnostic and Debugging Tools
Delegates and events in C#
Mythbusters - Web Application Security
Михаил Щербаков "WinDbg сотоварищи"
Apache Ignite.NET в действии
сценарии использования статического анализатора
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
Visual Studio 2015 Diagnostic and Debugging Tools

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