- PVSM.RU - https://www.pvsm.ru -
С 2014 года .net стал совсем другим (не тем, каким мы его знаем). Открытие части .net framework, новый компилятор C#, новый jit компилятор, .net native, активное использование нетипичных для windows технологий в Azure (из-за чего даже переименовали Windows Azure в Microsoft Azure), все большее движение Asp.net в сторону не только windows.
На DevCon в 2012 году мы (я) с непониманием, слушал доклады по использованию Redis в .net приложениях. В нынешнем 2015 году не обращать внимания на Redis невозможно, даже живя на другой планете.
Я для себя точкой смены вех вижу 7 октября 2014 года, когда Скотт Гаттри анонсировал общую доступность Redis Cache в Azure [1].
И последним ударом стало — Microsoft теперь официально рекомендует использовать Redis для кэша — «We recommend all new developments use Azure Redis Cache.»
Всю жизнь говорили SQL Server (либо распределенный AppFabric Caching), а теперь Redis.
В Asp.Net5 (до декабря 2014 — vnext) появятся возможности:
А когда-то не так давно, во времена .net 4.0- 4.5, был только Output cache [8] и умельцы прикручивали Redis сами — автор на хабре недавно писал [9] про использование Redis вместе с CacheDependency.
Изначально Redis писался под nix системы. Через какое-то время Microsoft занялся поддержкой Redis для Windows через Microsoft Open Technologies. И уже потом, от проекта под Windows, Azure форкнула свою версию.
Чтобы понимать разницу между проектами:
Основную работу по поддержке Windows версии несет команда MS Open Technologies.
сохраняя все интерфейсы/header файлы для совместимости с не windows версией; при этом ответственность на себя за windows версию берет только в Azure варианте. На локальном сервере/кластере – это на ваш страх и риск.
Команде Azure проще всего, т.к.
Коллеги, которые очень хорошо/плотно разбирались/ковырялись с SQL Server лет по 10, но вообще не ковырялись с Redis спрашивали:
Простой ответ — Redis очень быстрый. На бытовом уровне я бы объяснил так:
В документации есть статья [14] про производительность (очень рекомендую потратить время и прочесть), и сравнение производительности с memcache [15]/ вариант 2 [16]. На своих тестах Redis обошел Memcache, что очень хороший критерий производительности.
Если коротко, то 100 тысяч запросов в секунду на одном узле — это абсолютно нормальный результат, без какого-то фантастического железа или плясок с бубном при настройке. Мне нравится вот этот график,
который объясняет большую часть моментов, а именно: что при росте объема данных сеть становится узким местом, а не процессор или память. Сеть — это уже вопрос не к производительности самого Redis.
Ответ: да, причем из коробки, и кластер — это практически базовая конфигурация (design for cluster).
В этих статьях это описано подробно 1 [17] и 2 [18], и пусть Вас не смущает фразы про альфа/бета — тут как с gmail (которая была beta когда уже сотни миллионов ящиков на ней были по 5-6 лет в эксплуатации). Люди годами работают и не жалуются.
Кластеры поддерживают и распределение нагрузки, и отказоустойчивость. Master-узлы разделяют между собой нагрузку (диапазон ключей) + у каждого узла может быть любое число shard-ов (на которых хранится реплика мастера, готовая его заменить в случае недоступности.)
Года 2 назад, на devcon 2012, ребята показывали библиотеку, написанную на коленках за неделю. С тех пор мир изменился кардинально. Есть множество [19]библиотек, но для .net де факто стандартом стала stackexchane [20] (те, кто использовал другие библиотеки в своих проектах, все чаще выпиливают и заменяют на эту версию).
Чтобы начать пользоваться этой библиотекой, долго вникать в нее не нужно. Принцип ее работы можно разобрать, открыв всего 3 класса.
В определении что такое Redis есть слово, которое всех сбивает с толку – InMemory, но оно не означает In Memory Only. В Redis есть механизм сброса данных на диск, точнее 2 механизма. Инкрементальный — это когда каждые n секунд (можно сделать каждые 5, 30, 600 секунд) идет сброс данных, и Полный — это когда сбрасывается все содержимое на диск. (Как с бэкапами баз данных — инкрементальный и полный бэкап). Эти варианты друг другу не противоречат, можно оба включить. Это не бесплатно в плане производительности, как и любая запись на диск.
.Net сильно меняется, и придется меняться .net разработчикам. Использование Redis – это очередной шаг эволюции платформы, и его надо принять. Это не страшно.
Автор: SychevIgor
Источник [27]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/net/79374
Ссылки в тексте:
[1] Redis Cache в Azure: http://weblogs.asp.net/scottgu/azure-redis-cache-disaster-recovery-to-azure-tagging-support-elastic-scale-for-sqldb-docdb
[2] статья: http://habrahabr.ru/post/111542/
[3] 1: http://msdn.microsoft.com/en-us/library/azure/dn690522.aspx
[4] 2: http://blogs.msdn.com/b/webdev/archive/2014/05/12/announcing-asp-net-session-state-provider-for-redis-preview-release.aspx
[5] кэшировать: https://github.com/aspnet/Caching/tree/dev/src/Microsoft.Framework.Cache.Redis
[6] Моя статья: http://habrahabr.ru/post/108929/
[7] официальная : http://www.asp.net/signalr/overview/performance/scaleout-with-redis
[8] Output cache: http://msdn.microsoft.com/en-us/library/azure/dn798898.aspx
[9] писал: http://habrahabr.ru/post/240269/
[10] antirez/redis: https://github.com/antirez/redis
[11] MSOpenTech/redis: https://github.com/MSOpenTech/redis
[12] Azure/redis: https://github.com/Azure/redis
[13] Внутри: http://stackoverflow.com/questions/9625246/what-are-the-underlying-data-structures-used-for-redis?answertab=votes#tab-top
[14] статья: http://redis.io/topics/benchmarks
[15] сравнение производительности с memcache: http://oldblog.antirez.com/post/redis-memcached-benchmark.html
[16] вариант 2: http://dormando.livejournal.com/525147.html http://oldblog.antirez.com/post/update-on-memcached-redis-benchmark.html
[17] 1: http://redis.io/topics/cluster-spec
[18] 2: http://redis.io/topics/cluster-tutorial
[19] множество : http://redis.io/clients
[20] stackexchane: https://github.com/StackExchange/StackExchange.Redis
[21] github.com/StackExchange/StackExchange.Redis/blob/master/StackExchange.Redis/StackExchange/Redis/RedisCommand.cs: https://github.com/StackExchange/StackExchange.Redis/blob/master/StackExchange.Redis/StackExchange/Redis/RedisCommand.cs
[22] github.com/StackExchange/StackExchange.Redis/blob/master/StackExchange.Redis/StackExchange/Redis/ConnectionMultiplexer.cs: https://github.com/StackExchange/StackExchange.Redis/blob/master/StackExchange.Redis/StackExchange/Redis/ConnectionMultiplexer.cs
[23] github.com/StackExchange/StackExchange.Redis/blob/master/StackExchange.Redis/StackExchange/Redis/RedisDatabase.cs: https://github.com/StackExchange/StackExchange.Redis/blob/master/StackExchange.Redis/StackExchange/Redis/RedisDatabase.cs
[24] redis: http://redis.io
[25] msdn.microsoft.com/en-us/library/azure/dn690523.aspx: http://msdn.microsoft.com/en-us/library/azure/dn690523.aspx
[26] Azure Redis: http://azure.microsoft.com/en-us/services/cache/
[27] Источник: http://habrahabr.ru/post/247531/
Нажмите здесь для печати.