في الجزء الأول من هذه المقالة، تعلمنا كيفية تحسين أداء تطبيقاتنا، واستبدال Tomcat بـ Undertow، وهو خادم ويب عالي الأداء، بالإضافة إلى تمكين وتكوين ضغط البيانات، لتقليل حجم استجابات HTTP التي تنتقل عبر الشبكة.
الآن، سنتحدث عن كيفية تحسين أداء تطبيق Spring Boot في جزء الثبات، لكن نحتاج أولاً إلى فهم ما JPA، Hibernate و Hikari.
JPA أو Java Persistence API ، والتي تمت إعادة تسميتها لاحقًا إلى Jakarta Persistence ، هو معيار لغة جافا يصف معيارًا شائعًا واجهة لأطر استمرارية البيانات
تحدد مواصفاتJPA التعيين العلائقي للكائن داخليًا، بدلاً من الاعتماد على تطبيقات التعيين الخاصة بالبائع.
السباتالسبات هو أحد أطر عمل ORM التي تجعل التنفيذ الملموس لمواصفات JPA . أي، إذا تم وصف في هذه المواصفات أن الطرق مطلوبة للاستمرار، إزالة ، التحديث و جلب البيانات ، فمن سيفعل ذلك في الواقع، يتم بناء هذه السلوكيات بواسطة Hibernate ، بالإضافة إلى EclipseLink ، وهو ORM .
هيكاريهيكاري هو إطار عمل لتجميع الاتصالات ، وهو المسؤول عن إدارة الاتصالات بقاعدة البيانات، وإبقائها مفتوحة حتى يمكن إعادة استخدامها، أي، فهو عبارة عن ذاكرة تخزين مؤقت للاتصالات للطلبات المستقبلية، مما يجعل الوصول إلى قاعدة البيانات أسرع ويقلل عدد الاتصالات الجديدة التي سيتم إنشاؤها.
تكوين Hikari، JPA والإسباتاستخدام application.yml:
spring: hikari: auto-commit: false connection-timeout: 250 max-lifetime: 600000 maximum-pool-size: 20 minimum-idle: 10 pool-name: master jpa: open-in-view: false show-sql: true hibernate: ddl-auto: none properties: hibernate.connection.provider_disables_autocommit: true hibernate.generate_statistics: trueاستخدام خصائص التطبيق:
spring: hikari: auto-commit: false connection-timeout: 250 max-lifetime: 600000 maximum-pool-size: 20 minimum-idle: 10 pool-name: master jpa: open-in-view: false show-sql: true hibernate: ddl-auto: none properties: hibernate.connection.provider_disables_autocommit: true hibernate.generate_statistics: trueالآن دعونا نقدم ملخصًا مختصرًا للخيارات:
هيكاري
تجمع الاتصال سيأتي مع تعطيل الالتزام التلقائي.
]pool. من الأفضل تعيين مهلة قصيرة للفشل بسرعة وإرجاع رسالة خطأ، بدلاً من إبقاء العميل ينتظر إلى أجل غير مسمى.
، بما في ذلك الاتصالات الخاملة وقيد الاستخدام، وتحديد الحد الأقصى لعدد الاتصالات النشطة بقاعدة البيانات. إذا وصل المجمع إلى هذا الحد ولا توجد اتصالات خاملة، فسيتم حظر الاستدعاءات إلى getConnection() لمدة تصل إلى connectionTimeout ميلي ثانية قبل الفشل.
من المهم العثور على قيمة مناسبة، حيث يعتقد الكثير من الأشخاص أنهم سيحصلون على أداء رائع من خلال ضبطها على 50 أو 70 أو حتى 100. والمثالي هو أن يكون الحد الأقصى 20، وهو عدد
ويظهر بشكل أساسي في وحدات تحكم إدارة التسجيل وJMX لتحديد حمامات السباحة وتكويناتها.
(فتح الجلسة في العرض)، يتم الحفاظ على الجلسة طوال الطلب، حتى بدون التعليق التوضيحي @Transactional. يمكن أن يسبب ذلك مشاكل في الأداء، مثل عدم استجابات التطبيق، حيث تحافظ الجلسة على الاتصال بقاعدة البيانات حتى نهاية الطلب.
الإسبات فيما يتعلق بمخطط لقاعدة البيانات. يمكن أن تحتوي على القيم التالية:
لا شيء: لا يفعل شيئا. نحن ندير مخطط البنك يدويًا.spring.jpa.properties.hibernate.connection.provider_disables_autocommit: يُعلم
بأننا قمنا بتعطيل الالتزام التلقائي لمقدمي (PostgreSQL، MySQL، إلخ). يؤثر هذا على الأداء لأن Hibernate سيحتاج إلى الحصول على اتصال من pool لمعرفة ما إذا كان الالتزام التلقائي ممكّنًا أم لا ، عن كل معاملة يقوم بها. وبهذا نغلق الجزء الثاني من المقال. لم تكن جميع الإعدادات الموجودة تتعلق بالأداء، ولكن الإعدادات التي تؤثر حقًا هي إعدادات
الالتزام التلقائي و حجم التجمع ، تلك الخاصة بـ JPA و السبات مثل OSIV (فتح الجلسة في العرض) ونبلغك بأننا قمنا بتعطيل الالتزام التلقائي لمقدمي . في الجزء التالي سنتحدث عن الاستثناءات وكيف يمكن تهيئتها لحفظ الموارد من JVM (Java Virtual Machine
).مراجع: https://en.wikipedia.org/wiki/Jakarta_Persistence
https://www.ibm.com/docs/pt-br/was/8.5.5?topic=SSEQTP_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/cejb_persistence.htm
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3