อยากสร้างเว็บที่รับโหลดได้เยอะ มีประสิทธิภาพสูง และจัดการกับ Request ได้แบบไหลลื่น ทำยังไงได้บ้าง ?
.
ต้องเจ้านี่ Nginx ซอฟต์แวร์ที่ช่วยจัดการ Request ต่าง ๆ ได้อย่างมีประสิทธิภาพ !! และวันนี้แอดจะพาเพื่อน ๆ มาทำความรู้จักกับเจ้านี่กันแบบคร่าว ๆ ว่ามันคืออะไร ทำงานยังไง หากพร้อมกันแล้ว ไปติดตามกันได้เลย 👇 😊
.
.
💡 รู้จัก Nginx
Nginx หรืออ่านว่า Engine-X เป็นเว็บเซิร์ฟเวอร์ที่สามารถรองรับผู้ใช้งานได้หลากหลาย และมีประสิทธิภาพสูง เป็น Open-Source รองรับ Reverse Proxying, Caching, Load Balancing สำหรับเซิร์ฟเวอร์ HTTP, TCP และ UDP, และการทำ Media Streaming นอกจากนี้ยังสามารถใช้เป็น Proxy Server สำหรับอีเมล์ (IMAP, POP3, and SMTP) ได้อีกด้วย
.
โดยส่วนใหญ่แล้วจะถูกใช้งานกับเว็บที่มีการอัพโหลด หรือ ดาวน์โหลดบ่อย ๆ หรือใช้ในการ Streaming สามารถรองรับการเชื่อมต่อในปริมาณมาก จัดการ Traffic ได้อย่างมีประสิทธิภาพและรวดเร็ว
.
.
⚙️ Nginx ทำงานยังไง ?
Nginx สร้างขึ้นเพื่อจัดการกับ Request ต่าง ๆ แบบ Asynchronous รับ Request พร้อมกันได้โดยไม่บล็อก Request อื่น ๆ โดยไม่เปลืองหน่วยความจำ กินทรัพยากรน้อย ทำให้ CPU และ RAM ทำงานได้มากยิ่งขึ้นนั่นเอง
.
ซึ่ง Nginx จะมีฟีเจอร์เด่น ๆ ดังนี้
🔹 Reverse proxy with caching
🔹 IPv6
🔹 Load balancing
🔹 FastCGI support with caching
🔹 WebSockets
🔹 Handling of static files, index files, and auto-indexing
🔹 TLS/SSL with SNI
.
NGINX จะถูกวางไว้ระหว่าง Clients และ Web Server เพื่อจัดการ SSL/TLS หรือใช้เพื่อเร่งความเร็วของเว็บ เป็นตัวกลางในการจัดการงานที่อาจจะทำให้เว็บเซิร์ฟเวอร์ของเราช้าลง เช่น Negotiating SSL/TLS, การบีบอัดและแคชเนื้อหาเพื่อปรับปรุงประสิทธิภาพ ซึ่งสามารถใช้กับเว็บที่สร้างขึ้นจากอะไรก็ได้ ไม่ว่าจะเป็น Node.js หรือ PHP ซึ่งส่วนใหญ่แล้วจะแคชเนื้อหาและ Reverse Proxy เพื่อลดภาระงานบนเซิร์ฟเวอร์ ใช้สามารถใช้ประโยชน์จากฮาร์ดแวร์ได้อย่างเต็มที่
.
.
✨ ข้อดี
🔸 มีความปลอดภัย รองรับมาตรฐาน HTTP/2
🔸 รองรับการทำงานของ HTTP
🔸 ประมวลผลได้รวดเร็ว
🔸 ทำงานแบบ Asynchronous รองรับ Request เยอะ ๆ ได้เป็นอย่างดี
.
.
⚠️ ข้อจำกัด
🔹 การ config ค่อนข้างซับซ้อน
🔹 ดูแลจัดการได้ยาก และไม่ค่อยมีความยืดหยุ่น
.
.
📑 อ่านข้อมูลเพิ่มเติมได้ที่นี่ : https://kinsta.com/knowledgebase/what-is-nginx/ , https://www.nginx.com/resources/glossary/nginx/
.
borntoDev - 🦖 สร้างการเรียนรู้ที่ดีสำหรับสายไอทีในทุกวัน
#Nginx #BorntoDev
「node.js http request」的推薦目錄:
- 關於node.js http request 在 BorntoDev Facebook 的最佳解答
- 關於node.js http request 在 Kewang 的資訊進化論 Facebook 的精選貼文
- 關於node.js http request 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
- 關於node.js http request 在 該如何用Node.js 核心模組發送request 呢? - 小馬彬的部落格 的評價
- 關於node.js http request 在 5 ways to make Node.js HTTP requests - YouTube 的評價
- 關於node.js http request 在 How To Make an HTTP Request In Node.js Tutorial - YouTube 的評價
- 關於node.js http request 在 Promise based HTTP client for the browser and node.js - GitHub 的評價
- 關於node.js http request 在 Where is body in a nodejs http.get response? - Stack Overflow 的評價
- 關於node.js http request 在 Node.js HTTP Module - JavaScript Tutorial 的評價
node.js http request 在 Kewang 的資訊進化論 Facebook 的精選貼文
前兩篇分享了 Autocomplete 的實作方式及開發細節,算是少數大家迴響比較多的文章 XDD,下面就來整理一下大家的迴響好了。
---
## 1. 減少傳輸量可以使用 msgpack
小編有聽過 msgpack 但還沒實際了解這是如何運作的。剛查了一下資料 (https://msgpack.org),說是比 JSON 更省資料大小,基本上聽過的語言都有支援。
在前公司也用過 Avro 這類的格式,主打的也是省資料大小。但現在應該還不會考慮改用這類要另外做 serialize 的格式。
主要是基於後端是以 Node.js 為主開發,JSON 已經是原生支援,再引入一種資料格式會增加前後端維護的複雜度。另外就是開發人力,新創小公司要儘量減少工作,目前可以順暢運作就好,還有其他更重要的事要做,等之後用量大了再改也不遲。
---
## 2. 減少傳輸量可以使用 HTTP server 的壓縮機制
這真的是忽略了,忘了 expressjs 只是一套 web framework,在上面對資料做壓縮其實會影響到效率。讓如 nginx 之類的 HTTP server 做壓縮應該才是更好的作法。
不過因為現在的 infra 是建在 heroku 上面,heroku 並沒有原生 nginx 的支援。等量大撐不住的時候,倒是可以優先考慮使用 heroku 的 buildpack 把 nginx 架上去試試 (https://github.com/heroku/heroku-buildpack-nginx)。
另外也有提到用 CDN 做動態壓縮,這就真的沒做過了,也是可以研究的方向之一。
---
## 3. 減少使用者打 server 的次數,加上 debounce time
這大家都主推使用 debounce 方式,前端沒玩很深的小編第一次碰到這個名詞是高職的時候。記得那時上課在教 8051,老師說按按鈕時要加上 15 - 20ms 的 debounce time,避免重複送外部中斷。小編對單晶片實在不在行,但大概記得是這個意思。
剛查了一下資料 (https://css-tricks.com/debouncing-throttling-explained-examples),前端的 debounce time 大概也是類似的意思。在輸入文字後,會 delay n 秒再送出,若是在 n 秒內又有打其他內容的時候,就把之前的 request 從 queue 裡面丟棄,只關注最後一次的 request 就好。
這個應該也是有效減少 request 量的作法了。
---
## 4. 減少使用者打 request 的次數,將已經送出的 request 取消掉
這也是一個不錯的作法,若 A request 已經送出去,但還沒回 response 時又送了 B request 的話,此時可以把 A request 取消。
但要注意就是 A request 目前正在執行的步驟是去 DB 拿資料,或是在 server 本身處理一些基本計算。之前在使用 Java (grizzly + jersey) 開發的時候,若有這種情況發生會常在 log 裡面看到 IOException。
原因是 server 已經準備好資料要回傳給 client,但發現 A request 已經取消,不知道要怎麼回傳時就會發生這個狀況。但也有可能是小編自己沒控制好收發的關係啦 XD
---
關於 Autocomplete 的三篇大概就到這篇為止啦,等上線之後做了哪些調整再來分享給大家知道一下。
#funliday #autocomplete #msgpack #debounce #nginx
node.js http request 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最讚貼文
+++++ตัวอย่างโค้ดเรียกดูข้อมูลของกรมอุตุฯ (เป็น node.js กับ python)++++
ช่วงนี้ไทยอาจเจอมรสุมเข้ามาในช่วง 4-6 ส.ค เราก็ควรติดตามข้อมูลจากกรมอุตุฯ อย่างใกล้ชิดนะครับ ทั้งนี้กรมอุตุฯ เขาเปิดบริการ API มานานพอควร เราสามารถเรียกดูข้อมูลอุตุนิยมวิทยา + ข้อมูลแผ่นดินไหว ได้อย่างง่ายๆ ซึ่งมีอยู่ 11 API ให้เลือกใช้ ตามลิงค์ http://data.tmd.go.th/api/index1.php
แต่ก่อนใช้งานต้องสมัครเว็บข้างบน เพื่อขอ user id กับ user key เสียก่อน แล้วก็จะมีเมลมาให้เรายืนยันอีกที
อันนี้เป็นรูปแบบ url เวลาเรียกดูข้อมูล "ข่าวเตือนภัยสภาพอากาศ ข่าวสารภูมิอากาศ ข่าวการติดตามสภาพอากาศร้าย"
http://data.tmd.go.th/api/WeatherWarningNews/v1/…
ตรงคำว่า demo กับ demokey ก็ให้ใส่ user id กับ user key ที่เราได้มา
ทั้งนี้โดยดีฟอลต์เมื่อส่ง request นี้ไป ก็จะได้ response กลับมาเป็น XML
ถ้าอยากได้ Response แบบ json ก็ให้ใส่ &format=json ต่อท้าย url เดิมประมาณเนี่ย
http://data.tmd.go.th/api/WeatherWarningNews/v1/…
สำหรับตัวอย่างซอร์สโค้ดเขียนโปรแกรม เอาไว้เรียกดูข้อมูล API ของกรมอุตุฯ ผมทำให้ดู 2 ภาษาเป็น Node.js กับ Python
https://gist.github.com/ad…/fbbc2fdeddb43dca3a33eade0d8555c0
สำหรับคู่มือ API อย่างละเอียด ก็ตามลิงค์นี้นะครับ
http://data.tmd.go.th/api/doc/reference/WeatherToday.pdf
node.js http request 在 5 ways to make Node.js HTTP requests - YouTube 的推薦與評價
Learn how to make HTTP requests in Node. js including using different libraries like Axios, Got, SuperAgent, and node-fetch with frontend ... ... <看更多>
node.js http request 在 How To Make an HTTP Request In Node.js Tutorial - YouTube 的推薦與評價
This Nodejs http request tutorial will show you how to get up and running ... js http request request in particular a node js http get request. ... <看更多>
node.js http request 在 該如何用Node.js 核心模組發送request 呢? - 小馬彬的部落格 的推薦與評價
Hi,大家好,這篇想要紀錄如何用Node.js 的核心模組http 來發送request,http 模組有個property 是名為request 的function, http.request() ,可以用 ... ... <看更多>