كواركوس هي جاوة دون الذرية الأسرع من الصوت. لمحة موجزة عن الإطار

كواركوس هي جاوة دون الذرية الأسرع من الصوت. لمحة موجزة عن الإطار

مقدمة

في XNUMX مارس، RedHat (قريبًا IBM) مقدم إطار جديد - كواركوس. وفقًا للمطورين، يعتمد هذا الإطار على GraalVM وOpenJDK HotSpot وهو مصمم لـ Kubernetes. تتضمن حزمة Quarkus: JPA/Hibernate، وJAX-RS/RESTEasy، وEclipse Vert.x، وNetty، وApache Camel، وKafka، وPrometheus وغيرها.

الهدف هو جعل Java النظام الأساسي الرائد لنشر Kubernetes وتطوير التطبيقات بدون خادم، مما يوفر للمطورين نهجًا موحدًا للتطوير في كل من الأنماط التفاعلية والحتمية.

انظر الى هذا تصنيف الأطر، فإن Quarkus يقع في مكان ما بين "المجمعات/مولدات الأكواد" و"أطر العمل الكاملة عالية المستوى". هذا بالفعل أكثر من مجرد مُجمِّع، لكنه لا يصل حتى إلى المستوى الكامل، لأن... مصممة لتطوير الخلفية.

يتم الوعد بسرعة عالية جدًا في تشغيل التطبيق واستهلاك منخفض للذاكرة. وهذه هي البيانات من موقع المطور:

الوقت من البداية إلى الرد (الردود) الأول:

ترتيب
REST
الراحة + JPA

كواركوس+GraalVM
0.014
0.055

كواركوس + OpenJDK
0.75
2.5

المكدس الأصلي للسحابة التقليدية*
4.3
9.5

استهلاك الذاكرة (ميجابايت):

ترتيب
REST
الراحة + JPA

كواركوس+GraalVM
13
35

كواركوس + OpenJDK
74
130

المكدس الأصلي للسحابة التقليدية*
140
218

مثير للإعجاب، أليس كذلك؟

*لم أجد أي معلومات حول مجموعة التكنولوجيا هذه، يمكننا أن نفترض أن هذا نوع من Spring Boot مع مجموعة أدوات إضافية للجسم.

مرحبا بالعالم!

أبسط تطبيق مكتوب بلغة 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 أو استمرارية.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. لسوء الحظ، في الوقت الحالي لا يدعم Gradle إنشاء مشروع فارغ؛ هناك معلومات مفصلة على الموقع الكتاب المدرسي.

توسع

Quarkus هو إطار قابل للتوسيع. حاليا هناك أمر 40 ملحقاتوالتي تضيف وظائف متنوعة - من الدعم حاوية الربيع DI и أباتشي جمل قبل تسجيل ونشر المقاييس لتشغيل الخدمات. ويوجد بالفعل امتداد لدعم كتابة التطبيقات بلغة Kotlin بالإضافة إلى Java.

اختتام

في رأيي، Quarkus يتماشى تمامًا مع اتجاهات العصر. أصبح تطوير كود الواجهة الخلفية أسهل فأسهل، ويعمل إطار العمل هذا على تبسيط وتسريع تطوير الخدمة من خلال إضافة دعم أصلي لـ Docker وKubernetes. الميزة الإضافية الكبيرة هي الدعم المدمج لـ GraalVM وإنشاء الصور المعتمدة على النظام الأساسي، مما يسمح ببدء الخدمات بسرعة كبيرة ويشغل مساحة صغيرة من الذاكرة. وهذا مهم جدًا في عصرنا الذي يشهد شغفًا كبيرًا بالخدمات الصغيرة والهندسة المعمارية بدون خادم.

موقع رسمي - quarkus.io. أمثلة على المشاريع للبدء السريع متاحة بالفعل على GitHub جيثب:.

المصدر: www.habr.com

إضافة تعليق