Як завантажувати баланс SQL Server 2008 для широко використовуваних програм ASP.NET?


12

Уявіть, що у вас є успішний веб-додаток, який використовує ASP.NET та IIS 7. Він генерує багато дзвінків до бази даних SQL Server 2008, і, як очікується, буде доступний для населення із 99,9% часу роботи (час простою 8 годин, 45 хвилин на кожну рік).

Наші цілі:

  • Встановіть оновлення Windows на сервер, не викликаючи простоїв для наших клієнтів
  • Запобігання збоїв у роботі апаратних засобів на сервері сповільнення програм ASP.NET через нестатеві очікування

На відміну від збалансування навантаження для програми ASP.NET, SQL з балансуванням навантаження здається набагато складнішим. Які ваші найкращі практики створення простого кластера SQL Server 2008 R2, збалансованого навантаженням для Micro-ISV, що використовує стек Microsoft?


Кілька коментарів: те, що ми зробили, це написані програми ASP.NET, які можуть працювати в режимі "офлайн" без підключення до бази даних, коли час з'єднання закінчується. Це погіршує функцію "базового" замість повнофункціонального додатка. Я також читав про підхід Netflix Chaos Monkey, який надихає: readwriteweb.com/cloud/2010/12/…

Яка ваша обставина? Ви перебуваєте в розміщеному середовищі з обмеженими серверами або ви розміщуєте власні речі з доступом до грошових коштів та можливістю розширення номерів вашого сервера?

@Jay: Як і багато мікро-ISV, у нас є два спеціалізовані сервери, які переходять на хостинг Rackspace Cloud. Ми могли б дозволити собі два виділені ящики SQL Server, якщо нам потрібно, але мені цікаво, чи є кращий підхід.

Перемістіть вашу базу даних у SQL Azure. Тоді ви звільняєтесь від кошмарів збоїв, закупівель та оновлень сервера. Ваші дані дублюються двічі на додаток до вашої робочої копії, а також аспект збалансування навантаження також обробляється для вас за частку реальної вартості впровадження / управління SQL-сервером, наприклад, апаратне забезпечення, ліцензування програмного забезпечення, час підтримки сервера тощо та інше тощо .
Бретт Рігбі

Відповіді:


4

Якщо вам потрібна висока доступність, пропонуйте рішення для кластеризації Windows / SQL Server або дзеркального відображення баз даних SQL Server. Кластеризація вимагає багато планування та ознайомлення, якщо ви ніколи цього не робили, але це буде прозоро для програми.

Балансування завантаження можливо за допомогою SQL Server, але це не для слабких людей. Це рішення, яке використовує Windows Network Load балансування (NLB) перед SQL-серверами. Самими серверами SQL в NLB легше керувати, якщо вони доступні лише для читання, але їх можна читати і записувати, якщо ви використовуєте транзакційну реплікацію з оновленими абонентами. Цей тип реплікації позначений як депрекація в наступній версії.

Останньою можливістю є масштабовані спільні бази даних, але вони, безумовно, доступні лише для читання.

Більше читання:

Подивіться книги Apress Аллана Хірта на SQL Server 2005 з високою доступністю та реплікацію Pro SQL Server 2005/2008 від Apress.

Масштабовані спільні бази даних: http://technet.microsoft.com/en-us/library/ms345392.aspx


2

Системи реляційних баз даних рідко врівноважуються так само, як і веб-сервери. Проблема класичного підходу до балансування завантаження полягає в тому, що всі ваші бази даних повинні бути в постійній синхронізації. Реляційна модель марна, якщо два сервери не мають однакового стану в будь-який момент часу.

З вашого запитання не схоже, що ви навіть намагаєтеся виконати балансування навантаження, що в першу чергу є показником продуктивності, щоб гарантувати, що на кожен сервер потрапляє лише стільки користувачів, скільки може працювати з цим сервером. Це здається, що ви хочете налаштувати високу доступність . Оскільки ви говорите, що ви використовуєте SQL Server, я би розглядав аварійні помилки. Це означає, що якщо основна база даних недоступна, клієнти намагатимуться отримати доступ до серверів відмови. SQL Server обробляє синхронізацію первинного екземпляра та кожного виходу з ладу, а також обробляє ресинхронізацію первинного екземпляра до відмови, коли основний приходить в Інтернет із режиму офлайн.


0

Гаразд, ось ми йдемо. НЕ МОЖЕТЕ ЗРОБИТИ. Не без змін додатків.

  • Встановіть оновлення - використовуйте кластеризацію або дзеркальне відображення, щоб переконатися, що у вас є ДВА БД, які працюють або можуть швидше перейти на інший комп'ютер. Дзеркальне відбиття сильно віддано перевагу.
  • Перезаписуйте програму, щоб вирішити це (тобто зникнення з’єднань, потрібно знову з’єднатись прозоро, щоб потім підключитися до копії).

Зрозумійте, що вам все-таки потрібно зняти додаток для обслуговування, коли ви розгортаєте нову схему копіювання / внесення змін у db.


0

Ефективна відповідь тут часто буферизація бази даних з дешевим товарним збалансованим серверним рівнем хостинг прикладних служб, що забезпечують обробку логіки та зберігання даних, які в іншому випадку пов'язують ресурси бази даних. Очевидно, що для цього потрібна певна думка щодо волатильності даних та стратегій кешування.


-1

Дозвольте дати вам відповідь юр. Якщо ваші цілі включають "встановити оновлення Windows", вам не під силу.

У мене борода сіріла і можу згадати час, коли програма могла працювати 10 років, не зазнаючи "оновлень операційної системи". Строк корисного використання програми вимірювався десятиліттями, а не роками.

Тому моя порада така: встановіть робочу версію вашої бази даних SQL Server + додаток та ІЗОЛІТУЙТЕ ПОСЛУГА БАНКІВ З ОНОВЛЕННЯ MICROSOFT. Якщо вона не зламана, не виправляйте її.

Використовуйте диски RAID з можливістю гарячої заміни.

Майте під рукою сервер баз даних дзеркальних зображень (за пропозицією TomTom), якщо ваше обладнання вилазить.


3
Тіме, це як би сказати, чому навіть використовувати базу даних, коли можна зберігати результати у файлі Excel? В ОС є чимало вразливих місць, і невстановлення регулярних оновлень / оновлення правил щодо антивірусу / брандмауера є поганою порадою. Не рекомендується на будь-якому рівні.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.