নোড.জেএস এর জন্য রাস্পবেরি পাই কনফিগার করা


15

একক পৃষ্ঠা ওয়েব অ্যাপ্লিকেশনগুলিতে একটি বই পড়া আমি এমন একটি অনুচ্ছেদে এসেছিলাম যা আমাকে ভাবতে পেরেছিল:

নোড.জেএস অ-ব্লকিং এবং ইভেন্ট-চালিত। সংক্ষেপে, এর অর্থ হল মাঝারি হার্ডওয়ারের একক নোড.জেএস উদাহরণটি দশক বা কয়েক হাজার সহস্র্মত ওপেন সংযোগগুলি পরিচালনা করতে পারে , যেমন রিয়েল-টাইম মেসেজিংয়ে ব্যবহৃত হয়, যা প্রায়শই আধুনিক এসপিএগুলির একটি অত্যন্ত পছন্দসই বৈশিষ্ট্য।

আমি রাস্পবেরি পাইকে রেলস সার্ভার হিসাবে ব্যবহারের ক্ষেত্রে লক্ষ্য করেছি , তাই নোড.জেএসের কীভাবে?

নোড.জেএস অ্যাপ্লিকেশন পরিবেশন করতে আমি কীভাবে আমার রাস্পবেরি পাই সেটআপ করব?
কেউ কি চেষ্টা করেছেন, টিপস এবং কৌশল আছে, বিবেচনা করার জন্য সম্ভবত গ্যাচচস বা সীমাবদ্ধতা আছে?


সম্পাদনা: ভুল বোঝাবুঝি বা অফ-বিষয়গুলি এড়াতে, আসুন দয়া করে নোড.জেএস এর প্রসঙ্গে রাস্পবেরি পাইতে ফোকাসটি রাখুন:

  1. নোড অ্যাপ্লিকেশনগুলি পরিবেশন করতে রাস্পবেরি পাই কতটা উপযোগী?
  2. যদি এটি হয় তবে সর্বোত্তম ফলাফলের জন্য কীভাবে কেউ রাস্পবেরি পাই টিউন করতে পারে?

যেহেতু বইটি একক পৃষ্ঠার অ্যাপ্লিকেশন সম্পর্কিত, নোড.জেগুলি সেখানে উপস্থিত থাকতে হবে। হ্যাঁ নোড দিয়ে সমস্ত কিছু পরিবেশন করা সম্ভব। তবে আমি সন্দেহ করি যে এটি যে কোনও উত্পাদনের পরিবেশে করা হবে কারণ এটি খুব জটিল এবং বন্ধুত্বপূর্ণ হতে পারে
পাইওটর কুলা

এটি বিস্ময়কর যে আপনি কীভাবে বিভ্রান্তি এড়াতে 2 নির্দিষ্ট প্রশ্ন জিজ্ঞাসা করার উত্তরটি আপডেট করেছিলেন এবং নোড.জেএস ইনস্টল করার জন্য একটি উত্তর চিহ্নিত করেন- যা প্রশ্ন ছিল না? আপনার মূল প্রশ্নটি ছিল, কীভাবে এটি সেট আপ করবেন এবং কোনও পরামর্শ। আমি কেন বিরক্ত করলাম না। এলএল :)
পাইওটার কুলা

1
দেখে মনে হচ্ছে পছন্দটি কখন করা হয়েছিল আপনি এখনও সম্পাদনা করছেন; উত্তর নির্বাচন করা ঠিক উত্তরগুলির মতোই সম্পাদনা করা যেতে পারে, সুতরাং এটি নির্দেশ করার জন্য ধন্যবাদ। :)
মারিউস বুটুক

উত্তর:


14

একটি রাস্পবেরি পাইতে নোড.জেএস পাওয়া

অপরপক্ষে তুমি:

  1. নিজেকে নোড.জেস সংকলন করুন ( পিপমকিন ইতিমধ্যে দেখানো হয়েছে ) - রাস্পবেরি পাইতে প্রায় 2 ঘন্টা সময় নেয়।
  2. অথবা আপনি বাইনারি v0.8.17 ডাউনলোড করতে পারেন

কর্মক্ষমতা

আমি একটি দ্রুত পারফরম্যান্স পরীক্ষা করেছি (মোটামুটি প্রথম ধারণা দেওয়ার জন্য):

  1. আমার রাস্পবেরি পাই ডিফল্ট মেমরি_স্প্লিট (64) দিয়ে ওভারক্লকড (টার্বো)

  2. আমার স্থানীয় নেটওয়ার্কে (৮০২.১১ জি ওয়াইফাই) টেস্টগুলি করা হয়েছিল।

  3. আমি নোড.জেএস ওয়েবসাইট থেকে স্ট্যান্ডার্ড "হ্যালো ওয়ার্ল্ড" উদাহরণটি ব্যবহার করেছি:

    var http = require('http');
    http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end('Hello World\n');
    }).listen(1337, '127.0.0.1');
    console.log('Server running at http://127.0.0.1:1337/');
  4. অ্যাপাচি বেঞ্চ সেটিংস: ab -r -n 10000 -c 100 http://192.168.0.116:1337/

সুতরাং এই পরীক্ষাগুলি কোনও সাধারণ ওয়েব অ্যাপ্লিকেশনের জন্য প্রতিনিধিত্ব করে না (নেটওয়ার্ক সংযোগ এবং স্থানান্তরিত সামগ্রীর দৈর্ঘ্য / জটিলতা উভয়ই)।

ফলাফল

Server Software:        node.js/0.8.17
Server Hostname:        192.168.0.116
Server Port:            1337

Document Path:          /
Document Length:        12 bytes

Concurrency Level:      100
Time taken for tests:   53.824 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1130791 bytes
HTML transferred:       120084 bytes
Requests per second:    185.79 [#/sec] (mean)
Time per request:       538.238 [ms] (mean)
Time per request:       5.382 [ms] (mean, across all concurrent requests)
Transfer rate:          20.52 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        2  178 405.2     40    4975
Processing:     7  342 1136.4     50   31533
Waiting:        6  274 1047.6     48   31533
Total:         11  520 1238.7     94   31581

Percentage of the requests served within a certain time (ms)
  50%     94
  66%    112
  75%    303
  80%    714
  90%   1491
  95%   2499
  98%   3722
  99%   5040
 100%  31581 (longest request)

তুলনা করার জন্য, আমি আমার রাস্পবেরি পাইতে এনগিনেক্সও ইনস্টল করেছিলাম এবং ডিফল্ট "এনজিন্সে স্বাগতম!" দিয়ে একই পরীক্ষা চালিয়েছি! এইচটিএমএল ফাইল:

Server Software:        nginx/1.2.1
Server Hostname:        192.168.0.116
Server Port:            80

Document Path:          /
Document Length:        151 bytes

Concurrency Level:      100
Time taken for tests:   46.959 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      3610361 bytes
HTML transferred:       1510151 bytes
Requests per second:    212.95 [#/sec] (mean)
Time per request:       469.590 [ms] (mean)
Time per request:       4.696 [ms] (mean, across all concurrent requests)
Transfer rate:          75.08 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        2  162 407.8     40    4999
Processing:     5  256 979.8     45   29130
Waiting:        5  256 979.8     45   29130
Total:         32  418 1078.6     88   30477

Percentage of the requests served within a certain time (ms)
  50%     88
  66%     97
  75%    105
  80%    258
  90%   1064
  95%   2382
  98%   3412
  99%   4145
 100%  30477 (longest request)

রাস্পবেরি পাই সেটিংস অনুকূলকরণ

raspi-configনিম্নলিখিত সেটিংস পরিবর্তন করতে ব্যবহার করুন :

  1. জিপিইউর জন্য মেমরি_স্প্লিট 16 এ সেট করুন (সর্বনিম্ন মান)
  2. দ্রুততম র‌্যাম / সিপিইউ সেটিংসের জন্য ওভারক্লাকিং মোডটিকে "টার্বো" এ সেট করুন

9

ওয়েব সার্ভার

Node.JS পাইতে ওয়েব সার্ভার প্রতিস্থাপন হিসাবে ব্যবহার করা যেতে পারে এবং আপনি একা স্ট্যান্ড বা একক পৃষ্ঠার ওয়েব অ্যাপ্লিকেশনগুলি সহজেই তৈরি করতে পারেন।

তবে কেবলমাত্র আপনার তথ্যের জন্য, বেশিরভাগ বাস্তব বিশ্বের অ্যাপ্লিকেশনগুলিতে এটি আধুনিক nginx, হালকা ওজন lighttpdবা চুনযুক্ত তবে সম্পূর্ণ বৈশিষ্ট্যযুক্ত সার্ভারগুলি ব্যবহার করার পরামর্শ দেওয়া হচ্ছে apache2! এবং তারপরে সাইটটি পরিপূরক করতে নোড.জেএস স্ক্রিপ্ট করুন।

স্পষ্টতই সম্ভাবনাগুলি অন্তহীন এবং সবকিছু আপনি কী অর্জন করতে চান তার উপর নির্ভর করে।

রাস্পবেরি পাই?

রাস্পবেরি পাই এই ওয়েব সার্ভারগুলির মধ্যে যে কোনও একটি চালাতে পারে। এটি কোনও গুরুতর জটিলতা ছাড়াই নোড চালাতে পারে এবং কোনও জটিল টুইট ছাড়াই সত্যই দ্রুত।

রাস্পবেরি পাই খুব সক্ষম তবে মেমরির বিভাজনকে কমপক্ষে গ্রাফিক্স এবং সর্বাধিক র্যামে পরিণত করা সবচেয়ে ভাল। আইডিই ব্যবহার করতে ভুলে যান এবং এসএসএইচ এর মাধ্যমে সমস্ত কিছু করুন। আপনার যদি সত্যিই আরও কিছু রস প্রয়োজন হয় তবে বিসিএম চিপের উপর একটি তাপ সিঙ্ক রাখুন এবং সুরক্ষিত বোধের সাথে এটি ওভারক্লক করুন । আরেকটি বিকল্প হ'ল লোড ব্যালেন্সিংয়ে সহায়তা করতে একাধিক পাই ক্লাস্টার হিসাবে ব্যবহার করা হবে। ক্লাস্টারিংয়ের বিষয়ে আপনি এখানে খনন শুরু করতে পারেন।

তবে আপনার কি সত্যিই নোড.জেএস ব্যবহার করা দরকার?

Node.JSআপনি যখন কয়েক হাজার এবং হাজার হাজার অনুরোধের জন্য ডিবিতে সঞ্চয় করা, ছোট ছোট সার্ভারের ওভারহেড দিয়ে ক্যাশে রাখতে বা পুনরায় পড়তে হবে তখন অনুরোধ শুরু করার জন্য (বা প্রত্যাশা করা) ব্যবহার করার উদ্দেশ্য ছিল। সুতরাং আপনি এটি ক্লায়েন্টে জেএস ব্যবহার করে চালনা করেন তবে Node.JSবাস্তবে সি / সি ++ দ্বারা চালিত। সুতরাং আপনার কি প্রয়োজন যদি কাস্টম মডিউল বা বেস কোডের একটি নির্দিষ্ট পরিবর্তন দরকার?

একটি অ্যাপ্লিকেশন যা ওয়েবপৃষ্ঠাগুলি নোড.জেজে পরিবেশন করে, সাধারণত একক অনুরোধে উদাহরণস্বরূপ, অ্যাপাচি ছাড়িয়ে যায় না। নোড.জেএস-এর অবরুদ্ধকরণ বৈশিষ্ট্যটি দুর্দান্ত যদি আপনার বেশিরভাগ দিনের জন্য প্রতি সেকেন্ডে হাজার হাজার অনুরোধ থাকে তবে এটিই যেখানে অ্যাপাচি অবরুদ্ধ হবে এবং ক্রাশ হবে।

একটি বাস্তব বিশ্বের উদাহরণ

ইবে - নিলামের সময় যখন আপনার 30 গুন শেষ হয়। আপনার বেশ কয়েকটি লোক থাকতে পারে যারা পৃষ্ঠাকে জোরালোভাবে রিফ্রেশ করতে এবং বিড বাড়িয়ে তুলতে ব্যবহার করেছিলেন। এখানেই নোড.জেসগুলি জ্বলজ্বল করে, কারণ আজ আপনার আর কোনও রিফ্রেশ দরকার নেই। এর কারণ, জেএস সমস্ত ক্লায়েন্টের কাছ থেকে খুব প্রায়ই নোড.জেজে (300ms ~ 600ms) অ্যাজেক্স করে এবং একটি "বাস্তব জীবনের নিলাম" অভিজ্ঞতা সরবরাহ করতে সক্ষম হয়। ইবে সম্পূর্ণ নোড.জেএস থেকে চালিত হয় না তবে খুব জটিল লোড ভারসাম্যযুক্ত সার্ভার ফার্মগুলিতে।

পাই * তে নোড.জেস তৈরি এবং ইনস্টল করতে:

স্পষ্টতই অন্যের পরিবর্তে নোড.জেএস ব্যবহার করা এবং পাই এর মতো ঝরঝরে ছোট্ট ডিভাইসে না থাকলে নোড কীভাবে শেখা যায় তার মধ্যে কোনও ভুল নেই। সুতরাং আপনি নিজের মতো কোডটি সংকলন করতে পারেন।

$ sudo apt-get install git-core build-essential libssl-dev 
$ mkdir ~/nodeDL && cd ~/nodeDL 
$ git clone https://github.com/joyent/node.git
$ git checkout v0.6.15 (to checkout the most recent stable version at time of writing)

আপডেট: নোডের পরবর্তী সংস্করণগুলি (বর্তমান সংস্করণটি v0.8.18) নীচের বিশেষ পদক্ষেপগুলি ছাড়াই তৈরি করা যেতে পারে

পরবর্তী আমাদের armv6সংকলনের জন্য আর্কিটেকচারটি ব্যবহার করতে সংকলকটি বলতে হবে:

$ export CCFLAGS='-march=armv6'
$ export CXXFLAGS='-march=armv6'
and then edit deps/v8/SConstruct around the line 82 mark, to add “-march=armv6”:
'all': {
   'CCFLAGS':      ['$DIALECTFLAGS', '$WARNINGFLAGS', '-march=armv6'],
   'CXXFLAGS':     ['-fno-rtti', '-fno-exceptions', '-march=armv6'],
 },

তারপরে ভিএফপি 3 এবং সিমুলেটার অংশগুলি সরাতে 157 চিহ্নের চারপাশে শুরু হওয়া লাইনগুলি মন্তব্য করুন। এটি যেহেতু JSON- এর মতো অবজেক্ট, তাই CPPDEFINESলাইনে থাকা কমাটি সরিয়ে ফেলতে ভুলবেন না !

'armeabi:softfp' : {
   'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0']
  # 'vfp3:on': {
  #   'CPPDEFINES' : ['CAN_USE_VFP_INSTRUCTIONS']
  # },
  # 'simulator:none': {
  #   'CCFLAGS':     ['-mfloat-abi=softfp'],
  # }
 },

তারপরে সাধারণ কনফিগার, তৈরি, ইনস্টল প্রক্রিয়া, এনবি আমাকে ওপেনএসএসএল লিপপাথের অবস্থানটি ম্যানুয়ালি নির্দিষ্ট করতে হয়েছিল:

$ ./configure --openssl-libpath=/usr/lib/ssl 
$ make (to compile node (This took 103 minutes!))
$ sudo make install 

এটি এখন, আপনার এখন একটি কার্যকরী নোড.জেএস ইনস্টল করা উচিত!

$ node -v should show you the version number
$ npm -v should show you the version of the Node Package Manager

* তথ্যসূত্র এবং মূল নিবন্ধ

তবে অন্যান্য উত্তরে নির্দেশিত হিসাবে আপনি কেবলমাত্র একটি প্রাক সংকলিত বাইনারি ডাউনলোড করতে পারেন যা কেবল কাজ করবে।

উপসংহার

পাই এর একটি ভাল অংশ খারাপ নয় isn't আপনি পাইতে যে কোনও কিছুই চালাতে পারেন- কেবলমাত্র উত্পাদন স্তরের পারফরম্যান্স আশা করবেন না।


2
ঠিক আছে ... আপনি ঠিক বলেছেন যে আপনি সম্ভবত নোড.জেএসগুলিকে একটি অতিরিক্ত "ফ্রন্ট-এন্ড" ওয়েব সার্ভার যেমন এনগিনেক্সের সাথে সংযুক্ত করতে চান। তবে "আপনি একটি সি / সি ++ বিকাশকারী প্রয়োজন" বলতে আপনার অর্থ কী? যতক্ষণ আপনি নোড.জেএস কোরটিতে কাজ করতে বা প্ল্যাটফর্ম-নির্ভর মডিউলগুলি লিখতে চান না, ততক্ষণ আপনার সি / সি ++ লাগবে না। সাধারণ নোড.জেএস অ্যাপ্লিকেশন বিকাশকারীর জন্য জাভাস্ক্রিপ্ট যথেষ্ট। আমি কোথায় ভুল করেছি?
গোলো রোডেন

আমি এর দ্বারা বোঝানো সমস্তই হ'ল নোড.জেগুলি সি / সি ++ তে লেখা হয়েছিল - যখন আমি নোড.জেএস নিয়ে গবেষণা করছিলাম তখন আমি অনেকগুলি সাইট জুড়ে এসেছি যেগুলি লাইব্রেরিতে কীভাবে প্রসারিত করা যায় তা প্রদর্শিত হয়েছিল। তবে এর জন্য সি / সি ++ তে খাঁটি জ্ঞান প্রয়োজন - বেশিরভাগ উদ্দেশ্যে আপনার প্রয়োজন হবে না - তবে আপনি যদি কখনও এরকম পরিস্থিতিতে অবতরণ করেন তবে নোড.জেএস এর ভুল সমাধান। যেমনটি আমার ক্ষেত্রে হয়েছে।
পাইওটর কুলা

আমার প্রশ্নটি রাস্পবেরি পাই-কেন্দ্রিক --- নোড অ্যাপ্লিকেশনগুলি পরিবেশন করতে রাস্পবেরি পাই কতটা উপযুক্ত? যদি এটি হয় তবে আমি কীভাবে সেরা ফলাফলের জন্য আরপিআই টিউন করব? --- এবং নোড-ফোকাসড নয় --- নোড কতটা ভাল বা খারাপ? তবে আপনার মতামতের জন্য ধন্যবাদ; আমি আরও পরিষ্কার করার জন্য প্রাথমিক প্রশ্নটি সম্পাদনা করব।
মারিয়াস বাটুক

হ্যাঁ আমি প্রশ্নের উত্তর 1 - পাই পাই নোড.জেএস এবং একটি সম্পূর্ণ এলএএমপি স্ট্যাকও হ্যান্ডেল করতে পারে! কিভাবে এটি সূক্ষ্ম সুরক্ষা? এটি আলোচনার জন্য উন্মুক্ত। আপনি কোন সুরক্ষা টিউন করতে চান তা আরও নির্দিষ্ট করুন পারফরম্যান্সে আমার যেটা সহায়তা করতে পারে তা আমিও প্রসারিত করেছি ed
পাইওটর কুলা 21

1
যদি আপনি আপনার দুটি উত্তর এই একটিতে মার্জ করেন তবে আমি উত্সাহিত করব।
জিভিংস 21

1

প্রশ্ন: নোড অ্যাপ্লিকেশনগুলি পরিবেশন করতে রাস্পবেরি পাই কতটা উপযুক্ত?

একটি: খুব ভাল উপযোগী :) এটি সম্পর্কে সন্দেহ নেই।

প্রশ্ন: যদি এটি হয় তবে সর্বোত্তম ফলাফলের জন্য কেউ রাস্পবেরি পাই টিউন করতে পারে?

উত্তর: না! খুব ভাল ডিজাইন করা নোড অ্যাপ্লিকেশন লেখার উপর ফোকাস করুন। আপনার অ্যাপ্লিকেশন স্ক্রিপ্ট অপ্টিমাইজ করার উপায়।

সর্বদা একটি প্রক্সিসার্ভার ব্যবহার করুন, উদাহরণস্বরূপ নিজিনেক্স, কেবল একটি কারণে: নোড.জেএস এখনও তার শৈশব বছরগুলিতে রয়েছে (অ্যাপাচি এর সাথে তুলনা করা), তাই আপনি ধরে নিতে পারেন যে সুরক্ষার সমস্যাগুলি এখনও আবিষ্কার করতে পারে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.