SlideShare una empresa de Scribd logo
1 de 20
Descargar para leer sin conexión
UNISTACK
NFX – не библиотека
NFX – не фреймворк
NFX – не .net framework
NFX – стек технологий реализованный на C# и использующий BCL.
UNISTACK
Все базовые компоненты необходимые для создания приложений
(можно разработать полноценное 3х-звенное self-hosted приложение с
контейнером, моделью безопасности, генерируемым по модели UI,
логированием, конфигурацией, работой с БД и возможностью работать
под любой платформой, используя только одну библиотеку)
UNISTACK
Было: Стало:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NFX" version="2.0.0.11" targetFramework="net451" />
</packages>
UNISTACK
• Контейнер приложения
• Унификация типов приложений: единая инфраструктура для console, web, service, win forms
• Relational DB / NoSQL scaffolding/DAL
• GDID – глобальный распределенный идентификатор для распределенных БД
• Ультраэффективная бинарная сериализация
• Contract-based межпроцессное взаимодействие 32.000 2way операций в секунду для бизнес-данных
• Локальные или распределенные кучи (Pile), позволяющие хранить 10^9 объектов без самоубийства GC
• Гибридный легковесный веб-сервер WAVE на замену IIS
• Поддержка Erlang в CLR
• Виртуальная модель документа с конвертацией в pdf, html и другие форматы
• Виртуальные файловые системы (AmazonS3, SVN, GoogleDrive)
• Виртуальные платёжные системы (Stripe, Bank, Taxation, Paypal)
• Виртуальные социальные сети (Twitter, Facebook)
• DI, движок конфигурирования, логирование, модель безопасности, Cache, движок шаблонизации для
произвольных форматов, реализация MVC для web-приложений, драйвер для Mongo, встроенный proxy/firewall
уровня приложения
UNISTACK
• Не использует платформозависимые функции (kernel, gdi)
• Не использует платформозависимые технологии (COM, Active directory,
IIS, MS SQL Server)
• Не использует внешние .net-зависимости (MsTest, asp.net, mvc, wcf,
wpf, phone, serialization)
• Не использует никаких зависимостей вообще (log4net/nLog,
ServiceStack, Unity)
• Отказ от MS-сериализаторов, тяжеловесных объектов, async/await,
Entity
• Компонентная модель в рамках App-container: возможность изменять
свойства/сервисы в runtime и получать текущую телеметрию
5 мегабайт
NFX.Serialization.Slim.SlimSerializer
• Object Instance Teleportation
• Динамическая генерация кода сериализации/десериализации во время выполнения для
каждого типа
• прямая сериализация всех CLR-типов, примитивных структур и их Nullable эквивалентов
(DateTime, Timespan, Amount, GDID, FID, GUID, ConcurrentDictionary, MethodSpec, TypeSpec
etc.)
• прямая сериализация основных reference-типов (byte[], char[], string[])
• поддержка классов и структур с read-only полями
• поддержка custom-сериализации ISerializable, OnSerializing, OnSerialized… etc.
• каскадно-вложенная сериализация (например, какой-то тип делает custom-сериализацию
себя и должен вызвать SlimSerializer для какого-то поля)
• позволяет сериализировать любые поддерживаемые типы (кроме делегатов) в корень
• нормализует графы любой сложности и вложенности
• не требует дополнительной разметки на сериализуемых типах
NFX.Serialization.Slim.SlimSerializer
Сериалзиатор Класс с 20 полями простых и nullable-
типов, массивами и ссылками на
объекты того же класса
Object-граф из нескольких десятков
взаимно ссылающихся объектов,
включая массивы и списки
SlimSerializer, сериализация 460.000 об/сек 94 байта 12.000 об/сек 4.466 байт
SlimSerializer, десериализация 331.000 об/сек 11.500 об/сек
BinaryFormatter, сериализация 34.700 об/сек 1188 байт 2.000 об/сек 7.393 байт
BinaryFormatter, десериализация 42.700 об/сек 2.200 об/сек
DataContractSerializer, сериализация 109.000 об/сек 773 байта 4.000 об/сек 20.246 байт
DataContractSerializer, десериализация 42.000 об/сек 1.510 об/сек
NFX.Glue
• 10.000 строк кода в реализации
• Sync-TCP, async-TCP, In-process биндинги
• Прозрачная сериализация, не нужно атрибутов для данных ([DataContract],
[DataMember])
• Stateless или statefull на выбор. Сохранение состояния при перезагрузке процесса
• Встроенная статистика по вызовам, размеру передаваемых данных;
• Поддержка заголовков сообщений
• Поддержка фильтрации сообщений
• Прямой marshalling аргументов для устранения лишних упаковок/распаковок
• До 120.000 вызовов в секунду для two-way call
• До 500.000 вызовов в секунду для one-way call
NFX.Pile
Гибридный менеджер памяти с 100% managed code.
public interface IPile : IPileStatus, IApplicationComponent
{
PilePointer Put(object obj, uint lifeSpanSec = 0);
object Get(PilePointer ptr);
bool Delete(PilePointer ptr, bool throwInvalid = true);
int SizeOf(PilePointer ptr);
long Compact();
}
NFX.Pile
Native .NET+GC (GC in the «Server»
mode)
Pile
Средний размер объекта, с учётом
фрагментации
144 байта 75 байт
Стабильная работа без
существенного замедления
~20.000.000 объектов ~600.000.000 объектов (кончилась
физическая память)
Скорость записи 800.000 объектов / секунду 500.000 объектов / секунду
Скорость чтения параллельного
записи
1.000.000 объектов / секунду 700.000 объектов / секунду
Количество занятой процессом
памяти
10 Gb 84 Gb для 10^9 объектов
Сборка мусорва, секунд 1-2,5 0
Полная сборка мусора, секунд 2-6 <0,030
Работа в режиме cache – expiration,
свойства объекта.
- +
Декларативный bootstraper
Application
{
data-store
{
type="NFX.DataAccess.MySQL.MySQLDataStore, NFX.MySQL"
connect-string="Server=localhost;Database=contacts;Uid=root;Pwd=mathf1235"
script-assembly="Wave.DbApplication"
}
wave
{
server
{
prefix { name="http://localhost:8080/" }
dispatcher
{
filter
{
order=1
name="DumpErrors"
type="NFX.Wave.Filters.ErrorFilter, NFX.Wave"
show-dump
{
match { name="localhost"}
}
}
handler
{
order=0
type="NFX.Wave.Handlers.FileDownloadHandler, NFX.Wave"
root-path=$"Resources/"
match { path="/res/{*filePath}" }
}
handler
{
order=100
name="Stock Content Embedded Site"
order=1000
type="NFX.Wave.Handlers.StockContentSiteHandler, NFX.Wave"
match{ path="/stock/{*path}"}
}
handler
{
order=200
type="NFX.Wave.Handlers.MVCHandler, NFX.Wave"
type-location { assembly="Wave.DbApplication.exe" ns {
name="Wave.DbApplication.Controllers" } }
match { path="/{type=Contacts}/{mvc-action=Index}" var { query-name="*" }
}
}
}
}
}
}
Унифицированный движок конфигурации для любых компонент.
Декларативная инъектирование/настройка/запуск сервисов в контейнер приложения
Декларативный bootstraper. Scripting
Root
{
a=12
b=true
var1=0{script-only=true}
var2=175.4{script-only=true}
var3=true{script-only=true}
_block
{
_set{ path=/var1 to='((?$(/var3);$(/var2);-10)+100)+kozel' }
RESULT=$(/var1){}
}
}
Декларативный bootstraper. Net gate
Gate
{
name='Default Gate'
enabled = true
incoming
{
default-action=allow
rule{name='AdminAccess' order=1 action=deny from-addrs='170.12.14.12;170.12.14.13'}
rule{name='Workgroups' order=2 action=deny from-groups='home,work'}
group
{
name='home‘
address{name='Alex Berg Home' patterns='14.2.1*'}
address{name='Denis Rozotoks Home' patterns='3.118.2.12,3.118.2.13,3.118.2.14'}
}
group
{
name='work'
address{name='Alex Berg Office' patterns='45.2.2.12,45.2.2.75'}
address{name='Denis Rozotoks Office' patterns='77.123.1.14'}
}
}
}
Работа с декартовой геометрией
и координатами
Расстояние, периметры, поиск пересечений фигур/лучей, полярные координаты, отображение
направления по координатам.
[TestCase]
public void FromDegreeString_Distance_CLE_LA()
{
var cleveland = new LatLng("41°29'13'', -81°38'26''");
var losangeles = new LatLng("34°9'40'', -117°56'48''");
var dist = cleveland.HaversineEarthDistanceKm(losangeles);
Console.WriteLine(dist);
Assert.AreEqual(3265, (int)dist);
}
Logging
• Синхронная/асинхронная модели работы
• Коннекторы: MsSQLServer, SMTP, CSV file, debug file, MongoDB,
Composite, AsyncComposite, *nix Syslog
• Фильтры: уровень сообщения, дни недели, диапазон часов/дат,
паттерны сообщений. Инъектируемые внешние фильтры.
• SLA, Failovers (если логирование в A неудачно, то логировать в B)
• Flood-фильтр
• Интеграция с Trace/Debug
• Готовая интеграция в NFX-компоненты
NFX.Wave
5 мегабайт
https://github.com/aumcode/nfx C# Server UNISTACK framework
https://github.com/aumcode/serbench CLR Serializer Benchmark Suite
https://github.com/aumcode/nfx-demos NFX Demo Apps / Use-cases
https://github.com/aumcode/nfx/blob/master/CONTRIBUTING.md

Más contenido relacionado

La actualidad más candente

Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6
Technopark
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
Ontico
 
Caching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaCaching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in Java
Andrei Pangin
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)
Ontico
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
Vadim Madison
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)
Ontico
 
Smirnov twisted-python
Smirnov twisted-pythonSmirnov twisted-python
Smirnov twisted-python
Andrey Smirnov
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandra
odnoklassniki.ru
 

La actualidad más candente (20)

Bytecode
BytecodeBytecode
Bytecode
 
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...
#MBLTdev: Core Data: особенности использования и синхронизация в iCloud (Avia...
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6
 
Подводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyПодводные камни System.Security.Cryptography
Подводные камни System.Security.Cryptography
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
JavaScript-библиотека
JavaScript-библиотекаJavaScript-библиотека
JavaScript-библиотека
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Caching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaCaching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in Java
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
 
Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
 
Kvc, kvo
Kvc, kvoKvc, kvo
Kvc, kvo
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
Smirnov twisted-python
Smirnov twisted-pythonSmirnov twisted-python
Smirnov twisted-python
 
Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервера
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandra
 

Similar a NFX

Cocoa Networking
Cocoa NetworkingCocoa Networking
Cocoa Networking
guest57eb8a
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Ontico
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
Vyacheslav Nikulin
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
Stanfy
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
InTRUEdeR
 
Безопасность Центров Обработки Данных
Безопасность Центров Обработки ДанныхБезопасность Центров Обработки Данных
Безопасность Центров Обработки Данных
Cisco Russia
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 

Similar a NFX (20)

Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Клиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhoneКлиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhone
 
Cocoa Networking
Cocoa NetworkingCocoa Networking
Cocoa Networking
 
Dotnet
DotnetDotnet
Dotnet
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Genome
GenomeGenome
Genome
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++
 
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
Безопасность Центров Обработки Данных
Безопасность Центров Обработки ДанныхБезопасность Центров Обработки Данных
Безопасность Центров Обработки Данных
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
Решения компании Cisco для обеспечения безопасности сетей операторов связи и ...
Решения компании Cisco для обеспечения безопасности сетей операторов связи и ...Решения компании Cisco для обеспечения безопасности сетей операторов связи и ...
Решения компании Cisco для обеспечения безопасности сетей операторов связи и ...
 
Microsoft , Azure и Drupal
Microsoft , Azure и DrupalMicrosoft , Azure и Drupal
Microsoft , Azure и Drupal
 

NFX

  • 1.
  • 2. UNISTACK NFX – не библиотека NFX – не фреймворк NFX – не .net framework NFX – стек технологий реализованный на C# и использующий BCL.
  • 3. UNISTACK Все базовые компоненты необходимые для создания приложений (можно разработать полноценное 3х-звенное self-hosted приложение с контейнером, моделью безопасности, генерируемым по модели UI, логированием, конфигурацией, работой с БД и возможностью работать под любой платформой, используя только одну библиотеку)
  • 4. UNISTACK Было: Стало: <?xml version="1.0" encoding="utf-8"?> <packages> <package id="NFX" version="2.0.0.11" targetFramework="net451" /> </packages>
  • 5. UNISTACK • Контейнер приложения • Унификация типов приложений: единая инфраструктура для console, web, service, win forms • Relational DB / NoSQL scaffolding/DAL • GDID – глобальный распределенный идентификатор для распределенных БД • Ультраэффективная бинарная сериализация • Contract-based межпроцессное взаимодействие 32.000 2way операций в секунду для бизнес-данных • Локальные или распределенные кучи (Pile), позволяющие хранить 10^9 объектов без самоубийства GC • Гибридный легковесный веб-сервер WAVE на замену IIS • Поддержка Erlang в CLR • Виртуальная модель документа с конвертацией в pdf, html и другие форматы • Виртуальные файловые системы (AmazonS3, SVN, GoogleDrive) • Виртуальные платёжные системы (Stripe, Bank, Taxation, Paypal) • Виртуальные социальные сети (Twitter, Facebook) • DI, движок конфигурирования, логирование, модель безопасности, Cache, движок шаблонизации для произвольных форматов, реализация MVC для web-приложений, драйвер для Mongo, встроенный proxy/firewall уровня приложения
  • 6. UNISTACK • Не использует платформозависимые функции (kernel, gdi) • Не использует платформозависимые технологии (COM, Active directory, IIS, MS SQL Server) • Не использует внешние .net-зависимости (MsTest, asp.net, mvc, wcf, wpf, phone, serialization) • Не использует никаких зависимостей вообще (log4net/nLog, ServiceStack, Unity) • Отказ от MS-сериализаторов, тяжеловесных объектов, async/await, Entity • Компонентная модель в рамках App-container: возможность изменять свойства/сервисы в runtime и получать текущую телеметрию
  • 8. NFX.Serialization.Slim.SlimSerializer • Object Instance Teleportation • Динамическая генерация кода сериализации/десериализации во время выполнения для каждого типа • прямая сериализация всех CLR-типов, примитивных структур и их Nullable эквивалентов (DateTime, Timespan, Amount, GDID, FID, GUID, ConcurrentDictionary, MethodSpec, TypeSpec etc.) • прямая сериализация основных reference-типов (byte[], char[], string[]) • поддержка классов и структур с read-only полями • поддержка custom-сериализации ISerializable, OnSerializing, OnSerialized… etc. • каскадно-вложенная сериализация (например, какой-то тип делает custom-сериализацию себя и должен вызвать SlimSerializer для какого-то поля) • позволяет сериализировать любые поддерживаемые типы (кроме делегатов) в корень • нормализует графы любой сложности и вложенности • не требует дополнительной разметки на сериализуемых типах
  • 9. NFX.Serialization.Slim.SlimSerializer Сериалзиатор Класс с 20 полями простых и nullable- типов, массивами и ссылками на объекты того же класса Object-граф из нескольких десятков взаимно ссылающихся объектов, включая массивы и списки SlimSerializer, сериализация 460.000 об/сек 94 байта 12.000 об/сек 4.466 байт SlimSerializer, десериализация 331.000 об/сек 11.500 об/сек BinaryFormatter, сериализация 34.700 об/сек 1188 байт 2.000 об/сек 7.393 байт BinaryFormatter, десериализация 42.700 об/сек 2.200 об/сек DataContractSerializer, сериализация 109.000 об/сек 773 байта 4.000 об/сек 20.246 байт DataContractSerializer, десериализация 42.000 об/сек 1.510 об/сек
  • 10. NFX.Glue • 10.000 строк кода в реализации • Sync-TCP, async-TCP, In-process биндинги • Прозрачная сериализация, не нужно атрибутов для данных ([DataContract], [DataMember]) • Stateless или statefull на выбор. Сохранение состояния при перезагрузке процесса • Встроенная статистика по вызовам, размеру передаваемых данных; • Поддержка заголовков сообщений • Поддержка фильтрации сообщений • Прямой marshalling аргументов для устранения лишних упаковок/распаковок • До 120.000 вызовов в секунду для two-way call • До 500.000 вызовов в секунду для one-way call
  • 11. NFX.Pile Гибридный менеджер памяти с 100% managed code. public interface IPile : IPileStatus, IApplicationComponent { PilePointer Put(object obj, uint lifeSpanSec = 0); object Get(PilePointer ptr); bool Delete(PilePointer ptr, bool throwInvalid = true); int SizeOf(PilePointer ptr); long Compact(); }
  • 12. NFX.Pile Native .NET+GC (GC in the «Server» mode) Pile Средний размер объекта, с учётом фрагментации 144 байта 75 байт Стабильная работа без существенного замедления ~20.000.000 объектов ~600.000.000 объектов (кончилась физическая память) Скорость записи 800.000 объектов / секунду 500.000 объектов / секунду Скорость чтения параллельного записи 1.000.000 объектов / секунду 700.000 объектов / секунду Количество занятой процессом памяти 10 Gb 84 Gb для 10^9 объектов Сборка мусорва, секунд 1-2,5 0 Полная сборка мусора, секунд 2-6 <0,030 Работа в режиме cache – expiration, свойства объекта. - +
  • 13. Декларативный bootstraper Application { data-store { type="NFX.DataAccess.MySQL.MySQLDataStore, NFX.MySQL" connect-string="Server=localhost;Database=contacts;Uid=root;Pwd=mathf1235" script-assembly="Wave.DbApplication" } wave { server { prefix { name="http://localhost:8080/" } dispatcher { filter { order=1 name="DumpErrors" type="NFX.Wave.Filters.ErrorFilter, NFX.Wave" show-dump { match { name="localhost"} } } handler { order=0 type="NFX.Wave.Handlers.FileDownloadHandler, NFX.Wave" root-path=$"Resources/" match { path="/res/{*filePath}" } } handler { order=100 name="Stock Content Embedded Site" order=1000 type="NFX.Wave.Handlers.StockContentSiteHandler, NFX.Wave" match{ path="/stock/{*path}"} } handler { order=200 type="NFX.Wave.Handlers.MVCHandler, NFX.Wave" type-location { assembly="Wave.DbApplication.exe" ns { name="Wave.DbApplication.Controllers" } } match { path="/{type=Contacts}/{mvc-action=Index}" var { query-name="*" } } } } } } } Унифицированный движок конфигурации для любых компонент. Декларативная инъектирование/настройка/запуск сервисов в контейнер приложения
  • 15. Декларативный bootstraper. Net gate Gate { name='Default Gate' enabled = true incoming { default-action=allow rule{name='AdminAccess' order=1 action=deny from-addrs='170.12.14.12;170.12.14.13'} rule{name='Workgroups' order=2 action=deny from-groups='home,work'} group { name='home‘ address{name='Alex Berg Home' patterns='14.2.1*'} address{name='Denis Rozotoks Home' patterns='3.118.2.12,3.118.2.13,3.118.2.14'} } group { name='work' address{name='Alex Berg Office' patterns='45.2.2.12,45.2.2.75'} address{name='Denis Rozotoks Office' patterns='77.123.1.14'} } } }
  • 16. Работа с декартовой геометрией и координатами Расстояние, периметры, поиск пересечений фигур/лучей, полярные координаты, отображение направления по координатам. [TestCase] public void FromDegreeString_Distance_CLE_LA() { var cleveland = new LatLng("41°29'13'', -81°38'26''"); var losangeles = new LatLng("34°9'40'', -117°56'48''"); var dist = cleveland.HaversineEarthDistanceKm(losangeles); Console.WriteLine(dist); Assert.AreEqual(3265, (int)dist); }
  • 17. Logging • Синхронная/асинхронная модели работы • Коннекторы: MsSQLServer, SMTP, CSV file, debug file, MongoDB, Composite, AsyncComposite, *nix Syslog • Фильтры: уровень сообщения, дни недели, диапазон часов/дат, паттерны сообщений. Инъектируемые внешние фильтры. • SLA, Failovers (если логирование в A неудачно, то логировать в B) • Flood-фильтр • Интеграция с Trace/Debug • Готовая интеграция в NFX-компоненты
  • 20. https://github.com/aumcode/nfx C# Server UNISTACK framework https://github.com/aumcode/serbench CLR Serializer Benchmark Suite https://github.com/aumcode/nfx-demos NFX Demo Apps / Use-cases https://github.com/aumcode/nfx/blob/master/CONTRIBUTING.md