Memcached z Windows i .NET


83

Czy ktoś już zaimplementował memcached do użytku produkcyjnego w środowisku Windows? Ponieważ wiele blogów, które czytałem, nie zaleca się uruchamiania memcached w systemie Windows, szczególnie do użytku produkcyjnego, na przykład uruchamiania memcached w systemie Windows .

I jeszcze jedno, który klient memcached, który jest dobry w użyciu z C # i .net 3.5? Znalazłem wielu alternatywnych dostawców, takich jak Memcached Providers @ Codeplex , Beitmemcached i memcached provider @ Sourceforge


6
Wskazujesz na post na blogu z 2008 roku. Memcached ostatnio staje się całkiem przyjazny w systemie
Dustin

1
+1 dla Dustina. Używamy NorthScale i jest całkiem przyjazny dla systemu Windows, z ładnym interfejsem administratora (internetowym)
ram

2
@Dustin i @ram - Dustin, życzę miłego +1, ale to pytanie zostało zadane w 2008 roku.
Justin

3
Heh. To musi być to, czym jest ten '08. Przepraszam za to. :)
Dustin

Odpowiedzi:


49

Dlaczego musisz uruchamiać memcached w systemie Windows? To kosztowna sprawa w środowisku produkcyjnym.

Jeśli Twój kod musi działać w środowisku Windows, pobierz klienta Windows memcached i rozmawiaj z maszyną memcached opartą na * nix.

W środowisku produkcyjnym, w którym działa memcached na serwerze 2003 lub 2008, oznacza to, że otrzymasz licencje na wszystkie te pudełka. Linux oferuje wszystkie zalety OSS. Całkowity koszt posiadania wzrośnie liniowo dzięki memcached w systemie Windows

Edytować:

Od napisania tej odpowiedzi minęło około 1,5 roku i od tego czasu wiele się zmieniło. Musisz uważać, zwłaszcza gdy ktoś taki jak Dustin komentuje.
Oto jak uzyskać memcached w systemie Windows. Pobierz memcached dla systemu Windows z Couchbase (dawniej Northscale) .
Zwykle, jeśli planujesz uruchomić memcached na tej samej maszynie produkcyjnej, chciałbyś uruchomić go w ograniczonej pamięci, tj. Zdefiniować maksymalną ilość pamięci, z której może korzystać memcached.

c: \ Program Files \ memcached> memcached.exe -m 128.

Tutaj memcached działa z maksymalnym wykorzystaniem 128 MB. Nie chcesz, aby memcached zajmował całą pamięć na serwerze internetowym.

W chwili, gdy zdecydujesz się skalować memcached, musisz rozważyć to, co powiedziałem wcześniej. Dodatkowo skompresuj wartości w kombinacjach kluczowych wartości. Serwery internetowe zwykle zużywają bardzo mało procesora (2-3%), a kompresja wnosi dużą wartość do całej sieci w porównaniu do wykorzystania procesora. Jeśli zbytnio martwi cię normalna kompresja, wypróbuj LZO


2
Dziękuję za odpowiedź, właśnie tego szukam.
Funky81,

31
W jaki sposób TCO rośnie wykładniczo w systemie Windows? Koszt licencji rośnie liniowo wraz z liczbą maszyn. Ale jeśli weźmiesz pod uwagę koszty sprzętu, miejsce w szafie i energię elektryczną, umowy dotyczące wsparcia i pensje operatorów, koszt licencji systemu Windows jest, szczerze mówiąc, dość nieistotny.
Greg Beech

23
Żeby tylko dodać odparcie argumentowi Cheriana. Czynnikiem decydującym o chęci hostowania w systemie Windows może być doświadczenie administratora. Na przykład mniejsze sklepy, które nie mają zasobów, aby zatrudnić administratora * nix tylko po to, aby przywołać skrzynkę memcached, mogą odnieść duże korzyści z hostingu na platformie, na której firma jest już dobrze zaznajomiona (tj. Windows).
Joel Martinez

2
Chciałbym DV tej odpowiedzi, ponieważ tak naprawdę nie odnosi się do niczego, o co pytał OP, ale powiedział, że właśnie tego szukał.
Chris Marisic,

11
Negocjowany, ponieważ nie odnosi się do rzeczywistego pytania. Jeśli rozwiązałoby to problem PO, to może pytanie należałoby przepisać?
sh-beta

21

Jestem zaskoczony, że nikt tu jeszcze nie wspomniał o Redis - jest to jeden z najbardziej funkcjonalnych i najszybszych (110 000 zestawów na sekundę w Linuksie dla początkujących) magazynów danych o kluczowej wartości z bogatą obsługą struktury danych dla ciągów, zbiory, listy, posortowane zestawy i skróty.

Chociaż Windows nie jest oficjalnie obsługiwaną platformą, działa idealnie pod oknami, po przejściu wszystkich testów. Mam kompilacje systemu Windows (używając Cygwin) dostępne tutaj: https://github.com/ServiceStack/ServiceStack.Redis#redis-server-builds-for-windows

Posiada również powiązania klienta dla prawie każdego używanego obecnie języka programowania. Utrzymuję bogatego klienta Open Source C # Redis z natywną obsługą API dla dowolnego typu C # POCO, obsługą transakcji i bezpiecznymi wątkowo menedżerami klientów, którzy są gotowi do umieszczenia w dowolnym IOC pod adresem : https://github.com/ServiceStack/ServiceStack. Redis


12

Ponieważ Velocity w tamtym czasie nie istniało, użyłem portu memcached do systemu Windows dla firmy, dla której pracuję, Skiviez. Istnieje głównie w celu zapewnienia scentralizowanej pamięci podręcznej dla wielu procesów roboczych na tej samej maszynie. Działa dobrze od około 18 miesięcy w witrynie e-commerce, która odnotowuje skromne wykorzystanie (~ 18 500 odwiedzin dziennie). Klientem, którego użyłem, był Enyim zintegrowany jako dostawca pamięci podręcznej dla iBATIS.NET. Ten klient wydaje się działać wystarczająco dobrze; Klienci memcached również nie są zbyt skomplikowani.

Gdybym musiał to zrobić ponownie, prawdopodobnie spojrzałbym na Velocity, gdybym był zdecydowany pozostać przy Windowsie dla mojego rozproszonego rozwiązania buforowania. Ale teraz działa, więc nie zamierzam tego dotykać.

(Na marginesie: od tego czasu wyeliminowałem większość potrzeby pamięci podręcznej, dodając określone Cache*kolumny do tabel kluczy w bazie danych, które są aktualizowane przez zaplanowane zadanie każdego wieczoru. Skończyło się to na znacznie mniejszym obciążeniu zasobów dookoła, od początkowego uderzenie w czas procesora przez wysyłanie zapytań do bazy danych o kolejne obciążenie dostępności pamięci przez przechowywanie wyników z pamięci podręcznej w pamięci podręcznej. Sprawiło to również, że jest to znacznie bardziej wyraźne w kodzie, gdy uzyskiwany jest dostęp do zbuforowanej wersji danych, w porównaniu z Wersja w locie. Jestem pewien, że masz wiele powodów, aby korzystać z rozproszonej pamięci podręcznej, ale zawsze warto zrobić krok wstecz i zastanowić się, czy naprawdę tego potrzebujesz!)


Velocity jest teraz częścią AppFabric
Jon

7

nie wiem, nad jakim projektem pracujesz, ale możesz rzucić okiem na projekt Microsoft Velocity Ze strony:

„Velocity” to rozproszona platforma pamięci podręcznej aplikacji do tworzenia skalowalnych aplikacji o wysokiej wydajności. „Velocity” może służyć do buforowania dowolnego obiektu środowiska uruchomieniowego języka wspólnego (CLR) i zapewnia dostęp za pośrednictwem prostych interfejsów API. Kluczowe aspekty „Velocity” to wydajność rozproszonej pamięci podręcznej, skalowalność i dostępność.

Widziałem kilka demonstracji i wygląda na to, że ma naprawdę dobrą integrację z frameworkiem .net.

Problem z API klienta polega na tym, że nadal musisz mieć instancję memcached działającą gdzieś na innym komputerze, najlepiej jak zauważyłeś, używając stosu LAMP. Korzystanie z velocity oznacza, że ​​nadal będziesz pracować na tym samym stosie, a integracja z platformą .net będzie ściślejsza.

Powiedziawszy to, jeśli chcesz używać velocity jako pamięci podręcznej dla innych aplikacji .net, może się okazać, że będziesz musiał napisać własne API, aby udostępnić dane prędkości do wykorzystania.


O ile wiem, prędkość wciąż się rozwija, dlatego staram się szukać innej alternatywy. I to jest memcached
Funky81,

po chwili przeczytania instalacja i konserwacja prędkości nie jest łatwa, jak
pamiętam

3
Używasz stosu LAMP? Czy nie masz na myśli „używania Linuksa”, skoro nie potrzebujesz Apache, MySQL ani PHP do uruchomienia memcached.
GateKiller

6

Velocity jest nieco bardziej zaangażowane w administrowanie, ale jest o wiele, dużo bardziej wydajne niż memcached. Nie jestem anty-memcached, ani trochę, jest super. Ale idąc naprzód, nowe projekty oparte wyłącznie na .NET są szalone, aby nie wykorzystywać Velocity, nawet w obecnym stanie niewydanym.


6

spójrz na SharedCache . jego otwarte źródło, łatwe w użyciu i bardzo niezawodne.

wysokowydajny, rozproszony system buforowania obiektów pamięci, z natury ogólny, ale przeznaczony do przyspieszania dynamicznych aplikacji internetowych i / lub wygrywania aplikacji poprzez zmniejszenie obciążenia bazy danych. Nie zapomnij odwiedzić nas pod adresem http://www.sharedcache.com


3

Problem z API klienta polega na tym, że nadal musisz mieć instancję memcached działającą gdzieś na innym komputerze, najlepiej jak zauważyłeś, używając stosu LAMP.

Wcale nie. Stos LAMP (Linux, Apache, MySQL, PHP) nie jest wymagany do uruchomienia Memcached. Obecnie wolę memcached niż prędkość, dopóki prędkość nie znajdzie się poza CTP. Bawiłem się przez chwilę z prędkością, ale uznałem ją za zbyt nieporęczną. Podążam za tym całym KISS, wiesz ... niech to będzie proste. Nie ma nic prostszego niż buforowanie ... Get (key) ... Put (key, value) ... Destroy (Key).



1

Wiem, że trochę się spóźniłem na przyjęcie tutaj, a jest już mnóstwo dobrych odpowiedzi.

Użyliśmy Membase w systemie Windows Server z wielkim sukcesem. Jest w 100% kompatybilny z Memcached i ma ładny instalator GUI i serwer konfiguracji WWW, który go buduje. Jest niezwykle łatwy w zarządzaniu.

Istnieją również inne funkcje NoSQL, które są poza zakresem tego wątku, ale warto się im przyjrzeć. Mają bezpłatną licencję na serwery programistyczne, testowe i (ograniczone) produkcyjne.

Pobieranie z Membase

Ta sama strona ma tylko instalację Windows dla Memcached, jeśli nie chcesz żadnych dodatkowych funkcji w Membase.



0

Jeśli jesteś zainteresowany uruchomieniem klienta memcached w systemie Windows, istnieją dwa dodatkowe serwery open source, które mogą wykonać to zadanie. Oba implementują standardowy protokół serwera memcached i są napisane w języku Java, dzięki czemu działają w systemie Windows.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.