Kategori: Artikler

Office Grid Computing ved hjælp af virtuelle miljøer - Del 1

Ved , fredag ​​4 Dec 2009 11:23

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

Som en PHP udvikler jeg har tænkt mig at bruge værktøjer, som jeg bruger hver dag, nemlig, Linux, mySQL , PHP, VirtualBox og undergravende virksomhed (SVN). Men jeg håber, at denne guide vil tilpasse sig andre sprog og teknologier lige så godt.

Den løsning jeg give vil være meget løst baseret på den type behandling vi havde brug for at opnå men dette kan ikke være rigtigt igennem hele artiklen, som jeg vil ændre tingene til enkelthed, eller til at producere mere interessant brug scenarier.

Disse virtualiserede miljøer, der kan køre på windows maskiner, da dette er hvad de fleste af kontorer køre. Behandlingen, at kontormaskiner ikke bør ikke gribe ind med personale ved hjælp af disse maskiner, bør kræve, ingen vedligeholdelse på maskinen, og være let indsættes til nye maskiner, som de bliver tilgængelige. Desuden bør nye virtuelle maskiner, der ikke kræver nogen yderligere konfiguration, da det reducerer skalerbarhed og lethed, hvor elnettet kan udvides.

Hvorfor Implementer et Office Computing Grid?

For det første du tænker måske, hvorfor ikke bare bruge en cloud computing ressource såsom Amazons EC2-platform ? Nå årsagerne kan være flere, for eksempel:

  • Du vil ikke overdrage visse data til en cloud computing miljø
  • Du kan ikke sætte bestemte data i et cloud computing miljø for juridiske årsager (f.eks data forlader landet), potentielt af juridiske årsager, fx NHS optegnelser.
  • Du ønsker at holde din forarbejdningsenheder tæt og har fuld kontrol over hardware også
  • Du behøver ikke projektmidlerne til at køre cloud tilfælde
  • Dit kontor har ikke en forbindelse til internettet og dermed dets ikke muligt at bruge en sky ressource
  • Du ikke kan lide regn, skyer tyder regn, derfor skal du holde sig langt væk

Jeg er sikker på listen kunne fortsætte, men jeg tror, ​​det er nok for nu.

Fordele ved et kontor Computing Grid

Nå, lad os lave noget matematik (og i ægte fysik stil lader foretage nogle fejende antagelser). Forestil dig at du har stor velnæret behandling server, der kører 100 arbejdspladser om dagen. I dit kontor, du har 50 maskiner, der er inaktive 16 timer om dagen, hver af disse maskiner er 10% så stærk som din velnæret behandling skille. (Alle resultater her er afrundet til at undervurdere performance stigning).

Så kunne 1 maskine * 10% strøm * 2 / 3 tid = 0,067 dvs 1 desktop-forarbejdning i spildtid proces 6 Fuld job om dagen.

Hvis du nu skalere det op det tager 15 tomgang desktops til at behandle så mange arbejdspladser pr dag, som din vigtigste behandling server gør.

Så i vores foregive kontor på 50 maskiner, vi kunne øge vores regnekraft fra 1 server op til 4 fulde behandling servere, eller vi kunne være behandlingen 400 arbejdspladser om dagen i stedet for 100.

Læg mærke til, for ingen investering i ny hardware dit firma har netop øget sin batch forarbejdningskapacitet 4 gange! Potentielt du vil øge dit strømforbrug, men fra de fleste kontormiljøer Jeg har været i maskiner er generelt tilbage på natten alligevel, så man kunne se dette som et grønt initiativ.

Andre fordele også betyde, at investeringer i nye (eller opdateret) behandling servere kan blive forsinket, hvis dit kontor maskiner er tilstrækkelige, og at som du forbedre styrken i din kontormaskiner dit kontor forsyningsnet bliver mere kraftfuld automatisk.

Teknologier

Hvad du har brug for? (Eller mere korrekt, hvad har jeg brug):

  • Idle kontormaskiner (i mit tilfælde et ekstra gamle Windows XP laptop)
  • VirtualBox (eller en anden virtualiserings-klient-software)
  • En virtuel maskine med PHP, MySQL running kører en skære ned OS, jeg ringer disse mine Limp servere:)
  • Jobs til at køre
  • Job server (kan være en anden virtuel maskine eller andet sted)

Typisk Job

De typer af job, at dette system er designet til at køre er som følger:

  • System modtager en liste over data, som vi har brug for at matche og returnere resultater
  • Matchende omfatter det at tjekke / søge flere (temmelig statisk) datakilder
  • Resultater fra datakilder kan kræve yderligere validering, sammenlægning, kontrol af yderligere datakilder, som reaktion på resultaterne
  • Data returneres med matchende poster, fuldt valideret og bearbejdet
  • Hver post inden for et job er uafhængig af resten

Så dybest set, vi kigger på kørende jobs, som kræver en blanding af database opslag og nogle talknusning, en ret typisk scenario i et erhvervsmiljø.

Grid løsninger er ikke kun fordelagtig for behandling job af denne type. Dybest set kan enhver proces, som kan opdeles i selvstændige enheder køres parallelt. Se dette Wikipedia for eksempler og mere information: Grid Computing , men et par kendte eksempler er Seti @ Home og BIONC . Der er rammer for at køre computing net, og disse er værd at se på.

Hvad vil vi opnå?

Ved udgangen af ​​disse artikler håber jeg at vise, at indsætte et kontor net ikke behøver at være enormt dyrt eller tidskrævende. Jeg har tænkt mig at diskutere:

  • Opsætning af jobbet kontrolsystem, job konfiguration
  • Oprettelse af en passende behandling af virtuel maskine
  • Sådan setup systemet på en Windows-maskine
  • Sikrer, at du bruger den nyeste kode og data
  • Deployment og benchmarking
  • Se fremad

Jeg vil være bygning (ok jeg byggede, så skrev dette) et eksempel på program for at teste de koncepter på en lokal maskine ved hjælp af Windows XP og min "GridMachine" virtuel maskine. Mit job kontrol server vil være min primære maskine, der kører Fedora 11 .

Dette er på ingen måde betød at demonstrere et fuldt fungerende robust system, dets betød mere for en demonstration og diskutere viser, at disse ting kan opnås en rimelig kort tid og med små omkostninger. Du er velkommen til at sende mig eventuelle kommentarer, rettelser eller forbedringer, og jeg vil gøre mit bedste for at holde denne artikel opdateret til at matche.

Næste gang

I del 2 vil jeg starte med at se på jobbet styring, og se på, hvordan arbejdspladser skal konfigureres for at opnå størst forarbejdningsstøtte samtidig sikre, at hvert job er behandlet, uden at mislykkes.

Office Grid Computing ved hjælp af virtuelle miljøer - Del 2

Ved , fredag ​​4 Dec 2009 11:23

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

I del 1 jeg gav et overblik over systemet og teknologier jeg vil bruge samt drøftet nogle af de potentielle grunde til, at du ønsker at oprette et kontor gitter.

Job Kontrol

Hvis du vil køre jobs så du vil få brug for nogle måde at styre dem. Dit job kontrolsystem (på dit job server) skal være virkelig velgennemtænkt, før selv forsøger at køre et kontor gitter. Så det første, hvad er opgaver for et job kontrolsystem:

  • Uddel opgaver efter anmodning fra arbejdstagerne
  • Fortæl arbejdere hvilken type af job til at køre
  • Spor job
  • Sørg for, at arbejdspladser er kun køre én gang
  • Giv jobdata til arbejdstagere, eller i hvert fald fortælle dem, hvor du kan få det

Systemet skal også udvides, en løsning der virker for nu i et enkelt tilfælde kan udvides til at køre flere typer af arbejdspladser, fordi virksomheden ser en værdi i et gitter løsning. For eksempel kan arbejdspladser få prioriteter, mere end én jobtype kan eksistere (dvs. flere code baser), i sidste ende kan du endda køre flere forskellige arbejdstager maskiner, der er optimeret for hver type af arbejde (selv om det bevæger sig væk fra det »generiske arbejdstager 'idé). Forsøg altid at tænke på fremtiden, når udvikle systemer, kan en kortsigtet vision føre til på længere sigt frustration og øget udviklingsbistand tid.

Job Server

Vi vil få brug for et sted at styre vores job fra, bør dette være det eneste system i dit net, der har en fast ressource locator, være, at en IP-adresse, værtsnavn, URL (ved hjælp af intern DNS), osv. Dette skyldes arbejderne har brug for at vide hvor de skal lede efter job, arbejdstagere har behov for at finde det job kontrolsystem (ikke jobbet kontrolsystem finde arbejderne).

Jobbet selve serveren ikke rigtig har en kompliceret opgave (i et grundlæggende system alligevel), er det nødvendigt at gemme en liste over job, uddele job, modtage resultaterne, og efterfølgende gemme dem til senere afhentning. Hvordan disse dele (såsom 'hånd ud arbejdspladser «) er defineret kan være meget basale. Senere kan vi udvide systemet til også at omfatte et administrations-interface til at tilføje, redigere, slette, suspendere job, men det er hinsides denne øvelse.

Der er ingen som helst grund så er dit job server ikke kunne være en virtuel maskine, der kører inden for dit primære behandling server, forudsat at det ikke dræne alt for mange ressourcer fra det. Jobbet serveren dog ikke brug for høj tilgængelighed, hvis det går ned på en fredag ​​aften, du kommer til at miste en hel weekend med behandling, potentielt koste dig et par uger til en værdi af sagsbehandlingstiden (i forhold til din primære behandling server alene) . Du vil måske overveje at sætte dit job server på en load balanceret miljø for høj tilgængelighed.

Grundlæggende opsætning

Den grundlæggende opsætning til vores job-server vil bestå af hvad jeg kalder en af mine slatne servere (dvs. Li nux, m ySql, P HP). Den kode, der kører på thea arbejdere rent faktisk vil finde ud af hvilke job det kan køre ved at interagere med med job-styresystem databaser. Senere kunne vi skabe en web service og faktisk uddele job frem for at lade arbejderne udføre det hårde arbejde selv, men for nu vil vi fortsætte med at anvende KISS princippet (Keep It Simple, Stupid!).

Så kan oprette tre mySQL tabeller til at beskæftige sig med job. Disse vil blive `jobs`, `jobRecords` og `jobResults`.

jobs tabel Her Jeg bruger SQL Buddy en stor lille alternativ til phpMyAdmin bare fordi det er nemmere at installere på CentOS (for andre, se: 10 Great alternativer til phpMyAdmin )

Denne tabel består af 5 enkle felter,

  • id: entydigt identificerer jobbet
  • navn: Kunne være en klient reference, eller en række af andre identifikatorer
  • Status: Du skal vide, hvor opgaven er, fx
    • 0: Ikke startet
    • 1: samlet op
    • 2: Afsluttet
  • started_by: Hvem er begyndt at gøre jobbet? Dette er ikke helt påkrævet, men er et rart at have. Jeg vil foreslå, sporing af arbejdstagere ved deres IP-adresse på dit netværk
  • started_at: Hvornår arbejdstageren starte jobbet? Ved at spore job, der ikke har gennemført inden for X tid, vi ved vi nødt til at afhente jobbet igen og starte behandling af en anden arbejdstager. Arbejdstagere kunne stoppe behandlingen / gå offline for en række årsager, strømsvigt, nedbrud, netværk tab, osv.

Det er nemt, hvordan denne tabel kunne udvides med et par ekstra felter for at muliggøre statistik sporing, et sluttidspunkt kolonne for at se, hvor lang tid jobbet tog, en tæller til at se, hvor mange arbejdere tog jobbet (selvfølgelig det skal en tendens til at 1), job prioritet, kan listen blive ved og ved. I mere komplekse job scenarier vil det være muligt at angive, hvor meget hukommelse arbejdstageren ville have adgang til (og derfor kun er anvendt passende arbejdstagere), eller sågar hvilken type arbejdstager krævede ville være.

Lad os tilføje et par eksempel job:

eksempel job

Den næste bordet igen er ganske simpelt at forstå, det er vores job optegnelser. De er knyttet til de vigtigste job bordet ved en kolonne `jobs_id`. Den gør op med denne tabel afhænger meget af de data, du har brug for til at levere til dine medarbejdere, kan gøre et meget simpelt eksempel, hvor vi har fire kolonner:

  • id: ID af posten
  • navn: Person navn
  • adresse: Person adresse
  • jobs_id: Jobbet ID, at denne rekord er knyttet til

Den tredje og sidste tabel består af et resultat tabellen, har stort set samme gør op som vore optegnelser bordet, og med tilføjelse af nogle kolonner kunne være en del af posterne tabel:

  • job_record_id: Link resultatet til jobbet bordet
  • Resultat: Resultatet af data

... Og det er alt du har brug for job kontrol! (Omend på et meget grundlæggende niveau) I mit tilfælde er jeg pegede på et andet bord, hvor mine data til processen var placeret, men det kunne lige så let være blevet en fil, parametre til at køre simulering kode, you name it.

Valg af et job

Som tidligere nævnt, vil arbejderne gøre vores jobstyring for os for nu, så vi alle har brug for virkelig at gøre er at finde et job, der kræver behandling og få oplysningerne. Hvordan ville vi gøre det? Godt pick vores job udvælgelseskriterier og søge job, i SQL gjorde jeg følgende:

  1. Tag nogle job, der ikke er markeret som komplet, men fra vores arbejdstager og nulstille dem (stedfortræder __ME__ med et id, ville nemmeste være IP-adresse):
      UPDATE `jobs` SET `status` = 0 WHERE `status` = 1 og `started_by` = __ME__; 
  2. Brug vores job udvælgelseskriterier, skal du vælge et job og fortælle kontrolsystem, at denne arbejdstager beskæftiger sig med det:
      UPDATE `jobs` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `status` = 0 eller
     (`Status` = 1 og `started_at`> DATE_SUB (NOW (), interval X HOUR)) ORDER BY `id` ASC; 

    Ved at snuppe job, der ikke returnerede resultater i X tid, vi sikrer, at alle job er at køre i tilfælde af en arbejdstager bryder sammen eller gå væk fra mig.

  3. Næste fat i job detaljer efterfulgt af journaler selv:
      SELECT * FROM `jobs` WHERE `started_by` = __ME__ LIMIT 1;
     SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Ved afslutningen af ​​jobbet, vi indsætter vores resultat optegnelser og markere opgaven som fuldført. Husk som arbejdspladser kan suspendere / genoptages på ethvert tidspunkt give mulighed for en vis robusthed i dit script. Det kan være, at opgaven suspenderer halvvejs gennem opdatering jobbet kontrolsystem, så kontrol af antallet af poster i et job, og antallet af resultater gemt tilbage til jobbet kontrolsystem ville være et klogt træk.

Hertil kommer, samtidig med at dette viser, hvordan arbejdspladser kan vælges og styres fra en SQL-forespørgsel ramme, du skal virkelig være abstrahere dit job kontrol, så hvis du beslutter dig for at skifte til at bruge en webtjeneste, en fil baseret system, XML , eller enhver anden Antallet af systemer, vil det ikke påvirke den ovenstående kode det.

Job Configuration

Det næste aspekt at overveje, er opgavens omfang og konfiguration. Ved at spille med job konfiguration, vi kan skabe en god balance mellem hastighed, proces-replikation, og pålidelighed. Tag et par OFA scenarier:

  1. Jobs tage 1 dag hver til at køre: Det betyder, at dine medarbejdere har brug for 15 dage til at behandle hvert job (husk 10% af den strøm til 2/3rds af tiden). Dette er tydeligvis ikke en klog konfiguration, dit job størrelse er alt for stor! Det ville tage mindst dobbelt så lang tid at få et forarbejdet job bør den initiale arbejdstager gå væk fra mig (tid til at samle op, at det ikke har returneret et resultat plus oparbejdning tid). I en ideel du gerne have mindst en hel jobbet let slettes ved udgangen af hver langside inaktiv periode, den måde du holder jobs tikker over og i værste fald et job, ville tage to dage at processen bør de første forsvinder.
  2. Jobs tage 1 minut til at køre: Det betyder, at dine medarbejdere tager cirka 15 minutter at køre hvert job. Mens dette kan i starten synes ideelt, får du ekstra arbejde forarbejdning under frokost tid, kaffepauser, møder, osv. dette scenario lægger pres på andre områder af dit system og introducerer sine egne problemer. For eksempel dit setup / sagsbehandlingstiden forholdet først og fremmest kommer til at gå helt ned, således at miste systemets effektivitet. Dit netværk vil være konstant streaming job information til de forskellige arbejdere frustrerende medarbejdere, som DONG deres daglige arbejde. Du er også kommer til at lægge mere pres på dit job forarbejdning serveren, som det er at uddele masser og masser af små stykker arbejde på regelmæssig basis. Endelig, i denne situation, hvis dit job server går ned du kommer til at skabe en enorm tilbage log over uafsluttet arbejde, mens større arbejdspladser kan for fortsat behandling lykkeligt uvidende om, at jobbet serveren havde vanskeligheder.

I virkeligheden vil der ikke være en ideel konfiguration til dit net setup, meget afhænger af de tilgængelige ressourcer, typer af job, job ekspeditionstid krav, netværks-kapacitet, og så videre. Men nogle retningslinjer vil være:

  • Størrelse job, således at hver arbejdstager kan komme igennem mindst 3-4 job i en periode på 15 timer (den længste sandsynlige ledig periode)
  • Spil med jobbet størrelse, så setup tid bliver temmelig ubetydelige i forhold til behandlingstiden (under hensyntagen til ovenstående punkt).
  • Hvis et job ikke komplet i dobbelt så lang tid (måske mindre), du forventer at færdiggøre det antage, at det er væk væk fra mig og begynde at behandle det med en anden arbejdstager. Dette betyder, at du måske nødt til at vente i op til tre gange den normale længde af et job til den er færdig (muligvis længere, hvis den efterfølgende jobbet mislykkes). Du ønsker måske at reducere denne tid, men vær forsigtig med ikke at reducere det alt for meget som du kan begynde at overlappe behandlings opgaver på regelmæssig basis.
  • Jobs bør være uafhængige af eksterne krav, så meget som muligt. Jobbet server, for eksempel, bør kun kontaktes ved starten og slutningen af ​​hver opgave.
  • Må ikke mætte dit netværk, vil dette få to negative effekter, vil din dagtimerne personalet finde ved hjælp af netværket frustrerende og problemer, kan opleves med tilslutninger timing et problem, som kun vil blive værre, når du skalere din net.
  • Sikre jobs kan køre på dine medarbejdere. Hvis arbejdspladser bliver for hukommelsen intensiv eller diskplads intensivt job vil begynde at opgive, og det eneste du vil bemærke er et fald i antal arbejdspladser behandles uden reel grund til hvorfor.

Indsendelse Resultater af et job

Ved fremlæggelsen af ​​resultaterne af et job er det vigtigt at kontrollere, at resultaterne ikke er blevet indsendt af en anden arbejdstager, især hvis den nuværende arbejdstageren har været i dvale i et stykke tid.

Når resultaterne er fremlagt sikre, at antallet af resultater svarer til det antal poster i jobbet.

Som nævnt tidligere, og kan ikke være over understreges, at bygge fejltolerance i job hentning og resultater underkastelse. Arbejderne kan (og højst sandsynligt vil) gå i standby-tilstanden på det mest ubelejlige gange, og det skal være taget højde for. Også igen abstrahere væk dine resultater indsendelse vil hjælpe tage højde for fremtidige ændringer i dit job styresystem meget nemmere at håndtere.

Resumé

I denne section har vi kigget på, hvad et job kontrol server har brug for at gøre, og hvordan man får et meget grundlæggende system oprettet. Vi diskuterede hvordan man henter et job fra kontrolsystemet og hvordan man bedst kan konfigurere job for at få mest vores af dit kontor skinnesystem. Til slut, var et afsnit eller to på sende resultaterne tilbage til jobbet Control Server præsenteret.

  • Et job kontrol server styrer job og sikrer, at alle arbejder enheder er afsluttet
  • Ved at abstrahere dit job vælge / resultater indsendelse vi kan ændre teknologien i kontrol-serveren uden de store problemer
  • Konfigurer dit job at sikre, at de kører hurtigt og effektivt uden at lægge for meget pres på dit netværk infrastruktur, og uden at overlappe behandlings opgaver på regelmæssig basis.
  • Sørg for, at du bygger fejltolerance og fejl checking ind i dine rutiner, kan arbejderne afbryde og genoptage og de mest ubelejlige af gange. Husk at kontrollere, om resultater, der allerede er blevet indsendt af en anden arbejdstager.

Næste gang

I del 3 vil vi skabe vores virtuelle behandling maskine og oprettet vores Windows-maskiner for at blive ledig-deltidsansatte.

Office Grid Computing ved hjælp af virtuelle miljøer - Del 5

Ved , fredag ​​4 Dec 2009 11:03

Indledning

Jeg arbejder i en virksomhed, hvor vi køre mange batchjob forarbejdning af millioner af optegnelser over data hver dag, og jeg har tænkt for nylig om alle de maskiner, der sidder rundt om hver eneste dag at gøre noget i flere timer. Ville det ikke være godt, hvis vi kunne bruge disse maskiner til at styrke den regnekraft af vores systemer? I dette sæt af artikler jeg har tænkt mig at se på de potentielle fordele ved at ansætte et kontor gitter ved hjælp af virtualiserede miljøer.

I del 4, kiggede vi på ved hjælp af værktøjer til at sikre, at vi kører den nyeste version af kode og data kilder, så opnåede resultater er altid up-to-date med de nyeste forretningsoplysninger og logik.

Pre-Deployment

Før implementering dit grid system, hvis der er én ting, du gør, og en ting alene, det er benchmark dit nuværende system! Ligegyldigt hvad du fortæller kolleger om, hvor meget ekstra arbejde dit system vil gøre, medmindre du har tal til at bakke dette op din garantier er ingenting.

  • hvor mange poster kan du behandle i øjeblikket? Om dagen? I timen?
  • Hvor lang tid tager det typisk tager at vende rundt et job?
  • Hvor meget mere kapacitet, har du?

Der er også yderligere spørgsmål:

  • Hvis din behandling server (eller en af ​​dine forarbejdning servere) går ned, hvordan vil det påvirke dine evner, vil du blive lammet?
  • Hvilke fordele håber du / forventer at få fra et gitter system?
  • Er dine kontormaskiner stand til at køre de job?
  • Er dine (eller kan du arbejdspladser konverteret) til at arbejde i denne stil for at køre?

Det sidste store punkt er at tage din tid på større ændringer, som denne. Opdater din behandling kode for at arbejde med den nye metode, benchmark igen. Eventuelt oprettelse af din behandling server til at køre en virtuel maskine, efter at alle dine forarbejdning server vil bare være en anden arbejdstager (bare en meget kraftig en relativt). Lad den nye proces at bosætte sig.

Deployment

Mit forslag ville være at pop ind på kontoret en weekend udføre alle de installationer og opsætning. Gør det lige før en fjorten dages ferie og lad så andre fattige fyr til at håndtere konsekvenserne ... måske ikke ...

Deployment for et system som dette behov for at være langsom. På trods af at det er relativt enkelt at etablere dette system vil påvirke hele dit kontor infrastruktur (såvel den digitale én). For det første, rul ud til et par af maskiner ad gangen, overvåge netværkstrafik, hvor arbejdstageren værter udføre på en dag-til-dag basis. Du skal muligvis ændre dit job konfiguration som svar på dine resultater.

Når systemet har afgjort med et par maskiner (lad os sige 10% af alle kontormaskiner, dvs 5) fortsat at overvåge trafikken på nettet og vært maskine performance. Næste benchmark igen, bør du nu være behandling 33% flere arbejdspladser end dit første benchmarks. Marker dette er tilfældet, eller at du i det mindste i denne ballpark. Hvis ikke, undersøge hvad der foregår, inden vi går videre. Gentag denne cyklus, indtil du lykkeligt har alle kontor-maskiner, der kører uden at dræbe individuelle maskinens ydeevne eller slibning dit netværk i stå.

På alle tider holde benchmarking, selv efter at alle installationer er lavet. Kontroller, hvor ny kode opdateringer påvirke hastigheden på dit system, skal du kontrollere alle arbejdstagere rapporterer med og forarbejdning job. Langsomt (meget langsomt) tilvæksten dit job konfiguration for at få det bedste ud af dine medarbejdere og netværk.

Stop!

Hvad nu hvis du ønsker at stoppe dine medarbejdere i at køre på et tidspunkt? De er alle derude løb, regenerere, og prøver deres bedste for at behandle data som sultne insekter. Svaret kan synes indlysende, men det værd at tilføje just in case sin overset. Du skal blot redigere din behandling script med en exit (0) or die () eller en anden erklæring om at dræbe din behandling job. En vigtig grund til, at vi altid forsøger at opdatere til den nyeste behandling af scriptet, før der køres!

Demonstration System

For at skrive denne række korte artikler, jeg skabte en meget lille gitter at demonstrere de teknologier og metoder. Jeg har læst masser af artikler, tutorials, og anvendt forskellige værktøjer til at konfigurere og overvåge, hvad der foregik. På ingen måde har jeg gået ud og mættet en hel kontor med trafik og heller ikke jeg har haft adgang til en regulær medarbejdere pc for at se, hvordan vært præstation var påvirket.

Min demonstration systemet var meget ydmyg faktisk. Jeg brugte min normale desktop sat op som et job Control Server. På dette havde jeg installeret mySQL -server installeret, sat op som en mester i replikation, PHP , A og SVN sammenknyttes gennem Apache (for adgang via arbejdstager VM).

Jeg har nu oprettet en CentOS arbejdstager maskine på VirtualBox på en 6 år gammel Windows XP laptop. Jeg setup planlagte opgaver som angivet efter kopiering af VM på maskinen, og lad det gå.

Den virtuelle maskine blev sat op med PHP, undergravende virksomhed, og mySQL. Jeg har checket ud en afdeling ved navn »arbejdstager« fra mit job kontrol servere repository, og sørgede for det kunne blive opdateret ved hjælp af 'svn update'. Næste jeg setup MySQL som en slave og kontrolleret, at data blev kopiere fra mySQL på jobbet kontrol-serveren ned til arbejdstageren VM. Efter alt dette har jeg opsætning af bash scriptet og cron job.

Min behandling script dybest set gik i retning af dette (meget simple ting):

  • Læs i navnefeltet
  • Tælles antallet af lignende navne i en tabel fra datakilden afholdt på VM
  • Tælles antallet af navne, som ovenfor, men at opdele navnet af mellemrum (dvs. fornavn, mellemnavn efternavn)
  • Gentagne denne proces 1.000 gange

Hvert job tog cirka 20 minutter at køre. På et tidspunkt åbnede jeg flere kopier af den arbejdstager VM på vinduerne bærbare computer, og så de arbejdspladser kontrolleres ud af hver af arbejdstageren IP-adresser. På dette punkt, jeg også bekræftet, at replikationen automatisk genstartes.

Forlader den bærbare computer i tomgang resulterede i en arbejdstager begynder at behandle job fra jobbet Control Server. Når genoptage laptop brug var der en forsinkelse på ca 30-60 sekunder, dette er en rimelig mængde af tid og personale vil skulle gøres opmærksom på, at deres maskine kan holde pause for en kort stund, når du returnerer til maskinen. Nyere maskiner kan ikke have en pause på denne lange. Fordelen ved mængden af ​​behandlingen udføres af disse maskiner i tomgang perioder vil mere end opveje ansatte med at vente en kort periode (f.eks 1 minut) ankommer til deres maskiner af en morgen (jeg ofte vente længere, at dette for en Windows Defender opdateringen kan finde sted), hvis de blev gjort opmærksomme på denne (nyttige tid til at snuppe en morgenkaffe!).

Alt i alt føler jeg overbevist om, at jeg har vist de teknologier, der kunne bruges til at oprette et sådant system. Jeg har vist, at et sådant system virker på en (meget) lille målestok og med nogle mere eksperimenterende kunne skaleres op udnytte ressourcerne i et kontor maskiner. Hvis jeg ikke kommer til det punkt at gøre dette ville jeg være meget interesseret i at vide / se, når nogen andre gør.

Konklusioner / Evaluering

Det næste oplagte skridt ville være til rent faktisk at få en virkelig verden eksempel og begynde at implementere et system som dette i et kontormiljø, og se hvad der sker. At bede en virksomhed at forpligte sig til dette uden et spor brændende virksomhed at bevise den teknologi og effektivitet kan være lidt vanskeligt. Grid / Distributed computing er meget populær, er nogle kredse og har nogle store applikationer (BIONC, SETI @ Home, Folding @ Home, osv.). Jeg har dog ikke finde en mindre målestok og enkelt system som dette i mine søgninger, som kunne blive rullet ud i et kontormiljø.

Jeg har oprettet en dybest set gratis system ved hjælp af primært open source-software og værktøjer til rådighed i næsten ethvert kontor. De teknologier var dybest set demonstreret og vise at udføre og arbejde som forventet. Forhåbentlig har jeg vise, at der med ikke meget arbejde, og med en meget enkel opsætning, du kan installere et kontor grid computing-system, der er kraftfuld, billig, A og skalerbar alle på samme tid.

Når et system er oppe at køre er der næsten ingen ende på mængden af ​​tilpasning og forbedringer, du kan gøre. For eksempel statistik / benchmarking kan nemt tilføjes viser værdien af ​​et sådant system hver dag. Nye maskiner kan tilføjes hurtigt og nemt, når de ankommer med opgradering af eksisterende hardware styrke din processorkraft.

Jeg håber du har nydt at læse denne serie af artikler og givet dig stof til eftertanke om at drive et kontor skinnesystem. Løsningen præsenteres her, vil ikke nødvendigvis arbejde i alle situationer, men bør kunne tilpasses, så du kan få dine data forarbejdning foretaget ved hjælp af din egen løsning.

Du er velkommen til at sende mig eventuelle kommentarer, rettelser eller forbedringer, og jeg vil gøre mit bedste for at holde denne artikel opdateret til at matche.

Zend Framework: Fundamentals - Anmeldelse

Ved , lørdag 28 november 2009 22:42

My employer recently paid for a group of us developers to take the Zend Framework: Fundamentals course, here I'll summarise my thoughts and opinions on the course for others. For those looking to save time, here's my summary:

For developers who haven't had time to look at the Zend Framework this course (Zend Framework: Fundamentals) offers a good overall picture of the framework introducing you to the key areas and giving enough information in order to continue. For those who have spent time looking at the framework and have followed one or two tutorials this course does not offer much beyond.

Background

I've been a PHP developer for around 5-6 years, and have started working with the Zend Framework on a component basis over the last 6 months. I've developed and/or been a developer on a couple of small Zend Framework MVC sites. I'll be honest, I haven't had a huge amount of exposure to other frameworks from a coding point of view but have spent several hours researching the project websites and evaluating them. The framework and the community surrounding Zend Framework it is quite exciting and there seem to be huge possibilities in where its going.

About the Course

The course is delivered over 9 two hour webex sessions (with a 10-minute break in the middle). The time is spent going through a set of slides provided by Zend with discussion at any time. You can use a microphone to talk to the instructor, but to be honest I didn't see anyone use anything more than the chat window. In addition a VMWare Ubuntu machine is provided that has example code and projects set up an a trial version of Zend Studio. The course leader talks to attendees either over an integrated VoIP solution, or you can dial in using one of the many worldwide dial in numbers.

During the course the material consists of a brief overview of the Framework and the MVC pattern before heading into a sample guestbook application. The discussion demonstrated bootstrapping, Zend_Application, Db Tables, Database access, Forms, Filtering, ACL, Validating, etc, etc. Basically covering all the topics you'd require to get a basic site up an running all the time giving you the tools to go and get more advanced in the framework (although this did amount to 'See the website' much of the time).

Time is given to code up some examples, and to develop the 'guestbook' and simple 'wiki' application. Personally I felt that providing the code or each app and then asking us to develop what was essentially a copy alongside didn't really provide a good learning experience. I would have preferred to develop an application similar, but not identical. to the example application with the benefit of having a guide to refer to. Alternatively building the applications from scratch with the demonstrator would of possibly led to more questions about why and how , thus giving a better understanding of the framework, after all you can look up specifics after the course.

The last lecture consisted of working on the wiki application with help/guidance from the instructor. After the course feedback was taken, it was emphasised several times through the course that Zend takes feedback very seriously, in fact apparently our version of the course was quite new. Some of the other developers in the company will be taking the course soon so it will be interesting to see if this has happened.

Kurset Stilen var uformelt, tilladt for feedback og samarbejde mellem deltagere og instruktør. Kurset leder var venlige, ubureaukratiske (e-mail adresser er blevet delt i spørgsmål), og mens hans præsentation fra slides var lidt usikker syntes fuldt ud kompetente inden for rammerne. Han var tydeligvis en person, der brugte rammer på regelmæssig basis i stedet for nogen, der er oplært til at undervise i kurset, kunne jeg godt lide den "virkelige verden erfaring i den henseende.

Samlet Feeling

På nogle måder fandt jeg selvfølgelig et spild af tid, i andre var det meget handy. Forhåbentlig får jeg mine grunde går tydeligt igennem, og måske give nogle stof til eftertanke eller nyttig feedback (at kende mig, det er usandsynligt!).

For mig dette kursus var rettet mod et for lavt niveau. At have gået gennem quickstart guide, skal du læse Rob Allens Zend Framework i aktion, og arbejdede med de rammer lidt jeg fik ikke rigtig noget for meget. Jeg ville i kunne lide kurset at hente fra slutningen af ​​QuickStart og udvikle flere færdigheder.

That said, the course title does clearly state “Zend Framework: Fundamentals ” and in that aspect the course achieves what it sets out to do. Other members of the development team that haven't spent the time looking into the framework finished each session with enthusiasm and asked questions which was really nice to see.

All was not lost, it was good to spend time confirming the basic details of the framework and get to ask a couple of questions in areas where I wasn't 100%. It was also time that I got to sit down each day and think about coding using the framework and future projects, something I wouldn't of been able to do otherwise (can you imagine your company agreeing to that? :) ). Last but not least you also get a nice certificate from Zend to say that you attended the course (albeit by email).

Zend Framework Certification

This was one question that kept coming to mind during the course, would it prepare me for the certification? The quick, easy is a resounding No . The course instructor was quite clear on that with the additional advice that for the certification you should really be using the framework on a day to day basis and feel very comfortable and confident in its usage and methodologies.

Resumé

Given everything I've written above, I'll summarise everything in two easy bullet points:

  • New to Zend Framework: This course does exactly what you'd expect, it gives you a nice introduction to the framework and a good grounding on the basics from which you can build. The course seems to generate interest and enthusiasm for the framework amongst developers.
  • Used the Zend Framework: While it was nice to shore up some of the very basics I felt the time, effort, and funds to take the course could of been better spent elsewhere. It will be nice to see Zend create a new higher level course to take developers to the next level – at least to the standard of certification and beyond. For that I would sign up immediately.

Html Table Generating Class (HtmlTable.php)

By , Tuesday 5th May 2009 9:11 pm

I required to generate a HTML table from PHP data for a project that I was working on. Unfortunately after a bit of Googling I couldn't really find anything that was suitable so I decided to create my own.

I realise that this may not be the best table generating class ever and there's probably a few bugs still in it, but I'd prefer to share and if anyone wants a better version I'll look into it :) I originally wanted to create a table built up of seperate objects eg cell object, row object (built up of cell objects), but I realised the overhead on this would be HUGE! So I've gone back to an array setup.

The class will calculate the maximum number of columns used in the header, footer, or body and write out that number of columns. Headers, Footers, and the Caption are optional. Attributes are made up of an array where the key is the attribute name and the value is the attribute value. Attributes are applied to table tag (on table creation – class initialisation), table rows (array[row][attribute]), and table cells (array[row][column][attribute]) this applies for headers, footers, and the table body.

Example

I always find the best way to look at something is to use an example so here we go:

$table = new HtmlTable( array('class' =>'sortable',
                'style' => 'width: 550px;'));
$header[0][0]['content'] = 'ID';
$header[0][1]['content'] = 'Title';
$header[0][2]['content'] = 'Date';
$header[0][3]['content'] = 'Site';

$table->addHeader($header);
$i = 0;
foreach ($newsList AS $newsItem) {
$itemLink = "{$newsItem['title']}";
$tableBody[$i] = array(0 => array('content' => $newsItem['id'],
'attributes' => array('style' => 'font-weight: bold;')),
1 => array('content' => $itemLink),
2 => array('content' => $newsItem['date_posted']),
3 => array('content' => $newsItem['site']) );
$i++;
}
$table->addBody($tableBody);
echo $table->drawTable();
ID Titel Dato Websted
9 News 1 2009-04-04 10:40:00 site name
10 News 2 2009-04-04 12:44:11 site name

And the HTML looks like this:

 < table  class =  "sortable" style =  "width: 550px;" >
< thead >
	< tr    >
		< th   >ID</ th > 
 < th   >Title</ th >
		< th   >Date</ th >
		< th   >Site</ th >
</ tr >
</ thead >
< tbody >
	< tr    >
		< td  style =  "font-weight: bold;" >9</ td > 
		 <Td   >News 1</ td > < td   >2009-04-04 10:40:00</ td > < td   >site name</ td > </ tr > < tr   > < td style = "font-weight: bold;" >10</ td > < td   >News 2</ td > 
 < td   >2009-04-04 12:40:00</ td >
		< td   >site name</ td >
</ tr > 
 </ tbody >
</ table > 

Code

HtmlTable.php
If you have any comments please make them below, it would be great to hear some. If you end up using it also let me know and I'll extend it in the future :)

Log to DB using Zend Framework

By , Tuesday 14th April 2009 9:06 pm

I've managed to get a site up and running with the Zend Framework , everything is logging nicely to FireBug/FirePHP so next step was to log to the DB. I also wanted to log some additional information using the framework such as user agent, date and time, get and post variables. So to extend the manual a little here's what I did:

// Set up logging to DB
$db = Zend_Registry ::get('dbAdapters');
$db = $db['general'];

$columnMapping = array( 'priority' => 'priority',
'message' => 'message',
'datetime' => 'timestamp',
'user_agent'=> 'user_agent',
'get_vars' => 'get_vars',
'post_vars' => 'post_vars',
'site' => 'site'
);

$writerDb = new Zend_Log_Writer_Db($db, 'error_logging', $columnMapping);
$logger = new Zend_Log($writerDb);

$logger->setEventItem('datetime',date('Ymd H:i:s'));
$logger->setEventItem('user_agent',$_SERVER['HTTP_USER_AGENT']);
$logger->setEventItem('get_vars',print_r($_GET,true));
$logger->setEventItem('post_vars',print_r($_POST,true));
$logger->setEventItem('site',SITE);

$logger->info('Informational message');

Where the array keys in $columnMapping are my column names. 'Priority' and 'message' are understood by Zend_Log_Writers but the additional fields were added to give me some additional information.

Obviously this assumes that you have logging working using one of the other writers first :)

UK Names Directory and Facebook Application

By , Friday 10th April 2009 9:33 am

One of the fun things I've been involved in whilst working for Tracesmart is the names directory . Basically we took our huge information database and pulled out a big pile of stats about various names.

The process is all one big SEO effort in order to draw more traffic to the site, but it also provides some interesting information and name statistics.

Here's an example for my name Lloyd Watkin , or I suppose more correctly Steven Watkin . Take a minute to look up your name on the Tracesmart site, might be interesting ;)

We've also got names statistics data on the names directory page which tells you what names have been searched and how recently. Its quite interesting to see famous people's names fly up the stats when they appear in the news. A recent example is that of Liam Neeson who's wife died from a skiing accident recently, although obviously people aren't quite right on the spelling (hence the huge numbers of hits on this name) — Liam Nilson .

Facebook Application

Once the names directory was created we set about creating a facebook application which we duely named ' My Name '. The facebook application is an extension of the names directory and provides some additional statistics. In order to add the names directory to your facebook account please visit:

http://apps.facebook.com/my-name/

Disabled Form Fields are not submitted…

By , Thursday 4th September 2008 11:01 am

As a quick note, as part of the ongoing estate agency software project I've gone back to editing date entry within the system. Now instead of allowing users to enter any old bit of text I've switched over to a Javascript date/time picker (for the short term) that allows user to 'pick' and date and time from a pop up window.

Now, for my old system the picker would pop up when the user clicked on the input field . This however would allow the user to ignore the text field and still go and type any old thing into the field. This wasn't ideal. So my solution was to ' disable ' the form field and put a span next to it with an onclick event calling the date/time picker. This meant that the user was almost forced into using the nice date/time picker so dates would go in with the correct format (although that still has to be validated!).

So I started passing my nicely formatted date-time(s) through the form and picking trying to pick them up with PHP 's $_GET or $_POST variables. Unfortunately'disabled' fields are not passed through form submissions This was very annoying. The solution was to enable the input element using javascript when the form was submitted using the onsubmit event.

This meant that the form data was passed through as required and was nicely formatted ready for validation…Â

Search Array Keys and Return Matches

By , Wednesday 13th August 2008 4:26 pm

I've had the need to search through an array and return the elements that have keys that match a search term. So I thought I'd share.

'W hy would I need this?' would probably be the first question you'd ask, well if I wanted to search through an array for all the elements that related to the dimensions of an item then I could pull out the appropriate keys by using this little function:

 <? function searchArrayKey($array,$search) {  $search = strtolower($search);  if (is_array($array))  {   foreach ($array as $key => $data)   {    if (strpos(strtolower($key),$search) === 0) { $returnArray[$key] = $data; }   }   return $returnArray;  } else  { // User hasn't subimitted an array...   return false;  } } ?> 

So for example if I wanted to search an array of item data for the dimension data then I could do the following (and print to screen presumably):

 $dimensions = searchArrayKeys($itemArray,'dimension'); 

Which would return something like:

 print_r($dimensions); Array ( [dimension_height] => 20 [dimension_width] => 30 [dimension_depth] => 40 ) 

Custom php.ini with Plesk

By , Wednesday 13th August 2008 3:53 pm

We have a dedicated server with ukFast  on which we run a number of domains that exist on virtual servers running under Plesk . Anyway, on most of my domains I want to hide away warnings and for security keep errors to the log files, however on some of my domains (such as those I'm developing on) I want to show every little nasty warning and error that appears.

If I edit my PHP .INI”>php.ini this affects each and every domain on the server, not a good idea especially when several of the sites are fully live versions  So in order to get around this you need to put a file called vhosts.conf in your conf directory, for example, /var/www/vhosts/<my_domain>/conf/vhost.conf .

Once you've added your additional code, again for example I included,

 php_value error_reporting E_ALL php_value display_errors On 

followed by running the following command (this reconfigures all of your domains its just quicker lazier than typing in the domain name ,

 # /usr/local/psa/admin/bin/websrvmng -a 

If you're feeling a bit nimble then you can always type out the full version which is,

 # /usr/local/psa/admin/sbin/websrvmng -u --vhost-name=<my_domain> 

After this command if you look to httpd.include file, will see that your httpd.include will have an include line for your vhost.conf, something like this:

 Include /srv/www/vhosts/domain.com/conf/vhost.conf 












Panorama Theme by Themocracy

6 besøgende online nu
4 guests, 2 bots, 0 members
Max visitors today: 8 at 12:00 am UTC
This month: 17 at 01-09-2011 11:27 pm UTC
This year: 130 at 28-03-2011 10:40 pm UTC
All time: 130 at 28-03-2011 10:40 pm UTC