Федерации Azure устарели. Каковы мои варианты?

Фон:

У нас есть приложение, в котором основным объектом является клиент. Вся информация в этих приложениях начинается с клиента. Мы подумали, что было бы очень хорошо, если бы мы могли использовать это для какого-то разделения. Мы разработали службу с базой данных SQL Azure в качестве серверной части.

Наши таблицы выглядят так (для краткости оставлена ​​только соответствующая часть):

TABLE dbo.Orders
(
     CustomerId INT NOT NULL DEFAULT( FEDERATION_FILTERING_VALUE( 'FEDERATION_BY_CUSTOMER' ) ),
     OrderId INT NOT NULL,
     ....,
     CONSTRAINT PK_Orders PRIMARY KEY CLUSTERED ( CustomerId, OrderId )
) FEDERATED ON ( FEDERATION_BY_CUSTOMER = CustomerId );

Теперь это позволило нам делать некоторые сумасшедшие вещи. Наши точки входа во все, что связано с SQL, всегда сначала содержат следующую команду:

USE FEDERATION GroupFederation( FEDERATION_BY_CUSTOMER = 1 ) WITH RESET, FILTERING = ON

В этом случае это утверждение:

SELECT * FROM Orders

or

INSERT INTO Orders ( OrderId ) VALUES ( 10 );

будет работать без проблем, работая только с данными данного клиента. COLUMN CustomerId всегда будет выводиться из системной функции FEDERATION_FILTERING_VALUE;

Теперь мы могли бы без проблем иметь всех наших клиентов в одной базе данных, и они были бы изолированы друг от друга. Если когда-нибудь в будущем один из них станет слишком большим, мы можем РАЗДЕЛИТЬ федерацию по этому конкретному идентификатору клиента, и нам не нужно ничего менять в нашем коде для его поддержки.

Черт возьми, мы могли бы иметь каждого клиента в отдельной базе данных федерации, и служба, использующая ее, ничего бы об этом не знала.

Мы были очень довольны нашим решением, и я подумал, что придумал его очень умно. Лишь недавно Microsoft объявила, что отказывается от поддержки федераций azure в новых выпусках базы данных azure. Подробнее об этом читайте здесь и здесь.

Надеюсь, вы видите мою проблему. Как вы думаете, какие у меня есть альтернативы? Используете ли вы Azure Federations и как вы собираетесь переходить?

Спасибо.


person Ivan Zlatanov    schedule 28.04.2014    source источник
comment
Это первые дни - только что было объявлено об устаревании федераций - я ожидаю дальнейших советов / рекомендаций по стратегиям миграции в свое время.   -  person Simon W    schedule 28.04.2014
comment
Microsoft планирует работать с клиентами, которые использовали федерации на индивидуальной основе, чтобы помочь им преобразовать их. Возможно, было бы разумно обратиться к представителю Microsoft Azure, чтобы начать работу заранее?   -  person Igorek    schedule 28.04.2014
comment
На самом деле, система федерации была хороша и даже полезна на месте. Интересно, почему они закрыли его.   -  person usr    schedule 03.08.2014


Ответы (3)


Мы видели, что пользовательские решения для сегментирования обычно дают лучшие результаты в отношении масштабируемости, гибкости и производительности по сравнению с федерациями. Дополнительную информацию о федерациях и пользовательском сегментировании можно найти здесь: http://msdn.microsoft.com/en-us/library/dn495641.aspx. Это одна из причин объявления об прекращении использования федераций вместе с веб- и бизнес-выпусками в базе данных Windows Azure SQL.

В качестве альтернативы я бы посоветовал вам изучить самошардинг. В прошлом году команда CAT опубликовала хорошее руководство по шаблонам самостоятельного сегментирования по адресу http://social.technet.microsoft.com/wiki/contents/articles/17987.cloud-service-fundamentals.aspx , и вскоре появятся другие подобные материалы.

Не стесняйтесь обращаться ко мне, чтобы обсудить ваши альтернативы миграции существующего приложения Federations. Я являюсь частью группы разработчиков Azure DB, и вы можете связаться со мной по адресу torsteng(at)microsoft.com.

Спасибо,

Торстен

person Torsten Grabs    schedule 08.05.2014
comment
Существуют ли какие-либо ограничения на количество отдельных баз данных, которые может иметь одна учетная запись на нескольких серверах для достижения таких решений? - person Ivan Zlatanov; 09.05.2014
comment
Как насчет фрагментации пула соединений в пользовательском решении для сегментирования? - person Alex Ustinov; 28.05.2014
comment
Каждая новая база данных, которую вы добавляете в набор, потенциально может занять новый слот в вашем пуле соединений. Это может увеличить требования к памяти пула соединений. Один из вариантов — увеличить размер пула соединений. Однако в более крупном масштабе вам потребуется спроектировать приложение для маршрутизации запросов приложений (ARR). Команда Azure CAT опубликовала руководство по этому поводу. Ознакомьтесь с разделом, посвященным ARR, здесь: social. technet.microsoft.com/wiki/contents/articles/ - person Torsten Grabs; 17.07.2014
comment
Я только что узнал о том, что Sql Federation получает Axe, и наткнулся на этот пост, ища альтернативы, предложение от MS Design пользовательских решений для сегментирования, чтобы максимизировать масштабируемость и гибкость для ресурсоемких рабочих нагрузок... это смешно, в основном это говорит, что просто разберись сам, как насчет усилий/времени, потраченных на создание приложений с Федерацией в ее ядре - :(, - person pateketu; 23.07.2014

Единственный вариант — переписать программное обеспечение. Microsoft лжет, когда говорит, что собственное решение для сегментирования лучше. На самом деле они годами говорили, почему вы ДОЛЖНЫ предпочесть федерации пользовательскому шардингу, и приводили для этого очень веские аргументы: пулы соединений, отсутствие простоев при масштабировании, отсутствие специального кода для управления вашими шардами и т. д. Однако теперь Microsoft хочет получить гораздо больше денег. из Azure, поэтому они решили предоставлять клиентам только очень дорогие планы и федерациям больше не место, потому что они очень дешевые и очень масштабируемые.

Если у вас нет сверхвысокой скорости транзакций, вы можете попробовать Amazon RDS. Шардинга нет, но они обеспечивают до 30000 транзакций в секунду, что очень много даже для очень крупных сайтов. Мы переписали наше программное обеспечение для PostgreSQL RDS и очень им довольны. У него гораздо больше возможностей, чем у SQL Server, таких как встроенная поддержка JSON, массивы, несколько путей CASCADE и т. д.

Если вам недостаточно 30000 транзакций в секунду, просто увеличьте количество серверов и разделите свои данные на основе имени пользователя или любого другого свойства, например:

Username starts with letter
a-d                         | connect to Server 1
e-g                         | connect to Server 2
h-s                         | connect to Server 3
t-z                         | connect to Server 4

В приведенном выше примере вы сможете выполнять 120000 транзакций в секунду, и у вас не должно возникнуть проблем с пулом соединений, поскольку серверов всего 4.

person user1224129    schedule 03.08.2014

MS только что выпустила утилиту для перехода от Федерации

http://code.msdn.microsoft.com/vstudio/Federations-Migration-ce61e9c1
http://channel9.msdn.com/Blogs/Windows-Azure/Azure-SQL-Database-Federations-Migration

person pateketu    schedule 02.10.2014