The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Microsoft открыл код хранилища Garnet, совместимого с Redis

19.03.2024 13:25

Компания Microsoft открыла исходные тексты NoSQL-системы Garnet, рассчитанной на создание кэширующих хранилищ и совместимой с существующими клиентскими библиотеками для хранилища Redis. Garnet поддерживает создание масштабируемых кластеров для кэширования данных, в которых может использоваться репликация, миграция ключей и сегментирование данных между узлами кластера. Проект написан на языке C# с ядром хранения на C++, открыт под лицензией MIT и может работать на всех платформах, поддерживаемых в .NET (первичными платформами заявлены Linux и Windows).

Для хранения данных используется движок Tsavorite (форк хранилища Microsoft FASTER), который поддерживает многопоточную обработку запросов, транзакции, фиксацию изменений в неблокирующем режиме (checkpointing), восстановление после сбоев, сохранение избыточных копий и ведение лога операций. Сетевой обработчик в Garnet построен с использованием архитектуры разделяемой памяти, предложенной исследовательским проектом ShadowFax. Обработка TLS и взаимодействие с хранилищем выполняется в одном потоке, что даёт возможность избежать накладных расходов на переключение потоков и более эффективно использовать кэш CPU при передаче данных по сети.

Архитектура Garnet отделяет логику разбора и обработки запросов от операций с хранилищем. Данные хранятся с использованием двух хранилищ в формате ключ-значение, реализованных на базе библиотеки Tsavorite. Первое "основное" хранилище оптимизировано для быстрого выполнения операций со строками, а второе "объектное" хранилище оптимизировано для размещения сложных объектов и расширенных типов данных, таких как хэши и списки. Типы данных во втором хранилище реализованы с привлечением библиотек .NET. Данные хранятся в куче (C# heap), что позволяет их эффективно обновлять, и в сериализированном виде на диске.

Особенности Garnet:

  • Возможно развёртывание многоуровневых хранилищ, охватывающих оперативную память, SSD-накопители и облачные хранилища, в которых менее востребованные данные вытесняются в медленные хранилища для создания кэшей, размером больше оперативной памяти.
  • Расширяемая поддержка устройств, допускающая создание слоёв, оптимизированных для работы с различными устройствами, например, имеются слои для SDD, жёстких дисков и облачного хранилища Azure Storage.
  • Эффективный механизм повторного использования освободившегося пространства в оперативной памяти, предотвращающий фрагментацию.
  • Настраиваемые лимиты на размер памяти, используемой для индексов, лога и хранения объектов.
  • Для обращения к хранилищу применяется протокол RESP, что позволяет использовать Garnet с немодифицированными клиентами Redis.
  • Поддержка хранения как строковых значений, так и сложных структур данных, таких как списки, хэши, множества, отсортированные списки и данные геопозиционирования. Возможность определения времени жизни ключа.
  • Наличие API для выполнения аналитических запросов (HLL/Hyperloglog, Bitmap), транзакций (MULTI/EXEC) и использования парадигмы публикация/подписка.
  • Наличие средств для гибкого управления доступом через ACL.
  • Возможность определения конфигурации в формате JSON или redis.conf.
  • Поддержка подключения дополнительных сетевых обработчиков. Возможность шифрования трафика с использованием TLS (на базе SslStream).
  • Возможность создания расширений на языке C#, реализующих дополнительные операции со строками и объектами.
  • Поддержка транзакционных хранимых процедур, охватывающих несколько ключей.
  • Возможность восстановления состояния с ранее сохранённой позиции (checkpoint-recovery). Наличие режима только добавления (AOF, append-only file), при котором все старые данные остаются доступны и не замещаются.
  • Поддержка создания кластера хранения с репликацией, сегментированием (Sharding), динамической миграцией ключей между узлами и восстановлением сбойных узлов.
  • Высокая производительность и низкие задержки при выполнении запросов. Эффективная обработка мелких пакетных запросов при большом числе клиентских сеансов, позволяющая добиться пропускной способности (число обработанных запросов в секунду) на порядок выше, чем у конкурирующих решений. При запуске в виртуальных машинах в облаке Azure в большинстве случаев задержки обращения клиента не превышают 300 микросекунд. В проведённых тестах Garnet значительно опережает Redis, Dragonfly и KeyDB по производительности и отзывчивости. В некоторых тестах Garnet обгоняет конкурирующие системы в десять раз.


  1. Главная ссылка к новости (https://www.microsoft.com/en-u...)
  2. OpenNews: Выпуск СУБД Redis 7.0
  3. OpenNews: Проект Dragonfly развивает более быструю замену Redis и Memcached
  4. OpenNews: Создатель СУБД Redis передал сопровождение проекта сообществу
  5. OpenNews: Компания Redis Labs перевела модули с Commons Clause на собственную несвободную лицензию
  6. OpenNews: Компания Alibaba открыла код распределённой СУБД PolarDB, основанной на PostgreSQL
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/60808-garnet
Ключевые слова: garnet, redis, microsoft
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (71) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Golangdev (?), 13:46, 19/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Хотя это и нелюбимый многими, в т. ч. и мной M$, выглядит интересно.
    Лицензия MIT license, а не б-гмерзкая BSL.
     
     
  • 2.2, Аноним (2), 13:52, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Неважно, какая лицензия, это шарп. То есть всем тем, кто не завязывал свою инфраструктуру на экосистему мелкософта, можно сразу проходить мимо.
     
     
  • 3.21, leap42 (ok), 17:37, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Неважно, какая лицензия, это шарп. То есть всем тем, кто не завязывал свою инфраструктуру на экосистему мелкософта, можно сразу проходить мимо.

    В этих словах есть какой-то смысл вообще? .NET рантайм весь целиком мегабайт 100 или около того, если не хочется установить его одним rpm или deb пакетом из оф репы, можно просто скачать docker контейнер, где уже всё есть такого же веса. Но это не всё, сейчас .NET может собрать нативную апку, где все нужные части рантайма будут собраны вместе с приложенькой (но только), так вообще мегов 20 получится. И где кто должен на что-то завязываться?

     
     
  • 4.75, Аноним (75), 13:40, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Так и ставь отдельную требуемую версию NET рантайма для каждого NET приложения.
    > .NET может собрать нативную апку

    Это не нативное предложение, это костыль.

     
     
  • 5.80, Аноним (80), 14:54, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    .NET 6 November 12, 2024
    .NET 7 May 14, 2024
    .NET 8 November 10, 2026

    Аж три версии. Прямо вот все обмучались бегать и ставить нужную для каждого.

     
     
  • 6.84, анонимус (??), 23:15, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще говоря, даже две - это уже больше, чем хотелось бы. А три - это реально много.
     
     
  • 7.88, User (??), 15:57, 28/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Где-то в стороне глумливо ржОт одна java...
     
  • 3.24, KenyaWest (ok), 18:12, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > это шарп

    Кто-нибудь, скажите ему, что шарп уже лет 10 как максимально кросс-платформенный ЯП (.NET Core), если не 20 (Mono)

     
     
  • 4.37, bukazoid (??), 22:21, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Это все здорово, но если у меня все на java, то мне придется пройти мимо
     
     
  • 5.83, John Doe123123123 (?), 18:01, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    не задерживайся, продолжай идти мимо
     
  • 3.28, ptr (ok), 19:38, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Так шарп тоже опенсорсный. А так как ядро все же на C++, то проблемы с GC минимизированы.
     
     
  • 4.50, Аноним (50), 06:33, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Частично открытый
     
     
  • 5.67, ptr (ok), 16:03, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Частично открытый

    Чем Вас не устраивает MIT лицензия? https://github.com/mono/mono/blob/main/LICENSE

     
     
  • 6.76, Аноним (75), 13:41, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Попробуй форкнуть.
     
     
  • 7.82, ptr (ok), 17:24, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Попробуй форкнуть.

    Он уже форкнут 3800 раз. И что?

     
  • 2.3, Всем Анонимам Аноним (?), 13:53, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Так оно использует кучу другого включая .NET. А чтобы там с лицензиями разобраться нужен юрист наверное
     
     
  • 3.6, Аноним (6), 13:59, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    После какой-нибудь жабы у дотнет кора с лицензиями всё просто отлично
     
  • 2.4, нах. (?), 13:54, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • –9 +/
    Корпорация ЗЛА опять подтвердила свою репутацию.

    Выглядит "интересно" им, б-ть!

    > Лицензия MIT license

    была бы вот нормальная подписка за $10000/socket или просто тихо лежало бы в своем Azure - я бы и радовался за них.

    Но нет, нате на лопате. А ты не подумал, швайн, как МНЕ эту тамагочу потом обслуживать?!


     
     
  • 3.7, Golangdev (?), 14:02, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    сам с собой общаешься, дог ?

    кто-то тебе пистолет приставил и гонит сдаваться мелкомягким ?

    если не можешь/не хочешь/боишься - не используй, новые инструменты не для тебя

     
     
  • 4.15, Аноним (15), 15:29, 19/03/2024 Скрыто ботом-модератором     [к модератору]
  • +5 +/
     
  • 2.5, Аноним (-), 13:57, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Так майкрософту БСЛ не нужна.
    Она для тех у кого мало ресурсов и они боятся, что условный амазон/майкрософ/гугл-клауд/любой-провайдер будет продавать их софт as service.
    А у майкрософта есть свой азур, где можно продавать уже готовые инстансы с настройкой и поддержкой.

    Так что они, ИМХО, больше заинтерисованы в бесплатных тестерах и кодерах.

     
     
  • 3.12, Аноним (2), 14:37, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вроде корпоративная политика мелкософта "лучший QA — это пользователь".
     
  • 2.29, Аноним (29), 20:02, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Да, но .NET, узкая ниша. В Линуксе практически не востребована.
     
     
  • 3.49, Аноним (49), 05:40, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    То то у меня из всего импортозамещенного бизнес ПО это дотнетовское. А не как у местных любителей линух ради самого линуха. Ну совершенно невостребовано.
     
     
  • 4.53, Вы забыли заполнить поле Name (?), 09:08, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Что за по? Поподробнее
     
     
  • 5.60, Аноним (2), 13:59, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Paint.NET?
     
  • 5.69, Аноним (69), 16:49, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Одно из самых простых и первых под рукой:
    ExecStart=/usr/bin/dotnet /var/www/pixbi/pix-bi.dll

    Зато линуксоиды пользователи локалхоста не подкачали. По соседнему комментарию с рисовалкой.нет сразу видно как они в продакшене применяют линух.

     
  • 5.89, User (??), 08:10, 29/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, у меня 2\3 MES'овских микросервисов в кубере на ём. Плюс - фактически вся торговля на энергорынке. Куча отраслевого софта...
     
  • 2.70, Аноним (-), 17:39, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Лицензия MIT license, а не б-гмерзкая BSL.

    В BSL даже название намекает - BullShitLicense. Как вы яхту назовете, так она и поплывет :)

     

  • 1.8, Аноним (-), 14:10, 19/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > Проект написан на языке C#

    Спасибо, конечно, но лучше уж редиска тогда. А это какое-то нате на лопате (с) бессмысленное и беспощадное.

     
     
  • 2.10, Аноним (10), 14:17, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    А lua в redis тебя не смущает? Лучше уж писать расширения на C#

     
     
  • 3.17, Фняк (?), 16:21, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не смущает. Lua в редис можно пользоваться, а можно не пользоваться. А с C# в этом поделии выбора нет.

    Вот жучьё, взяли язык с сборкой мусора и рассказывают про микросекундные задержки

     
     
  • 4.18, mumu (ok), 17:02, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А графики нарисовали с иностранными актёрами на конспиративных квартирах. Но нас не проведёшь! Если уж в голову вбили что-то, то выбивать так просто не дадимся!
     
     
  • 5.61, Аноним (2), 14:00, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    По методу шпильки — имеем нужный результат, к нему и танцуем.
     
  • 3.19, Аноним (19), 17:09, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Чем тебя смущает lua в HAProxy, NGINX, lighttpd?
     
  • 3.30, Аноним (29), 20:03, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Для Lua не нужно тащить в систему .NET-фреймворк.
     
  • 3.40, Аноним (-), 00:07, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А lua в redis тебя не смущает? Лучше уж писать расширения на C#

    Нет, Lua меня вообще совсем не смущает. По сравнению с дотнетом это просто невинная шалость. Маленькая и беззубая. А вон то гарантирует харатктерный экспериенс с их гигазами ассемблей и чем там еще...

     
  • 3.54, Вы забыли заполнить поле Name (?), 09:09, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Чел на луа можно сразу писать: он очень прост и используется много где, так что нет, не смущает.
     
     
  • 4.57, Аноним (57), 12:34, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    ну так и C# прост и много где используется. в чём твои проблемы?
     
     
  • 5.58, Вы забыли заполнить поле Name (?), 12:58, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > ну так и C# прост и много где используется. в чём твои
    > проблемы?

    Посмотри комментарий, на который я отвечал.

     
     
  • 6.62, Аноним (2), 14:02, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Вы правда пытаетесь серьёзно разговаривать с шарпеем?
    Он вам ещё расскажет, что сишка тоже очень тяжёлый рантам тянет.
     
  • 2.31, Аноним (31), 20:10, 19/03/2024 Скрыто ботом-модератором     [к модератору]
  • +5 +/
     

  • 1.33, Аноним (33), 21:43, 19/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Надо протестировать, если заявленнное действительно так, то считайте что это нормальная альтернатива медленному Redis, быстрому Dragonfly у которого быстро работает только GET/SET, да и то с кучей багов он, и испорченному самими же разработчиками KeyDB 6.3+ версий.

    Это я нормально тогда сэкономлю CPU на нагруженных KeyDB 6.2 (Redis не справляется). Так что Microsoft сделал очень много судя по возможностям, но посмотрим... Пока из отличий - как минимум MSET в Garnet не атомарный, но для меня это не проблема.

     
     
  • 2.34, Аноним (34), 21:54, 19/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Redis не справляется

    Ты просто не умеешь его готовить

     
     
  • 3.43, Заноним (?), 01:43, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Его нельзя приготовить. Его можно только насыпать и размазать.
     
     
  • 4.64, Аноним (2), 14:06, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А шарп вообще только слить и закрыть крышкой, и что?
     
     
  • 5.68, Заноним (?), 16:07, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не о языке программирования, а о реализации kv-сервера.
     
  • 2.42, r2d0 (?), 00:36, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А что не так с keydb стало?
     
     
  • 3.46, Аноним (2), 01:53, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот майкрософт на графиках показывает, что их "продукт" работает в несколько раз быстрее.
    Возможно, даже превосходит физический предел возможностей современного оборудования.
     
     
  • 4.48, голос из леса (?), 05:21, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    описание тестов доставляет - тесты под их систему заточены, остальные хранилища "мы не особо-то и настраивали"
     
     
  • 5.63, Аноним (2), 14:04, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Давайте всё-таки отличать маркетинг от объективного сравнения.
    Кому она вообще нужна, эта объективность?
     
  • 5.71, Аноним (31), 18:14, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Код открыт, облачные ресурсы стоят копейки, проведи свои независимые тесты и утри нос этим корпоратам. Даже с дивана вставать не придётся.
     
     
  • 6.77, Аноним (75), 13:52, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Чтобы доказать совершенно очевидный факт, что их тесты необъективны? Так это только у тебя есть сомнения.
     
     
  • 7.79, Аноним (2), 13:58, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Начнём с того, что это указано в описании тестов.
     
  • 3.73, Аноним (33), 00:56, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А зайди в keydb к ним на гитхабе в issue c 1 по 5 страницу глянь, там все печально по багам, очень даже печально, а issue за номером 470 вообще доставило, я когда поставил 6.3 давно тогда, она у меня начала вообще хуже редиса работать, дико торомзить и подвисать. Стабюильно на нагрузках работает только 6.2.2
     

  • 1.36, Ддд (?), 22:07, 19/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Размечтались. Редис медленнее потому что универсальный а эта поделка потребует танцев с бубном перед каждой записью так что зря радуетесь
     
     
  • 2.44, Заноним (?), 01:47, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Redis медленный, потому-что не умеет использовать smp. А универсальность всех обозначенных kv хранилищ в среднем одинакова
     
     
  • 3.74, Аноним (74), 11:43, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не совсем понятно вам не написать программу пишушую на диск в несколько потоков?
    Проще использовать C# решение от Microsoft? Вы точно программист?
     
     
  • 4.78, Аноним (2), 13:57, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > in-memory хранилище
    > пишушую на диск в несколько потоков

    Шарпеи во всей красе своей интеллектуальной мощи.

     
  • 4.85, Заноним (?), 00:17, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты сейчас с кем разговаривал?

     
  • 2.47, penetrator (?), 02:55, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    универсальный?

    как записать в редис стрим 10 гигабайт с возможностью кешировать в памяти в пределах таймаута Т, в случае если оперативной памяти не хватает использовать дисковое хранилище

    и самое главное как вернуть стрим из редиса? чтобы не читать его чанками?

    наверное ты скажешь а давай изначально разобъем блоб пачками по 10мб и будет читать его кусками
    очень все интересно но количество ключей увеличивается, и универсальным редис не назовешь

    и кстати да, а что тогда если не редис? Hadoop разворачивать?

     
     
  • 3.51, Аноним (51), 08:37, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > наверное ты скажешь а давай изначально разобъем блоб пачками по 10мб

    Youtube так не делает?

     
  • 3.52, Аноним (10), 09:03, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    сишечка в помошь
     
     
  • 4.55, penetrator (?), 12:06, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    а каким си боком?

    редис стрингс примет вернет тебе байтовый массив лимитированного размера, а не безграничный байтовый стрим

     
     
  • 5.56, Аноним (57), 12:33, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    всмысле каким боком. берёшь и пишешь что тебе нужно, а не шаришься по помойкам
     
     
  • 6.59, Аноним (34), 13:33, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    эти мегаайтишники могут только на форумах писать
     
  • 3.65, Аноним (2), 14:10, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > как записать в редис стрим 10 гигабайт с возможностью кешировать в памяти в пределах таймаута Т, в случае если оперативной памяти не хватает использовать дисковое хранилище

    Видел писателей такой фигни, с логикой в на стороне приложения. Ой, как весело им было, когда хранилище отвалилось...

     
     
  • 4.72, Аноним (31), 18:18, 20/03/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Расскажи им где взять хранилище, которое не может отвалиться, будут писать под него.
     
  • 3.81, Tarantool (?), 16:39, 21/03/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > и кстати да, а что тогда если не редис?

    Tarantool ?

     
     
  • 4.86, penetrator (?), 00:53, 22/03/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> и кстати да, а что тогда если не редис?
    > Tarantool ?

    и как в него положить 10 гигов бинари? и читать потом стримом а не атомарно?

     

  • 1.87, Алексей (??), 10:08, 22/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Разрабы такие разрабы. Ну сделали ещё один инструмент, нет надо вонять. Буквально вчера вышла новость, что теперь Redis запрещено бесплатно использовать в облачных сервисах, таких как Azure. Получается, что MS сэкономил, выпустив свой продукт. Не нравится Garnet, можно использовать Dragonfly, Tarantool(есть даже на гошке), да хоть Memcached. Естественно выпуская для себя они заточили его под шарп.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру