Kontrolowanie dostępu do plików pomiędzy usługą a serwerem WWW


Mam aplikację internetową i usługę Windows, które mają dostęp do tego samego zestawu plików. Używam nazwanego semafora, aby uniemożliwić równoczesny dostęp do informacji (usługa lub serwer WWW żąda dostępu do katalogu, używa go szybko, zwalnia semafor).
Chcę uruchomić tę aplikację na Windows Azure. Myślę, że fajnie byłoby użyć maszyny wirtualnej, ponieważ wtedy mogę użyć nazwanego semafora do kontroli dostępu, a następnie uruchomić zarówno serwer WWW, jak i usługę Windows na maszynie wirtualnej. Problem polega na tym, że maszyna wirtualna wygląda

ograniczona przestrzeń
http://msdn.microsoft.com/library/dn197896.aspx... Potrzebuję dużo więcej miejsca na przechowywanie, niż jest to zalecane dla maszyn wirtualnych. Brakowałoby mi również geograficznie nadmiarowego miejsca na dane.
Czy w systemie Windows Azure można udostępnić nazwany semafor między usługą w chmurze a witryną internetową? Może potrzebuję oddzielnej usługi, która ma wyłączny dostęp do tych plików i współdziała zarówno z usługą, jak i witryną? Zaprogramowanie innej usługi i wydawanie na nią dodatkowych pieniędzy co miesiąc byłoby do niczego. Czy jest lepszy sposób?

Edytuj (więcej szczegółów):

  • Skalowanie jest koniecznością. Przechowywanych będzie bardzo dużo danych i obawiam się, że w przyszłości przewyższą one skalowanie maszyny wirtualnej.
  • To nie są pliki baz danych. Są to oddzielne pliki z oddzielnym katalogiem, który ma wiele różnych indeksów. Martwię się, że usługa Windows i serwer WWW próbują uzyskać dostęp do tego samego indeksu w tym samym czasie (choć rzadko).
  • Myślę, że przechowywanie dobrze pasuje w tym przypadku.
  • Wypożyczony obiekt BLOB jest nieprawidłowy. 15 sekund to za długo, aby czekać.
O czym myślę:

Prawdopodobnie będę miał maszynę wirtualną, na której działa zarówno wspomniana powyżej usługa Windows, jak i dodatkowa usługa, która nie robi nic poza „zarządzaniem blokadami” na niektórych indeksach i plikach znajdujących się w obiekcie blob. Więc ... serwer WWW lub usługa Windows poprosi tę usługę o „blokadę”. Dzięki temu obie aplikacje mogą pracować bezpośrednio z plikami, a ich opracowanie zajmie mniej czasu.

Edycja 2:

A może mógłbym po prostu umieścić wszystko w maszynie wirtualnej, użyć nazwanego semafora, a następnie uzyskać dostęp do obiektów blob magazynu (prawdopodobnie najlepsza opcja w tej chwili)
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To pytanie jest nieco otwarte, ponieważ istnieje wiele sposobów rozwiązania tego problemu. Myśląc konkretnie o Azure:
  • Obecność dodatkowych usług niekoniecznie oznacza dodatkowe wydatki. Możesz uruchomić usługę na istniejących maszynach wirtualnych. Możesz dostroić poziom usług, aby działał spójnie, zapewniając, że żadne dwa żądania nie próbują uzyskać dostępu do plików w tym samym czasie.
  • O ograniczonej przestrzeni: gdzie czy przechowujesz swoje pliki Jeśli umieścisz je na dysku systemu operacyjnego, nie będą skalowane poza dysk systemu operacyjnego (około 127 GB). Jeśli podłączysz dysk, masz do 1 TB i możesz mieć 2 zmapowane dyski na rdzeń, łącznie do 16 zmapowanych dysków (16 GB podłączonej pamięci).
  • Jeśli przechowujesz pliki w systemie plików (na dysku systemu operacyjnego lub dołączonym dysku), będziesz mieć problemy ze skalowaniem poza jedną maszynę wirtualną, chyba że masz oddzielną maszynę wirtualną, która uruchamia usługę i zarządza magazynem. Nie można jednak skalować poza pojedynczą „usługową” maszynę wirtualną. W przypadku systemu Windows Azure naprawdę warto rozważyć przechowywanie plików w obiektach blob magazynu Azure. Gdy to zrobisz, będziesz mógł uzyskać dostęp do swojego magazynu z dowolnej liczby maszyn wirtualnych (co oznacza, że ​​możesz skalować poziom usług).
  • Kontynuacja poprzedniego punktu: nie mam pojęcia, do jakiego typu plików uzyskujesz dostęp. Jeśli to Baza danych pliki, to mój pomysł użycia obiektów blob nie byłby praktyczny.
  • Aby uzyskać wyłączny dostęp na wielu komputerach, potrzebujesz własnego schematu mutex; nie ma konstrukcji semafora na platformie Azure obejmującej maszyny/usługi. Tak długo, jak krople wynajem Nie sądzę, aby to było skuteczne w przypadku scenariusza z dużą liczbą transakcji. Jednak: Wyobraź sobie, że umieszczasz w kolejce określone żądania, a następnie czytniki kolejki przetwarzają określone żądania. Czy to wyeliminuje Twoją konkurencję o nieruchomość
  • Ostatnia myśl: jeśli nie używasz Linuksa, nie musisz używać maszyn wirtualnych. Możesz również przyjrzeć się usługom w chmurze (rolom sieci Web/procesu roboczego), ponieważ są to maszyny wirtualne systemu Windows Server, które są bezstanowe i mają znacznie większą elastyczność podczas skalowania w górę.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się