[ಅನುವಾದ] ಎನ್ವಾಯ್ ಥ್ರೆಡಿಂಗ್ ಮಾದರಿ

ಲೇಖನದ ಅನುವಾದ: ಎನ್ವಾಯ್ ಥ್ರೆಡಿಂಗ್ ಮಾದರಿ - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

ಈ ಲೇಖನ ನನಗೆ ತುಂಬಾ ಆಸಕ್ತಿದಾಯಕವೆನಿಸಿತು. ಎನ್ವಾಯ್ ಅನ್ನು ಹೆಚ್ಚಾಗಿ "istio" ನ ಭಾಗವಾಗಿ ಅಥವಾ ಸರಳವಾಗಿ Kubernetes "ಇಂಗ್ರೆಸ್ ಕಂಟ್ರೋಲರ್" ಆಗಿ ಬಳಸುವುದರಿಂದ, ಹೆಚ್ಚಿನ ಜನರು ವಿಶಿಷ್ಟವಾದ Nginx ಅಥವಾ Haproxy ಸ್ಥಾಪನೆಗಳೊಂದಿಗೆ ನೇರವಾಗಿ ಸಂವಹನ ನಡೆಸುವುದಿಲ್ಲ. ಆದಾಗ್ಯೂ, ಏನಾದರೂ ಮುರಿದರೆ, ಅದು ಆಂತರಿಕವಾಗಿ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಒಳ್ಳೆಯದು. ವಿಶೇಷ ಪದಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ಸಾಧ್ಯವಾದಷ್ಟು ಪಠ್ಯವನ್ನು ರಷ್ಯನ್ ಭಾಷೆಗೆ ಭಾಷಾಂತರಿಸಲು ನಾನು ಪ್ರಯತ್ನಿಸಿದ್ದೇನೆ. ಇದು ನೋವಿನಿಂದ ಕೂಡಿದವರಿಗೆ, ನಾನು ಮೂಲ ಪಠ್ಯವನ್ನು ಆವರಣದಲ್ಲಿ ಬಿಟ್ಟಿದ್ದೇನೆ. ಕೆಳಗೆ ಸ್ವಾಗತ.

ಎನ್ವಾಯ್ ಕೋಡ್‌ಬೇಸ್‌ಗಾಗಿ ಕೆಳಮಟ್ಟದ ತಾಂತ್ರಿಕ ದಸ್ತಾವೇಜನ್ನು ಪ್ರಸ್ತುತ ವಿರಳವಾಗಿದೆ. ಇದನ್ನು ಪರಿಹರಿಸಲು, ಎನ್ವಾಯ್‌ನ ವಿವಿಧ ಉಪವ್ಯವಸ್ಥೆಗಳ ಕುರಿತು ಬ್ಲಾಗ್ ಪೋಸ್ಟ್‌ಗಳ ಸರಣಿಯನ್ನು ರಚಿಸಲು ನಾನು ಯೋಜಿಸುತ್ತಿದ್ದೇನೆ. ಇದು ಮೊದಲ ಲೇಖನವಾಗಿರುವುದರಿಂದ, ದಯವಿಟ್ಟು ನಿಮ್ಮ ಅಭಿಪ್ರಾಯ ಮತ್ತು ಭವಿಷ್ಯದ ಲೇಖನಗಳಲ್ಲಿ ನೀವು ಏನು ಆಸಕ್ತಿ ಹೊಂದಿರಬಹುದು ಎಂದು ನನಗೆ ತಿಳಿಸಿ.

ಎನ್ವಾಯ್ ಬಗ್ಗೆ ನನಗೆ ಬರುವ ಸಾಮಾನ್ಯ ತಾಂತ್ರಿಕ ಪ್ರಶ್ನೆಗಳಲ್ಲಿ ಒಂದು ಅದರ ಥ್ರೆಡಿಂಗ್ ಮಾದರಿಯ ಕೆಳಮಟ್ಟದ ವಿವರಣೆಯ ವಿನಂತಿಯಾಗಿದೆ. ಈ ಪೋಸ್ಟ್‌ನಲ್ಲಿ, ಎನ್ವಾಯ್ ಥ್ರೆಡ್‌ಗಳಿಗೆ ಸಂಪರ್ಕಗಳನ್ನು ಹೇಗೆ ನಕ್ಷೆ ಮಾಡುತ್ತದೆ ಎಂಬುದನ್ನು ನಾನು ವಿವರಿಸುತ್ತೇನೆ, ಜೊತೆಗೆ ಕೋಡ್ ಅನ್ನು ಹೆಚ್ಚು ಸಮಾನಾಂತರ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಮಾಡಲು ಆಂತರಿಕವಾಗಿ ಬಳಸುವ ಥ್ರೆಡ್ ಲೋಕಲ್ ಸ್ಟೋರೇಜ್ ಸಿಸ್ಟಮ್ ಅನ್ನು ವಿವರಿಸುತ್ತೇನೆ.

ಥ್ರೆಡಿಂಗ್ ಅವಲೋಕನ

[ಅನುವಾದ] ಎನ್ವಾಯ್ ಥ್ರೆಡಿಂಗ್ ಮಾದರಿ

ಎನ್ವಾಯ್ ಮೂರು ವಿಭಿನ್ನ ರೀತಿಯ ಸ್ಟ್ರೀಮ್‌ಗಳನ್ನು ಬಳಸುತ್ತಾರೆ:

  • ಮುಖ್ಯ: ಈ ಥ್ರೆಡ್ ಪ್ರಕ್ರಿಯೆ ಪ್ರಾರಂಭ ಮತ್ತು ಸ್ಥಗಿತಗೊಳಿಸುವಿಕೆ, DNS, ಆರೋಗ್ಯ ತಪಾಸಣೆ, ಸಾಮಾನ್ಯ ಕ್ಲಸ್ಟರ್ ಮತ್ತು ರನ್‌ಟೈಮ್ ನಿರ್ವಹಣೆ, ಅಂಕಿಅಂಶಗಳ ಮರುಹೊಂದಿಸುವಿಕೆ, ಆಡಳಿತ ಮತ್ತು ಸಾಮಾನ್ಯ ಪ್ರಕ್ರಿಯೆ ನಿರ್ವಹಣೆ ಸೇರಿದಂತೆ ಎಲ್ಲಾ XDS (xDiscovery ಸೇವೆ) API ಸಂಸ್ಕರಣೆಯನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. Linux ಸಿಗ್ನಲ್‌ಗಳು, ಹಾಟ್ ರೀಸ್ಟಾರ್ಟ್‌ಗಳು, ಇತ್ಯಾದಿ. ಈ ಥ್ರೆಡ್‌ನಲ್ಲಿ ನಡೆಯುವ ಎಲ್ಲವೂ ಅಸಮಕಾಲಿಕ ಮತ್ತು ನಿರ್ಬಂಧಿಸದಂತಿದೆ. ಒಟ್ಟಾರೆಯಾಗಿ, ಮುಖ್ಯ ಥ್ರೆಡ್ ದೊಡ್ಡ CPU ಅಗತ್ಯವಿಲ್ಲದ ಎಲ್ಲಾ ನಿರ್ಣಾಯಕ ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ಸಂಘಟಿಸುತ್ತದೆ. ಇದು ಹೆಚ್ಚಿನ ನಿಯಂತ್ರಣ ಕೋಡ್ ಅನ್ನು ಒಂದೇ-ಥ್ರೆಡ್ ಮಾಡಿದಂತೆ ಬರೆಯಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
  • ಕೆಲಸಗಾರ: ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ, ಎನ್ವಾಯ್ ವ್ಯವಸ್ಥೆಯಲ್ಲಿನ ಪ್ರತಿಯೊಂದು ಹಾರ್ಡ್‌ವೇರ್ ಥ್ರೆಡ್‌ಗೆ ವರ್ಕರ್ ಥ್ರೆಡ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ, ಇದನ್ನು ಆಯ್ಕೆಯೊಂದಿಗೆ ನಿಯಂತ್ರಿಸಬಹುದು --concurrencyಪ್ರತಿಯೊಂದು ವರ್ಕರ್ ಥ್ರೆಡ್ ನಿರ್ಬಂಧಿಸದ ಈವೆಂಟ್ ಲೂಪ್ ಅನ್ನು ನಡೆಸುತ್ತದೆ, ಇದು ಪ್ರತಿಯೊಬ್ಬ ಕೇಳುಗರನ್ನು ಆಲಿಸುವ ಜವಾಬ್ದಾರಿಯನ್ನು ಹೊಂದಿದೆ (ಬರೆಯುವ ಸಮಯದಲ್ಲಿ (ಜುಲೈ 29, 2017) ಯಾವುದೇ ಕೇಳುಗ ಶಾರ್ಡಿಂಗ್ ಇಲ್ಲ), ಹೊಸ ಸಂಪರ್ಕಗಳನ್ನು ಸ್ವೀಕರಿಸುವುದು, ಸಂಪರ್ಕಕ್ಕಾಗಿ ಫಿಲ್ಟರ್ ಸ್ಟ್ಯಾಕ್ ಅನ್ನು ತ್ವರಿತಗೊಳಿಸುವುದು ಮತ್ತು ಸಂಪರ್ಕದ ಜೀವಿತಾವಧಿಯಲ್ಲಿ ಎಲ್ಲಾ I/O ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು. ಮತ್ತೊಮ್ಮೆ, ಇದು ಹೆಚ್ಚಿನ ಸಂಪರ್ಕ-ನಿರ್ವಹಣಾ ಕೋಡ್ ಅನ್ನು ಏಕ-ಥ್ರೆಡ್ ಮಾಡಿದಂತೆ ಬರೆಯಲು ಅನುಮತಿಸುತ್ತದೆ.
  • ಫೈಲ್ ಫ್ಲಶರ್: ಎನ್ವಾಯ್ ಬರೆಯುವ ಪ್ರತಿಯೊಂದು ಫೈಲ್, ಪ್ರಾಥಮಿಕವಾಗಿ ಲಾಗ್‌ಗಳನ್ನು ಪ್ರವೇಶಿಸುತ್ತದೆ, ಪ್ರಸ್ತುತ ಸ್ವತಂತ್ರ ಲಾಕಿಂಗ್ ಥ್ರೆಡ್ ಅನ್ನು ಹೊಂದಿದೆ. ಏಕೆಂದರೆ ಫೈಲ್ ಸಿಸ್ಟಮ್‌ನಿಂದ ಕ್ಯಾಶ್ ಮಾಡಲಾದ ಫೈಲ್‌ಗಳಿಗೆ ಬರೆಯುವುದು, ಬಳಸುವಾಗಲೂ ಸಹ O_NONBLOCK ಕೆಲವೊಮ್ಮೆ ನಿರ್ಬಂಧಿಸಬಹುದು (ನಿಟ್ಟುಸಿರು ಬಿಡಬಹುದು). ಕೆಲಸಗಾರ ಥ್ರೆಡ್‌ಗಳು ಫೈಲ್‌ಗೆ ಬರೆಯಬೇಕಾದಾಗ, ಡೇಟಾವನ್ನು ವಾಸ್ತವವಾಗಿ ಮೆಮೊರಿಯಲ್ಲಿರುವ ಬಫರ್‌ಗೆ ಸರಿಸಲಾಗುತ್ತದೆ, ಅಲ್ಲಿ ಅದನ್ನು ಅಂತಿಮವಾಗಿ ಥ್ರೆಡ್ ಮೂಲಕ ಫ್ಲಶ್ ಮಾಡಲಾಗುತ್ತದೆ. ಫೈಲ್ ಫ್ಲಶ್ಇದು ಕೋಡ್‌ನ ಒಂದು ಕ್ಷೇತ್ರವಾಗಿದ್ದು, ತಾಂತ್ರಿಕವಾಗಿ ಎಲ್ಲಾ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳು ಮೆಮೊರಿ ಬಫರ್ ಅನ್ನು ತುಂಬಲು ಪ್ರಯತ್ನಿಸುವಾಗ ಒಂದೇ ಲಾಕ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಬಹುದು.

ಸಂಪರ್ಕ ನಿರ್ವಹಣೆ

ಮೇಲೆ ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಚರ್ಚಿಸಿದಂತೆ, ಎಲ್ಲಾ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳು ಯಾವುದೇ ವಿಭಜನೆಯಿಲ್ಲದೆ ಎಲ್ಲಾ ಕೇಳುಗರನ್ನು ಕೇಳುತ್ತವೆ. ಹೀಗಾಗಿ, ಕರ್ನಲ್ ಅನ್ನು ಸ್ವೀಕರಿಸಿದ ಸಾಕೆಟ್‌ಗಳನ್ನು ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳಿಗೆ ಬುದ್ಧಿವಂತಿಕೆಯಿಂದ ರವಾನಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. ಆಧುನಿಕ ಕರ್ನಲ್‌ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಇದರಲ್ಲಿ ಬಹಳ ಉತ್ತಮವಾಗಿವೆ, ಅದೇ ಸಾಕೆಟ್‌ನಲ್ಲಿ ಕೇಳುವ ಇತರ ಥ್ರೆಡ್‌ಗಳನ್ನು ನಿಗದಿಪಡಿಸುವ ಮೊದಲು ಥ್ರೆಡ್ ಅನ್ನು ಕೆಲಸದಿಂದ ತುಂಬಲು ಪ್ರಯತ್ನಿಸಲು I/O (IO) ಬೂಸ್ಟ್ ಮಾಡುವಂತಹ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಳಸುತ್ತವೆ ಮತ್ತು ಪ್ರತಿ ವಿನಂತಿಯನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸ್ಪಿನ್‌ಲಾಕ್‌ಗಳನ್ನು ತಪ್ಪಿಸುತ್ತವೆ.
ಒಮ್ಮೆ ವರ್ಕರ್ ಥ್ರೆಡ್‌ನಲ್ಲಿ ಸಂಪರ್ಕವನ್ನು ಸ್ವೀಕರಿಸಿದ ನಂತರ, ಅದು ಎಂದಿಗೂ ಆ ಥ್ರೆಡ್ ಅನ್ನು ಬಿಡುವುದಿಲ್ಲ. ಸಂಪರ್ಕದ ಎಲ್ಲಾ ನಂತರದ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ವರ್ಕರ್ ಥ್ರೆಡ್‌ನಲ್ಲಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ, ಯಾವುದೇ ಫಾರ್ವರ್ಡ್ ಮಾಡುವ ನಡವಳಿಕೆಯೂ ಸೇರಿದಂತೆ.

ಇದು ಹಲವಾರು ಪ್ರಮುಖ ಪರಿಣಾಮಗಳನ್ನು ಹೊಂದಿದೆ:

  • ಎನ್ವಾಯ್‌ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಸಂಪರ್ಕ ಪೂಲ್‌ಗಳು ಪ್ರತಿ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗೆ ಇರುತ್ತವೆ. ಆದ್ದರಿಂದ, HTTP/2 ಸಂಪರ್ಕ ಪೂಲ್‌ಗಳು ಪ್ರತಿ ಅಪ್‌ಸ್ಟ್ರೀಮ್ ಹೋಸ್ಟ್‌ಗೆ ಒಂದು ಸಮಯದಲ್ಲಿ ಒಂದು ಸಂಪರ್ಕವನ್ನು ಮಾತ್ರ ಮಾಡುತ್ತವೆಯಾದರೂ, ನಾಲ್ಕು ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳಿದ್ದರೆ, ಸ್ಥಿರ ಸ್ಥಿತಿಯಲ್ಲಿ ಪ್ರತಿ ಅಪ್‌ಸ್ಟ್ರೀಮ್ ಹೋಸ್ಟ್‌ಗೆ ನಾಲ್ಕು HTTP/2 ಸಂಪರ್ಕಗಳು ಇರುತ್ತವೆ.
  • ಎನ್ವಾಯ್ ಈ ರೀತಿ ಕೆಲಸ ಮಾಡಲು ಕಾರಣವೆಂದರೆ, ಎಲ್ಲವನ್ನೂ ಒಂದೇ ವರ್ಕರ್ ಥ್ರೆಡ್‌ನಲ್ಲಿ ಇರಿಸುವ ಮೂಲಕ, ಬಹುತೇಕ ಎಲ್ಲಾ ಕೋಡ್‌ಗಳನ್ನು ಲಾಕ್-ಫ್ರೀ ಮತ್ತು ಸಿಂಗಲ್-ಥ್ರೆಡ್‌ನಂತೆ ಬರೆಯಬಹುದು. ಈ ವಿನ್ಯಾಸವು ದೊಡ್ಡ ಪ್ರಮಾಣದ ಕೋಡ್ ಬರೆಯುವುದನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಬಹುತೇಕ ಅನಿಯಮಿತ ಸಂಖ್ಯೆಯ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳಿಗೆ ನಂಬಲಾಗದಷ್ಟು ಚೆನ್ನಾಗಿ ಅಳೆಯುತ್ತದೆ.
  • ಆದಾಗ್ಯೂ, ಮೆಮೊರಿ ಪೂಲ್ ಮತ್ತು ಸಂಪರ್ಕ ದಕ್ಷತೆಯ ದೃಷ್ಟಿಕೋನದಿಂದ, ನಿಯತಾಂಕವನ್ನು ಟ್ಯೂನ್ ಮಾಡುವುದು ವಾಸ್ತವವಾಗಿ ಬಹಳ ಮುಖ್ಯ ಎಂಬುದು ಮುಖ್ಯವಾದ ಅಂಶಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ. --concurrencyಅಗತ್ಯಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳನ್ನು ಹೊಂದಿರುವುದು ಮೆಮೊರಿಯನ್ನು ವ್ಯರ್ಥ ಮಾಡುತ್ತದೆ, ಹೆಚ್ಚು ನಿಷ್ಕ್ರಿಯ ಸಂಪರ್ಕಗಳನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ ಮತ್ತು ಸಂಪರ್ಕ ಪೂಲ್ ದರವನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. ಲಿಫ್ಟ್‌ನಲ್ಲಿ, ನಮ್ಮ ಎನ್ವಾಯ್ ಸೈಡ್‌ಕಾರ್ ಕಂಟೇನರ್‌ಗಳು ತುಂಬಾ ಕಡಿಮೆ ಏಕಕಾಲಿಕತೆಯೊಂದಿಗೆ ಚಲಿಸುತ್ತವೆ, ಆದ್ದರಿಂದ ಕಾರ್ಯಕ್ಷಮತೆಯು ಅವುಗಳೊಂದಿಗೆ ನಡೆಸುವ ಸೇವೆಗಳಿಗೆ ಸರಿಸುಮಾರು ಹೊಂದಿಕೆಯಾಗುತ್ತದೆ. ನಾವು ಎನ್ವಾಯ್ ಅನ್ನು ಗರಿಷ್ಠ ಏಕಕಾಲಿಕತೆಯಲ್ಲಿ ಮಾತ್ರ ಎಡ್ಜ್ ಪ್ರಾಕ್ಸಿಯಾಗಿ ನಡೆಸುತ್ತೇವೆ.

ನಿರ್ಬಂಧಿಸದಿರುವುದು ಎಂದರೆ ಏನು?

ಮುಖ್ಯ ಮತ್ತು ಕೆಲಸಗಾರ ಥ್ರೆಡ್‌ಗಳು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂಬುದನ್ನು ಚರ್ಚಿಸುವಾಗ "ನಾನ್-ಬ್ಲಾಕಿಂಗ್" ಎಂಬ ಪದವನ್ನು ಇಲ್ಲಿಯವರೆಗೆ ಹಲವಾರು ಬಾರಿ ಬಳಸಲಾಗಿದೆ. ಎಲ್ಲಾ ಕೋಡ್ ಅನ್ನು ಯಾವುದೂ ಎಂದಿಗೂ ನಿರ್ಬಂಧಿಸುವುದಿಲ್ಲ ಎಂಬ ಊಹೆಯೊಂದಿಗೆ ಬರೆಯಲಾಗಿದೆ. ಆದಾಗ್ಯೂ, ಇದು ಸಂಪೂರ್ಣವಾಗಿ ನಿಜವಲ್ಲ (ಯಾವುದು ಸಂಪೂರ್ಣವಾಗಿ ನಿಜವಲ್ಲ?).

ರಾಯಭಾರಿಯು ಹಲವಾರು ದೀರ್ಘಕಾಲೀನ ಪ್ರಕ್ರಿಯೆ ಲಾಕ್‌ಗಳನ್ನು ಬಳಸುತ್ತಾರೆ:

  • ಮೊದಲೇ ಹೇಳಿದಂತೆ, ಪ್ರವೇಶ ಲಾಗ್‌ಗಳನ್ನು ಬರೆಯುವಾಗ, ಎಲ್ಲಾ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳು ಇನ್-ಮೆಮೊರಿ ಲಾಗ್ ಬಫರ್ ಅನ್ನು ತುಂಬುವ ಮೊದಲು ಒಂದೇ ಲಾಕ್ ಅನ್ನು ಪಡೆದುಕೊಳ್ಳುತ್ತವೆ. ಲಾಕ್ ಧಾರಣ ಸಮಯ ತುಂಬಾ ಕಡಿಮೆ ಇರಬೇಕು, ಆದರೆ ಈ ಲಾಕ್ ಹೆಚ್ಚಿನ ಏಕಕಾಲಿಕತೆ ಮತ್ತು ಥ್ರೋಪುಟ್ ಅಡಿಯಲ್ಲಿ ಸ್ಪರ್ಧಿಸುವ ಸಾಧ್ಯತೆಯಿದೆ.
  • ಥ್ರೆಡ್-ಲೋಕಲ್ ಅಂಕಿಅಂಶಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ರಾಯಭಾರಿ ಬಹಳ ಸಂಕೀರ್ಣವಾದ ವ್ಯವಸ್ಥೆಯನ್ನು ಬಳಸುತ್ತಾರೆ. ಇದು ಪ್ರತ್ಯೇಕ ಪೋಸ್ಟ್‌ನ ವಿಷಯವಾಗಿರುತ್ತದೆ. ಆದಾಗ್ಯೂ, ಥ್ರೆಡ್-ಲೋಕಲ್ ಅಂಕಿಅಂಶಗಳ ಪ್ರಕ್ರಿಯೆಯ ಭಾಗವಾಗಿ, ಕೆಲವೊಮ್ಮೆ ಕೇಂದ್ರ "ಅಂಕಿಅಂಶಗಳ ಅಂಗಡಿ"ಯಲ್ಲಿ ಲಾಕ್ ಅನ್ನು ಪಡೆದುಕೊಳ್ಳುವುದು ಅಗತ್ಯವಾಗಿರುತ್ತದೆ ಎಂದು ನಾನು ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಉಲ್ಲೇಖಿಸುತ್ತೇನೆ. ಈ ಲಾಕ್ ಎಂದಿಗೂ ಅಗತ್ಯವಿಲ್ಲ.
  • ಮುಖ್ಯ ಥ್ರೆಡ್ ನಿಯತಕಾಲಿಕವಾಗಿ ಎಲ್ಲಾ ಕೆಲಸಗಾರರ ಥ್ರೆಡ್‌ಗಳೊಂದಿಗೆ ಸಮನ್ವಯಗೊಳಿಸಬೇಕಾಗುತ್ತದೆ. ಇದನ್ನು ಮುಖ್ಯ ಥ್ರೆಡ್‌ನಿಂದ ಕೆಲಸಗಾರರ ಥ್ರೆಡ್‌ಗಳಿಗೆ ಮತ್ತು ಕೆಲವೊಮ್ಮೆ ಕೆಲಸಗಾರರ ಥ್ರೆಡ್‌ಗಳಿಂದ ಮುಖ್ಯ ಥ್ರೆಡ್‌ಗೆ "ಪ್ರಕಟಿಸುವ" ಮೂಲಕ ಸಾಧಿಸಲಾಗುತ್ತದೆ. ಕಳುಹಿಸಲು ಲಾಕ್ ಅಗತ್ಯವಿರುತ್ತದೆ ಇದರಿಂದ ಪ್ರಕಟಿತ ಸಂದೇಶವನ್ನು ನಂತರದ ವಿತರಣೆಗಾಗಿ ಸರದಿಯಲ್ಲಿ ಇರಿಸಬಹುದು. ಈ ಲಾಕ್‌ಗಳು ಎಂದಿಗೂ ಗಮನಾರ್ಹ ವಿವಾದಕ್ಕೆ ಒಳಪಡಬಾರದು, ಆದರೆ ಅವು ಇನ್ನೂ ತಾಂತ್ರಿಕವಾಗಿ ನಿರ್ಬಂಧಿಸಬಹುದು.
  • ಎನ್ವಾಯ್ ಸಿಸ್ಟಮ್ ದೋಷ ಸ್ಟ್ರೀಮ್‌ಗೆ (ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಎರರ್) ಲಾಗ್ ಅನ್ನು ಬರೆದಾಗ, ಅದು ಸಂಪೂರ್ಣ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಲಾಕ್ ಮಾಡುತ್ತದೆ. ಎನ್ವಾಯ್‌ನ ಸ್ಥಳೀಯ ಲಾಗಿಂಗ್ ಅನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಕಾರ್ಯಕ್ಷಮತೆಯ ವಿಷಯದಲ್ಲಿ ಭಯಾನಕವೆಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ ಅದನ್ನು ಸುಧಾರಿಸಲು ಕಡಿಮೆ ಗಮನ ನೀಡಲಾಗಿದೆ.
  • ಇನ್ನೂ ಕೆಲವು ಯಾದೃಚ್ಛಿಕ ಲಾಕ್‌ಗಳಿವೆ, ಆದರೆ ಅವುಗಳಲ್ಲಿ ಯಾವುದೂ ಕಾರ್ಯಕ್ಷಮತೆ ನಿರ್ಣಾಯಕವಲ್ಲ ಮತ್ತು ಅವುಗಳನ್ನು ಎಂದಿಗೂ ಪ್ರಶ್ನಿಸಬಾರದು.

ಥ್ರೆಡ್ ಸ್ಥಳೀಯ ಸಂಗ್ರಹಣೆ

ಎನ್ವಾಯ್ ಮುಖ್ಯ ಥ್ರೆಡ್‌ನ ಜವಾಬ್ದಾರಿಗಳನ್ನು ವರ್ಕರ್ ಥ್ರೆಡ್‌ನಿಂದ ಬೇರ್ಪಡಿಸುವುದರಿಂದ, ಸಂಕೀರ್ಣ ಸಂಸ್ಕರಣೆಯನ್ನು ಮುಖ್ಯ ಥ್ರೆಡ್‌ನಲ್ಲಿ ನಿರ್ವಹಿಸಬಹುದು ಮತ್ತು ನಂತರ ಪ್ರತಿ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗೆ ಹೆಚ್ಚಿನ ಮಟ್ಟದ ಸಮಾನಾಂತರತೆಯೊಂದಿಗೆ ವಿತರಿಸಬಹುದು ಎಂಬ ಅವಶ್ಯಕತೆಯಿದೆ. ಈ ವಿಭಾಗವು ಎನ್ವಾಯ್‌ನ ಥ್ರೆಡ್ ಲೋಕಲ್ ಸ್ಟೋರೇಜ್ (TLS) ವ್ಯವಸ್ಥೆಯನ್ನು ಉನ್ನತ ಮಟ್ಟದಲ್ಲಿ ವಿವರಿಸುತ್ತದೆ. ಮುಂದಿನ ವಿಭಾಗದಲ್ಲಿ, ಕ್ಲಸ್ಟರ್ ನಿರ್ವಹಣೆಗೆ ಇದನ್ನು ಹೇಗೆ ಬಳಸಲಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ನಾನು ವಿವರಿಸುತ್ತೇನೆ.
[ಅನುವಾದ] ಎನ್ವಾಯ್ ಥ್ರೆಡಿಂಗ್ ಮಾದರಿ

ಮೇಲೆ ವಿವರಿಸಿದಂತೆ, ಮುಖ್ಯ ಥ್ರೆಡ್ ಎನ್ವಾಯ್ ಪ್ರಕ್ರಿಯೆಯೊಳಗಿನ ಎಲ್ಲಾ ನಿರ್ವಹಣೆ ಮತ್ತು ನಿಯಂತ್ರಣ ಪ್ಲೇನ್ ಕಾರ್ಯವನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ನಿಯಂತ್ರಣ ಪ್ಲೇನ್ ಇಲ್ಲಿ ಸ್ವಲ್ಪ ಓವರ್‌ಲೋಡ್ ಆಗಿದೆ, ಆದರೆ ಎನ್ವಾಯ್ ಪ್ರಕ್ರಿಯೆಯೊಳಗೆ ಪರಿಗಣಿಸಿದಾಗ ಮತ್ತು ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳು ನಿರ್ವಹಿಸುವ ಫಾರ್ವರ್ಡ್‌ಗೆ ಹೋಲಿಸಿದರೆ, ಇದು ಸೂಕ್ತವೆಂದು ತೋರುತ್ತದೆ. ಸಾಮಾನ್ಯವಾಗಿ, ಮುಖ್ಯ ಥ್ರೆಡ್ ಪ್ರಕ್ರಿಯೆಯು ಕೆಲವು ಕೆಲಸವನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ ಮತ್ತು ನಂತರ ಆ ಕೆಲಸದ ಫಲಿತಾಂಶಗಳೊಂದಿಗೆ ಪ್ರತಿ ವರ್ಕರ್ ಥ್ರೆಡ್ ಅನ್ನು ನವೀಕರಿಸಬೇಕಾಗುತ್ತದೆ. ಈ ರೀತಿಯಾಗಿ, ವರ್ಕರ್ ಥ್ರೆಡ್ ಪ್ರತಿ ಪ್ರವೇಶಕ್ಕೂ ಲಾಕ್ ಅನ್ನು ಹೊಂದಿಸುವ ಅಗತ್ಯವಿಲ್ಲ..

ರಾಯಭಾರಿಯ TLS (ಥ್ರೆಡ್ ಲೋಕಲ್ ಸ್ಟೋರೇಜ್) ವ್ಯವಸ್ಥೆಯು ಈ ಕೆಳಗಿನಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ:

  • ಮುಖ್ಯ ಥ್ರೆಡ್‌ನಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಕೋಡ್ ಸಂಪೂರ್ಣ ಪ್ರಕ್ರಿಯೆಗೆ TLS ಸ್ಲಾಟ್ ಅನ್ನು ನಿಯೋಜಿಸಬಹುದು. ಇದು ಅಮೂರ್ತವಾಗಿದ್ದರೂ, ಪ್ರಾಯೋಗಿಕವಾಗಿ ಇದು ವೆಕ್ಟರ್‌ಗೆ ಸೂಚ್ಯಂಕವಾಗಿದ್ದು, O(1) ಪ್ರವೇಶವನ್ನು ಒದಗಿಸುತ್ತದೆ.
  • ಮುಖ್ಯ ಥ್ರೆಡ್ ತನ್ನ ಸ್ಲಾಟ್‌ನಲ್ಲಿ ಅನಿಯಂತ್ರಿತ ಡೇಟಾವನ್ನು ಹೊಂದಿಸಬಹುದು. ಇದು ಪೂರ್ಣಗೊಂಡಾಗ, ಡೇಟಾವನ್ನು ಪ್ರತಿ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗೆ ನಿಯಮಿತ ಈವೆಂಟ್ ಲೂಪ್ ಈವೆಂಟ್‌ನಂತೆ ಪ್ರಕಟಿಸಲಾಗುತ್ತದೆ.
  • ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳು ತಮ್ಮ TLS ಸ್ಲಾಟ್‌ನಿಂದ ಓದಬಹುದು ಮತ್ತು ಅಲ್ಲಿ ಲಭ್ಯವಿರುವ ಯಾವುದೇ ಥ್ರೆಡ್-ಸ್ಥಳೀಯ ಡೇಟಾವನ್ನು ಹಿಂಪಡೆಯಬಹುದು.

ಇದು ತುಂಬಾ ಸರಳ ಮತ್ತು ನಂಬಲಾಗದಷ್ಟು ಶಕ್ತಿಯುತವಾದ ಮಾದರಿಯಾಗಿದ್ದರೂ, ಇದು RCU (ರೀಡ್-ಕಾಪಿ-ಅಪ್‌ಡೇಟ್) ಲಾಕಿಂಗ್‌ನ ಪರಿಕಲ್ಪನೆಗೆ ಹೋಲುತ್ತದೆ. ಮೂಲಭೂತವಾಗಿ, ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳು ಕಾರ್ಯಗತಗೊಳಿಸುವಾಗ TLS ಸ್ಲಾಟ್‌ಗಳಲ್ಲಿನ ಡೇಟಾಗೆ ಯಾವುದೇ ಬದಲಾವಣೆಗಳನ್ನು ಎಂದಿಗೂ ನೋಡುವುದಿಲ್ಲ. ಕೆಲಸದ ಘಟನೆಗಳ ನಡುವಿನ ಶಾಂತ ಅವಧಿಯಲ್ಲಿ ಮಾತ್ರ ಬದಲಾವಣೆಗಳು ಸಂಭವಿಸುತ್ತವೆ.

ರಾಯಭಾರಿ ಇದನ್ನು ಎರಡು ವಿಭಿನ್ನ ರೀತಿಯಲ್ಲಿ ಬಳಸುತ್ತಾರೆ:

  • ಪ್ರತಿಯೊಂದು ಕೆಲಸಗಾರ ಥ್ರೆಡ್‌ನಲ್ಲಿ ವಿಭಿನ್ನ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುವ ಮೂಲಕ, ಈ ಡೇಟಾವನ್ನು ಯಾವುದೇ ಲಾಕ್ ಮಾಡದೆ ಪ್ರವೇಶಿಸಬಹುದು.
  • ಪ್ರತಿ ವರ್ಕರ್ ಥ್ರೆಡ್‌ನಲ್ಲಿ ಓದಲು-ಮಾತ್ರ ಮೋಡ್‌ನಲ್ಲಿ ಜಾಗತಿಕ ಡೇಟಾಗೆ ಹಂಚಿಕೆಯ ಪಾಯಿಂಟರ್ ಅನ್ನು ನಿರ್ವಹಿಸುವ ಮೂಲಕ. ಈ ರೀತಿಯಾಗಿ, ಪ್ರತಿ ವರ್ಕರ್ ಥ್ರೆಡ್ ಕೆಲಸ ನಡೆಯುತ್ತಿರುವಾಗ ಕಡಿಮೆ ಮಾಡಲಾಗದ ಡೇಟಾಗೆ ಉಲ್ಲೇಖ ಎಣಿಕೆಯನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಎಲ್ಲಾ ಕೆಲಸಗಾರರು ಹೊಸ ಹಂಚಿಕೆಯ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡುವುದನ್ನು ಪೂರ್ಣಗೊಳಿಸಿದಾಗ ಮಾತ್ರ ಹಳೆಯ ಡೇಟಾ ನಾಶವಾಗುತ್ತದೆ. ಇದು RCU ಗೆ ಹೋಲುತ್ತದೆ.

ಕ್ಲಸ್ಟರ್ ಅಪ್‌ಡೇಟ್ ಥ್ರೆಡಿಂಗ್

ಈ ವಿಭಾಗದಲ್ಲಿ, ಕ್ಲಸ್ಟರ್ ನಿರ್ವಹಣೆಗಾಗಿ TLS (ಥ್ರೆಡ್ ಲೋಕಲ್ ಸ್ಟೋರೇಜ್) ಅನ್ನು ಹೇಗೆ ಬಳಸಲಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ನಾನು ವಿವರಿಸುತ್ತೇನೆ. ಕ್ಲಸ್ಟರ್ ನಿರ್ವಹಣೆಯು xDS ಮತ್ತು/ಅಥವಾ DNS API ಗಳನ್ನು ನಿರ್ವಹಿಸುವುದರ ಜೊತೆಗೆ ಆರೋಗ್ಯ ತಪಾಸಣೆಯನ್ನು ಒಳಗೊಂಡಿದೆ.
[ಅನುವಾದ] ಎನ್ವಾಯ್ ಥ್ರೆಡಿಂಗ್ ಮಾದರಿ

ಕ್ಲಸ್ಟರ್ ಹರಿವಿನ ನಿರ್ವಹಣೆಯು ಈ ಕೆಳಗಿನ ಘಟಕಗಳು ಮತ್ತು ಹಂತಗಳನ್ನು ಒಳಗೊಂಡಿದೆ:

  1. ಕ್ಲಸ್ಟರ್ ಮ್ಯಾನೇಜರ್ ಎನ್ನುವುದು ಎನ್ವಾಯ್‌ನೊಳಗಿನ ಒಂದು ಘಟಕವಾಗಿದ್ದು, ಇದು ಎಲ್ಲಾ ತಿಳಿದಿರುವ ಕ್ಲಸ್ಟರ್ ಅಪ್‌ಸ್ಟ್ರೀಮ್‌ಗಳು, CDS (ಕ್ಲಸ್ಟರ್ ಡಿಸ್ಕವರಿ ಸರ್ವಿಸ್) API, SDS (ಸೀಕ್ರೆಟ್ ಡಿಸ್ಕವರಿ ಸರ್ವಿಸ್) ಮತ್ತು EDS (ಎಂಡ್‌ಪಾಯಿಂಟ್ ಡಿಸ್ಕವರಿ ಸರ್ವಿಸ್) API ಗಳು, DNS ಮತ್ತು ಸಕ್ರಿಯ ಬಾಹ್ಯ ಆರೋಗ್ಯ ತಪಾಸಣೆಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಪತ್ತೆಯಾದ ಹೋಸ್ಟ್‌ಗಳು ಮತ್ತು ಅವುಗಳ ಆರೋಗ್ಯ ಸ್ಥಿತಿಯನ್ನು ಒಳಗೊಂಡಿರುವ ಪ್ರತಿಯೊಂದು ಕ್ಲಸ್ಟರ್ ಅಪ್‌ಸ್ಟ್ರೀಮ್‌ನ ಅಂತಿಮವಾಗಿ ಸ್ಥಿರವಾದ ನೋಟವನ್ನು ರಚಿಸುವ ಜವಾಬ್ದಾರಿಯನ್ನು ಇದು ಹೊಂದಿದೆ.
  2. ಆರೋಗ್ಯ ಪರೀಕ್ಷಕರು ಸಕ್ರಿಯ ಆರೋಗ್ಯ ತಪಾಸಣೆ ನಡೆಸುತ್ತಾರೆ ಮತ್ತು ಆರೋಗ್ಯ ಸ್ಥಿತಿಯ ಬದಲಾವಣೆಗಳನ್ನು ಕ್ಲಸ್ಟರ್ ವ್ಯವಸ್ಥಾಪಕರಿಗೆ ವರದಿ ಮಾಡುತ್ತಾರೆ.
  3. ಕ್ಲಸ್ಟರ್ ಸದಸ್ಯತ್ವವನ್ನು ನಿರ್ಧರಿಸಲು CDS (ಕ್ಲಸ್ಟರ್ ಡಿಸ್ಕವರಿ ಸೇವೆ) / SDS (ಸೀಕ್ರೆಟ್ ಡಿಸ್ಕವರಿ ಸೇವೆ) / EDS (ಎಂಡ್‌ಪಾಯಿಂಟ್ ಡಿಸ್ಕವರಿ ಸೇವೆ) / DNS ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಸ್ಥಿತಿ ಬದಲಾವಣೆಯನ್ನು ಕ್ಲಸ್ಟರ್ ವ್ಯವಸ್ಥಾಪಕರಿಗೆ ಹಿಂತಿರುಗಿಸಲಾಗುತ್ತದೆ.
  4. ಪ್ರತಿಯೊಂದು ಕೆಲಸಗಾರ ಥ್ರೆಡ್ ನಿರಂತರವಾಗಿ ಈವೆಂಟ್ ಸಂಸ್ಕರಣಾ ಲೂಪ್ ಅನ್ನು ನಡೆಸುತ್ತದೆ.
  5. ಕ್ಲಸ್ಟರ್‌ನ ಸ್ಥಿತಿ ಬದಲಾಗಿದೆ ಎಂದು ಕ್ಲಸ್ಟರ್ ಮ್ಯಾನೇಜರ್ ನಿರ್ಧರಿಸಿದಾಗ, ಅದು ಕ್ಲಸ್ಟರ್ ಸ್ಥಿತಿಯ ಹೊಸ ಓದಲು-ಮಾತ್ರ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಪ್ರತಿ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗೆ ಕಳುಹಿಸುತ್ತದೆ.
  6. ಮುಂದಿನ ಸ್ತಬ್ಧ ಅವಧಿಯಲ್ಲಿ, ವರ್ಕರ್ ಥ್ರೆಡ್ ನಿಗದಿಪಡಿಸಿದ TLS ಸ್ಲಾಟ್‌ನಲ್ಲಿ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ಅನ್ನು ನವೀಕರಿಸುತ್ತದೆ.
  7. ಲೋಡ್ ಬ್ಯಾಲೆನ್ಸಿಂಗ್‌ಗಾಗಿ ಹೋಸ್ಟ್ ಅನ್ನು ಗುರುತಿಸುವ I/O ಈವೆಂಟ್‌ನಲ್ಲಿ, ಲೋಡ್ ಬ್ಯಾಲೆನ್ಸರ್ ಹೋಸ್ಟ್ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಲು TLS (ಥ್ರೆಡ್ ಲೋಕಲ್ ಸ್ಟೋರೇಜ್) ಸ್ಲಾಟ್ ಅನ್ನು ಪ್ರಶ್ನಿಸುತ್ತದೆ. ಇದಕ್ಕೆ ಲಾಕ್‌ಗಳ ಅಗತ್ಯವಿಲ್ಲ. TLS ಅಪ್‌ಡೇಟ್ ಈವೆಂಟ್‌ಗಳನ್ನು ಸಹ ಪ್ರಚೋದಿಸಬಹುದು ಎಂಬುದನ್ನು ಗಮನಿಸಿ, ಆದ್ದರಿಂದ ಲೋಡ್ ಬ್ಯಾಲೆನ್ಸರ್‌ಗಳು ಮತ್ತು ಇತರ ಘಟಕಗಳು ಕ್ಯಾಶ್‌ಗಳು, ಡೇಟಾ ರಚನೆಗಳು ಮತ್ತು ಮುಂತಾದವುಗಳನ್ನು ಮರು ಲೆಕ್ಕಾಚಾರ ಮಾಡಬಹುದು. ಇದು ಈ ಪೋಸ್ಟ್‌ನ ವ್ಯಾಪ್ತಿಯನ್ನು ಮೀರಿದೆ, ಆದರೆ ಕೋಡ್‌ನಲ್ಲಿ ವಿವಿಧ ಸ್ಥಳಗಳಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ.

ಮೇಲಿನ ಕಾರ್ಯವಿಧಾನವನ್ನು ಬಳಸಿಕೊಂಡು, ಎನ್ವಾಯ್ ಯಾವುದೇ ನಿರ್ಬಂಧವಿಲ್ಲದೆ ಪ್ರತಿಯೊಂದು ವಿನಂತಿಯನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬಹುದು (ಹಿಂದೆ ವಿವರಿಸಿದವುಗಳನ್ನು ಹೊರತುಪಡಿಸಿ). TLS ಕೋಡ್‌ನ ಸಂಕೀರ್ಣತೆಯನ್ನು ಮೀರಿ, ಹೆಚ್ಚಿನ ಕೋಡ್‌ಗೆ ಮಲ್ಟಿಥ್ರೆಡಿಂಗ್‌ನ ತಿಳುವಳಿಕೆ ಅಗತ್ಯವಿಲ್ಲ ಮತ್ತು ಏಕ-ಥ್ರೆಡ್‌ನಲ್ಲಿ ಬರೆಯಬಹುದು. ಇದು ಹೆಚ್ಚಿನ ಕೋಡ್ ಅನ್ನು ಬರೆಯಲು ಸುಲಭಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಅತ್ಯುತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ.

TLS ಬಳಸುವ ಇತರ ಉಪವ್ಯವಸ್ಥೆಗಳು

ಎನ್ವಾಯ್‌ನಲ್ಲಿ TLS (ಥ್ರೆಡ್ ಲೋಕಲ್ ಸ್ಟೋರೇಜ್) ಮತ್ತು RCU (ರೀಡ್ ಕಾಪಿ ಅಪ್‌ಡೇಟ್) ಅನ್ನು ವ್ಯಾಪಕವಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ.

ಬಳಸುವ ಉದಾಹರಣೆಗಳು:

  • ಕಾರ್ಯಗತಗೊಳಿಸುವಾಗ ಕಾರ್ಯವನ್ನು ಬದಲಾಯಿಸುವ ಕಾರ್ಯವಿಧಾನ: ಸಕ್ರಿಯಗೊಳಿಸಲಾದ ಕಾರ್ಯನಿರ್ವಹಣೆಯ ಪ್ರಸ್ತುತ ಪಟ್ಟಿಯನ್ನು ಮುಖ್ಯ ಥ್ರೆಡ್‌ನಲ್ಲಿ ಲೆಕ್ಕಹಾಕಲಾಗುತ್ತದೆ. ನಂತರ ಪ್ರತಿಯೊಂದು ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗೆ RCU ಶಬ್ದಾರ್ಥಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಓದಲು-ಮಾತ್ರ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ಅನ್ನು ಒದಗಿಸಲಾಗುತ್ತದೆ.
  • ಮಾರ್ಗ ಕೋಷ್ಟಕಗಳನ್ನು ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆRDS (ರೂಟ್ ಡಿಸ್ಕವರಿ ಸೇವೆ) ಒದಗಿಸಿದ ರೂಟ್ ಟೇಬಲ್‌ಗಳಿಗಾಗಿ, ರೂಟ್ ಟೇಬಲ್‌ಗಳನ್ನು ಮುಖ್ಯ ಥ್ರೆಡ್‌ನಲ್ಲಿ ರಚಿಸಲಾಗುತ್ತದೆ. ನಂತರ RCU (ರೀಡ್ ಕಾಪಿ ಅಪ್‌ಡೇಟ್) ಸೆಮ್ಯಾಂಟಿಕ್ಸ್ ಬಳಸಿ ಪ್ರತಿ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗೆ ಓದಲು-ಮಾತ್ರ ಸ್ನ್ಯಾಪ್‌ಶಾಟ್ ಅನ್ನು ಒದಗಿಸಲಾಗುತ್ತದೆ. ಇದು ರೂಟ್ ಟೇಬಲ್ ಮಾರ್ಪಾಡುಗಳನ್ನು ಪರಮಾಣುವಾಗಿ ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಮಾಡುತ್ತದೆ.
  • HTTP ಹೆಡರ್ ಕ್ಯಾಶಿಂಗ್: ಪ್ರತಿ ವಿನಂತಿಗೆ (ಪ್ರತಿ ಕೋರ್‌ಗೆ ~25K+ RPS ನಲ್ಲಿ) HTTP ಹೆಡರ್ ಅನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುವುದು ತುಂಬಾ ದುಬಾರಿಯಾಗಿದೆ ಎಂದು ತಿಳಿದುಬಂದಿದೆ. ಎನ್ವಾಯ್ ಕೇಂದ್ರೀಯವಾಗಿ ಹೆಡರ್ ಅನ್ನು ಸರಿಸುಮಾರು ಪ್ರತಿ ಅರ್ಧ ಸೆಕೆಂಡಿಗೆ ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ ಮತ್ತು ಅದನ್ನು TLS ಮತ್ತು RCU ಮೂಲಕ ಪ್ರತಿ ಕೆಲಸಗಾರನಿಗೆ ಪೂರೈಸುತ್ತದೆ.

ಇತರ ಪ್ರಕರಣಗಳಿವೆ, ಆದರೆ ಹಿಂದಿನ ಉದಾಹರಣೆಗಳು TLS ಅನ್ನು ಯಾವುದಕ್ಕಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ ಎಂಬುದರ ಬಗ್ಗೆ ಉತ್ತಮ ತಿಳುವಳಿಕೆಯನ್ನು ಒದಗಿಸಬೇಕು.

ತಿಳಿದಿರುವ ಕಾರ್ಯಕ್ಷಮತೆಯ ದೋಷಗಳು

ಎನ್ವಾಯ್ ಒಟ್ಟಾರೆಯಾಗಿ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿದ್ದರೂ, ಹೆಚ್ಚಿನ ಸಹವರ್ತಿತ್ವ ಮತ್ತು ಥ್ರೋಪುಟ್‌ನೊಂದಿಗೆ ಬಳಸಿದಾಗ ಗಮನ ಅಗತ್ಯವಿರುವ ಕೆಲವು ತಿಳಿದಿರುವ ಕ್ಷೇತ್ರಗಳಿವೆ:

  • ಈ ಲೇಖನದಲ್ಲಿ ವಿವರಿಸಿದಂತೆ, ಪ್ರವೇಶ ಲಾಗ್ ಮೆಮೊರಿ ಬಫರ್‌ಗೆ ಬರೆಯುವಾಗ ಎಲ್ಲಾ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳು ಪ್ರಸ್ತುತ ಲಾಕ್ ಅನ್ನು ಪಡೆದುಕೊಳ್ಳುತ್ತವೆ. ಹೆಚ್ಚಿನ ಏಕಕಾಲಿಕತೆ ಮತ್ತು ಹೆಚ್ಚಿನ ಥ್ರೋಪುಟ್‌ಗೆ ಪ್ರತಿ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗೆ ಪ್ರವೇಶ ಲಾಗ್‌ಗಳನ್ನು ಬ್ಯಾಚ್ ಮಾಡುವ ಅಗತ್ಯವಿರುತ್ತದೆ, ಅಂತಿಮ ಫೈಲ್‌ಗೆ ಬರೆಯುವಾಗ ಕ್ರಮಬದ್ಧವಲ್ಲದ ವಿತರಣೆಯ ವೆಚ್ಚದಲ್ಲಿ. ಪರ್ಯಾಯವಾಗಿ, ಪ್ರತಿ ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗೆ ಪ್ರತ್ಯೇಕ ಪ್ರವೇಶ ಲಾಗ್ ಅನ್ನು ರಚಿಸಬಹುದು.
  • ಅಂಕಿಅಂಶಗಳನ್ನು ಹೆಚ್ಚು ಅತ್ಯುತ್ತಮವಾಗಿಸಲಾಗಿದ್ದರೂ, ಅತಿ ಹೆಚ್ಚಿನ ಏಕಕಾಲಿಕತೆ ಮತ್ತು ಥ್ರೋಪುಟ್ ಅಡಿಯಲ್ಲಿ, ವೈಯಕ್ತಿಕ ಅಂಕಿಅಂಶಗಳ ಮೇಲಿನ ಪರಮಾಣು ವಿವಾದದ ಸಾಧ್ಯತೆಯಿದೆ. ಈ ಸಮಸ್ಯೆಗೆ ಪರಿಹಾರವೆಂದರೆ ಕೇಂದ್ರ ಕೌಂಟರ್‌ಗಳ ಆವರ್ತಕ ಮರುಹೊಂದಿಕೆಗಳೊಂದಿಗೆ ಪ್ರತಿ ಕೆಲಸಗಾರ ಥ್ರೆಡ್‌ಗೆ ಕೌಂಟರ್‌ಗಳು. ಇದನ್ನು ನಂತರದ ಪೋಸ್ಟ್‌ನಲ್ಲಿ ಚರ್ಚಿಸಲಾಗುವುದು.
  • ಗಣನೀಯ ಸಂಸ್ಕರಣಾ ಸಂಪನ್ಮೂಲಗಳ ಅಗತ್ಯವಿರುವ ಸಂಪರ್ಕಗಳು ಬಹಳ ಕಡಿಮೆ ಇರುವ ಸನ್ನಿವೇಶದಲ್ಲಿ ಎನ್ವಾಯ್ ಅನ್ನು ನಿಯೋಜಿಸಿದರೆ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ವಾಸ್ತುಶಿಲ್ಪವು ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ. ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳ ನಡುವೆ ಸಂಪರ್ಕಗಳನ್ನು ಸಮವಾಗಿ ವಿತರಿಸಲಾಗುತ್ತದೆ ಎಂಬುದಕ್ಕೆ ಯಾವುದೇ ಗ್ಯಾರಂಟಿ ಇಲ್ಲ. ವರ್ಕರ್ ಕನೆಕ್ಷನ್ ಬ್ಯಾಲೆನ್ಸಿಂಗ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮೂಲಕ ಇದನ್ನು ಪರಿಹರಿಸಬಹುದು, ಇದು ವರ್ಕರ್ ಥ್ರೆಡ್‌ಗಳ ನಡುವೆ ಸಂಪರ್ಕಗಳನ್ನು ವಿನಿಮಯ ಮಾಡಿಕೊಳ್ಳಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.

ತೀರ್ಮಾನ

ಎನ್ವಾಯ್‌ನ ಥ್ರೆಡಿಂಗ್ ಮಾದರಿಯನ್ನು ಪ್ರೋಗ್ರಾಮಿಂಗ್‌ನ ಸುಲಭತೆ ಮತ್ತು ಬೃಹತ್ ಸಮಾನಾಂತರತೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ, ಸರಿಯಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡದಿದ್ದರೆ ಸಂಭಾವ್ಯವಾಗಿ ವ್ಯರ್ಥವಾಗುವ ಮೆಮೊರಿ ಮತ್ತು ಸಂಪರ್ಕ ಬಳಕೆಯ ವೆಚ್ಚದಲ್ಲಿ. ಈ ಮಾದರಿಯು ಅತಿ ಹೆಚ್ಚಿನ ಥ್ರೆಡ್ ಎಣಿಕೆಗಳು ಮತ್ತು ಥ್ರೋಪುಟ್‌ನಲ್ಲಿ ಅಸಾಧಾರಣವಾಗಿ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
ನಾನು ಟ್ವಿಟರ್‌ನಲ್ಲಿ ಸಂಕ್ಷಿಪ್ತವಾಗಿ ಹೇಳಿದಂತೆ, ವಿನ್ಯಾಸವು DPDK (ಡೇಟಾ ಪ್ಲೇನ್ ಡೆವಲಪ್‌ಮೆಂಟ್ ಕಿಟ್) ನಂತಹ ಪೂರ್ಣ-ವೈಶಿಷ್ಟ್ಯಪೂರ್ಣ ಬಳಕೆದಾರ-ಮೋಡ್ ನೆಟ್‌ವರ್ಕಿಂಗ್ ಸ್ಟ್ಯಾಕ್‌ನ ಮೇಲೆಯೂ ಕಾರ್ಯನಿರ್ವಹಿಸಬಹುದು, ಇದು ಸರಕು ಸರ್ವರ್‌ಗಳು ಪೂರ್ಣ L7 ಸಂಸ್ಕರಣೆಯೊಂದಿಗೆ ಪ್ರತಿ ಸೆಕೆಂಡಿಗೆ ಲಕ್ಷಾಂತರ ವಿನಂತಿಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಮುಂದಿನ ಕೆಲವು ವರ್ಷಗಳಲ್ಲಿ ಏನು ನಿರ್ಮಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ನೋಡಲು ಇದು ತುಂಬಾ ಆಸಕ್ತಿದಾಯಕವಾಗಿರುತ್ತದೆ.
ಕೊನೆಯದಾಗಿ ಒಂದು ಸಣ್ಣ ಕಾಮೆಂಟ್: ನಾವು ಎನ್ವಾಯ್ ಗಾಗಿ C++ ಅನ್ನು ಏಕೆ ಆರಿಸಿಕೊಂಡೆವು ಎಂದು ನನ್ನನ್ನು ಹಲವು ಬಾರಿ ಕೇಳಲಾಗಿದೆ. ಕಾರಣವೆಂದರೆ, ಈ ಪೋಸ್ಟ್‌ನಲ್ಲಿ ವಿವರಿಸಿದ ವಾಸ್ತುಶಿಲ್ಪವನ್ನು ನಿರ್ಮಿಸಲು ಸಮರ್ಥವಾಗಿರುವ ಏಕೈಕ ವ್ಯಾಪಕವಾಗಿ ಅಳವಡಿಸಿಕೊಂಡ, ಕೈಗಾರಿಕಾ-ಶಕ್ತಿಯ ಭಾಷೆ ಇದು. C++ ಖಂಡಿತವಾಗಿಯೂ ಎಲ್ಲಾ ಅಥವಾ ಹಲವು ಯೋಜನೆಗಳಿಗೆ ಸೂಕ್ತವಲ್ಲ, ಆದರೆ ಕೆಲವು ಬಳಕೆಯ ಸಂದರ್ಭಗಳಲ್ಲಿ, ಕೆಲಸವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಇದು ಇನ್ನೂ ಏಕೈಕ ಸಾಧನವಾಗಿದೆ.

ಕೋಡ್‌ಗೆ ಲಿಂಕ್‌ಗಳು

ಈ ಪೋಸ್ಟ್‌ನಲ್ಲಿ ಚರ್ಚಿಸಲಾದ ಇಂಟರ್ಫೇಸ್ ಮತ್ತು ಹೆಡರ್ ಅನುಷ್ಠಾನ ಫೈಲ್‌ಗಳಿಗೆ ಲಿಂಕ್‌ಗಳು:

ಮೂಲ: www.habr.com

DDoS ರಕ್ಷಣೆ, VPS VDS ಸರ್ವರ್‌ಗಳೊಂದಿಗೆ ಸೈಟ್‌ಗಳಿಗೆ ವಿಶ್ವಾಸಾರ್ಹ ಹೋಸ್ಟಿಂಗ್ ಅನ್ನು ಖರೀದಿಸಿ 🔥 DDoS ರಕ್ಷಣೆ, VPS VDS ಸರ್ವರ್‌ಗಳೊಂದಿಗೆ ವಿಶ್ವಾಸಾರ್ಹ ವೆಬ್‌ಸೈಟ್ ಹೋಸ್ಟಿಂಗ್ ಅನ್ನು ಖರೀದಿಸಿ | ProHoster