Skip to main content

Moving Gjennomsnittet Grafitt


Jeg prøver å lage et grafittdiagram som har den bevegelige effekten av summen av hitcounten til flere forskjellige målinger Dette målet. Jeg forventer at den bevegelige effekten av det målet ville fungere godt også. Men jeg får det fryktede No Data image i stedet utsender JSON-format gir ikke nyttig informasjon i dette tilfellet, enten dessverre, returnerer enkelt. Hvordan kan jeg beregne det bevegelige gjennomsnittet av den ovennevnte summen i grafitt jeg har prøvd følgende uten hell også. Takk for din hjelp. Grafana gjør nei beregninger selv, det spør bare en backend og trekker fine diagrammer. Så aggregerende evner er bare avhengig av din backend. Mens Graphite støtter windowing-funksjoner som glidende gjennomsnitt, støtter InfluxDB øyeblikket ikke det. Det er ganske mange forespørsler om å flytte gjennomsnittet i influxdb på web Du kan forlate 1 og spore fremgang i denne billetten. Mulig men likevel ikke så lett løsning er å skape et tilpasset skript cron, daemon, hva som helst som vil forhåndsberegne MA og lagre det som eparate influxdb series. Grafana støtter å legge til en movingAverage Jeg har også hatt en vanskelig tid å finne den i docs, men du kan litt hilariously se sin bruk på funksjonen intro page. As er normalt, klikk på grafitt tittelen, rediger, legg til metriske movingAverage som beskrevet i grafitt dokumentasjonen. Graver det bevegelige gjennomsnittet av en metrisk eller beregninger over et fast antall tidligere poeng eller et tidsintervall. Tar en metrisk eller en wildcard-serieListe etterfulgt av et nummer N av datapunkter eller en sitert streng med en lengre tid som 1 time eller 5min. Se fra til i renderapet for eksempler på tidsformater. Grafer gjennomsnittet av de foregående datapoints for hvert punkt i grafen. Alle tidligere datapoints er satt til Ingen i begynnelsen av grafen. Grafit 1 utfører to ganske enkle oppgaver som lagrer tall som endres over tid og grafer dem. Det har vært mye programvare skrevet gjennom årene for å gjøre de samme oppgavene. Det som gjør Graphite unikt, er at det gir denne funksjonaliteten. som en nettverkstjeneste som er både enkel å bruke og svært skalerbar. Protokollen for innmatning av data til grafitt er enkel nok til at du kan lære å gjøre det for hånd om noen få minutter, ikke som du faktisk vil, men det er en anstendig litmus test for enkelhet Rendering av grafer og henting av datapunkter er like enkelt som å hente en URL Dette gjør det veldig naturlig å integrere grafitt med annen programvare og gjør det mulig for brukere å bygge kraftige applikasjoner på toppen av grafitt. En av de vanligste bruksområdene til grafitt er å bygge webbasert dashboards for overvåking og analyse Graphite ble født i et høyvolum e-handelsmiljø, og utformingen gjenspeiler denne skalerbarheten og sanntids tilgang til data er nøkkelmål. Komponentene som tillater grafitt å oppnå disse målene, er et spesialisert databibliotek og dets lagringsformat, en caching-mekanisme for optimalisering av IO-operasjoner, og en enkel, men likevel effektiv metode for clustering av grafitt-servere. I stedet for å bare beskrive hvordan Graphite fungerer I dag vil jeg forklare hvordan grafitt i utgangspunktet ble implementert ganske naivt, hvilke problemer jeg kjørte inn i, og hvordan jeg fant løsninger på dem.7 1 Databasebiblioteket lagrer tidsserier Data. Graphite er skrevet helt i Python og består av tre hovedkomponenter et databasebibliotek kalt hviske en backendendemon kalt karbon og en frontend-webapp som gjør grafikker og gir et grunnleggende brukergrensesnitt. Mens hviske ble skrevet spesielt for grafitt, kan den også brukes uavhengig. Det er veldig lik design i rund - robin-databasen som brukes av RRDtool, og bare lagrer numeriske data i tidsserier. Vanligvis tenker vi på databaser som serverprosesser som klientprogrammer snakker med over stikkontakter. Men hvisket mye som RRDtool, er et databasebibliotek som brukes av applikasjoner til å manipulere og hente data lagret i spesialformaterte filer De mest grunnleggende hvisking operasjonene er opprettet for å lage en ny hviskefil, oppdatering for å skrive nye datapunkter til en fil og hente for å hente datapunkter. Fig. e 7 1 Grunnleggende anatomi av en hviskefil. Som vist i figur 7 1 er hviskefiler består av en overskriftsseksjon som inneholder ulike metadata, etterfulgt av en eller flere arkivseksjoner. Hvert arkiv er en sekvens av sammenhengende datapunkter som er tidsstempel, verdipar Når en oppdatering eller henting operasjon utføres, hviske avgjør forskyvningen i filen der data skal skrives til eller leses fra, basert på tidsstempel og arkivkonfigurasjon.7 2 Den bakre slutt en enkel lagringstjeneste. Graphite s back end er en daemon prosess kalt karbon-cache vanligvis bare referert til som karbon Det er bygget på Twisted, et høyt skalerbart hendelse-drevet IO-rammeverk for Python Twisted gjør at karbon effektivt kan snakke med et stort antall kunder og håndtere en stor mengde trafikk med lavt overhead Figur 7 2 viser datastrømmen mellom karbonflukter og webapp-klientprogrammene samler inn data og sender den til grafittens bakside, karbon som lagrer dataene ved hjelp av hviske. Disse dataene kan da være oss ed av grafitt-webappen for å generere grafer. Figur 7 2 Dataflyt. Den primære funksjonen av karbon er å lagre datapunkter for beregninger levert av klienter. I grafittterminologi er en metrisk en målbar mengde som kan variere over tid som CPU-utnyttelsen av en server eller antall salg av et produkt Et datapunkt er rett og slett et tidsstempel, verdi pair som tilsvarer den målte verdien av en bestemt metrisk på et tidspunkt. Metrics identifiseres unikt ved navn og navn på hver metrisk også som datapunkter er gitt av klientapplikasjoner En vanlig type klientprogramvare er et overvåkingsmiddel som samler system - eller applikasjonsmålinger, og sender sine samlede verdier til karbon for enkel lagring og visualisering. Metrics in Graphite har enkle hierarkiske navn, ligner filsystembaner bortsett fra at en prikk brukes til å avgrense hierarkiet i stedet for et slash eller backslash karbon vil respektere et lovlig navn og oppretter en hviskefil for hver måling til st malmens datapunkter Den hviske filene lagres i katalogenes datakatalog i et filsystemhierarki som speiler det dot-avgrensede hierarkiet i hvert metrisk navn, slik at det for eksempel kartlegges. Når et klientprogram ønsker å sende datapunkter til grafitt det må etablere en TCP-tilkobling til karbon som regel på port 2003 2 Klienten sender ikke alt snakkende karbon noe over tilkoblingen Klienten sender datapunkter i et enkelt ren tekstformat mens forbindelsen kan stå åpen og gjenbrukes som trengte Formatet er en linje med tekst per datapunkt hvor hver linje inneholder det stiplede metriske navnet, verdien og en Unix epok tidsstempel adskilt av mellomrom. For eksempel kan en klient sende. På et høyt nivå, er alt karbon gjør, lytter etter data i dette formatet og prøv å lagre det på disken så raskt som mulig ved å bruke hviske senere. Vi diskuterer detaljene om noen triks som brukes til å sikre skalerbarhet og få best mulig ytelse vi kan ut av en typisk harddisk. 7 3 The Fro nt End Graphs On-Demand. Graphite webapp lar brukerne be om egendefinerte grafer med en enkel URL-basert API Graferingsparametere er angitt i forespørselsstrengen i en GET-forespørsel, og et PNG-bilde returneres som svar. For eksempel URL. requests en 500 300 graf for metriske og de siste 24 timers data Egentlig er det bare målparameteren som kreves, alle de andre er valgfrie og bruker standardverdiene hvis de utelates. Grafit støtter et bredt utvalg av skjermalternativer, samt datapanulasjon funksjoner som følger en enkel funksjonell syntaks For eksempel kan vi tegne et 10-punkts glidende gjennomsnitt av metriske i vårt forrige eksempel som dette. Funksjoner kan nestes, slik at det er komplekse uttrykk og beregninger. Her er et annet eksempel som gir kjørerotalet av salget for dagen ved bruk av per-produkt-beregninger av salg per minutt. sumSeries-funksjonen beregner en tidsserie som er summen av hver beregning som samsvarer med mønsteret. Integrert beregner en løpende total heller enn en teller per minutt Herfra er det ikke for vanskelig å forestille seg hvordan man kan bygge en webgrensesnitt for visning og manipulering av grafer Grafitt kommer med sin egen Composer-brukergrensesnitt, vist i figur 7 3 som gjør dette ved hjelp av Javascript for å endre grafens s URL-parametere som brukeren klikker gjennom menyene i de tilgjengelige funksjonene. Figur 7 3 Grafitt s Composer-grensesnitt.7 4 Dashboards. Siden begynnelsen Graphite har blitt brukt som et verktøy for å lage webbaserte dashboards. URL-API-en gjør dette til et naturlig bruk Å lage et dashbord er like enkelt som å lage en HTML-side full av merker som dette. Men alle liker ikke å lage URL-adresser for hånd, så Graphite s Composer brukergrensesnitt gir en pek-og-klikk-metode for å lage en graf som du enkelt kan kopiere og lim inn nettadressen Når det kombineres med et annet verktøy som gjør det mulig å raskt lage websider som en wiki, blir det lett nok at ikke-tekniske brukere kan bygge sine egne oversikter ganske enkelt.7 5 En åpenbar flaskehals. Når mine brukere begynte å bygge dashboa rds, begynte grafitt raskt å ha ytelsesproblemer jeg undersøkte webserverloggene for å se hvilke forespørsler som ble bogging det ned. Det var ganske tydelig at problemet var det rene antallet graferingsforespørsler. Webappen var CPU-bundet, gjengivelse av grafer, jeg konstant la merke til at det var mange identiske forespørsler, og instrumentbrettene skulle skyldes. Imagine at du har et dashbord med 10 grafer i det, og siden oppdateres en gang i minuttet. Hver gang en bruker åpner dashbordet i nettleseren, må Graphite håndtere 10 flere forespørsler per minutt Dette blir raskt dyrt. En enkel løsning er å gjengi hver eneste graf bare en gang og deretter tjene en kopi av den til hver bruker. Den Django webramme som Graphite er bygget på, gir en utmerket caching-mekanisme som kan bruke forskjellige bakender som memcached Memcached 3 er i hovedsak et hashbord som er gitt som en nettverkstjeneste. Klientprogrammer kan få og sette nøkkelverdigepar, akkurat som et vanlig hashbord. Hovedfordelen ved å bruke memcac hed er at resultatet av en dyr forespørsel som gjengivelse av en graf kan lagres svært raskt og hentes senere for å håndtere etterfølgende forespørsler. For å unngå å returnere de samme foreldede grafene for alltid, kan memcached konfigureres for å utgå de bufrete grafene etter en kort periode. Selv om dette er bare noen få sekunder, byrden det tar av Grafitt er enormt fordi duplikatforespørsler er så vanlige. Et annet vanlig tilfelle som skaper mange gjengivelsesforespørsler, er når en bruker tilpasser skjermalternativene og bruker funksjoner i Composer-brukergrensesnittet Hver gang brukeren endrer noe, Graphite må redraw grafen. De samme dataene er involvert i hver forespørsel, så det er fornuftig å sette underliggende data i memcache også. Dette holder brukergrensesnittet lydhør overfor brukeren fordi trinnet med å hente data blir hoppet over. 7 6 Optimalisering Jeg O. Imagine at du har 60.000 beregninger som du sender til grafitt-serveren din, og hver av disse beregningene har ett datapunkt per minutt. Husk at hver beregning har sin egen hviskefil på filsystemet Dette betyr at karbon må gjøre en skriveoperasjon til 60.000 forskjellige filer hvert minutt. Så lenge kulstof kan skrive til en fil hver millisekund, bør den kunne holde seg til. Dette er ikke for langt hentet, men la det si du har 600 000 beregninger oppdatering hvert minutt, eller beregningene dine oppdateres hvert sekund, eller kanskje du ikke har råd til rask nok lagring Uansett, anta at antallet innkommende datapunkter overstiger hastigheten på skriveoperasjoner som lagringen din kan følge med. bør denne situasjonen bli håndtert. De fleste harddisker i disse dager har sakte søketid 4, det vil si forsinkelsen mellom å gjøre IO-operasjoner på to forskjellige steder i forhold til å skrive en sammenhengende datasekvens. Dette betyr at mer sammenhengende skriving vi gjør, jo mer gjennomstrømning vi får, men hvis vi har tusenvis av filer som må skrives til ofte, og hver skriving er veldig liten, et visd datapunkt er bare 12 byte, så kommer diskene våre definitivt til å bruke mo St of their time seeking. Working under antagelsen om at hastigheten på skriveoperasjoner har et relativt lavt tak, er den eneste måten å øke datapunktets gjennomstrømning utover den hastigheten, å skrive flere datapunkter i en enkelt skriveoperasjon. Dette er gjennomførbart fordi hviske ordner sammenhengende datapunkter ved siden av disken Så jeg la en oppdateringsfunksjon til å hviske som tar en liste over datapunkter for en enkelt metrisk og komprimerer sammenhengende datapunkter til en enkelt skriveoperasjon. Selv om dette gjorde hver skrive større, varierer tidsforskjellen å skrive ti datapunkter 120 byte versus ett datapunkt 12 byte er ubetydelig Det tar ganske mange flere datapunkter før størrelsen på hver skrive begynner å merkbart påvirke latency. Next Jeg implementerte en buffermekanisme i karbon Hver innkommende datapunkt blir kartlagt til en kø basert på dets metriske navn og blir deretter lagt til den køen En annen tråd gjentas gjentatte ganger gjennom alle køene og for hver den trekker ut alle datapunktene og skriver dem til riktig hviskefilen med oppdaterte data. Hvis vi har 600.000 målinger oppdateres hvert minutt, og lagringen vår bare kan holde opp med 1 skriv per millisekund, så vil køene ende opp holder omtrent 10 datapunkter hver i gjennomsnitt Den eneste ressursen dette koster oss er minne, noe som er relativt rikelig siden hvert datapunkt er bare noen få byte. Denne strategien buffer dynamisk så mange datapoints som nødvendig for å opprettholde en mengde innkommende datapoints som kan overstige frekvensen av IO-operasjoner lagringsplassen din kan følge med. En god fordel med denne tilnærmingen er at den gir en grad av resiliency for å håndtere midlertidige IO-avmatninger. Hvis systemet trenger å gjøre andre IO-arbeid utenfor grafitt, er det sannsynlig at frekvensen av skrive operasjoner vil redusere, i hvilket tilfelle carbon s køer vil bare vokse Jo større køene er, desto større skriver det, siden den totale gjennomstrømningen av datapunkter er lik hastigheten på w rite operasjoner ganger gjennomsnittlig størrelse på hver skrive, karbon er i stand til å holde opp så lenge det er nok minne for køene karbon s kjølemekanisme er avbildet i figur 7 4.Figure 7 4 Carbon s kølemekanisme.7 7 Holde det Real - Time. Buffering datapunkter var en fin måte å optimalisere karbon s IO, men det tok ikke lang tid for brukerne mine å legge merke til en ganske plagsom bivirkning. Gjennomgå vårt eksempel igjen, har vi 600.000 beregninger som oppdateres hvert minutt, og vi antar vår lagring kan bare holde opp med 60 000 skriveoperasjoner per minutt. Dette betyr at vi vil ha omtrent 10 minutter verdifulle data sitter i karbon køer til enhver tid. Til en bruker betyr dette at grafene de ber om fra Graphite webapp vil mangle mest siste 10 minutter med data Ikke bra. Fortunately, løsningen er ganske rett fremover Jeg har nettopp lagt til en socket lytter til karbon som gir et spørringsgrensesnitt for å få tilgang til de bufferte datapunktene og deretter modifiserer Graphite weba pp for å bruke dette grensesnittet hver gang det er behov for å hente data Webapp kombinerer da datapunktene den henter fra karbon med datapunktene det hentes fra disk og voila, grafene er gitt i sanntid, i vårt eksempel blir datapunktene oppdatert til minuttet og dermed ikke akkurat sanntid, men det faktum at hvert datapunkt er umiddelbart tilgjengelig i en graf når det er mottatt av karbon, er sanntid.7 8 Kjerner, Caches og Katastrofale Feil. Som det er tydelig av Nå er en nøkkelegenskap for systemytelsen som Graphite s egen ytelse avhenger av, er tidsforsinkelse. Så langt har vi antatt at systemet vårt har konsekvent lav IO latency gjennomsnittlig rundt 1 millisekund per skriv, men dette er en stor antagelse som krever litt dypere analyse. De fleste harddisker er ganske enkelt ikke så rask selv med dusinvis av disker i et RAID-array, det er sannsynlig at det er mer enn 1 millisekond latens for tilfeldig tilgang. Men hvis du skulle prøve å teste hvor raskt en gammel bærbar PC kunne skriv en helt kilobyte til disken du vil finne ut at skrivesystemet ringer tilbake på langt mindre enn 1 millisekund Hvorfor. Når programvare har inkonsekvente eller uventede ytelsesegenskaper, er det vanligvis enten buffering eller caching å klandre. I dette tilfellet reagerer vi med både The skrive systemanrop gjør det ikke teknisk å skrive dataene dine til disken, det legger det rett og slett i en buffer som kjernen skriver til disken senere. Dette er grunnen til at skriveanropet vanligvis returnerer så fort. Selv etter at bufferen er skrevet til disk, gjør det ofte forbli cached for senere lesing. Begge disse oppføringene, buffering og caching, krever minne selvfølgelig. Kernel-utviklere, som er de smarte folkene som de er, bestemte seg for at det ville være en god ide å bruke det som brukerminne er for øyeblikket ledig istedenfor å allokere minne direkte Det viser seg å være en utrolig nyttig ytelsesbooster, og det forklarer også hvorfor uansett hvor mye minne du legger til et system, vil det vanligvis ende opp med å ha nesten null fr ee-minne etter å ha gjort en beskjeden mengde IO Hvis brukerprogrammene dine ikke bruker det minnet, er kjernen din sannsynligvis. Ulempen med denne tilnærmingen er at dette gratis minnet kan tas bort fra kjernen i det øyeblikket et brukerrom applikasjon bestemmer det trenger å tildele mer minne for seg selv Kjernen har ikke annet valg enn å avstå det, og miste hva buffere kan ha vært der. Så hva betyr alt dette for grafitt? Vi har nettopp markert karbon s avhengighet av konsekvent lav IO latency og vi vet også at skrivesystemanropet bare returnerer raskt fordi dataene bare kopieres til en buffer. Hva skjer når det ikke er nok minne for at kjernen fortsetter å puffe skriver. Skriftene blir synkron og dermed veldig sakte. Dette medfører en dramatisk nedgang i frekvensen av karbon s skriveoperasjoner, noe som fører til at karbon s køer vokser, noe som spiser enda mer minne, sultner kjernen enda lenger. Til slutt resulterer denne typen situasjon vanligvis i karbon går tom for minne eller blir drept av en sint sysadmin. For å unngå denne typen katastrofe har jeg lagt til flere funksjoner for karbon, inkludert konfigurerbare grenser for hvor mange datapunkter som kan være i kø og grenseverdier for hvor raskt ulike fluksoperasjoner kan utføres Disse funksjonene kan beskytte karbon fra å spire ut over kontroll og i stedet pålegge mindre sterke effekter som å slippe noen datapunkter eller nekte å akseptere flere datapunkter. Egne verdier for disse innstillingene er systemspesifikke og krever en hel del test for å stille dem. nyttig, men de løser ikke fundamentalt problemet. For det vil vi trenge mer maskinvare.7 9 Clustering. Å lage flere grafitt-servere ser ut til å være et enkelt system fra et brukerperspektiv, det er ikke veldig vanskelig, i hvert fall for en implementering. s brukerinteraksjon består hovedsakelig av to operasjoner som finner beregninger og henter datapunkter, vanligvis i form av en graf. Finne og hente operasjoner på weba pp er tucked away i et bibliotek som abstraherer implementeringen fra resten av kodebase, og de blir også eksponert gjennom forespørselshåndteringsprogrammer for enkle fjernsamtaler. Finnoperasjonen søker det lokale filsystemet av hviske data for ting som samsvarer med et brukerdefinert mønster, akkurat som et filsystem glob som matcher filer med den utvidelsen Å være en trestruktur, er resultatet som returneres av finn en samling av Node-objekter, hver avledet fra enten gren - eller blad-underklassene i Node-kataloger som korresponderer med grenknutepunkter og hviskefiler samsvarer til bladnoder Dette abstraksjonslaget gjør det enkelt å støtte ulike typer underliggende lagring, inkludert RRD-filer 5 og Gzipped hviskefiler. Leaf-grensesnittet definerer en hentemetode hvis implementering avhenger av typen av bladknutepunkt. I tilfelle av hviskefiler er det rett og slett en tynn wrapper rundt hviskebibliotekets egen hentefunksjon Når clusteringstøtte ble lagt til, ble funnfunksjonen utvidet til å kunne ma fjernkontrollen finner samtaler via andre grafitt-servere som er angitt i konfigurasjonen av webapp s. Kodenedataene som finnes i resultatene av disse samtalene, blir pakket inn som RemoteNode-objekter som er i samsvar med de vanlige Node Branch og Leaf-grensesnittene. Dette gjør clustering gjennomsiktig til resten av webapps kodebase Hentemetoden for en ekstern bladknute er implementert som en annen samtale for å hente datapunkter fra nodens grafitt-server. Alle disse samtalene blir gjort mellom webapps på samme måte som en klient ville kalle dem, bortsett fra med en ekstra parameter som angir at operasjonen bare skal utføres lokalt og ikke bli omfordelt i hele klyngen. Når webapp blir bedt om å lage en graf, utfører den funnoperasjonen for å finne de ønskede beregningene og samtaler henter på hver for å hente sine datapunkter. Dette fungerer enten dataene er på den lokale serveren, eksterne servere, eller begge deler. Hvis en server går ned, ringer fjernkontrollen timeout ganske raskt og serveren er ma rked som å være ute av drift i en kort periode der det ikke vil bli ringt videre til det. Fra et brukerperspektiv vil dataene på den tapte serveren mangle fra sine grafer, med mindre dataene dupliseres på en annen server i klyngen. 7 9 1 En kort analyse av Clustering Efficiency. Den dyreste delen av en grafisk forespørsel gir gjengivelsen Hver gjengivelse utføres av en enkelt server, slik at det å legge til flere servere øker kapasiteten til gjengivelse av grafikker effektivt. Det faktum at mange forespørsler ender opp distribuere finne samtaler til alle andre servere i klyngen betyr at vårt klyngesystem deler mye av front-end-lasten i stedet for å spre det. Det vi har oppnådd på dette punktet, er imidlertid en effektiv måte å distribuere back-end-last på, som hver karbon forekomst opererer uavhengig Dette er et godt første skritt siden det meste av tiden er bakenden en flaskehals langt før frontenden er, men tydeligvis vil frontenden ikke skalere horisonten lly med denne tilnærmingen. For å gjøre frontendeskalaen mer effektiv, må antallet av eksterne søkeanrop gjort av webappen reduseres. Den enkleste løsningen er caching. Som memcached brukes allerede til å cache datapunkter og gjengitte grafer, det kan også brukes til å cache resultatene av finnforespørsler. Siden plasseringen av beregninger er mye mindre sannsynlig å endres ofte, bør dette vanligvis bufres lenger. Avstanden om å angi cache timeout for å finne resultatene for lenge er imidlertid at nye beregninger som er lagt til i hierarkiet, kanskje ikke vises så raskt til brukeren.7 9 2 Distribuere beregninger i en klase. Grafitt-webappen er ganske homogen i en klynge, ved at den utfører nøyaktig samme jobb på hver server-karbon s rolle kan imidlertid variere fra server til server avhengig av hvilke data du velger å sende til hver forekomst. Det er ofte mange forskjellige klienter som sender data til karbon, så det ville være ganske irriterende å parre hver klient s konfi Guration med grafittklyngens layout. Applikasjonsmålinger kan gå til en karbon-server, mens forretningsmessige data kan sendes til flere karbon servere for redundans. For å forenkle styringen av scenarioer som dette, kommer Graphite med et ekstra verktøy kalt karbonrelé. er ganske enkelt det mottar metriske data fra klienter akkurat som standard karbon daemon som faktisk kalles karbon-cache, men i stedet for lagring av data, gjelder det et sett med regler til de metriske navnene for å bestemme hvilke karbon-cache-servere som skal videresende dataene til hver regel består av et regulært uttrykk og en liste over destinasjonsservere For hvert mottatt datapunkt blir reglene evaluert i rekkefølge og den første regelen hvis regelmessige uttrykk samsvarer med det metriske navnet, brukes. Denne måten alle klientene må gjøre er å sende sine data til karbonreléet, og det vil ende opp på de riktige serverne. I en forstand gir karbonrelé replikasjonsfunksjonalitet, selv om det mer nøyaktig vil bli kalt input d oppplikasjon siden det ikke omhandler synkroniseringsproblemer Hvis en server går ned midlertidig, vil den mangle datapunktene for tidsperioden der den var nede, men ellers fungerer normalt. Det er administrative skript som gir kontroll over omsynkroniseringsprosessen i hendene til systemadministratoren.7 10 designrefleksjoner. Min erfaring med å jobbe med grafitt har bekreftet min tro på at skalerbarheten har svært lite å gjøre med lavt nivå ytelse, men i stedet er et produkt av overordnet design jeg har rammet mange flaskehalser underveis, men hver gang jeg ser etter forbedringer i design i stedet for fartfyll i ytelse, har jeg blitt spurt mange ganger hvorfor jeg skrev Graphite in Python i stedet for Java eller C, og mitt svar er alltid at jeg ennå ikke har kommet over en sant behov for ytelsen som et annet språk kan tilby. I Knu74 sa Donald Knuth berømt at for tidlig optimalisering er roten til alt ondt. Så lenge vi antar at vår kode wi vil fortsette å utvikle seg på ikke-trivielle måter, så er all optimalisering 6 på en eller annen måte for tidlig. En av grafittets største styrker og største svakheter er at svært lite av det faktisk var utformet i tradisjonell forstand. Grafitt utviklet seg gradvis, Hindring av hindring da problemer oppstod Mange ganger var forhindringene forutsigbare og ulike forebyggende løsninger virket naturlige. Det kan imidlertid være nyttig å unngå å løse problemer du egentlig ikke har ennå, selv om det virker sannsynlig at du snart vil. Årsaken er at Du kan lære mye mer fra å studere konkrete feil enn å teoretisere overordnede strategier. Problemløsing er drevet av både empiriske dataene vi har for hånden og vår egen kunnskap og intuisjon jeg har funnet som tviler din egen visdom tilstrekkelig, kan tvinge deg til å se på din empiriske data mer grundig. For eksempel, da jeg først skrev hvisket, var jeg overbevist om at det ville bli omskrevet i C for fart og at min Python jeg implementering ville bare tjene som en prototype Hvis jeg ikke var i en tidskranse, kan jeg veldig godt ha hoppet over Python-implementeringen helt. Det viser seg imidlertid at IO er en flaskehals så mye tidligere enn CPU at den mindre virkningsgraden av Python neppe betyr noe i praksis. Som sagt, men den evolusjonære tilnærmingen er også en stor svakhet av grafittgrensesnitt, det viser seg at de ikke gir seg godt til gradvis evolusjon. Et godt grensesnitt er konsekvent og benytter konvensjoner for å maksimere forutsigbarheten. Ved dette tiltaket, Graphite s URL API er for øyeblikket et sub-par-grensesnitt etter min mening Alternativer og funksjoner har blitt slått på over tid, noe som noen ganger danner små øyer med konsistens, men generelt mangler en global følelse av konsistens Den eneste måten å løse et slikt problem på er å gi versjon av grensesnitt , men dette har også ulemper. Når et nytt grensesnitt er utformet, er den gamle fortsatt vanskelig å bli kvitt, dvelende rundt som evolusjonær bagasje som det menneskelige vedlegget jeg t kan virke harmløs nok til en dag din kode får appendisitt, dvs en bug knyttet til det gamle grensesnittet og du blir tvunget til å fungere Hvis jeg skulle endre en ting om grafitt tidlig, ville det vært å ta mye større forsiktighet ved å designe den eksterne APIer, tenker fremover i stedet for å utvikle dem bit for bit. Et annet aspekt av grafitt som forårsaker litt frustrasjon er den begrensede fleksibiliteten til den hierarkiske metriske navngivningsmodellen. Selv om det er ganske enkelt og veldig praktisk for de fleste brukstilfeller, gjør det noen vanskelige spørsmål svært vanskelig. Selv om det var umulig å uttrykke Da jeg først tenkte på å skape grafitt, visste jeg fra begynnelsen at jeg ønsket et redigerbart URL-API for å lage grafer. 7 Mens jeg fortsatt er glad for at Graphite gir dette i dag, er jeg redd for at dette kravet har belastet API med overdreven enkel syntaks som gjør komplekse uttrykk usikre Et hierarki gjør problemet med å bestemme primærnøkkelen for en metrisk ganske enkel fordi en bane er i hovedsak en primærnøkkel for en node i treet. Ulempen er at alle de beskrivende dataene, dvs. kolonnedata må være innebygd direkte i banen. En potensiell løsning er å opprettholde den hierarkiske modellen og legge til en egen metadatabase for å muliggjøre mer avansert utvalg av målinger med en spesiell syntax.7 11 Å bli åpen kilde. Å se tilbake på utviklingen av grafitt, er jeg fortsatt overrasket over hvor langt det har kommet som et prosjekt og hvor langt det har tatt meg som programmerer. Det startet som et kjæledyr prosjektet som var bare noen få hundre kodelinjer. Renderingmotoren startet som et eksperiment, for å se om jeg kunne skrive en hviske ble skrevet i løpet av en helg uten desperasjon for å løse et show-stopperproblem før en kritisk startdato karbon har blitt omskrevet flere ganger enn jeg bryr meg om å huske. Når jeg fikk lov til å frigjøre Graphite under en åpen kildekode lisens i 2008, forventet jeg aldri mye respons. Etter noen måneder ble det nevnt i en CNET arti cle som ble hentet opp av Slashdot og prosjektet plutselig tok av og har vært aktivt helt siden I dag er det dusinvis av store og mellomstore bedrifter som bruker grafitt. Samfunnet er ganske aktivt og fortsetter å vokse. Langt fra å være et ferdig produkt, er det mye kult eksperimentelt arbeid blir gjort, noe som gjør det morsomt å jobbe med og fullt av potensial. Det er en annen port over hvilke serielle objekter kan sendes, noe som er mer effektivt enn tekst i ren tekst. Dette er kun nødvendig for svært høye nivåer av trafikk. Solid state-stasjoner har generelt ekstremt hurtige søketider i forhold til konvensjonelle harddisker. RRD-filer er faktisk grennoder fordi de kan inneholde flere datakilder en RRD-datakilde er en bladnode. Knuth innebar spesielt lavnivåkodoptimalisering , ikke makroskopisk optimalisering som designforbedringer. Dette tvinger grafene selv til å være åpen kildekode. Alle kan bare se på en graf s URL for å forstå den eller endre den.

Comments

Popular posts from this blog

Tre Svart Kråker

3 Black Crows lyrics.3 sorte kråker satt på et gjerde. Se verden over, pass dem ved å lure på menneskeheten og dens pretense. Lurer på hvor de skal fly. Og de cackled i glede og dyve gjennom luften. Som vindene i en orkan. Og de spredte seg deres vinger som om å erklære videre, la frihet ringe.3 sorte kråker satt på et gjerde. Se verden over, pass dem ..3 Sorte kråker sitter i et tre. Ser ned på menneskeheten. Kjenne hvordan det føles å være så ledig. La oss stå langt bak . Og de cackled i glede og duve gjennom luften som vindene i en orkan Og de sprer sine vinger som om å erklære videre. La frihet ring.3 Svarte kråker sitter i et tre. Ser verden over, passerer dem forbi. Og de kutte i glede og dyve gjennom luften som vindene i en orkan Og de sprer sine vinger som om å erklære videre, la frihet ringe. Se etter disse teksten. Thomas Bulkowskis vellykkede investeringsaktiviteter tillot ham å gå på pensjon i en alder av 36 år. Han er en internasjonalt kjent auth eller og næringsdrivende m...

Cara Bermain Forex Agar Untung

Tentunya kamu sudah pernah mendengar is Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex Forex sedang beruntung, namun ada juga yang mengalami kekalahan yang tidak sedikit Sampai saat ini masih banyak perusahaan yang bergerak dibidang forex, perusahaan tersebut menyediakan facilitas koneksi, karyawan sebagai pencari pemodal dan trader atau broke...

Forex Wm

Omfattende dekning. WM Reuters leverer bransjens bredeste dekning, med både intradag - og sluttretting for spotrenter, terminkontrakter og NDFer. For mer enn 20 år har WM Reuters FX-priser tjent som helt uavhengige, objektive, objektive kilder til FX-data Vi forplikter oss til å sikre at referansene forblir klarert og grunnleggende komponenter i markedsinfrastrukturen, og blir kontinuerlig forbedret etter hvert som markedets behov endres. Fuldstendig gjennomsiktig, IOSCO-tilpasset metodikk. Vår publiserte og gjennomsiktige beregningsmetode er fullt tilpasset IOSCOs prinsipper for finansielle benchmarks. Designet For å gi større gjennomsiktighet til prising i valutamarkedet, er WM Reuters-priser bygd med data hentet direkte fra markedstransaksjoner, ved bruk av flere valideringsteknikker på fangede og beregnede priser, noe som resulterer i nøyaktige spotrenter for hver løsning hele dagen. WebMoney er en elektronisk valutasystem operert av WM Transfer Ltd Det ble grunnlagt i 1998 Det er ...