- JRuby เป็นเทคโนโลยีที่รวมความได้เปรียบด้านความคล่องตัวของ Ruby เข้ากับประสิทธิภาพของ JVM ขณะที่ JBang ให้การจัดการ dependency และสภาพแวดล้อมการรันที่เรียบง่าย
- การผสานเครื่องมือทั้งสองเข้าด้วยกันทำให้สามารถใช้ไลบรารี Ruby และ Java ร่วมกันได้
- JBang: เครื่องมือสำหรับรันโปรแกรม Java/Kotlin/Groovy และจัดการ dependency ได้อย่างง่ายดาย
- JRuby: การใช้งาน Ruby ที่ทำงานบน JVM ซึ่งผสานความคล่องตัวของ Ruby เข้ากับประสิทธิภาพของ JVM
- การจัดการ dependency ที่จำเป็นในการใช้ไลบรารี Java กับ JRuby (เช่น Gradle/Maven ฯลฯ) นั้นค่อนข้างซับซ้อนและยุ่งยาก
- จึงทดลองใช้ JBang เพื่อจัดการ dependency อย่างง่าย และตรวจสอบวิธีรันสคริปต์ JRuby
- การตั้งค่าสภาพแวดล้อมบน Docker
- ใช้ Docker image ที่อิงตาม Amazon Corretto (JDK)
- ดาวน์โหลดและติดตั้ง JRuby กับ JBang แล้วเพิ่มลงใน PATH
- รวม Ruby Gem และไลบรารี Java ทั้งหมดผ่าน Dockerfile
- สร้าง RunJRuby.java อย่างง่าย: จัดการ dependency ของ Java ผ่าน JBang และรันสคริปต์ JRuby
- กำหนดสภาพแวดล้อมการรัน JRuby ด้วย
ProcessBuilder
- ส่ง dependency ของ Java ให้กับ JRuby ผ่านการตั้งค่า CLASSPATH
- ใช้ Javalin (เว็บเฟรมเวิร์กบน Java) ร่วมกับ JRuby เพื่อสร้าง REST API
- เพิ่มการยืนยันตัวตนด้วย JWT และสร้าง CRUD API โดยรวมกับ SQLite DB
- ใน Java ใช้ไลบรารีประสิทธิภาพสูงสำหรับงาน HTTP และฐานข้อมูล ส่วน Ruby ใช้ประมวลผลตรรกะทางธุรกิจ
- ผลการทดสอบประสิทธิภาพ
- รันการวัดเวลาตอบสนองของคำขอ 1,500 รายการ (พร้อมกัน 25 รายการ) ด้วยเครื่องมือ Apache Benchmark (ab)
- ผลลัพธ์: คำขอ 95% ถูกประมวลผลภายใน 10ms
- ใช้ Javalin เวอร์ชันล่าสุดและ Virtual Threads เพื่อให้ได้ประสิทธิภาพสูง
- ผสานข้อดีของ Ruby และ Java เข้าด้วยกันเพื่อให้ได้ทั้งความคล่องตัวและประสิทธิภาพ
- GitHub Repo : jbang-jruby-javalin เพื่อการอ้างอิง
1 ความคิดเห็น
Java+Groovy ความรั่วไหลของหน่วยความจำที่ร้ายแรง
เคยเห็นกรณีที่เกิดการรั่วไหลของหน่วยความจำเมื่อรันสคริปต์บน JVM ในบางเงื่อนไขมาก่อน จึงสงสัยว่า jruby จะเป็นอย่างไร