Meteor 3.5 membolehkan pembangun meninggalkan SockJS dan beralih kepada uWebSockets.js dengan hanya satu pemboleh ubah persekitaran, menjanjikan kos CPU, RAM dan pengumpulan sampah (garbage-collection) yang jauh lebih rendah bagi aplikasi yang sangat bergantung pada panggilan kaedah (method calls).

Mengapa perubahan ini penting

Sejak pelancarannya, Meteor telah menghalakan setiap mesej DDP (Distributed Data Protocol) melalui SockJS, sebuah sandaran (fallback) JavaScript yang berfungsi di mana-mana sahaja tetapi tidak pernah direka untuk kelajuan mentah. Versi baharu ini memisahkan lapisan pengangkutan (transport layer), menyediakan titik sambungan (plug-in point) yang menerima sebarang pelaksanaan WebSocket yang mematuhi jangkaan DDP. Menetapkan DDP_TRANSPORT=uws semasa pelancaran akan menukar tetapan lalai kepada uWebSockets.js, sebuah pelayan berasaskan C/C++ yang terkenal dengan daya pemprosesan (throughput) yang tinggi.

Sudut prestasi

Penanda aras yang disertakan dengan versi ini menunjukkan:

  • Penggunaan CPU turun 9%
  • Penggunaan RAM turun 11%
  • Masa jeda pengumpulan sampah (garbage-collection) dikurangkan sebanyak 26%
  • Daya pemprosesan (throughput) meningkat 1.6× dalam penanda aras mikro

Peningkatan ini kelihatan apabila sesebuah aplikasi melakukan banyak panggilan kaedah gaya RPC. Lapisan pengangkutan itu sendiri hanya akan menjadi penghalang (bottleneck) selepas logik perniagaan aplikasi dioptimumkan, jadi pertukaran ini boleh diterjemahkan secara langsung kepada kos pelayan yang lebih rendah.

Cara mencubanya hari ini

Tiada binari berasingan diperlukan—hanya Meteor 3.5. Jalankan aplikasi dengan:

DDP_TRANSPORT=uws meteor run

Pelayan uWebSockets.js mendengar pada portnya sendiri (lalai 5001). Apabila beberapa instans Meteor berkongsi hos yang sama, setiap satu mesti diberikan uws.port yang berbeza melalui METEOR_SETTINGS untuk mengelakkan pertembungan (collisions).

Siapa yang mendapat manfaat, dan siapa yang mungkin tidak melihat banyak perbezaan

  • Beban kerja berat RPC – perkhidmatan yang memanggil banyak kaedah bagi setiap permintaan bakal menjimatkan kitaran CPU dan memori, sekali gus mengurangkan tekanan penskalaan (scaling).
  • Aplikasi berpusatkan Pub/Sub – sebahagian besar kependaman (latency) dalam corak terbit/langgan (publish/subscribe) berpunca daripada pengiraan perbezaan data (data-diff), bukannya daripada lapisan pengangkutan, jadi peningkatan kelajuan adalah sederhana.

Perubahan ini adalah pilihan (opt-in); SockJS kekal sebagai tetapan lalai, mengekalkan keserasian dengan persekitaran di mana WebSocket asli tidak tersedia.

Pertukaran (Trade-offs) dan amaran

Menukar lapisan pengangkutan menambah satu langkah operasi kecil: menguruskan port tambahan dan memastikan ia tidak bertembung dengan perkhidmatan lain. Oleh kerana uWebSockets.js ialah modul asli (native module), ia membawa pertimbangan biasa bagi kebergantungan binari—alat binaan (build tools) mesti ada pada hos penggunaan, dan sebarang kemas kini masa hadapan pada perpustakaan tersebut perlu diuji terhadap kod sumber aplikasi.

Apa yang seterusnya untuk lapisan pengangkutan Meteor

Dengan mendedahkan sempadan yang jelas, Meteor kini menjemput komuniti untuk bereksperimen dengan pengangkutan alternatif—sama ada untuk keperluan keselamatan khusus, sambungan protokol tersuai, atau penalaan prestasi lanjut. Melihat seberapa cepat pelaksanaan pihak ketiga muncul akan menunjukkan sama ada model boleh pasang (pluggable model) ini akan menjadi sebahagian kekal daripada seni bina Meteor.

Rumusan: Pengangkutan DDP boleh pasang Meteor 3.5 membolehkan anda menggantikan timbunan (stack) SockJS lama dengan uWebSockets.js dalam satu arahan sahaja, memberikan daya pemprosesan sehingga 1.6× lebih tinggi dan penjimatan sumber yang ketara bagi aplikasi intensif RPC, sambil mengekalkan tetapan sedia ada tanpa perubahan bagi beban kerja yang tidak memerlukan peningkatan tersebut.