DCOM 21. oktober 2004 Mai et al. Komponent Hva er egentlig en komponent? En komponent er et programvareobjekt, ment å samvirke med andre komponenter, og tilbyr en gitt funksjonalitet. En komponent har et tydelig definert grensesnitt og forholder seg til en foreskrevet oppførsel som er felles til alle komponenter innenfor en arkitektur. 1
Microsoft Distributed COM (DCOM) - DCOM ble født 1996 - Utvider Component Object Model (COM) - Støtte for kommunikasjon mellom objekter over nettverk (LAN, WAN, Internett osv) - Fulgte med Windows NT 4.0 - COM og DCOM eies ikke lenger av Microsoft, men forvaltes av den uavhengige organisasjonen ActiveX Consortium Kommunikasjon mellom objekter - COM - Prosesser er beskyttet fra hverandre - COM avskjærer kallet og brukes operativsystemets metoder for IPC og sender kallet videre til rett prosess - DCOM - Bytter ut den lokale IPC med en nettverksprotokoll - Verken klienten og komponenten (CORBA: servant) er klar over at veien mellom prosessene har blitt lenger COM DCOM kommunikasjon 2
Design - Komponentbasert arkitektur - Kan enkelt bygge på systemer som allerede benytter COM - Uavhengighet til lokasjon - Adresser kan endres uten endring i kildekode og rekompilering - Ligger i registeret - Man kan lett rekonfigurere kjørende systemer - DCOM kan brukes av mange programmeringsspråk: - Eks.: Java, C++, Visual Basic, Delphi, COBOL - Kan lage rask prototyp i et språk, og siden reimplementere i mer effektivt språk Garbage collection Bruker ping for å sjekke om klienter/komponent lever Etter 2 min. med inaktivitet pinger komponentklienten eller klientenkomponenten 3 feil ping dekrementer count og eventuelt frigjør seg selv Dette foregår på per-maskin-basis Dersom en klient bruker 100 komponenter på en tjener pinges klienten bare én gang Sender kun endringer Dersom en klient plutselig har færre komponentreferanser vil kun disse endringene sendes, ikke referanser til alle komponentene Piggy-backer ping-meldinger på vanlige meldinger Reference count algoritme Klient kobler til komponent inkrementer ref. count i komponent Klient kobler fra komponent dekrementer ref. count i komponent Dersom ref. count = 0 komponent kan gjøre seg fri selv 3
Skalerbarhet DCOM bruker Windows NT system for eksekvering av kode på en multiprosessormaskin Trådpool optimert for korrekt antall prosessorer Fleksibel utplassering Enkelt å implementere replikering (endre i registeret) Kan dele opp bottleneck komponenter i flere småkomponenter Sende data serielt gjennom komponentene (ligner pipelining) Versjonshåndtering Over tid kan et distribuert system endre seg Klienter kan sende forespørsler om funksjonaliteten til en komponent COM komponenter kan vises forskjellig for forskjellige komponenter Ny funksjonalitet legges til flere interfaces tilgjengelig 4
Ytelse Klient ser ikke server, men ser metodene til serveren Slår opp adresser til metoder fra en tabell med metodeadresser Overhead i forhold til tradisjonell C er oppslaget (indirekte funksjonskall direkte funksjonskall) Dersom metode er i samme prosess blir ikke COM involvert Hvis ikke blir metodekallet: pakket i standard buffer representasjon sendt over til komponenten pakket opp eksekvert DCOM overhead er omtrent 35% mer enn vanlig TCP/IP ytelse når kallet går over nettverket Når et metodekall tar tid å prosessere vil raten gå ned 1ms å prosessere 23% overhead 2ms å prosessere 17% overhead Kommunikasjon Båndbredde Størrelsen på et metodekalls parametere virker direkte inn på hvor lang tid det tar å fullføre et kall Latency Den fysiske distansen og antall noder involvert før en pakke kommer frem vil forsinke ethvert kall Støtter toveis kommunikasjon Tjener Klient & Klient Tjener En komponent kan både være tjener og klient 5
Network roundtrips En komponent kan gi en klient en referanse til en annen komponent og siden være ute av veien selv Kan for eksempel brukes til load balancing når man har mange like komponenter (Samme som i vårt CORBA-prosjekt hvor en GameServer kastet av gårde et Game til to Playerobjekter) DCOM tillater å bruke protokoller utenfor standard DCOM Eksempel: En komponent har tilgang til en en SQLserver gjennom ODBC DCOM sender en kopi av komponenten til klienten slik at kall på den blir raskere Klient merker ikke at komponenten er flyttet, kun at kall går raskere Sikkerhet Viktig også i DCOM Vanlig prosedyre er å sende med en nøkkel og la tjeneren finne ut om det er riktig person DCOM bruker også dette, i støtte fra operativsystemet 6
Sikkerhet Er transparent og derfor skjult for brukeren Settes opp av utviklere og administratorer Hvert komponent kan bestemmes separat! Når brukeren logger seg inn, sjekkes brukeren mot et register før komponenten settes opp Dersom brukeren ikke har tilgang, kastes brukeren på dør før komponenten engang settes opp Sikkerhet Det er også støtte for å gi brukere forskjellige nivåer av tilgang Dette gjør at brukeren må vite hvilken sikkerhetsgrad de forskjellige komponentene har Lotte: Lotte: Hm, Hm, kan kan jeg jeg bruke bruke denne, denne, mon mon tro? tro? 7
Sikkerhet? Denial of Service (DoS) (2003) Port 135, 137, 139, 445 bør blokkeres Men kan risikere at COM komponenter ikke klarer å kommunisere osv. Dette er fikset av Microsoft nå Vanskelig å lage sikre systemer, så man må kanskje være litt forsiktig med å påstå at systemet er sikkert? Lastbalansering Statisk Bruker k får tilgang til tjener m hver gang Dynamisk Bruker k får tilgang til den minst opptatt og best tilpassede tjeneren DCOM støtter ikke at brukeren kobler seg av og kobler seg på igjen og forventer samme tjener Det gis en del informasjon til klienten som kan hjelpe til å opprette denne informasjonen 8
Feiltoleranse ping Gjentar kontakt med referansen hvis feil Men data kan forsvinne, som nevnt Bruker f. eks. en recovery cache Anvendelighet Installasjon Jo tynnere klientene er, jo verre! Men ikke for tykke heller, pga oppgradering Noen programmer klarer å oppdatere seg automatisk, vel og merke Komponentene kan plasseres etter ønske 9
Anvendelighet Administrasjon Enkelt å endre enkelte komponenter Protokollnøytralitet Siden det er mellomvare Applik. OS DCOM Applikasjonssammenligning DCOM Bruker multippel interface ID til serverobjekt: peker til interface Oppgaver som objektregistrering, skeleton instansiering etc. håndteres enten av komponenten eksplisitt eller COM sin run-time implisitt Underliggende protokoll: (ORPC) Object Remote Procedure Call Lokalisering av objektimplementasjon: Service Control Manager (SCM) Aktivisering av objektimplementasjon: SCM Klientstub kalles proxy Serverstub kalles stub CORBA Støtter multippel arv ID til serverobjekt: Objekt referanse I konstruktøren Underliggende protokoll: (IIOP) Internet Inter-ORB Protocol Lokalisering av objektimplementasjon: ORB Aktivisering av objektimplementasjon: Basic/Portable Object Adapter (BOA/POA) Proxy eller stub Skeleton Java/RMI Støtter ikke multippel arv ID til serverobjekt: ObjID Registrere objekt: RMIRegistry Skeleton instansiering: blir kalt i konstruktøren Underliggende protokoll: (JRMP) Java Remote Method Protocol Lokalisering av objektimplementasjon: JVM Aktivisering av objektimplementasjon: JVM Proxy eller stub Skeleton 10
Applikasjonssammenligning DCOM Støtter garbage collection av objektreferanser Plattformuavhengig så lenge COM Service er implementert Kan bruke ulike programmeringsspråk Støtter ikke exceptions i IDL CORBA Støtter ikke garbage collection Plattformuavhengig så lenge CORBA ORB er implementert Kan bruke ulike programmeringsspråk. Trenger ORB bibliotek Støtter exceptions i IDL Java/RMI Støtter garbage collection Plattformuavhengig så lenge JVM er implementert Kan kun implementeres i Java Støtter exceptions i IDL Oppsummering Komponentbasert Lokasjonsuavhengighet Implementert sikkerhetshåndtering Garbage collection Skalerbarhet (load balancing, pipelining) Versjonshåndtering Transparent sikkerhetshåndtering Transport protokoll nøytralitet Plattformnøytralitet Windows, Apple Macintosh, UNIX 11