Wprowadzenie
Pracuję w firmie, w której prowadzimy wiele zadań przetwarzania wsadowego milionów rekordów danych każdego dnia i Myślałam ostatnio o wszystkie maszyny, które siedzą w każdy dzień nic nie robi przez kilka godzin. Czy nie byłoby dobrze, gdybyśmy mogli korzystać z tych maszyn do wzmocnienia mocy obliczeniowej naszego systemu? W ten zbiór artykułów będę patrzeć na potencjalne korzyści z zatrudniania biura sieci za pomocą środowisk wirtualnych.
W części 1 dałem przegląd systemu i technologii będę używał, jak również omówione niektóre z potencjalnych powodów, dla których chcesz utworzyć sieci biurowych.
Kontrola zadań
Jeśli masz zamiar być uruchomione zadania wtedy będziemy potrzebować jakiś sposób nimi zarządzać. System kontroli pracy (na serwerze pracy) musi być naprawdę dobrze przemyślane zanim zaczniesz nawet do uruchomienia sieci biurowych. Więc po pierwsze, jakie są zadania dla systemu kontroli pracy:
- Miejsc pracy na rękę na wniosek pracowników
- Powiedz pracowników, jaki rodzaj pracy, aby uruchomić
- Śledź pracy
- Upewnij się, że miejsca pracy są uruchamiane tylko raz
- Podaj dane pracy dla pracowników, lub przynajmniej powiedz im, gdzie je zdobyć
System musi być także rozszerzalny, rozwiązanie, które działa na razie w jednym przypadku może być przedłużony, aby uruchomić kilka rodzajów pracy, jak biznes postrzega wartość w roztworze siatki. Na przykład, praca może zyskać priorytetów, więcej niż jedną pracę typu mogą istnieć (tzn. kilka baz kodu), ewentualnie może nawet korzystać z kilku różnych maszyn roboczych, które są zoptymalizowane dla każdego typu zadania (które jednak odejście od "pracownika ogólne "pomysł). Zawsze staram się myśleć o przyszłości przy opracowywaniu systemów, krótki wzrok perspektywie mogą prowadzić do długoterminowej frustracji i wydłużenie czasu rozwoju.
Server pracy
Będziemy potrzebować gdzieś do kontroli naszych miejsc pracy, powinno to być jedynym systemem w sieci, która ma stałą Resource Locator jest, że adres IP, nazwę hosta, adres URL (przy użyciu DNS wewnętrznych), itp. To dlatego, że pracownicy muszą wiedzieć, gdzie szukać pracy, pracownicy powinni znaleźć system kontroli pracy (nie systemu kontroli pracy znaleźć pracowników).
Serwer sama praca nie ma to skomplikowane zadanie (w systemie podstawowym w każdym razie), musi przechowywać listę zadań, rękę pracy, otrzymać wyniki, a następnie zapisać je do późniejszego wykorzystania. Jak tych części (takich jak "rozdawać pracy") są zdefiniowane mogą być bardzo proste. Później możemy rozszerzyć systemu o interfejs administracyjny, aby dodać, edytować, usunąć, zawiesić pracę, ale jest to poza tym ćwiczeniu.
Nie ma żadnego powodu, następnie, że serwer praca nie może być maszyna wirtualna w głównym serwerze przetwarzania pod warunkiem, że nie drenażu zbyt wiele zasobów z niego. Serwer pracy jednak nie musi wysoką dostępność, jeśli idzie w dół w piątek wieczorem będziesz stracić cały weekend, przetwarzania, potencjalnie kosztowało kilka tygodni warto czasu przetwarzania (w porównaniu do głównego serwera przetwarzającego sam) . Możesz rozważyć umieszczenie serwera pracy na obciążenia środowiska zrównoważony dla wysokiej dostępności.
Podstawowe ustawienia
Podstawowej konfiguracji dla naszego serwera pracy będzie składać się z co nazywam jeden z moich Limp serwerów (czyli Nux Li, m ySql, P HP). Kod działa na pracowników thea rzeczywiście pracy, co miejsc pracy można go uruchomić poprzez interakcję z bazami danych kontroli pracy systemu. Później możemy stworzyć usługę sieciową i faktycznie rękę pracy zamiast pracowników do ciężkiej pracy się, ale teraz będziemy nadal korzystać z zasadą KISS (Keep it Simple, Stupid!).
Tak więc, pozwala utworzyć trzy mySQL stoły do czynienia z pracy. Będą one `pracy`, `jobRecords` i `jobResults`.
Tutaj używam SQL Buddy bardzo mały alternatywa dla phpMyAdmin tylko dlatego, że łatwiej jest zainstalować na CentOS (dla widzą inni: 10 Great alternatywa dla phpMyAdmin )
Tabela ta składa się z 5 prostych pól,
- id: Unikalny identyfikator pracy
- Nazwa: To może być odniesienie klienta, lub dowolną liczbę innych identyfikatorów
- Status: Musisz wiedzieć, gdzie praca jest, np.
- 0: Nie rozpoczął
- 1: Zabierani
- 2: Completed
- started_by: Kto zaczął robić w pracy? To nie jest całkiem wymagana, ale miło mieć. Sugerowałbym pracowników śledzenia na podstawie adresów IP w sieci
- started_at: Kiedy pracownik rozpocznie pracę? Poprzez śledzenie pracy, które nie zakończyły w ramach kwoty X czasu wiemy, że trzeba podnieść pracy ponownie i rozpocząć przetwarzanie przez innego pracownika. Pracownicy mogą zatrzymać przetwarzanie / go w trybie offline z wielu powodów, awarii zasilania, awarii, strat sieciowych itp.
Łatwo jest jak tej tabeli, może zostać rozszerzona o kilka dodatkowych pól, aby umożliwić śledzenie statystyk, kolumny czas zakończenia, aby zobaczyć, jak długo praca zajęła, licznik aby zobaczyć, jak wielu pracowników podniósł pracy (oczywiście musi to mają tendencję do 1), priorytet zadania, lista może się ciągnąć w nieskończoność. W bardziej złożonych scenariuszy pracy byłoby możliwe, aby określić, ile pamięci pracownik powinien mieć dostęp do (a więc używać tylko odpowiednich pracowników), a nawet jaki typ pracownika jest konieczna.
Dodajmy kilka miejsc pracy np.:
W poniższej tabeli znowu jest dość proste do zrozumienia, to nasze rekordy pracy. Są one związane z głównej tabeli miejsc pracy przez kolumnę `jobs_id. Tworzą z tej tabeli bardzo wiele zależy od danych, które należy dostarczyć do pracowników, pozwala dokonać bardzo prosty przykład, gdzie mamy cztery kolumny:
- id: identyfikator rekordu
- imię: nazwisko osoby
- Adres: Osoba adres
- jobs_id: ID pracy, że ten rekord jest powiązany z
Trzecia i ostatnia tabela składa się z tabeli wyników, ma tak samo tworzą w naszej tabeli rekordy, a z dodatkiem niektóre kolumny mogą być częścią tabeli rekordy:
- job_record_id: Link wynik do tabeli zadań
- Wynik: Dane wynik
... I to wszystko, czego potrzebujesz do kontroli pracy! (Choć na bardzo podstawowym poziomie) W moim przypadku jestem wskazał na innej tabeli, gdzie moje dane Proces został zlokalizowany, ale może to tylko tak łatwo było w pliku, do uruchomienia kodu symulacji, you name it.
Wybór pracy
Jak stwierdzono wcześniej, pracowników zrobimy zarządzania zadaniami dla nas teraz, więc wszystko, czego potrzebujesz, by naprawdę zrobić, to znaleźć pracę, która wymaga przetwarzania i uzyskać informacje. Jak to robimy? Dobrze wybrać nasze kryteria wyboru pracy i szukać pracy, w SQL zrobiłem co następuje:
- Podejmować żadnych zadań, które nie są oznaczone jako ukończone, ale z naszego pracownika i przywrócić je (substytut __ME__ z identyfikatorem, najłatwiej byłoby adres IP):
UPDATE `pracy` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ME__;
- Korzystanie z naszych kryteriów wyboru pracy, wyboru pracy i powiedzieć, że ten system kontroli pracownika radzenia sobie z nim:
UPDATE `pracy` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `status` = 0 lub
(`Status` = 1 AND `started_at`> DATE_SUB (NOW (), godzinnym X)) ORDER BY `id` ASC;
Chwytając miejsc pracy, które nie zwróciło wyniki w ilości X czasu mamy pewność, że wszystkie zadania są uruchamiane w przypadku awarii lub pracownik będzie zagubiony.
- Następnie chwycić szczegóły pracy po samych rejestrów:
SELECT * FROM `pracy` WHERE `started_by` = __ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `id` = __JOBID__;
Po zakończeniu pracy możemy wstawić nasze rekordy wynik i zaznaczyć zadanie jako ukończone. Pamiętaj, jak praca może zawiesić / wznowić w dowolnym momencie pozwala na pewne solidność w skrypcie. Być może zadanie zawiesza w połowie aktualizacji systemu kontroli pracy, więc sprawdzenie liczby rekordów w pracy i liczbę wyników zapisywane z powrotem do systemu kontroli pracy byłoby mądre posunięcie.
Ponadto, choć ten pokazuje, jak miejsca pracy mogą być wybierane i zarządzane z SQL-ramkę zapytania powinno się naprawdę abstrahując twoją kontrolą pracy tak, że jeśli zdecydujesz się przejść na korzystanie z usług internetowych, system plików, XML , lub innych wiele systemów nie będą miały wpływu na kod powyżej.
Konfiguracja pracy
Kolejny aspekt, do rozważenia jest to wielkość pracy i konfiguracji. Grając w konfiguracji pracy możemy strajku doskonałą równowagę między szybkością, procesu replikacji i niezawodności. Weź kilka scenariuszy ofa:
- Praca trwa od 1 dnia każdego uruchomić: Oznacza to, że pracownicy potrzebują 15 dni na rozpatrzenie każdej pracy (pamiętaj 10% mocy dla 2/3rds czasu). Oczywiście nie jest to mądry konfiguracji, rozmiar pracy jest zbyt duży! Zajmie to co najmniej dwa razy więcej czasu, aby uzyskać przetwarzane pracy powinny początkowej pracownika iść AWOL (czas, aby podnieść, że nie wrócił wyniku plus czas przetwarzania). W idealnym można mieć co najmniej jednego pełnego zadania łatwo wyczyszczone do końca każdego długi okres bezczynności, w ten sposób można zachować miejsca pracy zwolnionym tempie, aw najgorszym przypadku pracy zajmie dwa dni proces powinien najpierw przejść brakuje.
- Praca trwa od 1 minuty do uruchomienia: Oznacza to, że pracownicy trwać około 15 minut do uruchomienia każdego zadania. O ile może to początkowo wydawać idealne, można zyskać dodatkowe przetwarzanie pracy w porze lunchu, przerwy kawowe, spotkania itp. scenariusz ten obciąża innych obszarów systemu i wprowadza swoje własne problemy. Przykładowo, po pierwsze konfiguracji / przetwarzania stosunek czasu będzie skręcić w prawo w dół, więc utraty wydajności systemu. Twoja sieć będzie stale strumienia informacji na temat pracy do różnych pracowników frustrujące pracowników, którzy są dong ich codziennej pracy. Jesteś również zamiar umieścić więcej szczep na serwerze przetwarzania pracy, ponieważ musi rozdać wiele, wiele małych kawałków pracy na bieżąco. Wreszcie, w tej sytuacji, jeśli serwer praca idzie w dół masz zamiar stworzyć ogromne zaloguj ponadnormatywnego pracy, podczas gdy większe pracy mogłyby dalszego przetwarzania w błogiej nieświadomości, że serwer zadaniem było trudności.
W rzeczywistości nie będzie nikogo, idealna konfiguracja dla konfiguracji sieci, wiele zależy od dostępnych środków, rodzaje pracy, wymagania turnaround wymiarze czasu pracy, możliwość pracy w sieci, i tak dalej. Jednakże pewne wytyczne będą:
- Rozmiar pracy tak, aby każdy pracownik może przejść przez co najmniej 3-4 nowych miejsc pracy w ciągu 15 godzin (najdłuższy czas bezczynności prawdopodobnie)
- Graj z wielkości zadania, tak aby czas instalacji staje się dość nieznaczny w porównaniu do czasu przetwarzania (z uwzględnieniem powyższego punktu).
- Jeśli zadanie nie zakończy się w podwójnej ilości czasu (może mniej) można się spodziewać jej zakończenie założyć, że jej zniknął i rozpocząć przetwarzanie go innym pracownikiem. To oznacza, że trzeba czekać do trzech razy normalna długość pracy na jej zakończenie (ewentualnie dłużej, jeśli kolejne zadanie nie powiedzie się). Możesz skrócić ten czas, ale należy uważać, aby nie ograniczyć go za dużo, jak można rozpocząć powielania zadań przetwarzania na bieżąco.
- Praca powinna być niezależna od zewnątrz wymagania jak najwięcej. Serwer pracy, na przykład, powinien skontaktować się na początku i na końcu każdego zadania.
- Nie nasycenia sieci, będzie to miało dwa negatywne skutki, Twój dzień personel znaleźć za pomocą sieci frustrujące i problemów może wystąpić z połączenia limit czasu problem, który będzie jeszcze gorzej, jak skalowanie sieci.
- Zapewnienia miejsc pracy może pracować na swoich pracowników. Jeśli praca staje się zbyt dużej pamięci lub miejsca na dysku intensywnie zacznie przerywać i jedyną rzeczą, można zauważyć, jest spadek liczby miejsc pracy przetwarzane bez rzeczywistego powodu.
Zgłoszenie Wyniki pracy
Składając wyniki pracy ważne jest, aby sprawdzić, czy wyniki nie zostały przedstawione przez innego pracownika, zwłaszcza jeśli obecny pracownik został uśpiony na jakiś czas.
Gdy wyniki są złożone zapewnienia, że liczba wyników meczów liczbę rekordów w pracy.
Jak stwierdzono wcześniej, i nie można przecenić, budować tolerancję błędu do wyszukiwania miejsc pracy i przekazywanie wyników. Pracownicy mogą (i prawdopodobnie będzie) przejść do trybu wstrzymania, co najbardziej uciążliwe razy i musi to być coś dla siebie. Także po raz kolejny abstrahując od Twojego zgłoszenia wyników pomoże zaspokoić przyszłe zmiany systemu sterowania praca jest łatwiejsza do czynienia.
Streszczenie
W tym section przyglądaliśmy się czym jest serwer kontroli pracy musi to zrobić i jak się bardzo prosty system ustanowiony. Rozmawialiśmy jak pobrać pracy z systemem kontroli i jak najlepiej skonfigurować zadania, aby jak najlepiej nasze systemu sieci biurowych. Aby zakończyć, akapit lub dwa na przedstawianiu wyników z powrotem do serwera kontroli pracy został przedstawiony.
- Serwer kontroli pracy zarządza miejsc pracy i zapewnia, że wszystkie jednostki są zakończone
- Przez abstrahowanie zadanie wybrać / wyniki składania możemy zmienić technologię na serwerze kontroli bez większych problemów
- Konfiguracja pracy, aby zapewnić, że są one uruchomić szybko i sprawnie, bez zbytniego nacisku na infrastrukturę, a nie powielając zadań przetwarzania na bieżąco.
- Upewnij się, że budowanie odporności na uszkodzenia i checking błąd na swoje procedury, pracowników może zawiesić i wznowić i najbardziej niewygodne razy. Pamiętaj, aby sprawdzić, czy wyniki zostały już przedstawione przez innego pracownika.
Następnym razem
W części 3 stworzymy nasze maszyny wirtualnej przetwarzania i skonfigurować nasze maszyny okna bezczynność wymiarze czasu pracy.