ಬಹು-ಪ್ರದೇಶ ಬರವಣಿಗೆ: ಕಮಿಟ್ ನಿಜವಾಗಿ ಎಲ್ಲಿ ತಲುಪುತ್ತದೆ?
ರೂಟಿಂಗ್ ವಿನಂತಿಯನ್ನು ಒಂದು ಪ್ರದೇಶಕ್ಕೆ ತಲುಪಿಸುತ್ತದೆ; ಬರವಣಿಗೆಯನ್ನು ಪರಮಾಣು ಮಾಡುವುದು ಟ್ರಾನ್ಸಾಕ್ಷನ್ ಗಡಿ ಮಾತ್ರ. ಇನ್ವೇರಿಯಂಟ್ ಹೆಸರಿಸಿ, ಮಾಲೀಕರನ್ನು ಆಯ್ಕೆ ಮಾಡಿ, ನಂತರ ಅದರ ಸುತ್ತ ಮರುಪ್ರಯತ್ನ ವಿನ್ಯಾಸ ಮಾಡಿ.
ಎರಡು ಪ್ರದೇಶಗಳಲ್ಲಿ ಎರಡು ಅಪ್ಲಿಕೇಶನ್ ಸರ್ವರ್ಗಳು, VPN ಮೂಲಕ ಬರೆಯುವ ಒಬ್ಬ ಕ್ಲೈಂಟ್, ಮತ್ತು ಯಾರೂ ಬರೆಯದ ಪ್ರಶ್ನೆ: ಬರವಣಿಗೆ ನಡೆಯಿತು ಎಂದು ಯಾವ ಘಟಕ ನಿರ್ಧರಿಸುತ್ತದೆ? ರೂಟಿಂಗ್ ವಿನಂತಿಯನ್ನು ಪ್ರಕ್ರಿಯೆಗೆ ತಲುಪಿಸುತ್ತದೆ. ಟ್ರಾನ್ಸಾಕ್ಷನ್ ಗಡಿ ಬದಲಾವಣೆ ಯಾವಾಗ ಶಾಶ್ವತ ಮತ್ತು ಗೋಚರವಾಗುತ್ತದೆ ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ. ಇವು ವಿವಿಧ ವ್ಯವಸ್ಥೆಗಳು ಮಾಡುವ ವಿವಿಧ ಕೆಲಸಗಳು, ಮತ್ತು ಅವುಗಳ ನಡುವಿನ ಅಂತರವೇ ಬಹು-ಪ್ರದೇಶ ಬರವಣಿಗೆ ದೋಷಗಳಲ್ಲಿ ಹೆಚ್ಚಿನವು ವಾಸಿಸುವ ಸ್ಥಳ.
ನಕ್ಷೆಯಿಂದ ಅಲ್ಲ, ವ್ಯಾಪಾರ ನಿಯಮದಿಂದ ಪ್ರಾರಂಭಿಸಿ
ಭೂಗೋಳದ ಬಗ್ಗೆ ಅಲ್ಲ, ವ್ಯಾಪಾರ ನಿಯಮದ ಬಗ್ಗೆ ಒಂದು ವಾಕ್ಯದಿಂದ ಪ್ರಾರಂಭಿಸಿ: ಯಾವ ಓದುಗಳು ಮತ್ತು ಬರವಣಿಗೆಗಳು ಒಟ್ಟಿಗೆ ಯಶಸ್ವಿಯಾಗಬೇಕು, ಮತ್ತು ಯಾವ ಏಕಕಾಲಿಕ ಬದಲಾವಣೆಗಳು ಆ ಸಮಯದಲ್ಲಿ ಅಸಾಧ್ಯವಾಗಿರಬೇಕು. ದಾಸ್ತಾನು ಕಾಯ್ದಿರಿಸುವಿಕೆಗೆ ಇದರ ಅರ್ಥ ದಾಸ್ತಾನು ಪರಿಶೀಲನೆ ಮತ್ತು ಕಾಯ್ದಿರಿಸುವಿಕೆ ಎರಡೂ ಜಾರಿಗೆ ಬರುತ್ತವೆ ಅಥವಾ ಯಾವುದೂ ಇಲ್ಲ, ಮತ್ತು ಎರಡನೇ ಆರ್ಡರ್ ನಡುವೆ ಅದೇ ಘಟಕವನ್ನು ಬಳಸಲಾಗದು.
| Requirement | What satisfies it | What does not |
|---|---|---|
| All-or-nothing application | A transaction inside one owning system | A VPN path between regions |
| No double spend | Isolation strong enough to exclude the conflict | Atomicity alone |
| Survive a region loss | Replication the database itself documents | Two independent databases behind one client |
ಸರಿಯಾಗಿ ಆ ಮಧ್ಯದ ಸಾಲನ್ನು ತಂಡಗಳು ಬಿಟ್ಟುಬಿಡುತ್ತವೆ. ಸಾಕಷ್ಟು ಪ್ರತ್ಯೇಕತೆ ಇಲ್ಲದ ಪರಮಾಣುತೆ ಎರಡು ಟ್ರಾನ್ಸಾಕ್ಷನ್ಗಳು ಪ್ರತಿಯೊಂದೂ ಸರಿಯಾಗಿ ಕಮಿಟ್ ಆಗಲು ಅನುಮತಿಸುತ್ತದೆ ಮತ್ತು ಆದರೂ ವ್ಯಾಪಾರ ಅಸಾಧ್ಯ ಎಂದು ಪರಿಗಣಿಸುವ ಸ್ಥಿತಿಯನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ, ಮತ್ತು ನಂತರ ಯಾವುದೇ ಮರುಪ್ರಯತ್ನ ತರ್ಕ ಅದನ್ನು ಸರಿಪಡಿಸುವುದಿಲ್ಲ.
ಒಂದು ಅಧಿಕೃತ ಗಡಿ ಎರಡು ಪ್ರಾದೇಶಿಕ ಸರ್ವರ್ಗಳನ್ನು ಸೋಲಿಸುತ್ತದೆ
ಪ್ರಾದೇಶಿಕ ಅಪ್ಲಿಕೇಶನ್ ಸರ್ವರ್ಗಳು ಇರುವಲ್ಲಿಯೇ ಇರಬಹುದು, ಆದರೆ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಒಂದೇ ಬೆಂಬಲಿತ ಟ್ರಾನ್ಸಾಕ್ಷನ್ ಗಡಿಯೊಳಗೆ ನಿರ್ವಹಿಸುವ ಸೇವೆಗೆ ಒಪ್ಪಿಸಿದರೆ ಮಾತ್ರ. ಅಪ್ಲಿಕೇಶನ್ ಪದರ ಉದ್ದೇಶದ ರೂಟರ್ ಆಗುತ್ತದೆ; ಡೇಟಾ ಪದರ ಸತ್ಯವನ್ನು ಹೊಂದಿದೆ.
ಆ ಗಡಿಯನ್ನು ಚಿಕ್ಕದಾಗಿ ಮತ್ತು ಅದು ಸ್ಪರ್ಶಿಸುವ ಡೇಟಾದ ಹತ್ತಿರವಾಗಿ ಇರಿಸಿ. ಮನುಷ್ಯನು ಪ್ರಾಂಪ್ಟ್ಗೆ ಉತ್ತರಿಸುವಾಗ ಅಥವಾ ಕರೆ ಎರಡು ಪ್ರದೇಶಗಳನ್ನು ದಾಟುವಾಗ ತೆರೆದಿಟ್ಟ ಟ್ರಾನ್ಸಾಕ್ಷನ್ ತನ್ನ ಸಮಯವನ್ನು ಲಾಕ್ಗಳನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳಲು ಕಳೆಯುತ್ತದೆ ಮತ್ತು ಅದರ ಹಿಂದೆ ಬೇರೆ ಏನಾದರೂ ಅವಧಿ ಮೀರುವ ಸಾಧ್ಯತೆಯನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ. ಆ ವೈಫಲ್ಯ ಡೇಟಾಬೇಸ್ ಸಮಸ್ಯೆಯಂತೆ ಕಾಣುತ್ತದೆ ಮತ್ತು ವಾಸ್ತವವಾಗಿ ಹಾಗೆ ವೇಷ ಧರಿಸಿದ ವಿನ್ಯಾಸ ಸಮಸ್ಯೆ. ನಿರ್ಧಾರವನ್ನು ಡೇಟಾ ಪದರಕ್ಕೆ ಸರಿಸುವುದು ಸಾಮಾನ್ಯವಾಗಿ ಅದನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ತೆಗೆದುಹಾಕುತ್ತದೆ.
BEGIN;
UPDATE inventory SET reserved = reserved + 1
WHERE sku = 'A-100' AND available >= 1;
INSERT INTO reservation (sku, order_id) VALUES ('A-100', 'ord-9f');
COMMIT;
ಆ ರೇಖಾಚಿತ್ರವನ್ನು ಗಡಿಯಾಗಿ ಓದಿ, ಕಾರ್ಯಕ್ಷಮತೆ ಶಿಫಾರಸಾಗಿ ಅಲ್ಲ. ವಿಷಯವೆಂದರೆ ಪರಿಶೀಲನೆ ಮತ್ತು ಸೇರಿಸುವಿಕೆ ಒಂದೇ ಕಮಿಟ್ ಹಂಚಿಕೊಳ್ಳುತ್ತವೆ, ಆದ್ದರಿಂದ ಏಕಕಾಲಿಕ ಆರ್ಡರ್ ದಾಸ್ತಾನು ಬಳಸಲಾಗಿದೆ ಎಂದು ನೋಡುತ್ತದೆ ಅಥವಾ ಸಂಪೂರ್ಣವಾಗಿ ನೋಡುವುದಿಲ್ಲ.
ಪ್ರತಿಕೃತ ಡೇಟಾಬೇಸ್ ಏನು ನೀಡುತ್ತದೆ ಮತ್ತು ಏನು ನೀಡುವುದಿಲ್ಲ
ಪ್ರತಿಕೃತ ಡೇಟಾಬೇಸ್ ತನ್ನದೇ ಟ್ರಾನ್ಸಾಕ್ಷನ್ ಮಾದರಿ ಬೆಂಬಲಿಸಿದಾಗ ವಿಶಾಲವಾದ ಗಡಿಯನ್ನು ಒದಗಿಸಬಹುದು. Spanner ಕೋಷ್ಟಕಗಳಾದ್ಯಂತ ಒಂದೇ ಡೇಟಾಬೇಸ್ ಒಳಗೆ ಪರಮಾಣು ಓದು-ಬರವಣಿಗೆ ಟ್ರಾನ್ಸಾಕ್ಷನ್ಗಳನ್ನು ನಿರ್ದಿಷ್ಟ ಪ್ರತ್ಯೇಕತೆ ಮತ್ತು ಮರುಪ್ರಯತ್ನ ವರ್ತನೆಯೊಂದಿಗೆ ದಾಖಲಿಸುತ್ತದೆ. ಇದು ನೀವು ಓದುವ, ಪರೀಕ್ಷಿಸುವ ಮತ್ತು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಅವಲಂಬಿಸುವ ಖಾತರಿ.
ಇದು ಉತ್ಪನ್ನದಿಂದ ಬರುವ ಖಾತರಿಯೂ ಹೌದು, ಮಾರ್ಗದಿಂದ ಅಲ್ಲ. ಪ್ರದೇಶಗಳ ನಡುವಿನ VPN ಪ್ಯಾಕೆಟ್ಗಳು ಹೇಗೆ ಪ್ರಯಾಣಿಸುತ್ತವೆ ಮತ್ತು ವೈಫಲ್ಯಗಳು ಹೇಗೆ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ ಎಂಬುದನ್ನು ಬದಲಾಯಿಸುತ್ತದೆ. ಸುರಂಗ ಎಷ್ಟೇ ಆರೋಗ್ಯಕರವಾಗಿ ಕಾಣದಿರಲಿ, ಅದು ಟ್ರಾನ್ಸಾಕ್ಷನ್ ಗಡಿಯನ್ನು ಒಂದು ಸಾಲಿನಷ್ಟೂ ವಿಸ್ತರಿಸುವುದಿಲ್ಲ. ಎರಡನ್ನೂ ಗೊಂದಲಗೊಳಿಸುವುದು ಪ್ರತಿ ಘಟಕವೂ ತನ್ನದೇ ಪರಿಶೀಲನೆಯನ್ನು ಪಾಸ್ ಮಾಡುವ ಆದರೆ ಡೇಟಾ ಹೊಂದಿಕೆಯಾಗದ ಆರ್ಕಿಟೆಕ್ಚರ್ಗಳನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ.
ಎರಡು ಡೇಟಾಬೇಸ್ಗಳು ಒಂದು ವ್ಯವಸ್ಥೆಯಾಗುವುದಿಲ್ಲ
ಸ್ವತಂತ್ರವಾಗಿ ನಿರ್ವಹಿಸಲ್ಪಡುವ ಎರಡು ಡೇಟಾಬೇಸ್ಗಳು ಕ್ಲೈಂಟ್ಗಳು ಎರಡನ್ನೂ ತಲುಪಬಲ್ಲವು ಎಂಬ ಕಾರಣಕ್ಕೆ ಹಂಚಿದ ಟ್ರಾನ್ಸಾಕ್ಷನ್ ಮ್ಯಾನೇಜರ್ ಪಡೆಯುವುದಿಲ್ಲ. ವ್ಯಾಪಾರಕ್ಕೆ ನಿಜವಾಗಿಯೂ ಆ ಜೋಡಿಯಾದ್ಯಂತ ಪರಮಾಣು ಬದ್ಧತೆ ಬೇಕಾದರೆ, ಸಮನ್ವಯ ವ್ಯವಸ್ಥೆ, ಭಾಗಿಗಳು ಮತ್ತು ಚೇತರಿಕೆ ಪ್ರಕ್ರಿಯೆ ಎಲ್ಲವನ್ನೂ ಊಹಿಸುವ ಬದಲು ಆಯ್ಕೆ ಮಾಡಿ ಅರ್ಹಗೊಳಿಸಬೇಕು.
ಕೆಲಸ ಸಿದ್ಧವಾದ ನಂತರ ಭಾಗಿ ಅಥವಾ ಕೊಂಡಿ ಕಣ್ಮರೆಯಾಗುವ ಕ್ಷಣದ ಬಗ್ಗೆ ಯೋಚಿಸಿ. ಬೆಂಬಲಿತ ವಿತರಿತ ಕಮಿಟ್ ಚೇತರಿಕೆ ಕಾರ್ಯವಿಧಾನ ಮತ್ತು ಮಾನವ ನಿರ್ಧಾರ ಬೇಕಾಗುವ ಸಂದಿಗ್ಧ ಸ್ಥಿತಿಯನ್ನು ಬಿಡಬಹುದು, ಮತ್ತು ಪ್ರತಿ ವಿಭಜನೆಯ ಮೂಲಕ ಪ್ರತಿ ಪ್ರದೇಶವೂ ಬರೆಯಬಹುದಾದಂತೆ ಉಳಿಯುತ್ತದೆ ಎಂಬ ಭರವಸೆ ಅದರೊಂದಿಗೆ ಬರುವುದಿಲ್ಲ.
ಬದಲಿಗೆ ಅಸಮಕಾಲಿಕ ಸಮನ್ವಯ ಸ್ವೀಕಾರಾರ್ಹವಾದರೆ, ಅದನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಹೇಳಿ ಮತ್ತು ಮಧ್ಯಂತರ ವ್ಯಾಪಾರ ಸ್ಥಿತಿಗಳು ಹಾಗೂ ಸಮನ್ವಯ ನಿಯಮಗಳನ್ನು ಬರೆಯಿರಿ. ಪರಿಹಾರದೊಂದಿಗೆ ಸ್ಥಳೀಯವಾಗಿ ಕಮಿಟ್ ಆದ ಹಂತಗಳ ಸರಪಳಿ ಕಾನೂನುಬದ್ಧ ವಿನ್ಯಾಸ; ಅದು ಬೇರೆ ಹೆಸರಿನ ಒಂದು ಪರಮಾಣು ಟ್ರಾನ್ಸಾಕ್ಷನ್ ಅಲ್ಲ ಅಷ್ಟೆ.
ಮೊದಲ ಅಡಚಣೆಗೆ ಮೊದಲೇ ಮರುಪ್ರಯತ್ನ ವಿನ್ಯಾಸ ಮಾಡಿ
ಕಾರ್ಯಾಚರಣೆ ಕಮಿಟ್ ಆದ ನಂತರ ಕ್ಲೈಂಟ್ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಕಳೆದುಕೊಳ್ಳಬಹುದು, ಆದ್ದರಿಂದ ಕರೆ ಮಾಡುವವರು ಸಮಯ ಮೀರುವಿಕೆಯನ್ನು ವೈಫಲ್ಯ ಎಂದು ಪರಿಗಣಿಸಲಾಗದು. ಶಾಶ್ವತ ವಿನಂತಿ ಗುರುತನ್ನು ಸಂರಕ್ಷಿಸಿ ಮತ್ತು ಬದಲಾವಣೆಯನ್ನು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸುವ ಮೊದಲು ಸೇವೆಯ ಫಲಿತಾಂಶ ಅಥವಾ ಸಮಾನತೆ ವ್ಯವಸ್ಥೆಯನ್ನು ಬಳಸಿ, ಇಲ್ಲದಿದ್ದರೆ ಮರುಪ್ರಯತ್ನ ಎರಡನೇ ಬರವಣಿಗೆಯಾಗುತ್ತದೆ.
ಸ್ವಯಂಚಾಲಿತ ಟ್ರಾನ್ಸಾಕ್ಷನ್ ಕಾಲ್ಬ್ಯಾಕ್ಗಳು ಮರುಪ್ರಯತ್ನಿಸಬಹುದಾದ ರದ್ದತಿಯ ನಂತರ ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ಬಾರಿ ಚಲಿಸಬಹುದು, ಇದು ಅವುಗಳನ್ನು ಬದಲಾಯಿಸಲಾಗದ ಬಾಹ್ಯ ಪರಿಣಾಮಗಳಿಗೆ ಕೆಟ್ಟ ಮನೆಯನ್ನಾಗಿಸುತ್ತದೆ. ಕೆಲಸದ ಹರಿವು ಅವುಗಳಿಗೆ ಸ್ಪಷ್ಟ ಸುರಕ್ಷಿತ ಪ್ರೋಟೋಕಾಲ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸದ ಹೊರತು ಅವುಗಳನ್ನು ಕಾಲ್ಬ್ಯಾಕ್ನ ಹೊರಗೆ ಇರಿಸಿ. ಹಣ ವೆಚ್ಚ ಮಾಡುವ ಅಥವಾ ಸಂದೇಶ ಕಳುಹಿಸುವ ಯಾವುದಕ್ಕೂ ಅದೇ ಎಚ್ಚರಿಕೆ ಅನ್ವಯಿಸುತ್ತದೆ. ಎರಡು ಬಾರಿ ಶುಲ್ಕ ಎರಡು ಲಾಗ್ ಸಾಲಿಗಿಂತ ತುಂಬಾ ಕಷ್ಟದ ಸಂಭಾಷಣೆ.
ಸ್ವೀಕೃತಿಯು ನಾಲ್ಕು ಸನ್ನಿವೇಶಗಳನ್ನು ಮರುಪ್ಲೇ ಮಾಡಬೇಕು: ಒಂದೇ ಸಾಲಿಗಾಗಿ ಸ್ಪರ್ಧಿಸುವ ಎರಡು ಕ್ಲೈಂಟ್ಗಳು, ಸೇವೆ ಮರುಪ್ರಯತ್ನಿಸಬಹುದು ಎಂದು ಹೇಳುವ ರದ್ದತಿ, ಉತ್ತರವೇ ಬಾರದ ಕಮಿಟ್, ಮತ್ತು ಒಂದು ಪ್ರದೇಶ ಅಥವಾ ಅವುಗಳ ನಡುವಿನ ಕೊಂಡಿಯ ನಷ್ಟ. ಕಮಿಟ್ ಆದ ವ್ಯಾಪಾರ ಫಲಿತಾಂಶ ಮತ್ತು ಬಗೆಹರಿಯದ ಸ್ಥಿತಿಗಳನ್ನು ರೂಟಿಂಗ್ ವಿನ್ಯಾಸದ ಪಕ್ಕದಲ್ಲಿ ದಾಖಲಿಸಿ, ಯಾರೂ ಜಾಲಬಂಧವನ್ನು ಖಾತರಿ ನೀಡುವ ಘಟಕ ಎಂದು ತಪ್ಪಾಗಿ ಭಾವಿಸದಂತೆ.