"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > स्प्रिंग बूट अनुप्रयोगों के प्रदर्शन में सुधार - भाग II

स्प्रिंग बूट अनुप्रयोगों के प्रदर्शन में सुधार - भाग II

2024-11-08 को प्रकाशित
ब्राउज़ करें:876

Melhorando o desempenho de aplicações Spring Boot - Parte II

इस आलेख के पहले भाग में, हमने सीखा कि टॉमकैट को अंडरटो से प्रतिस्थापित करके अपने एप्लिकेशन के प्रदर्शन को कैसे बेहतर बनाया जाए, जो है एक उच्च-प्रदर्शन वेब सर्वर, नेटवर्क पर यात्रा करने वाले HTTP प्रतिक्रियाओं के आकार को कम करने के लिए डेटा संपीड़न को सक्षम और कॉन्फ़िगर करने के अलावा।

अब, हम दृढ़ता भाग में स्प्रिंग बूट एप्लिकेशन के प्रदर्शन को बेहतर बनाने के बारे में बात करेंगे, लेकिन पहले हमें यह समझने की जरूरत है कि JPA, हाइबरनेट और हिकारी.

जेपीए

जेपीए या जावा पर्सिस्टेंस एपीआई, जिसे बाद में बदलकर जकार्ता पर्सिस्टेंस कर दिया गया, एक जावा भाषा मानक है जो एक सामान्य का वर्णन करता है डेटा दृढ़ता ढाँचे के लिए इंटरफ़ेस

जेपीए विनिर्देश विक्रेता-विशिष्ट मैपिंग कार्यान्वयन पर निर्भर होने के बजाय आंतरिक रूप से ऑब्जेक्ट रिलेशनल मैपिंग को परिभाषित करता है।

हाइबरनेट

हाइबरनेट ORM ढांचे में से एक है जो JPA विनिर्देश का ठोस कार्यान्वयन करता है। अर्थात्, यदि इस विनिर्देश में यह वर्णित है कि जारी रखने, हटाने, अद्यतन और डेटा प्राप्त करने के लिए तरीकों की आवश्यकता है, तो कौन करेगा वास्तव में इन व्यवहारों का निर्माण हाइबरनेट, साथ ही EclipseLink है, जो एक और ORM है &&&]। हिकारी

हिकारी एक कनेक्शन पूलिंग ढांचा है, जो डेटाबेस से कनेक्शन प्रबंधित करने, उन्हें खुला रखने के लिए जिम्मेदार है ताकि उनका पुन: उपयोग किया जा सके, अर्थात, यह भविष्य के अनुरोधों के लिए कनेक्शनों का एक कैश है, जो डेटाबेस तक पहुंच को तेज़ बनाता है और बनाए जाने वाले नए कनेक्शनों की संख्या को कम करता है। हिकारी, जेपीए और हाइबरनेट को कॉन्फ़िगर करना

प्रदर्शन को बेहतर बनाने के लिए हम जिस कॉन्फ़िगरेशन का उपयोग कर सकते हैं वह निम्नलिखित है:

application.yml का उपयोग करना:


वसंत: शिकारी: स्वतः-प्रतिबद्ध: गलत कनेक्शन-टाइमआउट: 250 अधिकतम जीवनकाल: 600000 अधिकतम-पूल-आकार: 20 न्यूनतम-निष्क्रिय: 10 पूल-नाम: मास्टर जेपीए: ओपन-इन-व्यू: गलत शो-एसक्यूएल: सत्य शीतनिद्रा में होना: डीडीएल-ऑटो: कोई नहीं गुण: hibernet.connection.provider_disables_autocommit: सत्य hibernet.generate_statistics: सत्य

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


स्प्रिंग.डेटासोर्स.हिकारी.ऑटो-कमिट=झूठा स्प्रिंग.डेटास्रोत.हिकारी.कनेक्शन-टाइमआउट=50 स्प्रिंग.डेटासोर्स.हिकारी.मैक्स-लाइफटाइम=600000 स्प्रिंग.डेटास्रोत.हिकारी.अधिकतम-पूल-आकार=20 स्प्रिंग.डेटास्रोत.हिकारी.न्यूनतम-निष्क्रिय=10 स्प्रिंग.डेटासोर्स.हिकारी.पूल-नाम=मास्टर स्प्रिंग.डेटास्रोत.jpa.open-in-view=झूठा स्प्रिंग.डेटास्रोत.jpa.show-sql=सत्य स्प्रिंग.डेटासोर्स.जेपीए.हाइबरनेट.डीडीएल-ऑटो=कोई नहीं स्प्रिंग.जेपीए.प्रॉपर्टीज.हाइबरनेट.जेनरेट_स्टैटिस्टिक्स=सत्य स्प्रिंग.जेपीए.प्रॉपर्टीज.हाइबरनेट.कनेक्शन.प्रोवाइडर_डिसेबल्स_ऑटोकॉमिट=सत्य

spring.datasource.hikari.auto-commit=false
spring.datasource.hikari.connection-timeout=50
spring.datasource.hikari.max-lifetime=600000
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.pool-name=master

spring.datasource.jpa.open-in-view=false
spring.datasource.jpa.show-sql=true

spring.datasource.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.generate_statistics=true
spring.jpa.properties.hibernate.connection.provider_disables_autocommit=true

हिकारी

    spring.datasource.hibari.auto-commit: यदि गलत है, तो
  • कनेक्शन पूल

    द्वारा लौटाया गया प्रत्येक कनेक्शन auto-commit अक्षम हो जाएगा।

  • spring.datasource.hibari.connection-timeout: समय, मिलीसेकंड में, जब ग्राहक
  • पूल

    से कनेक्शन के लिए प्रतीक्षा करेगा। क्लाइंट को अनिश्चित काल तक प्रतीक्षा कराने के बजाय, जल्दी विफल होने और त्रुटि संदेश लौटाने के लिए एक छोटा टाइमआउट सेट करना बेहतर है।

  • spring.datasource.hibari.max-lifetime: कोई कनेक्शन अधिकतम समय तक सक्रिय रह सकता है। समस्याग्रस्त कनेक्शन के कारण विफलताओं से बचने और सुरक्षा बढ़ाने के लिए इस पैरामीटर को कॉन्फ़िगर करना महत्वपूर्ण है, क्योंकि जो कनेक्शन लंबे समय से सक्रिय हैं वे हमलों के प्रति अधिक संवेदनशील होते हैं।
  • spring.datasource.hibari.maximum-pool-size:
  • पूल

    का अधिकतम आकार, जिसमें निष्क्रिय और उपयोग में आने वाले कनेक्शन शामिल हैं, जो डेटाबेस में सक्रिय कनेक्शन की अधिकतम संख्या निर्धारित करता है। यदि पूल इस सीमा तक पहुँच जाता है और कोई निष्क्रिय कनेक्शन नहीं है, तो getConnection() पर कॉल विफल होने से पहले connectionTimeout मिलीसेकेंड तक ब्लॉक हो जाएगी।

    एक उपयुक्त मान ढूंढना महत्वपूर्ण है, क्योंकि बहुत से लोग सोचते हैं कि इसे 50, 70 या यहां तक ​​कि 100 पर सेट करने से उन्हें शानदार प्रदर्शन मिलेगा। आदर्श यह है कि अधिकतम 20 हो, जो कि
      थ्रेड्स की संख्या है
    • कनेक्शन का उपयोग करके समानांतर में। मूल्य जितना अधिक होगा, डेटाबेस के लिए इन कनेक्शनों को प्रबंधित करना उतना ही कठिन होगा और सबसे अधिक संभावना है कि हम इन सभी कनेक्शनों का उपयोग करने के लिए पर्याप्त
    • थ्रूपुट
    • नहीं कर पाएंगे। यह समझना महत्वपूर्ण है कि
    • आरडीबीएमएस
    • (रिलेशनल डेटाबेस मैनेजमेंट सिस्टम) के दृष्टिकोण से, स्वयं के साथ एक खुला कनेक्शन बनाए रखना मुश्किल है, कनेक्शन की संख्या की कल्पना करें .
  • spring.datasource.hibari.minimum-idle: मांग कम होने पर पूल बनाए रखने वाले कनेक्शनों की न्यूनतम संख्या। पूल कनेक्शनों को 10 तक कम कर सकता है और आवश्यकतानुसार उन्हें पुनः बना सकता है। हालाँकि, अधिकतम प्रदर्शन और मांग में बढ़ोतरी के प्रति बेहतर प्रतिक्रिया के लिए, यह मान निर्धारित न करने की अनुशंसा की जाती है, जिससे हिकारी एक निश्चित आकार के पूल के रूप में कार्य कर सके। डिफ़ॉल्ट: स्प्रिंग.डेटासोर्स.हिकारी.मैक्सिमम-पूल-साइज़ के समान।
  • spring.datasource.hibari.pool-name: कनेक्शन के लिए उपयोगकर्ता-परिभाषित नाम
  • pool

    और की पहचान करने के लिए मुख्य रूप से रजिस्ट्री प्रबंधन कंसोल और JMX में दिखाई देता है। पूल और उनके विन्यास।

  • जेपीए

    spring.datasource.jpa.open-in-view: जब
  • OSIV

    (ओपन सेशन इन व्यू) सक्षम होता है, तो पूरे अनुरोध के दौरान भी एक सत्र बनाए रखा जाता है। @Transactional एनोटेशन के बिना। इससे प्रदर्शन संबंधी समस्याएं हो सकती हैं, जैसे एप्लिकेशन प्रतिक्रियाओं की कमी, क्योंकि सत्र अनुरोध के अंत तक डेटाबेस से कनेक्शन बनाए रखता है।

  • spring.datasource.jpa.show-sql: हमारे एप्लिकेशन में निष्पादित होने वाले SQL लॉग को प्रदर्शित करता है। हम आम तौर पर इसे विकास में सक्षम छोड़ देते हैं, लेकिन उत्पादन में अक्षम कर देते हैं।
  • spring.datasource.jpa.hibernet.ddl-auto: डेटाबेस के
  • स्कीमा

    के संबंध में हाइबरनेट के व्यवहार को कॉन्फ़िगर करता है। इसके निम्नलिखित मान हो सकते हैं:

    कोई नहीं: कुछ नहीं करता. हम बैंक की स्कीमा को मैन्युअल रूप से प्रबंधित करते हैं।
    • मान्य करें: डेटाबेस के
    • स्कीमा
    • को मान्य करता है, लेकिन कोई बदलाव नहीं करता है। यह सुनिश्चित करने के लिए उपयोगी है कि वर्तमान स्कीमा उन संस्थाओं से सहमत है जिन्हें हमने मैप किया है। अद्यतन: संस्थाओं में परिवर्तन दर्शाने के लिए डेटाबेस के
    • स्कीमा
    • को अद्यतन करता है। बनाएँ: डेटाबेस का
    • स्कीमा
    • बनाता है। यदि स्कीमा पहले से मौजूद है, तो यह इसे हटा देगा और फिर से बनाएगा। क्रिएट-ड्रॉप: डेटाबेस से
    • स्कीमा
    • बनाता है और, जब एप्लिकेशन समाप्त हो जाता है, तो स्कीमा को हटा देता है। परीक्षण के लिए उपयोगी, जहां हम प्रत्येक परीक्षण के लिए एक साफ़ डेटाबेस चाहते हैं।
  • spring.jpa.properties.hibernet.generate_statistics: हाइबरनेट के बारे में विस्तृत जानकारी एकत्र करने का कार्य करता है, जैसे क्वेरी निष्पादन समय, निष्पादित क्वेरी की संख्या और अन्य मैट्रिक्स।
  • spring.jpa.properties.hibernet.connection.provider_disables_autocommit: सूचित करता है
  • हाइबरनेट कि हमने प्रदाताओं में से ऑटो-कमिट को अक्षम कर दिया है (PostgreSQL, MySQL, आदि)। यह प्रदर्शन को प्रभावित करता है क्योंकि हाइबरनेट को यह जानने के लिए पूल से कनेक्शन प्राप्त करने की आवश्यकता होगी कि क्या ऑटो-कमिट सक्षम है या नहीं , उसके द्वारा किए गए प्रत्येक लेन-देन के लिए।

  • इसके साथ, हम लेख का दूसरा भाग बंद करते हैं। मौजूद सभी सेटिंग्स प्रदर्शन के बारे में नहीं थीं, लेकिन जो वास्तव में प्रभाव डालती हैं वे हैं

हिकारी सेटिंग्स जैसे ऑटो-कमिट और पूल आकार , JPA और हाइबरनेट जैसे OSIV (दृश्य में खुला सत्र) और आपको सूचित करते हैं कि हमने प्रदाताओं के ऑटो-कमिट को अक्षम कर दिया है। अगले भाग में हम अपवादों के बारे में बात करेंगे और

JVM

(Java वर्चुअल मशीन) से संसाधनों को बचाने के लिए उन्हें कैसे कॉन्फ़िगर किया जा सकता है। संदर्भ:

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
  • https://github.com/brettwooldridge/HikariCP
  • https://github.com/corona-warn-app/cwa-server/issues/556
  • https://medium.com/@rafaelralf90/open-session-in-view-is-evil-fd9a21645f8e
विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/mathstylish/melhorando-o-desempenho-de-aplicationcoes-spring-boot-parte-ii-nbi?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163.com पर संपर्क करें। इसे हटाने के लिए
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3