HTTP/1.0 200 OK Accept-Ranges: none Content-Location: http://www.evilprofessor.co.uk/category/internet/articles/page/2/ Content-Type: text/html; charset=UTF-8 Date: Fri, 19 Aug 2011 22:00:09 GMT X-Frame-Options: ALLOWALL Set-Cookie: PREF=ID=eb6495492f9548bc:TM=1313791209:LM=1313791209:S=cbsm06DbFtR-cqDI; expires=Sun, 18-Aug-2013 22:00:09 GMT; path=/; domain=translate.googleusercontent.com X-Content-Type-Options: nosniff Server: HTTP server (unknown) Cache-Control: private X-XSS-Protection: 1; mode=block Expires: Fri, 19 Aug 2011 22:00:09 GMT Evilprofessor.co.uk »Artikler

Kategori: Artikler

Kontor Grid Computing bruker Virtual miljøer - Del 1

Ved , fredag ​​4 desember 2009 11:23

Innledning

Jeg jobber i et selskap hvor vi kjøre mange satsvise jobber behandling millioner av poster av data hver dag, og jeg har tenkt nylig om alle maskinene som sitter rundt hver eneste dag gjør ingenting for flere timer. Ville det ikke være bra hvis vi kunne bruke disse maskinene til å styrke behandlingskapasiteten til våre systemer? I dette settet av artikler jeg skal se på de potensielle fordelene ved å ansette et kontor rutenett med virtualiserte miljøer.

Som en PHP utvikler jeg kommer til å bruke verktøy som jeg bruker hver dag nemlig, Linux, MySQL , PHP, VirtualBox og Subversion (SVN). Men jeg håper denne guiden vil tilpasse seg andre språk og teknologier like bra.

Løsningen jeg gir blir svært løst basert på den type behandling vi hadde behov for å oppnå men dette kan ikke være sant gjennom hele artikkelen som jeg skal forandre ting for enkelhet, eller for å produsere mer interessant bruksscenarioer.

Disse virtualiserte miljøer som vil kjøre på windows maskiner siden dette er hva de fleste av kontorer løpe. Behandlingen at kontormaskiner ikke skulle forstyrre personalet bruker disse maskinene, bør kreve noe vedlikehold på maskinen, og være lett deployerbare til nye maskiner som de blir tilgjengelige. I tillegg bør nye virtuelle maskiner ikke krever noen ekstra konfigurasjonen som dette i stor grad reduserer skalerbarhet og lette der bæresystemet kan forlenges.

Hvorfor Distribuere et Office Computing Grid?

For det første du tenker kanskje, hvorfor ikke bare bruke en cloud computing ressurs som Amazons EC2-plattform ? Vel grunnene kan være flere, for eksempel:

  • Du vil ikke overlate visse data til en cloud computing miljø
  • Du kan ikke sette visse data i en cloud computing miljø for juridiske årsaker (f.eks data forlater landet), potensielt for juridiske årsaker, f.eks NHS poster.
  • Du ønsker å holde processing units nært og har full kontroll over maskinvaren også
  • Du har ikke prosjektmidlene til å kjøre sky tilfeller
  • Kontoret ikke har en tilknytning til internett og derfor det ikke mulig å bruke en sky ressurs
  • Du liker ikke regn, skyer foreslår regn, derfor holde god avstand

Jeg er sikker på at listen kunne fortsette, men jeg tror det er nok for nå.

Fordeler med en Office Computing Grid

Vel, lar gjøre litt matte (og i ekte fysikk stil lar gjøre noen feiende forutsetninger). Tenk deg at du har store beefy prosessering server som kjører 100 arbeidsplasser per dag. På kontoret har du 50 maskiner som er idle 16 timer i døgnet, hver av disse maskinene er 10% like kraftig som beefy prosessering sever. (Alle resultatene her er avrundet for å undervurdere ytelse økning).

Så kan en maskin * 10% strøm * 2 / 3 gang = 0,067 dvs 1 desktop behandling i idle tid prosessen seks fulle jobber per dag.

Hvis du nå skalere dette opp det tar 15 idle stasjonære å behandle så mange arbeidsplasser per dag som din viktigste behandlingen server gjør.

Så i vår late kontoret til 50 maskiner kunne vi øke vår prosesseringskraft fra en server opp til 4 full prosessering servere, eller vi kan behandle 400 arbeidsplasser per dag i stedet for 100.

Legg merke, for ingen investering i ny maskinvare firmaet har nettopp økt sin batch prosesseringskapasitet 4 ganger! Potensielt du kommer til å øke strømforbruket, men fra de fleste kontormiljøer jeg har vært i maskiner er generelt igjen på natten uansett, så du kan se dette som et grønt initiativ.

Andre fordeler også bety at investeringer i ny (eller oppdatert) behandling servere kan bli forsinket hvis kontormaskiner er tilstrekkelige og at når du forbedre ytelsen i kontormaskiner kontoret grid blir kraftigere automatisk.

Technologies

Hva du trenger? (Eller mer korrekt hva gjorde jeg bruker):

  • Idle kontormaskiner (i mitt tilfelle en reserve gamle windows XP laptop)
  • VirtualBox (eller et annet virtualisering klientprogramvaren)
  • En virtuell maskin med PHP, mySQL running kjører et kutt ned OS, jeg ringer disse mine Limp servere:)
  • Jobs til å kjøre
  • Job server (kan være en annen virtuell maskin sted)

Typiske Jobs

Hvilke typer jobber som dette systemet er designet for å kjøre er som følger:

  • System mottar en liste med data hvorpå vi trenger for å matche og returnere resultater
  • Matching innebærer å sjekke / søker flere (ganske statisk) datakilder
  • Resultater fra datakilder kan kreve ytterligere validering, sammenslåing, kontroll av flere datakilder i respons til resultater
  • Data er tilbake med samsvarende poster, fullt validert og bearbeidet
  • Hver post i en jobb er uavhengig av resten

Så i utgangspunktet vi ser på kjører jobber som krever en blanding av database oppslag og noen tallknusing, et ganske typisk scenario i et bedriftsmiljø.

Grid-løsninger er ikke bare en fordel for behandling jobber av denne typen. I utgangspunktet kan enhver prosess som kan deles inn i selvstendige enheter kjøres parallelt. Se denne Wikipedia for eksempler og mer informasjon: Grid Computing , men et par kjente eksempler er Seti @ Home og BIONC . Det er rammeverk for å kjøre databehandling rutenett, og disse er vel verdt å se inn.

Hva vil vi oppnå?

Ved slutten av disse artiklene håper jeg å vise at distribusjon av et kontor grid trenger ikke være veldig dyrt eller tidkrevende. Jeg kommer til å diskutere:

  • Sette opp jobben styresystem, jobb konfigurasjon
  • Opprette en passende behandling virtuell maskin
  • Hvordan sette opp systemet på en windows maskin
  • Sikre du bruker den nyeste kode og data
  • Distribusjon og benchmarking
  • Ser framover

Jeg vil bli bygget (ok jeg bygget, da skrev dette) et eksempel program for å teste konsepter på en lokal maskin med Windows XP og min "GridMachine" virtuell maskin. Min jobb kontroll serveren vil være min viktigste maskin som kjører Fedora 11 .

Dette er på ingen måte ment å demonstrere en fullt fungerende robust system, betydde det mer av en demonstrasjon og diskutere viser at disse tingene kan oppnås i en rimelig kort tid, og ved liten kostnad. Kan du gjerne sende meg noen kommentarer, rettelser eller forbedringer og jeg skal gjøre mitt beste for å holde denne artikkelen oppdatert å matche.

Neste gang

I del 2 vil jeg starte med å se på jobben kontrollsystemet, og se på hvordan jobbene skal være konfigurert for å oppnå størst mengde behandling samtidig sikre at hver jobb blir behandlet uten å lykkes.

Kontor Grid Computing bruker Virtual miljøer - Del 2

Ved , fredag ​​4 desember 2009 11:23

Innledning

Jeg jobber i et selskap hvor vi kjøre mange satsvise jobber behandling millioner av poster av data hver dag, og jeg har tenkt nylig om alle maskinene som sitter rundt hver eneste dag gjør ingenting for flere timer. Ville det ikke være bra hvis vi kunne bruke disse maskinene til å styrke behandlingskapasiteten til våre systemer? I dette settet av artikler jeg skal se på de potensielle fordelene ved å ansette et kontor rutenett med virtualiserte miljøer.

I del 1 ga jeg en oversikt over systemet og teknologiene jeg skal bruke så vel som diskutert noen av de mulige årsakene til at du ønsker å opprette et kontor rutenett.

Job Kontroll

Hvis du skal kjøre jobber så du kommer til å trenge noen måte å håndtere dem. Din jobb kontroll system (på jobben din server) må være veldig godt gjennomtenkt før du selv forsøker å kjøre et kontor rutenett. Så det første, hva er oppgaver for en jobb kontroll system:

  • Del ut jobbene på forespørsel fra arbeiderne
  • Fortell arbeidere hvilken type jobber å kjøre
  • Spor jobber
  • Sørg for at jobbene er kun kjørt en gang
  • Gi jobbdata til arbeiderne, eller i det minste fortelle dem hvor de skal få det

Systemet må også være utvidbart, en løsning som fungerer for nå i et enkelt tilfelle kan utvides til å kjøre flere typer jobber som bedriften ser verdien i et rutenett løsning. For eksempel kan jobber gain prioriteringer, mer enn én type jobb kan foreligge (dvs. flere code baser), til slutt kan du også kjøre flere forskjellige arbeider maskiner som er optimalisert for hver type jobb (selv om det beveger seg bort fra den "generiske arbeideren 'idé). Prøver alltid å tenke på fremtiden når utvikle systemer, kan et kortsiktig syn føre til lengre sikt frustrasjon og økt utvikling tid.

Job Server

Vi kommer til å trenge et sted å kontrollere vår jobber fra, bør dette være den eneste systemet i nettet ditt som har en fast resource locator, være at en IP-adresse, vertsnavn, URL (bruk av interne DNS), osv. Dette er fordi behov for arbeiderne å vite hvor du skal lete etter jobber, arbeidere trenger å finne den jobben kontrollsystemet (ikke jobben kontrollsystemet finne arbeiderne).

Jobben serveren selv egentlig ikke har en komplisert oppgave (i et grunnleggende system hvertfall), det er behov for å lagre en liste over jobber, dele ut jobber, får resultater, og deretter lagre dem for senere henting. Hvordan disse delene (som "hand out jobber") er definert kan være svært grunnleggende. Senere kan vi utvide systemet til å inkludere et administrasjonsgrensesnitt for å legge til, redigere, slette, suspendere jobber, men dette er hinsides denne øvelsen.

Det er ingen grunn overhodet da at jobben din server ikke kunne være en virtuell maskin som kjører innenfor ditt viktigste behandlingen serveren forutsatt at det ikke tappe for mye ressurser fra det. Jobben server imidlertid ikke trenger høy tilgjengelighet, hvis det går ned på en fredag ​​kveld du kommer til å miste en hel helg med behandling, potensielt koste deg et par uker igjen av behandlingstid (i forhold til dine viktigste behandlingen server alene) . Det kan være lurt å vurdere å sette jobben din server på et lass balansert miljø for høy tilgjengelighet.

Basic Setup

Den grunnleggende oppsett for jobben vår server vil bestå av det jeg kaller en av mine halting servere (som er Li Nux, m ySql, P HP). Koden som kjører på thea arbeiderne faktisk vil finne ut hvilke jobber det kan kjøres ved å samhandle med med jobb styresystem databaser. Senere kunne vi lage en web-tjeneste og faktisk dele ut jobbene i stedet for at arbeiderne gjøre jobben selv, men for nå vil vi fortsette å bruke KISS prinsippet (Keep it Simple, Stupid!).

Så lar opprette tre mySQL tabeller å forholde seg til jobber. Disse vil bli `arbeidsplasser`, `jobRecords` og `jobResults`.

jobber tabellen Her Jeg bruker SQL Buddy en flott liten alternativ til phpMyAdmin bare fordi det enklere å installere på CentOS (for andre ser: 10 Great alternativer til phpMyAdmin )

Denne tabellen består av 5 enkle felt,

  • id: Entydig identifikasjon jobben
  • Navn: Kan være en klient referanse, eller en rekke andre identifikatorer
  • Status: Du må vite hvor jobben er på, f.eks
    • 0: Ikke startet
    • 1: Plukket opp
    • 2: Fullført
  • started_by: Hvem er begynte å gjøre jobben? Dette er ikke helt nødvendig, men er en fin å ha. Jeg vil foreslå sporing arbeiderne ved deres IP-adresse på nettverket ditt
  • started_at: Når begynte arbeideren starte jobben? Ved å spore jobber som ikke har fullført innen X tid vi vet at vi trenger å plukke opp jobben igjen og starte behandling av en annen arbeidstaker. Arbeiderne kunne stoppe behandlingen / go offline for en rekke årsaker, strømbrudd, crash, nettverk tap, etc.

Det er lett hvordan denne tabellen kan utvides med noen ekstra felter for å tillate statistikk sporing, en sluttid kolonne for å se hvor lang tid jobben tok, en teller for å se hvor mange arbeidere plukket opp jobben (selvsagt dette må en tendens til å 1), jobb prioritet, kan listen gå av og på. I mer kompliserte jobben scenarier vil det være mulig å angi hvor mye minne arbeidstakeren ville ha tilgang til (og derfor bare bruke egnet arbeidere), eller hva slags arbeideren skulle være nødvendig.

Lar legge til noen få eksempel jobber:

eksempel jobber

Den neste bordet igjen er ganske enkel å forstå, dette er vår jobb poster. De er knyttet til de viktigste jobbene tabellen etter en kolonne `jobs_id`. Den utgjør i denne tabellen svært mye avhenger av dataene du trenger for å levere til arbeiderne, kan lage et veldig enkelt eksempel der vi har fire kolonner:

  • id: ID av posten
  • navn: Person navn
  • Adresse: Person adresse
  • jobs_id: Jobben ID at denne posten er knyttet til

Den tredje og siste tabell består av en resultatside tabellen, har det mye den samme sminke som våre poster bord, og med tillegg av noen kolonner kan være en del av postene tabellen:

  • job_record_id: Link resultatet til jobben bordet
  • Resultatet: Resultatet data

... Og det er alt du trenger for jobb kontroll! (Riktignok på et veldig grunnleggende nivå) I mitt tilfelle er jeg pekte til et annet bord hvor mine data til prosessen var plassert, men dette kunne like gjerne vært en fil, parametere å kjøre simulering kode, you name it.

Velge en jobb

Som nevnt tidligere, vil arbeiderne gjøre jobben vår ledelse for oss for nå, så alt vi trenger for virkelig å gjøre er å finne en jobb som trenger behandling og få informasjon. Hvordan ville vi gjøre dette? Vel plukke jobben vår utvalgskriterier og lete etter jobber, i SQL gjorde jeg følgende:

  1. Ta noen jobber som ikke er merket som komplett, men fra arbeideren vår og nullstille dem (innbytter __ME__ med en identifikator, ville enkleste være IP-adresse):
      UPDATE `jobb` SET `status` = 0 HVOR `status` = 1 AND `started_by` = __ME__; 
  2. Ved hjelp av vår jobb seleksjonskriterier, velger du en jobb og fortelle kontrollsystem som denne arbeideren har å gjøre med det:
      UPDATE `jobb` SET `status` = 1, `started_by` = __ME__, `started_at` = NÅ () HVOR `status` = 0 eller
     (`Status` = 1 AND `started_at`> DATE_SUB (NÅ (), INTERVALL X HOUR)) ORDER BY `id` ASC; 

    Ved å ta tak i jobber som ikke har returnert resultater i X tid vi sikre at alle jobber kjøres i tilfelle en arbeidstaker å krasje eller gå AWOL.

  3. Neste tak i jobbene detaljer etterfulgt av postene selv:
      SELECT * FROM `jobb` HVOR `started_by` = __ME__ LIMIT 1;
     SELECT * FROM `job_records` HVOR `id` = __JOBID__; 

Ved ferdigstillelse av jobben vi sette inn våre resultat poster og mark jobben som fullført. Husk som jobber kan suspendere / gjenoppta når som helst la for noen robusthet i skriptet. Det kan være at oppgaven suspenderer halvveis gjennom oppdatering jobben kontrollsystem, så sjekker antall poster i en jobb og antall resultater lagres tilbake til jobben styresystem ville være et klokt trekk.

I tillegg, mens dette viser hvordan arbeidsplasser kan velges og styres fra en SQL-spørring ramme du bør virkelig være abstrahere jobben din kontroll, slik at hvis du velger å bytte til ved hjelp av en web service, en fil basert system, XML eller andre antall systemer det ikke vil påvirke koden over den.

Job Configuration

Den neste aspekt å vurdere er jobb størrelse og konfigurasjon. Ved å spille med jobben konfigurasjon kan vi slå en utmerket balanse mellom fart, prosess replikering, og pålitelighet. Ta et par Ofa scenarier:

  1. Jobber ta en dag hver for å kjøre: Dette betyr at arbeidstakere trenger 15 dager på å behandle hver jobb (husk 10% av kraften for 2/3rds av tiden). Dette er klart ikke en klok konfigurasjon, er jobben din størrelse altfor stort! Det ville ta minst dobbelt tid til å få en jobb behandlet bør den første arbeideren gå AWOL (tid for å plukke opp at det ikke har returnert et resultat pluss reprosessering tid). I en ideell ville du ha minst en hel jobb lett ryddet innen utgangen av hvert lang inaktiv periode, på den måten du beholde jobbene tikker over og i verste fall en jobb ville ta to dager å behandle bør først gå mangler.
  2. Jobs tar 1 minutt å kjøre: Dette betyr at arbeiderne tar ca 15 minutter å kjøre hver jobb. Mens dette kan i utgangspunktet virke perfekt, får du ytterligere arbeid behandling i løpet av lunsj, kaffepauser, møter, etc dette scenariet setter press på andre deler av systemet og innfører sine egne problemer. For eksempel det første oppsettet / behandlingstid forholdet kommer til å gå rett ned, derfor mister system effektivitet. Nettverket kommer til å være konstant streaming jobb informasjon til ulike arbeiderne frustrerende ansatte som er dong deres daglige arbeid. Du er også kommer til å legge mer press på jobben din behandling server som det har å dele ut masse små biter av arbeidet på en jevnlig basis. Til slutt, i denne situasjonen hvis jobben din server går ned du kommer til å skape et enormt tilbake logg over gjenstående arbeid mens større jobber kan for fortsatt behandling uvitende at jobben serveren opplevde vanskeligheter.

I realiteten vil det ikke være en ideell konfigurasjon for grid oppsett, avhenger mye av de tilgjengelige ressursene, typer jobb, jobb behandlingstid krav, nettverksmulighet, og så videre. Men noen retningslinjer vil være:

  • Størrelse jobbene slik at hver arbeidstaker kan komme gjennom minst 3-4 arbeidsplasser i en periode på 15 timer (den lengste sannsynligvis inaktiv periode)
  • Spill med jobben størrelse, slik at oppsett tid blir relativt ubetydelig i forhold til saksbehandlingstiden (med tanke på ovennevnte punkt).
  • Hvis en jobb ikke fullføre i det doble av tiden (kanskje mindre) du forventer det å fullføre den anta at dets gått AWOL og begynne å behandle den med en annen arbeidstaker. Dette betyr at du kanskje må vente opp til tre ganger normal lengde av en jobb for det å fullføre (muligens lengre hvis den påfølgende jobben feiler). Du ønsker kanskje å redusere denne tiden, men vær forsiktig med å redusere det altfor mye du kan begynne å duplisere behandling oppgaver på en jevnlig basis.
  • Jobs skal være uavhengig av eksterne krav så mye som mulig. Jobben server, for eksempel, skal kun bli kontaktet ved starten og slutten av hver eneste jobb.
  • Ikke mette nettverket ditt, vil dette ha to negative effekter, vil dagtid personalet finne bruker nettverket frustrerende og problemer kan oppleves med forbindelser timing ut et problem som bare vil bli verre etter hvert som du skalere rutenett.
  • Sikre arbeidsplasser kan kjøre på de ansatte. Dersom arbeidsplasser blir for minneintensive eller diskplass intensive arbeidsplasser vil starte avbryte og det eneste du vil merke en nedgang i antall arbeidsplasser behandlet med noen reell grunn til hvorfor.

Sende Resultater av en jobb

Når du sender resultatene av en jobb det er viktig å sjekke at resultatene ikke har blitt sendt inn av en annen arbeidstaker, særlig hvis den aktuelle arbeidstakeren har vært sovende i noen tid.

Når resultatene er sendt inn at antall resultater samsvarer med antall poster i jobben.

Som nevnt tidligere, og kan ikke være over understreket, bygge feiltoleranse inn jobbgjenfinning og resultater underkastelse. Arbeiderne kan (og mest sannsynlig vil) gå inn i hvilemodus på det mest ubeleilig ganger, og dette må tas hensyn til. Også en gang abstrahere bort resultatene innsending vil hjelpe dekke fremtidige endringer i jobben din kontrollsystem mye lettere å håndtere.

Oppsummering

I denne section har vi sett på hva en jobb kontroll server trenger å gjøre og hvordan du får en veldig grunnleggende system satt opp. Vi diskuterte hvordan man skal hente en jobb fra kontrollsystemet og hvordan de best kan konfigurere jobber for å få mest mulig vår på kontoret bæresystem. Til slutt, var et avsnitt eller to på sender resultater tilbake til jobben kontrollere serveren presenterte.

  • En jobb kontroll server administrerer jobber og sørger for at alt arbeid enheter er fullført
  • Ved å abstrahere din jobb å velge / resultater innsending kan vi endre teknologi for kontroll serveren uten mye problemer
  • Konfigurer jobber for å sikre at de kjøres raskt og effektivt uten å legge for mye press på nettverket infrastruktur, og uten å duplisere behandling oppgaver på en jevnlig basis.
  • Sørg for at du bygger feiltoleranse og feiling checking inn i rutiner, kan arbeiderne avbryte og fortsette og de mest upraktisk ganger. Husk å sjekke om resultater har allerede blitt sendt inn av en annen arbeidstaker.

Neste gang

I del 3 vil vi lage vår virtuelle behandling maskin og sette opp vår windows maskiner for å bli inaktiv tid arbeidere.

Kontor Grid Computing bruker virtuelle miljøer - Del 5

Ved , fredag ​​4 desember 2009 11:03

Innledning

Jeg jobber i et selskap hvor vi kjøre mange satsvise jobber behandling millioner av poster av data hver dag, og jeg har tenkt nylig om alle maskinene som sitter rundt hver eneste dag gjør ingenting for flere timer. Ville det ikke være bra hvis vi kunne bruke disse maskinene til å styrke behandlingskapasiteten til våre systemer? I dette settet av artikler jeg skal se på de potensielle fordelene ved å ansette et kontor rutenett med virtualiserte miljøer.

I Del 4 så vi på bruk av verktøy for å sikre at vi kjører den nyeste versjonen av koden og datakilder, slik at oppnådde resultater er alltid up-to-date med de nyeste forretningsinformasjon og logikk.

Pre-distribusjon

Før du distribuerer din grid-systemet hvis det er én ting du og en ting alene, det er benchmark din nåværende system! Uansett hva du fortelle kolleger om hvor mye ekstra arbeid systemet kommer til å gjøre med mindre du har tall å sikkerhetskopiere dette opp din garantier er ingenting. Så,

  • hvor mange poster kan du behandler for tiden? Per Day? Per Hour?
  • Hvor lang tid det vanligvis tar å snu en jobb?
  • Hvor mye mer kapasitet har du?

Det er også flere spørsmål:

  • Hvis din behandling server (eller en av dine behandling servere) går ned hvordan vil dette påvirke dine evner, vil du bli lammet?
  • Hvilke fordeler håper du / forventer å få fra et rutenett system?
  • Er dine kontormaskiner kan kjøre jobbene?
  • Er dine (eller du kan jobber bli konvertert) å arbeide i denne stilen av å kjøre?

Den siste store poenget er å ta deg tid på noen stor endring som dette. Oppdater prosessering kode for å arbeide med nye metoder, benchmark igjen. Muligens sette opp prosessering server for å kjøre en virtuell maskin, etter alle dine behandling serveren vil bare være en annen arbeidstaker (bare en veldig kraftig en relativt). La den nye prosessen å bosette seg.

Distribusjon

Mitt forslag ville være å stikke innom kontoret en helg utføre alle installasjoner og oppsett. Gjør dette rett før en fjorten dagers ferie og permisjon slik at andre stakkaren å håndtere konsekvensene ... kanskje ikke ...

Distribusjon for et system som dette trenger å være treg. Til tross for at det er relativt enkelt å sette opp dette systemet vil påvirke hele kontoret infrastruktur (godt digital en). For det første, rull ut til et par maskiner på en gang, overvåke nettverkstrafikk, hvordan arbeideren vertene utføre på en dag-til-dag basis. Du må kanskje endre jobben din konfigurasjon i svar på dine funn.

Når systemet har lagt seg med noen få maskiner (la oss si 10% av alle kontormaskiner, 5 dvs.) holde overvåking nettverkstrafikk og vertsmaskinen performance. Neste benchmark igjen, bør du nå være å behandle 33% flere arbeidsplasser enn din første benchmarks. Sjekk dette er slik, eller at du i alle fall i denne omtrentlig. Hvis ikke, undersøke hva som skjer før du går videre. Gjenta denne syklusen til du gjerne ha alle kontormaskiner kjører uten å drepe individuelle maskinens ytelse eller sliping nettverket ditt til en stillstand.

Til enhver tid holde benchmarking, selv etter at alle distribusjoner er gjort. Sjekk hvordan nye koden oppdateringer påvirke hastigheten på systemet ditt, sjekk alle arbeidere er rapportering og bearbeiding arbeidsplasser. Sakte (svært sakte) økning jobben din konfigurasjon for å få det beste ut av dine medarbeidere og nettverk.

Stopp!

Hva hvis du ønsker å stoppe arbeiderne fra å kjøre på noen gang? De er alle ute å kjøre, regenererende, og prøver sitt beste for å behandle data som sultne insekter. Svaret kan synes opplagt, men det er verdt å legge bare i etuiet oversett. Bare redigere dine behandling script med en exit (0) or die () eller en annen uttalelse til drepe din behandling jobb. En viktig grunn til at vi prøver alltid å oppdatere til den nyeste prosessering manuset før noen løp!

Demonstrasjon System

For å skrive dette settet med korte artikler jeg laget et veldig lite rutenett å demonstrere teknologier og metoder. Jeg leste masse artikler, tutorials, og brukt ulike verktøy for å sette opp og overvåke hva som foregikk. På ingen måte har jeg gått ut og mettet en hel kontor med trafikk og heller ikke har jeg hatt tilgang til en vanlig medarbeidere PC for å se hvordan vert resultatene ble påvirket.

Min demonstrasjon system var veldig ydmyk indeed. Jeg brukte min vanlige desktop satt opp som en jobb kontroll server. På denne hadde jeg installert mySQL server installert satt opp som en mester i replikering, PHP , Â og SVN knyttet gjennom apache (for tilgang via arbeideren VM).

Jeg så laget en CentOS arbeider maskin på VirtualBox på en 6 år gammel windows XP laptop. Jeg setup planlagte oppgaver som spesifisert etter kopiere VM på maskinen og la det gå.

Den virtuelle maskinen ble satt opp med PHP, subversion, og mySQL. Jeg sjekket ut en gren som heter 'arbeideren' fra jobben min kontroll servere depot og gjorde at det kunne bli oppdatert ved hjelp av 'svn update'. Neste jeg setup mySQL som en slave og sjekket at data ble Replikere fra mySQL på jobben kontroll serveren ned til arbeideren VM. Etter alt dette oppsettet jeg bash script og cron jobb.

Min behandling manuset i utgangspunktet gikk langs linjene av dette (svært enkle ting):

  • Les i navnefeltet
  • Telte antall lignende navn i en tabell fra datakilden holdt på VM
  • Telte antall navn som ovenfor, men splitting navnet med mellomrom (dvs. fornavn, mellomnavn og etternavn)
  • Gjentatte denne prosessen 1000 ganger

Hver jobb tok omtrent 20 minutter å kjøre. På et tidspunkt åpnet jeg flere eksemplarer av arbeideren VM på windows laptop og så jobber sjekkes ut av hver av arbeidstakerens IP-adresser. På dette punktet jeg også bekreftet at replikering automatisk startes på nytt.

Leaving the laptop gå på tomgang resulterte i en arbeidstaker begynner å behandle jobber fra jobben kontroll server. Når du gjenopptar laptop-bruk var det en forsinkelse på ca 30-60 sekunder, er dette en god del tid og personale ville trenge å bli gjort oppmerksom på at deres maskin kan pause for en kort stund når tilbake til maskinen. Nyere maskiner kan ikke ha en pause på denne lange. Fordelen med mengden av behandlingen utføres av disse maskinene under tomgang perioder ville mer enn oppveie ansatte å måtte vente en kort periode (si 1 minutt) på å komme fram til sine maskiner av en morgen (jeg ofte vente lenger på at dette for en Windows Defender Oppdateringen skal skje) forutsatt at de ble gjort oppmerksom på dette (nyttig tide å ta en morgenkaffe!).

Overall Jeg føler meg trygg på at jeg har vist det teknologier som kan brukes til å lage et slikt system. Jeg har vist at et slikt system fungerer på en (veldig) liten skala, og med litt mer eksperimentering kunne skaleres opp utnytte ressursene i en kontorets maskiner. Hvis jeg ikke komme til poenget å gjøre dette ville jeg være veldig interessert i å vite / se når noen andre gjør.

Konklusjoner / Evaluation

Den neste opplagte steget ville være å faktisk få en virkelig verden eksempel og begynne å ta i bruk et system som dette i et kontorlandskap og se hva som skjer. Spør en bedrift å forplikte seg til dette uten en sti flammende selskapet å bevise teknologi og effektiviteten kan være litt vanskelig. Grid / Distribuert databehandling er svært populært er enkelte kretser og har noen store programmer (BIONC, SETI @ Home, Folding @ Home, etc). Jeg hadde imidlertid ikke finne en mindre skala og enkelt system som dette i søkene mine som kunne rulles ut i et kontormiljø.

Jeg laget en i utgangspunktet gratis system som bruker det meste åpen kildekode programvare og verktøy tilgjengelig i nesten alle kontor. Teknologiene var i utgangspunktet vist og viser til å utføre og fungerer som forventet. Forhåpentligvis har jeg vise at med ikke mye arbeid og med et svært enkelt oppsett kan du distribuere et kontor grid computing system som er kraftig, billig, Â og skalerbart alle samtidig.

Når et system er oppe og kjører er det nesten ingen ende på hvor mye tilpasning og forbedringer du kan gjøre. For eksempel statistikk / benchmarking kan enkelt legges viser verdien av et slikt system hver dag. Nye maskiner kan legges raskt og enkelt som, og når de kommer med oppgraderinger til eksisterende maskinvare styrke din prosessorkraft.

Jeg håper du likte å lese denne serien av artikler og gitt deg mat for tanken på å drive et kontor bæresystem. Løsningen som presenteres her vil ikke nødvendigvis fungere i alle situasjoner, men bør kunne tilpasses slik at du kan få databehandlingen gjøres ved hjelp av din egen løsning.

Kan du gjerne sende meg noen kommentarer, rettelser eller forbedringer og jeg skal gjøre mitt beste for å holde denne artikkelen oppdatert å matche.

Zend Framework: Fundamentals - gjennomgang

Ved , lørdag 28 november 2009 22:42

Min arbeidsgiver nylig betalt for en gruppe av oss utviklere til å ta Zend Framework: Fundamentals selvfølgelig, her skal jeg oppsummere mine tanker og meninger på kurs for andre. For de som ønsker å spare tid, her er min oppsummering:

For utviklere som ikke har hatt tid til å se på Zend Framework dette kurset (Zend Framework: Fundamentals) tilbyr et godt helhetlig bilde av rammeverket introdusere deg til sentrale områder og gi nok informasjon for å fortsette. For de som har brukt tid på å se på rammene og har fulgt ett eller to tutorials dette kurset ikke tilbyr mye utover.

Bakgrunn

Jeg har vært en PHP utvikler for rundt 5-6 år, og har startet arbeidet med Zend Framework på en komponent basis i løpet av de siste 6 månedene. Jeg har utviklet og / eller vært en utvikler på et par små Zend Framework MVC sites. Jeg skal være ærlig, jeg har ikke hatt en enorm mengde eksponering for andre rammeverk fra et koding synspunkt, men har brukt flere timer å forske på prosjektet nettsteder og vurdere them. Rammeverket og samfunnet rundt Zend Framework det er ganske spennende, og det synes å være store muligheter der de går.

Om kurset

Kurset er levert over 9 to timers WebEx økter (med en 10-minutters pause i midten). Den tid går gjennom et sett av lysbilder fra Zend med diskusjon når som helst. Du kan bruke en mikrofon til å snakke med instruktøren, men for å være ærlig jeg ikke se noen bruke noe mer enn chattevinduet. I tillegg er en VMWare Ubuntu maskin er forutsatt som har eksempel-kode og prosjekter satt opp en en prøveversjon av Zend Studio. Kurset leder snakker til deltakerne enten over en integrert VoIP-løsning, eller du kan ringe i å bruke en av de mange verdensomspennende ringe inn tall.

I løpet av materialet består av en kort oversikt over Framework og MVC mønsteret før du begir deg inn i en prøve gjestebok søknad. Diskusjonen viste bootstrapping, Zend_Application, Db Tabeller, databasetilgang, Skjemaer Filtering, ACL, Validating, etc, etc. I utgangspunktet dekker alle emnene du vil kreve å få en grunnleggende side opp en kjører hele tiden gir deg verktøy til å gå og få mer avanserte i rammen (selv om dette gjorde beløpet til "Se nettsiden" mye av tiden).

Tid gis til å kode opp noen eksempler, og å utvikle "gjestebok" og enkle 'wiki' søknad. Personlig følte jeg at det å tilby koden eller hver app og deretter be oss om å utvikle det i hovedsak var en kopi sammen egentlig ikke gir en god erfaring. Jeg ville ha foretrukket å utvikle et program lignende, men ikke identiske. til eksemplet søknaden med fordelen av å ha en guide å referere til. Alternativt bygge søknader fra scratch med demonstrator ville av muligens førte til flere spørsmål om hvorfor og hvordan, og dermed gi en bedre forståelse av rammeverket, tross alt kan du slå opp detaljene etter kurset.

Den siste forelesningen bestod av arbeider på wikien søknad med hjelp / veiledning fra instruktør. Etter kurset tilbakemeldinger ble tatt, ble det understreket flere ganger gjennom kurset som Zend tar tilbakemeldingene svært alvorlig, faktisk tilsynelatende vår versjon av kurset var ganske ny. Noen av de andre utviklerne i selskapet vil ta kurset snart så det vil være interessant å se om dette har skjedd.

Kurset stilen var uformell, tillatt for tilbakemeldinger og samarbeid mellom deltakere og instruktør. Kurset leder var vennlig, imøtekommende (e-postadresser ble delt for spørsmål), og mens hans presentasjon fra lysbildene var litt vaklende virket fullt kompetente i rammeverket. Han var tydelig noen som brukte rammeverket på en jevnlig basis fremfor noen som er opplært til å undervise i kurset, jeg likte den "virkelige verden" erfaring i så måte.

Overall Feeling

På noen måter fant jeg selvfølgelig en bortkastet tid, i andre var det veldig hendig. Forhåpentligvis får jeg mine grunner tvers tydelig, og kanskje gi noen tankevekkere eller nyttige tilbakemeldinger (kjenne meg er dette usannsynlig!).

For meg selv dette kurset var rettet mot et for lavt nivå. Etter å ha gått gjennom QuickStart guide, les Rob Allen Zend Framework in Action, og jobbet med rammene litt jeg egentlig ikke få noe for mye. Jeg ville av likte selvsagt å plukke opp fra slutten av QuickStart og utvikle flere ferdigheter.

Når det er sagt, gjør kurstittel klart state "Zend Framework: Fundamentals" og i det aspektet kurset oppnår det den setter seg fore å gjøre. Andre medlemmer av utviklingsteamet som ikke har brukt tid på å se inn i rammeverket ferdig hver sesjon med entusiasme og stilte spørsmål som var veldig hyggelig å se.

Alt var ikke tapt, det var godt å tilbringe tid bekrefter de grunnleggende detaljene av rammeverket og få å stille et par spørsmål på områder hvor jeg ikke var 100%. Det ble også tid at jeg fikk sitte ned hver dag og tenke koding hjelp av rammeverket og fremtidige prosjekter, noe jeg ikke ville av vært i stand til å gjøre noe annet (kan du forestille deg din bedrift å akseptere at:?)). Sist men ikke minst du får også en fin attest fra Zend å si at du deltok på kurset (riktignok via e-post).

Zend Framework Certification

Dette var ett spørsmål som holdt kommer til bakhodet underveis, det ville forberede meg for sertifisering? Den raske, enkle er et rungende Nei. Faglærer var ganske tydelig på at med den ekstra råd som for sertifisering bør du virkelig skal bruke rammeverket på en dag til dag basis, og føler meg veldig komfortabel og trygg i sin bruk og metoder.

Oppsummering

Gitt alt jeg har skrevet ovenfor, vil jeg oppsummere alt i to enkle punkter:

  • Ny med Zend Framework: Dette kurset gjør akkurat det du forventer, det gir deg en fin innføring i rammeverket og en god jording på det grunnleggende som du kan bygge. Kurset ser ut til å skape interesse og entusiasme for rammen blant utviklere.
  • Brukte Zend Framework: Mens det var fint å shore opp noen av de svært grunnleggende Jeg følte tid, krefter og midler til å ta kurset kunne av vært brukt bedre andre steder. Det vil være fint å see Zend opprette en ny høyere nivå selvfølgelig å ta utviklere til neste nivå -. Minst til standarden på sertifisering og utover for det ville jeg registrere meg umiddelbart.

Html Tabell Generere Class (HtmlTable.php)

Ved , femte tirsdag mai 2009 09:11

Jeg som kreves for å generere en HTML tabell fra PHP data for et prosjekt som jeg jobbet på. Dessverre etter litt Googling jeg ikke kunne virkelig finne noe som var passende, så jeg bestemte meg for å lage min egen.

Jeg innser at dette ikke kan være den beste bordet generere klassen noensinne og det er sannsynligvis en del bugs fortsatt i det, men jeg foretrekker å dele, og hvis noen ønsker en bedre versjon jeg skal se på det:) jeg opprinnelig ønsket å lage et bord bygd opp av separate objekter f.eks celle objekt, rad objekt (bygget opp av celler objekter), men jeg innså overhead på dette ville være STOR! Så jeg har gått tilbake til en rekke oppsett.

Klassen vil beregne det maksimale antallet kolonner brukes i topptekst, bunntekst eller kroppen og skrive ut det antall kolonner. Topptekster, bunntekster og Bildetekst er valgfrie. Attributter består av en array hvor nøkkelen er attributtet navn og verdien er attributtverdien. Attributter brukes til bord tag (på bordet skapelsen - klasse initialiseringen), tabellrader (matrise [rad] [attributt]), og tabellceller (matrise [rad] [kolonne] [attributt]) dette gjelder for topptekster, bunntekster og bordet kroppen.

Eksempel

Jeg finner alltid den beste måten å se på noe er å bruke et eksempel så here we go:

 $ Table = new HtmlTable (array ('class' => 'sorterbar',
                 'Style' => 'bredde: 550px ;'));
 $ Header [0] [0] ['innhold'] = 'ID';
 $ Header [0] [1] ['innhold'] = 'Tittel';
 $ Header [0] [2] ['innhold'] = 'Dato';
 $ Header [0] [3] ['innhold'] = 'nettstedet';

 $ Table-> AddHeader ($ header);
 $ I = 0;
 foreach ($ newsList som $ newsItem) {
 $ ItemLink = "{$ newsItem ['title']}";
 $ TableBody [$ i] = array (0 => array ('innhold' => $ newsItem ['id'],
 'Attributter' => array ('style' => 'font-weight: bold ;')),
 1 => array ('innhold' => $ itemLink),
 2 => array ('innhold' => $ newsItem ['date_posted']),
 3 => array ('innhold' => $ newsItem ['side']));
 $ I + +;
 }
 $ Table-> addBody ($ tableBody);
 echo $ table-> drawTable ();
ID Tittel Dato Nettsted
9 Nyheter 1 2009-04-04 10:40:00 nettstednavn
10 Nyheter 2 2009-04-04 12:44:11 nettstednavn

Og HTML ser slik ut:

  =  "sortable" style =  "width: 550px;" > <Table class = "sorterbar" style = "width: 550px;">
 <Thead>
	 <Tr    >
		 <Th    > ID </ th> 
  <Th    > Tittel </ th>
		 <Th    > Dato </ th>
		 <Th    > Site </ th>
 </ Tr>
 </ Thead>
 <Tbody>
	 <Tr    >
		 =  "font-weight: bold;" >9</ td > <Td style = "font-weight: bold;"> 9 </ td> 
		 <Td    > Nyheter 1 </ td> <td    > 2009-04-04 10:40:00 </ td> <td    > < tr > Nettstednavn </ td> </ tr> <tr    = "font-weight: bold;" >10</ td > < td > <Td style = "font-weight: bold;"> 10 </ td> <td    > Nyheter 2 </ td> 
  <Td    > 2009-04-04 12:40:00 </ td>
		 <Td    > Nettstednavn </ td>
 </ Tr> 
  </ Tbody>
 </ Table> 

Kode

HtmlTable.php
Hvis du har noen kommentarer, vennligst ta dem nedenfor, ville det være flott å høre noe. Hvis du ender opp med å bruke den også gi meg beskjed og jeg vil utvide det i fremtiden:)

Loggen til DB bruke Zend Framework

Ved 14. Tirsdag april 2009 21:06

Jeg har klart å få et nettsted oppe og går med Zend Framework , er alt logging pent til Firebug / FirePHP så neste skritt var å logge på DB. Jeg ønsket også å logge noen ytterligere informasjon ved hjelp av rammeverket som user agent, dato og tid, få og etter variabler. Så for å utvide den manuelle litt her er hva jeg gjorde:

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

$ ColumnMapping = array ('prioritert' => 'prioritert',
'Message' => 'melding',
'Datetime' => 'timestamp',
'User_agent' => 'user_agent',
'Get_vars' => 'get_vars',
'Post_vars' => 'post_vars',
'Nettstedet' => 'nettstedet'
);

$ 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 ('nettstedet', SITE);

$ Logger-> info ('Informational melding');

Der array nøklene i $ columnMapping er mine kolonnenavn. "Priority" og "budskap" er forstått av Zend_Log_Writers men den ekstra felt ble lagt for å gi meg noen flere opplysninger.

Selvfølgelig er dette forutsetter at du har logget jobbe med en av de andre forfatterne først:)

Storbritannia Navn Directory og Facebook Application

Ved , fredag ​​10 april 2009 09:33

En av de morsomme tingene jeg har vært involvert i mens de arbeider for Tracesmart er navnene katalogen . I utgangspunktet tok vi vår store database og dro ut en stor haug med statistikk om forskjellige navn.

Prosessen er alle en stor SEO innsats for å trekke mer trafikk til nettstedet, men det gir også noen interessante opplysninger og navn statistikk.

Her er et eksempel for mitt navn Lloyd Watkin , eller jeg antar mer korrekt Steven Watkin . Ta et minutt til å slå opp navnet ditt på Tracesmart stedet, kan bli interessant;)

Vi har også fått navn statistikk data på navnene katalogen side som forteller deg hva navn har blitt søkt og hvor nylig. Dens ganske interessant å se kjente folk navn fly opp statistikken når de dukker opp i nyhetene. Et nylig eksempel er at av Liam Neeson som kone døde av en ski-ulykke nylig, men tydeligvis folk er ikke helt rett på skrivemåten (derav et stort antall treff på dette navnet) - Liam Nilson .

Facebook Application

Når navnene katalogen ble opprettet vi satt om å opprette en facebook applikasjon som vi duely kalt " My Name '. Facebook-programmet er en forlengelse av navnene katalogen og gir noen ekstra statistikk. For å legge til navnene katalogen til din Facebook-konto kan du besøke:

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

Funksjonshemmede Skjemafelt er ikke levert ...

Ved , torsdag 4 september 2008 11:01

Som et raskt notat, som en del av den pågående eiendomsmegling programvare -prosjekt har jeg gått tilbake til å redigere dato oppføring i systemet. Nå stedet for å tillate brukere å angi noen gamle litt av teksten har jeg byttet over til en Javascript dato / tidsvelgeren (på kort sikt) som tillater brukeren å 'plukke' og dato og tid fra en pop-up vindu.

Nå, for min gamle systema plukkeren ville dukke opp når brukeren klikket på input-feltet . Dette er imidlertid ville tillate brukeren å ignorere tekstfeltet og likevel gå og skriv noen gamle ting inn i feltet. Dette var ikke ideelt. Så min løsning var å " deaktivere "skjemafeltet og sette en span siden av den med en onclick event ringe dato / klokkeslett fargevelgeren. Dette betydde at brukeren var nærmest tvunget til å bruke den fine dato / tidsvelgeren så datoer ville gå inn med riktig format (selv om det fortsatt er å få den godkjent!).

Så jeg begynte å passere meg pent formatert dato-tid (s) gjennom skjemaet og plukke prøver å plukke dem opp med PHP 's $ _GET eller $ _POST variabler. Unfortunately'disabled 'felt er ikke gått gjennom skjemaene Dette var veldig irriterende. Løsningen ble å aktivere innspill element bruke javascript når skjemaet ble sendt med send hendelsen.

Dette betydde at skjemadataene ble passert gjennom etter behov og var pent formatert klar for validering ... Â

Søk Array Taster og Return Matches

Ved , onsdag 13 august 2008 16:26

Jeg har hatt behov for å søke gjennom en matrise og returnere de elementene som har taster som samsvarer med et søk sikt. Så jeg tenkte jeg ville dele.

'W hy trenger jeg dette? "Vil trolig være det første spørsmålet du spør, godt hvis jeg ønsket å søke gjennom en array for alle elementene som er relatert til dimensjonene av en vare så jeg kunne trekke ut de riktige tastene ved bruker denne lille funksjonen:

 <? 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;  } } ?> 

Så for eksempel hvis jeg ønsket å søke en rekke element data for dimensjonen data så jeg kunne gjøre følgende (og skrive ut til skjerm formodentlig):

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

Hvilken ville returnere noe som:

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

Custom php.ini med Plesk

Ved , onsdag 13 august 2008 15:53

Vi har en dedikert server med ukFast  der vi kjører en rekke domener som finnes på virtuelle servere som kjører under Plesk . Uansett, på de fleste av mine domener ønsker jeg å gjemme bort advarsler og for sikkerhet holde feil til loggfilene, men på noen av mine domener (for eksempel de som jeg utvikler på) Jeg ønsker å vise hvert litt ekkel advarsel og feil som vises.

Hvis jeg endre mine PHP . INI "> php.ini dette påvirker hver og domenet på serveren, ikke en god idé, spesielt når flere av nettstedene er fullt levende versjoner  Så for å komme rundt dette må du legge en fil som heter vhosts.conf i conf-katalogen, for eksempel /var/www/vhosts/<my_domain>/conf/vhost.conf .

Når du har lagt til ekstra kode, igjen for eksempel inkluderte jeg,

 php_value error_reporting E_ALL php_value display_errors On 

etterfulgt av å kjøre følgende kommando (dette konfigurerer alle dine domener det bare raskere lazier enn å skrive i domenenavnet ,

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

Hvis du føler deg litt kvikk så kan du alltid skrive ut fullversjonen som er,

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

Etter denne kommandoen hvis du ser til httpd.include fil, vil se at din httpd.include vil ha en inkludere linje for vhost.conf din, noe som dette:

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












Panorama Theme by Themocracy

9 besøkende online nå
8 gjester, 1 bots, 0 medlemmer
Maks besøkende i dag: 19 kl 06:09 UTC
Denne måneden: 19 på 19-08-2011 06:09 UTC
I år: 130 på 28-03-2011 22:40 UTC
All time: 130 på 28-03-2011 10:40 UTC