• Scala 2.13 से Scala 3 में कोडबेस माइग्रेशन के दौरान अप्रत्याशित performance गिरावट देखी गई
  • शुरुआती टेस्ट और deployment वातावरण में सभी संकेतक सामान्य थे, लेकिन कुछ घंटे बाद Kafka lag बढ़ने लगा
  • load test के परिणामों में, सूक्ष्म स्तर पर विभाजित संदेश प्रोसेसिंग के समय throughput तेजी से गिरा यह स्पष्ट हुआ
  • async-profiler analysis से पता चला कि कारण Quicklens लाइब्रेरी का chain evaluation inefficiency बग था
  • लाइब्रेरी अपडेट के बाद performance वापस सामान्य हो गया, और Scala संस्करणों के बीच लाइब्रेरी व्यवहार के अंतर के प्रति सावधानी की जरूरत पर जोर दिया गया

सेवा माइग्रेशन प्रक्रिया

  • मौजूदा सेवा को Scala 2.13 से Scala 3.7.3 पर माइग्रेट किया गया
    • यह मैक्रो का उपयोग न करने वाली data-collection केंद्रित सेवा थी, और performance यहाँ महत्वपूर्ण घटक था
    • dependencies, compiler options, types और syntax में बदलाव लागू करने के बाद compilation सफल रहा
  • टेस्ट वातावरण और चरणबद्ध deployment में भी logs और metrics दोनों सामान्य दिखे
    • infrastructure, JVM और application स्तर के metrics भी healthy थे

कारण अज्ञात performance गिरावट

  • deployment के लगभग 5–6 घंटे बाद Kafka lag बढ़ने की घटना हुई
    • data spike की स्थिति न होने पर भी प्रति instance throughput में गिरावट देखी गई
    • rollback के बाद throughput तुरंत वापस आ गया, जिससे कोड बदलाव को कारण के रूप में पुष्टि मिली

performance विश्लेषण और कारण ट्रैकिंग

  • load test में शुरुआती चरणों में performance regression reproduce नहीं हुई
    • केवल संदेशों की granular विभाजन और heterogeneous payload वाले मामलों में ही throughput तेजी से गिरा
  • dependency libraries (serialization, DB SDK, Docker image, config libraries आदि) को एक-एक करके revert करके test करने पर भी कोई बदलाव नहीं दिखा
  • async-profiler से CPU profiling के परिणाम में,
    • Scala 3 में JIT compiler और decoding चरण में CPU usage में तेज उछाल दिखा
    • Flamegraph के शीर्ष भाग में Quicklens calls कुल CPU time का लगभग आधा हिस्सा ले रही थीं
    • Scala 2.13 में वही call केवल 0.5% के आसपास थी

समस्या की मूल वजह

  • Quicklens लाइब्रेरी का chain evaluation inefficiency बग Scala 3 में पाया गया
    • संबंधित फिक्स GitHub PR #115 में merge किया गया है
    • लाइब्रेरी अपडेट के बाद Scala 3 और 2.13 के बीच का performance अंतर समाप्त हो गया

सीख और सिफारिशें

  • metaprogramming पर निर्भर libraries Scala संस्करणों के बीच performance gap पैदा कर सकती हैं
  • माइग्रेशन सफल दिखे तब भी hotspots और bottlenecks को benchmark करना चाहिए
  • performance-sensitive सेवाओं में “सब ठीक काम कर रहा है” मानने के बजाय, actual measurement-based validation अनिवार्य है
  • ऐसा न हो कि code अच्छे लगने पर भी benchmark bottleneck दिखा दे; इसलिए पहले से preventive checks जरूरी हैं

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.