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

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

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

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

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

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

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

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

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

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

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

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

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

ತಡೆಯದಿರುವುದು ಎಂದರೆ ಏನು?

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

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

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

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

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

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

ದೂತರ TLS (ಥ್ರೆಡ್ ಸ್ಥಳೀಯ ಸಂಗ್ರಹಣೆ) ವ್ಯವಸ್ಥೆಯು ಈ ಕೆಳಗಿನಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ತೀರ್ಮಾನ

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

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

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

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ