transaktioner (2 Fase Commit): en simpel Guide

i de tidlige dage af computing var der ikke behov for distribuerede transaktioner. Efterhånden som antallet af applikationer steg, bliver synkronisering af dataene et vigtigt emne. Virksomheder betalte meget for at opretholde synkroniserede systemer med hensyn til datastrøm. Som et resultat opstod 2-faseforpligtelsesprotokollen kaldet HSA(udvidet arkitektur). Denne protokol giver SYRELIGNENDE egenskaber til global transaktionsbehandling. I hele denne artikel vil jeg forsøge at forklare detaljer om transaktioner og brug af transaktioner i foråret rammer.

2 fase commit protocol er en atomforpligtelsesprotokol for distribuerede systemer. Denne protokol, som navnet antyder, består af to faser. Den første er commit-anmodning fase, hvor transaction manager koordinerer alle transaktionsressourcerne til at begå eller afbryde. I commit-fasen beslutter transaction manager at afslutte operationen ved at begå eller afbryde i henhold til stemmerne for hver transaktionsressource. Vi går derefter videre til implementeringsdetaljer for 2pc-protokollen.
* se her for ressourcer på Java+. net interoperabilitet gennem 2pc.

KSA-transaktioner har brug for et globalt transaktions-id og et lokalt transaktions-id for hver KSA-ressource. Hver ressource er hyret til at styre ved start (hid) metode. Denne metode fortæller, at en ressource er involveret i transaktionen(være klar til operationer). Derefter realiseres den første fase af 2pc-protokollen ved at kalde forberedelsesmetoden. Denne metode anmoder om OK eller afbryde stemme fra en ressource. Efter at have modtaget en stemme fra hver af disse ressourcer, beslutter vi at udføre en commit-operation, hvis alle ressourcer sender OK, eller beslutter at udføre en rollback, hvis en ressource sender afbrydelse. Endelig kaldes slutmetoden for hver af de ressourcer, der fortæller, at transaktionen er afsluttet. Se på figuren for at forstå bedre. Når vi bygger en baggrund i implementering af transaktioner, vil vi næste gang gå dybere og se typer af fejl og mulige løsninger.


fejl kan opstå når som helst på grund af netværkstab, maskine ned og nogle administratorfejl. I en transaktion vil vi kategorisere disse fejl i henhold til de faser, de opstår. Den første fejlfase er før protokollen startes. Dette er en simpel fejl, at systemet ikke behøver at rulle tilbage eller nogen form for operation. Vi gør bare ikke operationen for det pågældende øjeblik. Anden type fejl kan forekomme i forberedelsesfasen (commit-anmodning), som let kan håndteres ved rollbacks ved hjælp af timeout-politikker. Sidst men ikke mindst er begå fase fejl, som kan opstå på grund af ufuldstændige rollbacks og ethvert problem i kæden. I alle disse ovenstående situationer forsøger transaction manager at gendanne problemet. Vi vil næste se, hvordan transaction manager forsøger at overvinde fejl.

til gendannelse kalder transaktionsadministrator gendannelsesmetode for hver ressource. Resources sporer logfilerne og forsøger at genopbygge sin seneste tilstand. Transaktion Manager kalder nødvendige rollback operationer og mission er gennemført. Denne proces kan synes at være glad sti, men der er mange ekstraordinære situationer, hvor logfiler er problematiske som at blive ødelagt. I denne slags situationer følger transaction manager nogle heuristikker for at løse problemet. Desuden afhænger gendannelsesprocessen af de fremadskrivende logfiler, hvor du skriver operationslogfiler, før du ansøger. For problemer med ydeevnen disse logfiler er skrevet i deres eget format(ikke bruger nogen serialisering) og systemet bør bedre batch dem, hvis det er muligt. Vi går derefter til sjov del, som er en transaktionsstøtte fra foråret.

Spring rammer giver omfattende miljø til at udvikle Internettet og stand alone applikationer. Ligesom andre værktøjer, det giver, understøttes også af foråret. Denne support er dog ikke en indbygget implementering og kræver hibernate, netcontainer eller en ramme, der giver transaktionsstyring. Foråret har JtaTransactionManager, der giver transaktionsstyringsværktøjer og skjuler detaljerne. På denne måde kan vi have transaktionsstyring for flere datakilder, der opdateres samtidigt. Når det kommer til at bruge Transaction Management, er hibernate og internetcontainere støtte til transactions veldokumenteret, behøver ikke at blive nævnt. Det kan dog være forvirrende at arbejde med en ramme, der giver transaktioner. Således vil jeg fortsætte dette indlæg ved at introducere Bitronic Transaction Manager.

Bitroniks kan nemt konfigureres, samtidig med at der ydes god support til transaktionsstyring. Det er ikke almindeligt anvendt i stand alone applikationer, men jeg vil forsøge at give konfiguration for stand-alone ansøgning som følger.

<bean factory-method="getConfiguration" class="bitronix.tm.TransactionManagerServices"> <!--Disabling Jmx avoids registering JMX Beans to any container--> <property name="disableJmx" value="true" /></bean><bean factory-method="getTransactionManager" class="bitronix.tm.TransactionManagerServices" depends-on="bitronixTMConfig" destroy-method="shutdown"/><bean class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager" ref="bitronixTM" /> <property name="userTransaction" ref="bitronixTM" /> <property name="allowCustomIsolationLevels" value="true" /></bean>

vi kan nu have flere datakilder, som kan konfigureres som følger. Hver datakilde skal have en unik egenskab, der er unik. Nedenfor er konfigurationen for Oracle, andre databaser kan have forskellige konfigurationer. For enhver anden detalje kan du tjekke Bitroniks hjemmeside.

<bean class="bitronix.tm.resource.jdbc.PoolingDataSource" init-method="init" destroy-method="close"> <property name="uniqueName" value="xaDataSource" /> <property name="minPoolSize" value="1" /> <property name="maxPoolSize" value="4" /> <property name="testQuery" value="SELECT 1 FROM dual" /> <property name="driverProperties"> <props> <prop key="URL">jdbc:oracle:thin:@10.6.86.24:1521:test</prop> <prop key="user">test</prop> <prop key="password">test</prop> </props> </property> <property name="className" value="oracle.jdbc.xa.client.OracleXADataSource" /> <property name="allowLocalTransactions" value="true" /></bean>

sammenfattende har vi forsøgt at forklare, hvad der er transaktioner, underliggende protokoller og integration af transaktionsstyring med Spring i en enkeltstående applikation. For at udvide giver transaktioner ændring af forskellige datakilder på samme tid. Desuden understøttes transaktioner af netcontainere eller hibernate lignende rammer. Ikke desto mindre er vi muligvis nødt til at integrere transaktionsstyring i en enkeltstående applikation, hvor vi skal konfigurere transaktionsadministrator. Som følge heraf leverer vi konsekvente operationer på flere datakilder, og virksomheder gør brug af dem.
* kuratorens noter og yderligere ressourcer

You might also like

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.