Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

> Duże aplikacje i load balancing, Czyli co i jak zrobic jak maszyna nie daje rady
kwiateusz
post
Post #1


Admin Techniczny


Grupa: Administratorzy
Postów: 2 072
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




Temat założony na prośbę SHIPa oraz normanosa traktujący o rozkładaniu obciążenia na wiele maszyn
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jmail
post
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 53
Dołączył: 10.08.2009

Ostrzeżenie: (0%)
-----


Przepraszam, ze tego trupa odgrzebuję, ale miałbym coś do powiedzenia w tym temacie. Delikatnie.

Pierwsze i zasadnicze jestem przede wszystkim programistą takich technologii jak ColdFusion czy ASP.NET i tam loadbalancing nie jest problemem. Pythona nie dotykałem więc nie wiem. Ale wracając do brzegu (IMG:style_emoticons/default/winksmiley.jpg) Opiszę jak to wygląda na serwerze ColdFusion i jakie rozwiązanie zastosowalem.

ColdFusion:

1. Tworzony jest plik application.cfm i jeżeli taki istnieje jest dołaczany do każdego wywołania - dzięki temu zmienne aplikacyjne mogą być trzymane w jednym miejscu i mogą być WSPÓLNE dla wszystkich wywołań skryptu, przez dowolnego użytkownika, a to oznacza, że mamy ponad użytkownikowe rozwiązanie.
2. Istnieje coś takiego jak Client Scope - takie zmienne sesyjne dla klienta, dla przeglądarki. Jak to jest rozwiązane nie mam bladego pojęcia. Ważne że przeglądarka - ta sama instancja jest rozpoznawalna. Wewnątrz jest utrzymywany stan sesji i na wywołaniu z tego samego klienta stan jest odwtarzany.
3. Trzeba dodać, że jak się skorzysta ze zmiennych sesyjnych serwera Java (który jest pod spodem ColdFusion) to można clustrować dowoli serwery, a one sobie ze sobą poradzą

Napotkałem ten problem w jednym grubym projekcie intranetowym na serwerze PHP. Ponieważ za specjalnie nie potrafiłem sobie poradzić, więc podszedłem do tematu z innej strony. Pierwsze opisałem sobie czego mi w PHP brakuje z lepsiejszych (no cóż wygoda programowania CF czy .NET nie do porównania z PHP ^^) rozwiązań. Wypisalem sobie i się okazało, że wcale nie jest tak źle ^^. Cold Fusion daje możliwość składowania ciastek dla klienta po stronie serwera, a u klienta leży jedna zmienna z id ciastka (IMG:style_emoticons/default/biggrin.gif) i CF jakoś to robi, ze rozpoznaje że to ten user (klient) był.

Zakasałem rękawy i przeryłem stado dokumentacji do PHP i .NET i do tworzenia modułów do PHP. Po miesiącu prób i błędów udało mi się wyprodukować dll'kę która zwracała hello world! (IMG:style_emoticons/default/smile.gif) Ale to już był gotowy przepis na rozwiązanie moich problemów. Jak się udało wypluć hello world to da się cokolwiek zrobić. Wykonałem więc dll'kę, która odczytywała zmienne sesji z bazy danych i wrzucała je do skryptu PHP. Voile'a - między serwerowe rozwiązanie (IMG:style_emoticons/default/winksmiley.jpg) Co prawda potrzebna była taka maszyna, która to w bazie utrzyma, wysokiej dostępności i na pewno nie MyShitQL (sorry jeżeli kogoś urażam, ale to moja opinia). I znalazła się. Jakiś tam Echange stał, który tylko pocztę serwował z 16 procesorów oO. SQL Server Workgroup się znalazł i zaczeło gadać.

Pozostała jeszcze kwestia rozpoznawania klienta. W tym wypadku było to o tyle prostsze, że to był intranet, więc ciastko zapodałem i dowidienia.

Zapytacie na pewno jak z wydajnością. No cóż. Okazało się, że początek nie był radosny. Opóźnienie skryptu z jednej maszyny o jakieś 200%. Niestety, ale to mnie na chwilę znowu zatrzymało. Okazało się, że problemem stało się dochodzenie do zmiennych sesji $_SESSION przez dll. Znowu drobna przebudowa dll i extend replace na skrypty php ze zamianą $_SESSION na $_SESS (i przestawinie się w głowie na takie używanie zmiennych).

Kolejna sprawa, że stało się dla mnie niezbędne korzystanie ze zmiannych aplikacyjnych globalnych dla wszystkich użytkowników. TO akurat było prosto rozwiązać.

Napisałem skrypcik ładujący dane do tabeli $_APP (znowu naleciałości z coldka) i dodalem .htaccess z wpisem:

php_value auto_prepend_file "/sciezka/do/application.php"

oczywiscie, że próbowało dopisywać do każdego pliku. Proste rozwiązanie:

if(!$_APP)

i już. Mam zmienne aplikacyjne, mam załatwiony load balancing i mam sprawny intranet - kodu dll nie zapodam - kupę kapuchy za to położyli.

Na zakończenie tego wtrącenia trzeba dodać parę uwag:

1. Jak chcesz tak zrobić wybierz DOBRY serwer bazodanowy. Najlepiej nadają się do tego SQL Server w wersji Workgroup lub wyższej, ORACLE lub PostgreSQL.
2. NIGDY nie próbuj zmuszać serwery do komunikacji między sobą. Postaw maszynę, dającą sesje ale niech maszyny ze sobą nie współpracują w jakiś "zacieśniony" sposób - niepotrzebnie zużyjesz zasoby. PHP jest nieclustrowalny w sposób prosty i trzeba się z tym pogodzić dopóki programiści czegoś nie wysmażą.
3. Przy tworzeniu dll'ki dałem jej parę parametrów konfiguracyjnych ładowanych przez php.ini:
- nazwa clustra
- id serwera
- dane dostępowe do bazy danych z sesjami - dzięki nazwie clustre'a taka maszyna może obsługiwać ileś clustrów i ją samą też można clustrować - to już naprawdę na poziomie very high lodaed applications - ale wtedy weźmiecie coś lepszego nie PHP (IMG:style_emoticons/default/biggrin.gif)
4. Regularnie usuwaj sesje, które wygasły. Najlepiej jakiś sprytny trigerek on insert. ALbo Scheduled Task w Windows lub cron w UX

To porada dla naprawdę bardzo potrzebujących i muszących łączyć DUŻĄ ilość serwerów. Jest jednak sprytniejsze rozwiązanie. Może mniej wydajne, ale zawsze. Ustaw jedną maszynę z serwerem obsługującym dane aplikacyjne sesyjne i inne cuda. Jak nie chcecie IIS z .NET może być zwykły Debian z JBoss'em. Zmienne Javy bardzo dobrze się sprawdzają.

Przy odpaleniu dowolnego skryptu wywołujesz jeden jedyny plik z tamtego serwera (zmienne aplikacji nie będą się zmieniać zbyt często), który PRZEPISUJE Ci zmienne do php. eval i dowidienia (IMG:style_emoticons/default/winksmiley.jpg)


Tak teraz mi dwie aplikacje na po trzy serwery chodzą. Z tyłu stoi .NET, który stoi na windzinie XP i się sprawdza. A to najważniejsze. Sprawdza się na tyle, ze nie zamierzam znowu jakichś karkołomnych skoków robić - dodam, że aplikacje obciążane są średnio dziennie na jakieś 45k wywołań przez ok 3k użytkownków. Raporty finansowe, cuda wianki, wnisoki i inne duperele. Żeby jeden workflow przejść trzeba zrobić jakieś 10 wywołań.

To tak tytułem odgrzewania trupów (IMG:style_emoticons/default/smile.gif) trafiłem tu bo znowu robie high loaded i myślałem, że może coś się zmieniło w tym temacie. A że klient chce PHP na Linuxie.... .NET odpada, Javy nie wystawię, zostaje lip w C++. Trzeba się przeprosić...
Go to the top of the page
+Quote Post

Posty w temacie
- kwiateusz   Duże aplikacje i load balancing   2.08.2008, 18:53:14
- - LBO   Muskający powierzchnię tematu wpis na blogu Talena...   2.08.2008, 19:01:00
- - wrauk   dzięki za link do mojego bloga, widzę, że temat os...   4.08.2008, 20:33:26
- - Kocurro   No to Panowie zaczynajmy - może na początek odnosz...   5.08.2008, 11:02:55
- - wlamywacz   A jest możliwość utworzenia dysku sieciowego i na ...   5.08.2008, 12:25:49
- - Kocurro   Pomysł dość dobry ale wydaje mi się, że problemem ...   5.08.2008, 12:37:12
- - wrauk   Soft do obsługiwania takich sesji już istnieje i n...   5.08.2008, 12:55:10
|- - Sedziwoj   Cytat(wrauk @ 5.08.2008, 13:55:10 ) M...   5.08.2008, 13:41:27
- - wlamywacz   CytatPomysł dość dobry ale wydaje mi się, że probl...   5.08.2008, 21:09:04
|- - mike   Cytat(wlamywacz @ 5.08.2008, 22:09:04...   5.08.2008, 21:18:30
|- - wrauk   Cytat(wlamywacz @ 5.08.2008, 22:09:04...   5.08.2008, 21:22:56
- - jarek_bolo   Witam, specjalnie doświadczony nie jestem, ale tak...   5.08.2008, 22:08:59
|- - wrauk   Cytat(jarek_bolo @ 5.08.2008, 23:08:5...   6.08.2008, 07:56:52
|- - jarek_bolo   Cytat(wrauk @ 6.08.2008, 08:56:52 ) Z...   6.08.2008, 08:51:23
|- - wrauk   Cytat(jarek_bolo @ 6.08.2008, 09:51:2...   6.08.2008, 09:45:00
- - Kocurro   jarek_bolo: niestety Twój pomysł byłby o wiele mni...   6.08.2008, 09:18:14
- - wlamywacz   A co z adresami typu www2.cos.pl ?   6.08.2008, 10:13:25
- - Kocurro   Widziałem ale jeśli mam być szczery to to jest roz...   6.08.2008, 10:18:46
- - wlamywacz   Ale jak działa to www2.cos.pl itd. bo nawet nie wi...   6.08.2008, 11:38:17
|- - mike   Cytat(wlamywacz @ 6.08.2008, 12:38:17...   6.08.2008, 11:47:12
- - Kocurro   Normalnie Serwer ma taką nazwę, dns wskazuje na j...   6.08.2008, 11:41:48
- - normanos   a mnie ciekawiły by rady w jakim kierunku iść kied...   6.08.2008, 13:48:56
|- - wrauk   Cytat(normanos @ 6.08.2008, 14:48:56 ...   8.08.2008, 09:47:21
|- - normanos   Cytat(wrauk @ 8.08.2008, 08:47:21 ) K...   8.08.2008, 09:57:13
|- - wrauk   Cytat(normanos @ 8.08.2008, 10:57:13 ...   8.08.2008, 10:35:20
- - grzegory   Przyłączam się do tematu. Mój problem wygląda nas...   7.08.2008, 21:36:06
- - wlamywacz   Kup serwer dedykowany, da radę bez problemu. Patrz...   7.08.2008, 21:50:20
- - Sedziwoj   @grzegory Zacznę od tego że to raczej nie jest tem...   7.08.2008, 21:56:20
- - Ace   Od kilku miesięcy interesuje się tematyką wysokich...   12.08.2008, 11:03:43
- - rashid   Pozwole sie wtracic, bo Panowie proboja rozwiazac ...   27.11.2008, 12:27:56
|- - enigma   Cytat(rashid @ 27.11.2008, 13:27:56 )...   13.01.2009, 21:24:38
|- - rashid   Cytat(enigma @ 13.01.2009, 21:24:38 )...   13.01.2009, 21:41:01
- - Krolik   Jeśli baza danych się nie wyrabia i używamy MySQL/...   2.12.2008, 10:37:42
|- - rashid   Cytat(Krolik @ 2.12.2008, 10:37:42 ) ...   11.12.2008, 11:10:50
- - klakson   Witam serdecznie, chcialbym wykonac aplikacje w p...   20.12.2008, 13:05:29
|- - rashid   Cytat(klakson @ 20.12.2008, 13:05:29 ...   20.12.2008, 14:11:47
- - normanos   piszesz, że będziesz mielił dane z dysku a potem w...   20.12.2008, 13:47:49
- - klakson   Dzieki za pierwsze odpowiedzi, i juz uscislam, bo ...   20.12.2008, 16:37:27
- - Kocurro   Wybaczcie offtopic ale nie mogę. Kolega się z cho...   20.12.2008, 16:59:28
- - klakson   No ok Kocurro, ale moze po pierwsze, to przeczyta...   20.12.2008, 18:52:22
- - rashid   Zalozenie, ze operujac na wlasnym formacie plikow ...   20.12.2008, 18:53:32
|- - Krolik   Cytat(rashid @ 20.12.2008, 18:53:32 )...   2.01.2009, 12:18:16
|- - rashid   Cytat(Krolik @ 2.01.2009, 12:18:16 ) ...   2.01.2009, 14:05:11
- - Kocurro   Szanowny kolego klakson - proponuje najpierw zapoz...   20.12.2008, 19:40:32
- - erix   CytatA przechodzac do sedna, w czym niby jest prob...   20.12.2008, 20:06:03
- - wlamywacz   Założenia projektu sobie niezbyt realne. Kolega na...   25.12.2008, 10:52:03
- - djhors   Witam Wszystkich. Z braku czasu niezagladam tu za...   29.12.2008, 11:07:55
- - luinnar   Tak sobie czytam ten wątek i zastanawiam się nad k...   1.01.2009, 10:23:55
- - Krolik   Rashid, porównujesz z MySQLem i słusznie zauważyłe...   5.01.2009, 11:43:18
|- - rashid   Cytat(Krolik @ 5.01.2009, 11:43:18 ) ...   7.01.2009, 11:12:22
- - fragles   a ja mam pytanie podstawowe - jak się to liczy to ...   7.01.2009, 10:33:20
- - Krolik   Nie będę wchodził w szczególy, bo odeszliśmy od te...   7.01.2009, 13:06:25
- - enigma   dziękuje wygląda ciekawie - na pewno przeczytam. ...   13.01.2009, 21:58:21
|- - rashid   Cytat(enigma @ 13.01.2009, 21:58:21 )...   19.01.2009, 22:53:16
- - jmail   Przepraszam, ze tego trupa odgrzebuję, ale miałbym...   10.08.2009, 22:32:15
- - Ormin   Myślę, że wypadałoby odświeżyć temat. Przy okazji ...   16.05.2010, 22:19:23
- - BugsBunny   Odgrzebie temat, bo mam trochę praktyki w tym tema...   15.09.2012, 22:20:20


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 04:29