Meteor 3.5 ஒரு single environment variable மூலம் SockJS-க்கு பதிலாக uWebSockets.js-ஐப் பயன்படுத்த டெவலப்பர்களுக்கு அனுமதிக்கிறது. இது method calls-களை அதிகம் நம்பியிருக்கும் செயலிகளுக்கு (apps) குறிப்பிடத்தக்க அளவில் குறைந்த CPU, RAM மற்றும் garbage-collection செலவுகளைத் தரும் என்று உறுதியளிக்கிறது.

இந்த மாற்றம் ஏன் முக்கியமானது

தொடக்கம் முதலே, Meteor ஒவ்வொரு DDP (Distributed Data Protocol) செய்தியையும் SockJS வழியாகவே அனுப்பியுள்ளது. SockJS என்பது எல்லா இடங்களிலும் வேலை செய்யும் ஒரு JavaScript fallback ஆகும், ஆனால் இது அதிவேகத்திற்காக வடிவமைக்கப்படவில்லை. இந்த புதிய வெளியீடு transport layer-ஐப் பிரித்து வைக்கிறது (decouples), இதன் மூலம் DDP-ன் எதிர்பார்ப்புகளுக்கு இணங்கக்கூடிய எந்தவொரு WebSocket implementation-ஐயும் ஏற்கும் ஒரு plug-in புள்ளியை வழங்குகிறது. தொடக்கத்தின் போது DDP_TRANSPORT=uws என்று அமைப்பதன் மூலம், இயல்பான (default) அமைப்பிற்குப் பதிலாக அதிக throughput-க்கு பெயர் பெற்ற C/C++ அடிப்படையிலான uWebSockets.js server-ஐ மாற்ற முடியும்.

செயல்திறன் அம்சம்

இந்த வெளியீட்டுடன் வழங்கப்பட்டுள்ள benchmarks பின்வருவனவற்றைக் காட்டுகின்றன:

  • CPU பயன்பாடு 9% குறைந்துள்ளது
  • RAM பயன்பாடு 11% குறைந்துள்ளது
  • Garbage-collection pause time 26% குறைக்கப்பட்டுள்ளது
  • micro-benchmarks-களில் throughput 1.6x அதிகரித்துள்ளது

ஒரு செயலி (application) பல RPC-style method calls-களை மேற்கொள்ளும்போது இந்த முன்னேற்றங்கள் காணப்படுகின்றன. ஒரு செயலியின் business logic மேம்படுத்தப்பட்ட பின்னரே transport ஒரு தடையாக (bottleneck) மாறும், எனவே இந்த மாற்றம் நேரடியாகக் குறைந்த சர்வர் செலவுகளாக மாறும்.

இன்று இதை எப்படி முயற்சி செய்வது?

தனிப்பயனாக்கப்பட்ட binary எதுவும் தேவையில்லை—Meteor 3.5 போதுமானது. செயலியை இவ்வாறு இயக்கவும்:

DDP_TRANSPORT=uws meteor run

uWebSockets.js server அதன் சொந்த port-இல் (default 5001) இயங்கும். பல Meteor instances ஒரே host-ஐப் பகிர்ந்து கொள்ளும்போது, மோதல்களைத் (collisions) தவிர்க்க, ஒவ்வொன்றிற்கும் METEOR_SETTINGS மூலம் தனித்துவமான uws.port ஒதுக்கப்பட வேண்டும்.

யாருக்குப் பயன் கிடைக்கும், யாருக்கு பெரிய மாற்றம் தெரியாது?

  • RPC-heavy workloads – ஒரு request-க்கு பல method calls-களைச் செய்யும் சேவைகள் (services), CPU cycles மற்றும் memory-ஐச் சேமிப்பதன் மூலம் scaling அழுத்தத்தைக் குறைக்க உதவும்.
  • Pub/Sub-centric apps – publish/subscribe முறைகளில் ஏற்படும் பெரும்பாலான தாமதம் (latency) data-diff கணக்கீடுகளிலிருந்து வருகிறது, transport-லிருந்து அல்ல, எனவே வேக அதிகரிப்பு குறைவாகவே இருக்கும்.

இந்த மாற்றம் விருப்பத்தேர்வு (opt-in) மட்டுமே; SockJS இயல்பாகவே தொடரும், இதனால் native WebSockets கிடைக்காத சூழல்களிலும் இணக்கத்தன்மை (compatibility) பேணப்படும்.

சவால்கள் மற்றும் எச்சரிக்கைகள்

Transport-ஐ மாற்றுவது ஒரு சிறிய செயல்பாட்டுப் படிநிலையைச் சேர்க்கிறது: கூடுதல் port-ஐ நிர்வகிப்பது மற்றும் அது மற்ற சேவைகளுடன் மோதாமல் இருப்பதை உறுதி செய்வது. uWebSockets.js ஒரு native module என்பதால், இது வழக்கமான binary dependencies தொடர்பான விஷயங்களைக் கொண்டுவருகிறது—deployment host-இல் build tools இருக்க வேண்டும், மேலும் library-யில் செய்யப்படும் எதிர்கால மாற்றங்களைச் செயலியின் codebase-க்கு எதிராகச் சோதனை செய்ய வேண்டியிருக்கும்.

Meteor-ன் transport layer-ன் அடுத்த கட்டம் என்ன?

ஒரு தெளிவான எல்லையை (boundary) வெளிப்படுத்துவதன் மூலம், Meteor இப்போது சமூகத்தினரை மாற்று transport-களைப் பரிசோதிக்க அழைக்கிறது—அது சிறப்புப் பாதுகாப்புத் தேவைகளுக்காகவோ, custom protocol extensions-க்காகவோ அல்லது கூடுதல் செயல்திறன் மேம்பாட்டிற்காகவோ இருக்கலாம். மூன்றாம் தரப்பு (third-party) implementations எவ்வளவு விரைவாகத் தோன்றுகின்றன என்பதைப் பொறுத்து, இந்த pluggable model Meteor-ன் கட்டமைப்பின் (architecture) ஒரு நிலையான பகுதியாக மாறுமா என்பதை அறியலாம்.

சுருக்கம் (Takeaway): Meteor 3.5-ன் pluggable DDP transport, ஒரு single command மூலம் பழைய SockJS stack-க்கு பதிலாக uWebSockets.js-ஐ மாற்ற அனுமதிக்கிறது. இது RPC-அதிகமுள்ள செயலிகளுக்கு 1.6x வரை அதிக throughput மற்றும் அளவிடக்கூடிய வளச் சேமிப்பை (resource savings) வழங்குகிறது, அதே சமயம் கூடுதல் வேகம் தேவையில்லாத பணிகளுக்கு (workloads) தற்போதைய அமைப்பை மாற்றாமல் அப்படியே வைக்கிறது.