کوارکس ایک سپرسونک ذیلی ایٹمی جاوا ہے۔ فریم ورک کا مختصر جائزہ

کوارکس ایک سپرسونک ذیلی ایٹمی جاوا ہے۔ فریم ورک کا مختصر جائزہ

تعارف

XNUMX مارچ کو، RedHat (جلد ہی IBM) پیش کیا نیا فریم ورک - کوارکوس. ڈویلپرز کے مطابق، یہ فریم ورک GraalVM اور OpenJDK HotSpot پر مبنی ہے اور Kubernetes کے لیے ڈیزائن کیا گیا ہے۔ Quarkus اسٹیک میں شامل ہیں: JPA/Hibernate، JAX-RS/RESTEasy، Eclipse Vert.x، Netty، Apache Camel، Kafka، Prometheus اور دیگر۔

مقصد یہ ہے کہ جاوا کو Kubernetes کی تعیناتی اور سرور لیس ایپلیکیشن ڈویلپمنٹ کے لیے ایک اہم پلیٹ فارم بنانا ہے، جس سے ڈویلپرز کو رد عمل اور لازمی دونوں انداز میں ترقی کے لیے ایک متحد نقطہ نظر فراہم کرنا ہے۔

اگر آپ دیکھیں یہ فریم ورک کی درجہ بندی، پھر Quarkus کہیں "Aggregators/Code Generators" اور "High-level full stack frameworks" کے درمیان ہے۔ یہ پہلے سے ہی ایک ایگریگیٹر سے زیادہ ہے، لیکن یہ مکمل اسٹیک تک بھی نہیں پہنچتا، کیونکہ... پسدید کی ترقی کے لیے موزوں ہے۔

ایپلی کیشن لانچ کی بہت تیز رفتار اور کم میموری کی کھپت کا وعدہ کیا گیا ہے۔ یہاں ڈویلپر کی ویب سائٹ سے ڈیٹا ہے:

شروع سے پہلے جواب تک کا وقت:

تشکیل
باقی
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

روایتی کلاؤڈ مقامی اسٹیک*
4.3
9.5

میموری کی کھپت (Mb):

تشکیل
باقی
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

روایتی کلاؤڈ مقامی اسٹیک*
140
218

متاثر کن، ہے نا؟

*مجھے اس ٹیکنالوجی کے اسٹیک کے بارے میں کوئی معلومات نہیں ملی، ہم فرض کر سکتے ہیں کہ یہ ایک اضافی باڈی کٹ کے ساتھ اسپرنگ بوٹ کی قسم ہے.

ہیلو ورلڈ!

Quarkus میں لکھی گئی سب سے آسان ایپلیکیشن اس طرح نظر آئے گی:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

یہ لفظی طور پر ایک کلاس ہے اور یہ کافی ہے! آپ ڈویلپمنٹ موڈ میں Maven کا استعمال کرتے ہوئے ایپلیکیشن چلا سکتے ہیں:

mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello

ایک باقاعدہ درخواست سے فرق یہ ہے کہ کوئی درخواست کی کلاس نہیں ہے! Quarkus گرم ری لوڈ کو سپورٹ کرتا ہے، لہذا آپ اپنی ایپلیکیشن کو دوبارہ شروع کیے بغیر تبدیل کر سکتے ہیں، جس سے ترقی اور بھی تیز ہو جاتی ہے۔

اس کے بعد کیا ہے؟ آپ تشریح کا استعمال کرتے ہوئے کنٹرولر میں سروس شامل کر سکتے ہیں۔ انجکشن، شامل کرنا. سروس کوڈ:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

کنٹرولر:

@Path("/hello")
public class GreetingResource {

   @Inject
   GreetingService service;

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public String greeting(@PathParam("name") String name) {
       return service.greeting(name);
   }
}

$ curl http://localhost:8080/hello/developer
Hello developer!

نوٹ کریں کہ Quarkus مانوس فریم ورک - CDI اور JAX-RS سے معیاری تشریحات استعمال کرتا ہے۔ اگر آپ پہلے بھی CDI اور JAX-RS کے ساتھ کام کر چکے ہیں تو کچھ نیا سیکھنے کی ضرورت نہیں ہے۔

ڈیٹا بیس کے ساتھ کام کرنا

اداروں کے لیے ہائبرنیٹ اور معیاری JPA تشریحات استعمال کی جاتی ہیں۔ REST کنٹرولرز کی طرح، آپ کو کم از کم کوڈ لکھنے کی ضرورت ہے۔ اسمبلی فائل میں انحصار کی نشاندہی کرنا، تشریحات شامل کرنا کافی ہے۔ @Entity اور application.properties میں ڈیٹا سورس کو ترتیب دیں۔

تمام کوئی sessionFactory، persistence.xml یا دیگر سروس فائلیں نہیں۔ ہم صرف وہی کوڈ لکھتے ہیں جس کی ضرورت ہے۔ تاہم، اگر ضروری ہو تو، آپ persistence.xml فائل بنا سکتے ہیں اور ORM پرت کو زیادہ باریک ترتیب دے سکتے ہیں۔

Quarkus اداروں کی کیشنگ، ایک سے کئی رشتوں کے مجموعے، اور سوالات کی حمایت کرتا ہے۔ پہلی نظر میں یہ بہت اچھا لگتا ہے، لیکن یہ ہے مقامی کیشنگ، ایک Kubernetes نوڈ کے لیے۔ وہ. مختلف نوڈس کے کیچز ایک دوسرے کے ساتھ ہم آہنگ نہیں ہوتے ہیں۔ مجھے امید ہے کہ یہ عارضی ہے۔

غیر مطابقت پذیر کوڈ پر عمل درآمد

جیسا کہ اوپر ذکر کیا گیا ہے، Quarkus ری ایکٹو پروگرامنگ کے انداز کو بھی سپورٹ کرتا ہے۔ پچھلی درخواست کا کوڈ مختلف شکل میں لکھا جا سکتا ہے۔

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage<String> greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hello " + name + "!";
       });
   }
}

اسینکرونس کوڈ کو سروس میں بھی منتقل کیا جا سکتا ہے، نتیجہ ایک جیسا ہوگا۔

ٹیسٹنگ

Quarkus ایپلی کیشنز کے لیے ٹیسٹ JUnit4 یا JUnit5 میں لکھے جا سکتے ہیں۔ ذیل میں اختتامی نقطہ کے لیے ایک مثال ٹیسٹ ہے، یہ RestAssured کا استعمال کرتے ہوئے لکھا گیا ہے، لیکن دوسرا فریم ورک استعمال کیا جا سکتا ہے:

@QuarkusTest
public class GreetingResourceTest {

   @Test
   public void testGreetingEndpoint() {
       String uuid = UUID.randomUUID().toString();
       given()
         .pathParam("name", uuid)
         .when().get("/hello/{name}")
         .then()
           .statusCode(200)
           .body(is("Hello " + uuid + "!"));
   }
}

@QuarkusTest تشریح آپ کو ٹیسٹ چلانے سے پہلے ایپلیکیشن چلانے کی ہدایت کرتی ہے۔ باقی تمام ڈویلپرز سے واقف کوڈ ہے۔

پلیٹ فارم کے لیے مخصوص ایپلی کیشن

چونکہ Quarkus GraalVM کے ساتھ مضبوطی سے مربوط ہے، اس لیے یقیناً پلیٹ فارم کے لیے مخصوص کوڈ تیار کرنا ممکن ہے۔ ایسا کرنے کے لیے، آپ کو GraalVM انسٹال کرنے اور GRAALVM_HOME ماحولیاتی متغیر کی وضاحت کرنے کی ضرورت ہے۔ مزید اسمبلی کے لیے پروفائل رجسٹر کریں۔ اور ایپلیکیشن بناتے وقت اس کی وضاحت کریں:

mvn package -Pnative

دلچسپ بات یہ ہے کہ تیار کردہ ایپلیکیشن کو ٹیسٹ کیا جا سکتا ہے۔ اور یہ اہم ہے کیونکہ مقامی کوڈ کا نفاذ JVM پر عمل درآمد سے مختلف ہو سکتا ہے۔ @SubstrateTest تشریح پلیٹ فارم کے لیے مخصوص ایپلیکیشن کوڈ چلاتی ہے۔ موجودہ ٹیسٹ کوڈ کا دوبارہ استعمال وراثت کا استعمال کرتے ہوئے کیا جا سکتا ہے؛ نتیجے کے طور پر، پلیٹ فارم پر منحصر ایپلیکیشن کی جانچ کا کوڈ اس طرح نظر آئے گا:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

تیار کردہ تصویر کو Docker میں پیک کیا جا سکتا ہے اور Kubernetes یا OpenShift میں چلایا جا سکتا ہے، جس میں تفصیل سے بیان کیا گیا ہے۔ ہدایات.

ٹول کٹ

Quarkus فریم ورک Maven اور Gradle کے ساتھ استعمال کیا جا سکتا ہے۔ Maven مکمل طور پر تعاون یافتہ ہے، گریڈل کے برعکس۔ بدقسمتی سے، اس وقت Gradle خالی پروجیکٹ بنانے کی حمایت نہیں کرتا؛ ویب سائٹ پر تفصیلی معلومات موجود ہیں درسی کتاب.

ایکسٹینشنز

کوارکس ایک قابل توسیع فریم ورک ہے۔ فی الحال ایک آرڈر ہے۔ 40 ایکسٹینشنز، جس میں مختلف فعالیتیں شامل ہوتی ہیں - سپورٹ سے اسپرنگ ڈی آئی کنٹینر и اپاچی اونٹ لاگ ان کرنے اور چلانے والی خدمات کے میٹرکس کو شائع کرنے سے پہلے۔ اور جاوا کے علاوہ کوٹلن میں تحریری ایپلی کیشنز کو سپورٹ کرنے کے لیے پہلے سے ہی ایک توسیع موجود ہے۔

حاصل يہ ہوا

میری رائے میں، Quarkus اس وقت کے رجحانات کے مطابق ہے۔ بیک اینڈ کوڈ ڈویلپمنٹ آسان سے آسان تر ہوتا جا رہا ہے، اور یہ فریم ورک Docker اور Kubernetes کے لیے مقامی تعاون کو شامل کرکے سروس کی ترقی کو مزید آسان اور تیز کرتا ہے۔ ایک بہت بڑا پلس GraalVM اور پلیٹ فارم پر منحصر امیجز کی جنریشن کے لیے بلٹ ان سپورٹ ہے، جو خدمات کو واقعی تیزی سے شروع کرنے اور میموری کی بہت کم جگہ لینے کی اجازت دیتا ہے۔ اور مائیکرو سروسز اور سرور لیس فن تعمیر کے لیے ہمارے بڑے جذبے کے زمانے میں یہ بہت اہم ہے۔

سرکاری سائٹ - quarkus.io. فوری آغاز کے لیے منصوبوں کی مثالیں پہلے سے ہی دستیاب ہیں۔ GitHub کے.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں