Meteor 3.5 ડેવલપર્સને માત્ર એક એન્વાયરમેન્ટ વેરિયેબલ દ્વારા SockJS ને બદલે uWebSockets.js નો ઉપયોગ કરવાની સુવિધા આપે છે, જે મેથડ કોલ્સ (method calls) પર વધુ આધાર રાખતી એપ્સ માટે CPU, RAM અને ગાર્બેજ-કલેક્શન (garbage-collection) ખર્ચમાં નોંધપાત્ર ઘટાડો કરવાનું વચન આપે છે.

આ ફેરફાર શા માટે મહત્વનો છે

તેની લોન્ચિંગથી, Meteor દરેક DDP (Distributed Data Protocol) મેસેજને SockJS દ્વારા રૂટ કરે છે, જે એક JavaScript fallback છે જે બધે જ કામ કરે છે પરંતુ તેને ક્યારેય અદભૂત ઝડપ માટે ડિઝાઇન કરવામાં આવ્યો ન હતો. નવું રિલીઝ ટ્રાન્સપોર્ટ લેયરને અલગ (decouple) કરે છે, જે એક પ્લગ-ઇન પોઇન્ટ પ્રદાન કરે છે જે DDP ની અપેક્ષાઓ મુજબના કોઈપણ WebSocket અમલીકરણને સ્વીકારે છે. લોન્ચ કરતી વખતે DDP_TRANSPORT=uws સેટ કરવાથી ડિફોલ્ટને બદલે uWebSockets.js સેટ થઈ જાય છે, જે ઉચ્ચ થ્રુપુટ (throughput) માટે જાણીતું C/C++-બેક્ડ સર્વર છે.

પર્ફોર્મન્સનો દ્રષ્ટિકોણ

રિલીઝ સાથે આપવામાં આવેલા બેન્ચમાર્ક દર્શાવે છે:

  • CPU વપરાશમાં 9% નો ઘટાડો
  • RAM વપરાશમાં 11% નો ઘટાડો
  • ગાર્બેજ-કલેક્શન પોઝ ટાઇમમાં 26% નો ઘટાડો
  • માઇક્રો-બેન્ચમાર્કમાં થ્રુપુટમાં 1.6× નો વધારો

જ્યારે કોઈ એપ્લિકેશન ઘણા RPC-સ્ટાઇલ મેથડ કોલ્સ કરે છે ત્યારે આ ફાયદા જોવા મળે છે. ટ્રાન્સપોર્ટ પોતે ત્યારે જ બોટલનેક (bottleneck) બને છે જ્યારે એપ્લિકેશનનું બિઝનેસ લોજિક ઓપ્ટિમાઇઝ થઈ ગયું હોય, તેથી આ બદલાવ સીધો જ સર્વર ખર્ચ ઘટાડવામાં મદદ કરી શકે છે.

આજે તેને કેવી રીતે ટ્રાય કરવું

કોઈ અલગ બાઈનરીની જરૂર નથી—માત્ર Meteor 3.5. એપ્લિકેશન આ રીતે ચલાવો:

DDP_TRANSPORT=uws meteor run

uWebSockets.js સર્વર તેના પોતાના પોર્ટ (ડિફોલ્ટ 5001) પર લિસન કરે છે. જ્યારે એક કરતા વધુ Meteor ઇન્સ્ટન્સ એક જ હોસ્ટ શેર કરતા હોય, ત્યારે કોલિઝન (collisions) ટાળવા માટે METEOR_SETTINGS દ્વારા દરેકને અલગ uws.port ફાળવવો આવશ્યક છે.

કોને ફાયદો થશે, અને કોને બહુ તફાવત નહીં દેખાય

  • RPC-હેવી વર્કલોડ્સ – એવી સેવાઓ જે દરેક રિક્વેસ્ટ દીઠ ઘણા મેથડ્સ કોલ કરે છે, તેઓ CPU સાયકલ અને મેમરી બચાવી શકે છે, જેનાથી સ્કેલિંગનું દબાણ ઓછું થશે.
  • Pub/Sub-કેન્દ્રીત એપ્સ – પબ્લિશ/સબ્સ્ક્રાઇબ પેટર્નમાં મોટાભાગનો લેટન્સી (latency) ડેટા-ડિફ (data-diff) ગણતરીઓમાંથી આવે છે, ટ્રાન્સપોર્ટમાંથી નહીં, તેથી ઝડતમાં વધારો મર્યાદિત રહેશે.

આ ફેરફાર 'ઓપ્ટ-ઇન' (opt-in) છે; SockJS ડિફોલ્ટ તરીકે જ રહેશે, જેથી એવા એન્વાયરમેન્ટ્સ સાથે સુસંગતતા જળવાઈ રહેશે જ્યાં નેટિવ WebSockets ઉપલબ્ધ નથી.

ટ્રેડ-ઓફ્સ અને સાવચેતીઓ

ટ્રાન્સપોર્ટ બદલવાથી એક નાનું ઓપરેશનલ સ્ટેપ ઉમેરાય છે: વધારાના પોર્ટનું સંચાલન કરવું અને તે અન્ય સેવાઓ સાથે અથડાય નહીં તેની ખાતરી કરવી. કારણ કે uWebSockets.js એ નેટિવ મોડ્યુલ છે, તે બાઈનરી ડિપેન્ડન્સીઝના સામાન્ય મુદ્દાઓ લાવે છે—ડિપ્લોયમેન્ટ હોસ્ટ પર બિલ્ડ ટૂલ્સ હોવા જોઈએ, અને લાઇબ્રેરીના કોઈપણ ભવિષ્યના અપડેટ્સ માટે એપ્લિકેશનના કોડબેઝ સામે ટેસ્ટિંગ કરવું પડશે.

Meteor ના ટ્રાન્સપોર્ટ લેયર માટે આગળ શું છે

એક સ્પષ્ટ સીમા (boundary) પ્રદાન કરીને, Meteor હવે સમુદાયને વૈકલ્પિક ટ્રાન્સપોર્ટ્સ સાથે પ્રયોગ કરવા માટે આમંત્રિત કરે છે—પછી તે વિશિષ્ટ સુરક્ષા જરૂરિયાતો માટે હોય, કસ્ટમ પ્રોટોકોલ એક્સટેન્શન માટે હોય, અથવા વધુ પર્ફોર્મન્સ ટ્યુનિંગ માટે હોય. થર્ડ-પાર્ટી અમલીકરણો કેટલી ઝડપથી દેખાય છે તેના પરથી ખબર પડશે કે પ્લગ્ગેબલ મોડલ Meteor ના આર્કિટેક્ચરનો કાયમી ભાગ બનશે કે નહીં.

મુખ્ય વાત: Meteor 3.5 નું પ્લગ્ગેબલ DDP ટ્રાન્સપોર્ટ તમને માત્ર એક કમાન્ડમાં લેગસી SockJS સ્ટેકને uWebSockets.js સાથે બદલવાની સુવિધા આપે છે, જે RPC-ઇન્ટેન્સિવ એપ્લિકેશન્સ માટે 1.6× સુધી વધુ થ્રુપુટ અને માપી શકાય તેવા રિસોર્સ બચત પૂરી પાડે છે, જ્યારે જે વર્કલોડ્સને વધારાની ઝડતની જરૂર નથી તેના માટે હાલનું સેટઅપ અસ્પૃશ્ય રાખે છે.