Wprowadzenie
Pracuję w firmie, w której prowadzimy wiele zadania wsadowe przetwarzanie milionów rekordów danych każdego dnia i myślałam ostatnio o tych wszystkich maszyn, które usiąść każdy dzień nic nie robić przez kilka godzin. Czy nie byłoby dobrze, gdybyśmy mogli korzystać z tych maszyn, aby wzmocnić moc obliczeniową naszych systemów? W tym zbiorze artykułów będę patrzeć na potencjalnych korzyści płynących z zatrudniania Office siatkę używając zwirtualizowanych środowiskach.
W części 1 Dałem przegląd systemu i technologii będę używał, a także omówiono niektóre z potencjalnych przyczyn dlaczego chcesz stworzyć siatkę biurowej.
Kontrola pracy
Jeśli masz zamiar być uruchomione zadania wtedy będziemy potrzebować jakiś sposób nimi zarządzać. System kontroli zadań (na serwerze w pracy) musi być bardzo dobrze przemyślany jeszcze przed przystąpieniem do uruchomienia sieci biurowej. Więc po pierwsze, jakie są zadania dla systemu sterowania pracy:
- Rozdać zadania na wniosek pracowników
- Powiedz pracownikom, jaki rodzaj pracy, aby uruchomić
- Śledzenie pracy
- Upewnij się, że zadania są uruchamiane tylko raz
- Dostarczenie danych do pracy pracowników, a przynajmniej im powiedzieć gdzie je zdobyć
System również musi być rozszerzalny, rozwiązanie, które działa na razie w jednym przypadku może być przedłużony, aby uruchomić kilka typów zadań, jak biznesu widzi wartość w roztworze siatki. Na przykład, praca może zyskać priorytety, więcej niż jeden rodzaj pracy może istnieć (tzn. kilka baz kodu), w końcu możesz nawet uruchomić kilka różnych maszyn roboczych, które są zoptymalizowane dla każdego rodzaju pracy (mimo że ma odejść od "pracownik ogólnej "pomysł). Zawsze staram się myśleć o przyszłości przy opracowywaniu systemów, krótki wzrok termin może prowadzić do długoterminowej frustracji i wydłużenia czasu rozwoju.
Serwer Job
Będziemy potrzebować gdzieś kontrolować nasze zadania z, powinno to być jedynym systemem w sieci, że ma stałą Resource Locator, czy to adres IP, nazwa hosta, URL (z wykorzystaniem wewnętrznych DNS), itd. To dlatego, że pracownicy muszą wiedzieć, gdzie szukać pracy, pracownicy powinni znaleźć system kontroli pracy (a nie system kontroli pracy znaleźć pracowników).
Serwer praca sam tak naprawdę nie ma skomplikowanego zadania (w systemie podstawowym przeczą), musi przechowywać listę zadań, rozdać pracy, otrzymać wyniki, a następnie zapisać je do późniejszego wykorzystania. Jak te elementy (takie jak "rozdawać pracy") są definiowane mogą być bardzo prosty. Później możemy rozszerzyć system zawiera interfejs administracyjny, aby dodać, edytować, usunąć, zawiesić pracę, ale jest to poza tym ćwiczeniu.
Nie ma żadnego powodu, następnie, że twój serwer praca nie może być maszyna wirtualna działa w swoim głównym serwerze przetwarzania pod warunkiem, że nie spływa zbyt wiele zasobów z niego. Serwer praca jednak nie potrzebuje wysokiej dostępności, jeśli spadnie na piątkowy wieczór, który zamierzasz stracić cały weekend przetwarzania, potencjalnie kosztującej kilka tygodni warto czasu przetwarzania (w porównaniu do głównego serwera przetwarzania Alone) . Może warto rozważyć wprowadzenie serwer pracy na obciążenia środowiska zrównoważony w zakresie wysokiej dostępności.
Konfiguracja podstawowa
Podstawowe ustawienia dla naszego serwera miejsc pracy będzie składać się z co Wołam jednego z moich Limp serwerów (czyli Nux Li, m ySql, P KM). Kod działa na pracowników Thea będzie rzeczywiście wypracowanie praca, można go uruchomić poprzez interakcję z bazami danych kontroli pracy systemu. Później moglibyśmy stworzyć serwis internetowy i faktycznie rękę pracy zamiast pracowników do ciężkiej pracy sami, ale teraz będziemy kontynuować korzystanie z zasady KISS (Keep it simple, stupid!).
Tak więc, pozwala utworzyć trzy MySQL tabele do czynienia z pracy. Będą to `prace`, `jobRecords` i `jobResults`.
Tutaj używam SQL Buddy bardzo mały alternatywę dla phpMyAdmina tylko dlatego, że jej łatwiej zainstalować na CentOS (za inni widzą: 10 świetne alternatywy dla phpMyAdmin )
Tabela ta składa się z 5 prostych pól,
- ID: jednoznacznej identyfikacji pracę
- imię: Może być referencyjny 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ć tę pracę? To nie jest zupełnie potrzebne, ale miło mieć. Sugerowałbym pracowników śledzenia na podstawie adresów IP w sieci
- started_at: Kiedy pracownik rozpocząć pracę? Poprzez śledzenie pracy, które nie zostały zrealizowane w kwocie X czasu wiemy, że trzeba odebrać pracę ponownie i rozpocząć przetwarzanie przez innego pracownika. Pracownicy mogą zatrzymać przetwarzanie / go niedostępny dla wielu powodów, awarii zasilania, crash, strat sieciowych itp.
Jest łatwy w jaki sposób ta tabela może zostać rozszerzona za pomocą kilku pól dodatkowych dla pozwalają na śledzenie statystyk, kolumny czas wykończenie, aby zobaczyć, jak długo praca miała, licznik, aby zobaczyć ile pracownicy podniósł pracę (oczywiście musi to mają tendencję do 1) pierwszeństwo pracy, 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 byłaby konieczna.
Dodajmy kilka przykładowych zadań:
Kolejna tabela znowu jest dość proste do zrozumienia, to nasze rekordy pracy. Są one związane z głównej tabeli praca przez kolumnę `` jobs_id. Tworzą z tej tabeli, bardzo dużo zależy od danych, które trzeba dostarczyć do swoich pracowników, pozwala zrobić bardzo prosty przykład, gdzie mamy cztery kolumny:
- id: id rekordu
- imię: nazwisko osoby
- Adres: Osoba adres
- jobs_id: ID zadania, że ten rekord jest powiązany
Trzecia i ostatnia tabela składa się z tabeli wyników, ma tak samo tworzą jako naszej tabeli rekordów, oraz z dodatkiem niektórych kolumn może być częścią tabeli rekordów:
- 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 zwrócił się do innego stolika, gdzie moje dane do procesu znajdowała, ale może to równie dobrze być plik, parametry do uruchomienia kodu symulacji, you name it.
Wybór pracy
Jak stwierdzono wcześniej, pracownicy zrobią nasze zarządzanie zadaniami dla nas teraz, więc wszyscy musimy naprawdę jest znaleźć pracę, która wymaga przetwarzania i uzyskać informacje. W jaki sposób możemy to zrobić? Cóż odebrać nasze kryteria wyboru pracy i szukać pracy, w SQL Zrobiłem, co następuje:
- Podjąć wszelkie zadania, które nie są oznaczone jako kompletne, ale z naszego pracownika i przywrócić je (zastąpić ME__ __ z identyfikatorem, najłatwiej byłoby adres IP):
Update `prace` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ ME__;
- Korzystanie z naszych kryteriów wyboru pracy, wybrać zadanie i powiedzieć systemowi sterowania, który to pracownik ma do czynienia z nim:
Update `prace` SET `status` = 1, `started_by` = __ ME__, `started_at` = NOW () WHERE `status` = 0 OR
(`Status` = 1 AND `started_at`> DATE_SUB (NOW (), INTERVAL HOUR X)) ORDER BY `id` ASC;
Chwytając pracy, które nie zostały zwrócone wyniki w kwocie X czasu mamy pewność, że wszystkie zadania są uruchamiane w przypadku pracownika upaść lub będzie zagubiony.
- Następnie chwycić zadania szczegóły stosowane przez 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 włożyć nasze rekordy wynikowe i oznaczyć zadanie jako zakończone. Pamiętam, jak praca może wstrzymać / wznowić w dowolnym czasie umożliwić pewną wytrzymałość w skrypcie. Być może zadanie zawiesza w połowie aktualizacji systemu kontroli pracy, więc sprawdzenie liczby rekordów w pracy i liczby zapisanych wyników z powrotem do systemu sterowania pracy byłoby mądre posunięcie.
Ponadto, choć to pokazuje, jak zadania mogą być wybierane i zarządzane z SQL-ramkę zapytania powinno się naprawdę prenumerujących swoją kontrolę zadań tak, że jeśli zdecydujesz się przejść do korzystania z usługi internetowej, plik based system, XML lub dowolny inny Wiele systemów nie wpłynie to kod znajdujący się powyżej niej.
Konfiguracja pracy
Kolejny aspekt do rozważenia jest to wielkość pracy i konfiguracji. Grając z konfiguracją pracy możemy uderzać doskonałą równowagę pomiędzy szybkością i procesu replikacji i niezawodności. Poświęć scenariusze ofa parę:
- Praca wziąć jeden dzień każdy uruchomić: Oznacza to, że Twoi pracownicy potrzebują 15 dni na przetwarzanie każde zadanie (pamiętaj 10% mocy na 2/3rds w czasie). Nie jest to oczywiście mądry konfiguracja, rozmiar praca jest zbyt duży! Zajmie to co najmniej dwukrotnie czas, aby dostać pracę przetwarzane powinny początkowy pracownik iść AWOL (czas podnieść, że nie wrócił wynik plus czas powtórnego przetworzenia). W idealnym chcesz mieć co najmniej jeden pełny pracę łatwo wyczyszczone do końca każdego długim okresie bezczynności, w ten sposób zachować miejsca pracy ponad dolną, aw najgorszym przypadku praca zajmie dwa dni do procesu powinien najpierw przejść brakuje.
- Praca trwa od 1 minuty do uruchomienia: Oznacza to, że Twoi pracownicy zająć około 15 minut, aby uruchomić każdą pracę. O ile może to początkowo wydawać idealne, można uzyskać dodatkowe przetwarzanie pracę w porze lunchu, przerwy kawowe, spotkania, itp. ten scenariusz obciąża innych obszarów systemu i wprowadza swoje własne problemy. Na przykład, po pierwsze twoje ustawienia / przetwarzanie stosunek czasu jest zamiar iść w prawo w dół, więc utraty wydajności systemu. Twoja sieć będzie stale strumieniowe informacje praca na różnych pracowników frustrujące pracowników, którzy są dong ich codziennej pracy. Ty również zamiar położyć większy wysiłek na serwerze przetwarzania pracy, ponieważ musi rozdać wiele, wiele małych kawałków pracy na bieżąco. Wreszcie, w tej sytuacji, jeśli twój serwer praca idzie w dół masz zamiar stworzyć ogromne dziennik powrotnym niedokończoną pracę podczas większych zadań można ciągłego przetwarzania błogiej nieświadomości, że serwer praca doświadczał trudności.
W rzeczywistości nie będzie jedna idealna konfiguracja do konfiguracji sieci, wiele zależy od dostępnych środków, rodzajów pracy, wymagań postoju etat, zdolności sieci, i tak dalej. Jednakże pewne wytyczne to:
- Praca rozmiar tak, aby każdy pracownik może przejść przez co najmniej 3-4 miejsc pracy w okresie 15 godzin (najdłuższy prawdopodobnie bezczynny okres)
- Zagraj z wielkością zatrudnienia, tak aby czas instalacji staje się dość nieznaczny w porównaniu do czasu przetwarzania (biorąc pod uwagę punkt powyżej).
- Jeśli praca nie została zakończona w podwójnej ilości czasu (może mniej) można oczekiwać, że aby zakończyć to zakładamy, że jego zniknął i rozpocząć przetwarzanie go innym pracownikiem. Oznacza to, że być może trzeba będzie poczekać aż do trzykrotnej normalnej długości pracy na jego zakończenie (ewentualnie dłużej, jeśli kolejne zadanie nie powiedzie). Możesz skrócić ten czas, ale uważaj, aby nie zmniejszyć go zbyt dużo, jak możesz zacząć powielać zadań przetwarzania na bieżąco.
- Praca powinna być niezależna od zewnętrznych wymagań jak najwięcej. Serwer praca, na przykład, powinien się skontaktować na początku i na końcu każdego zadania.
- Nie nasycić sieć, to będzie miał dwa negatywne skutki, twój dzień pracownicy znajdą pomocą sieci frustrujące i problemy mogą być doświadczane z połączenia limit czasu problem, który będzie jeszcze gorzej jak skalowanie siatkę.
- Zapewnienie miejsc pracy można uruchamiać na swoich pracowników. Jeśli prace stają się zbyt intensywne pamięci lub miejsca na dysku intensywnie zacznie przerywać i jedyną rzeczą, można zauważyć, jest spadek liczby miejsc pracy przetworzonych bez rzeczywistego powodu.
Składanie wyniki Hioba
Składając wyniki pracy ważne jest, aby sprawdzić, czy wyniki nie zostały przedstawione przez innego pracownika, zwłaszcza jeśli aktualny pracownik został uśpiony na jakiś czas.
Kiedy wyniki są przekazywane zapewnić, że liczba wyników odpowiada liczbie rekordów w pracy.
Jak stwierdzono wcześniej, i nie można przecenić, budować tolerancję błędu do wyszukiwania miejsc pracy i przedłożenia wyników. Pracownicy mogą (i najprawdopodobniej będzie) przejść do trybu wstrzymania w najbardziej niewygodne razy i to musi być coś dla siebie. Również po raz kolejny abstrahując od Twoje zgłoszenie wyniki pomoże zaspokoić przyszłe zmiany w systemie sterowania praca jest łatwiejsza do czynienia.
Streszczenie
W tym section przyjrzeliśmy się co serwer sterujący praca musi zrobić i jak się bardzo prosty system ustanowiony. Rozmawialiśmy jak pobrać zadania z systemem sterowania i jak najlepiej skonfigurować zadania, aby uzyskać większość naszych Twojego systemu sieci biurowej. Aby zakończyć, akapit lub dwa na złożenie wyniki z powrotem do serwera kontroli pracy został przedstawiony.
- Serwer sterujący praca zarządza miejsc pracy i zapewnia, że wszystkie jednostki organizacyjne zostały zakończone
- Przez abstrahowanie pracę wybór / Wyniki złożenie możemy zmienić technologię na serwerze kontrolnym bez większych problemów
- Skonfiguruj pracy, aby zapewnić, że są one uruchomić szybko i sprawnie bez zbytniego nacisku na infrastrukturę sieci i bez powielania zadań przetwarzania na bieżąco.
- Upewnij się, że budować odporność na uszkodzenia i checking błędzie do swoich procedur, pracownicy mogą 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 naszą maszynę wirtualną przetwarzania i skonfigurować nasze komputery Windows będą stać bezczynnie wymiarze godzin.