2011-09-08 13 views
14

हमारी टीम हाल ही में निरंतर तैनाती में बहुत दिलचस्पी रही है, लेकिन हम वास्तव में हेरोोकू पर कोड को तैनात करने के तरीके के संबंध में एक रोडब्लॉक में भाग ले चुके हैं - ऐसा लगता है कि कुछ समय के लिए डाउनटाइम होना आवश्यक है Heroku के लिए एक कोड धक्का करो।क्या हेरोोकू को सही सीमलेस परिनियोजन करने के लिए कॉन्फ़िगर किया जा सकता है?

  1. एक मचान निर्देशिका के लिए पुश कोड को कहीं (पुराने कोड अभी भी लाइव)
  2. डेटाबेस के खिलाफ रन माइग्रेशन (अधिक:

    एक पारंपरिक माहौल में, कोड तैनाती शायद कुछ इस तरह दिखेगा अक्सर नहीं, पहले से माइग्रेशन चलाने के लिए सुरक्षित है, और कोड को तोड़ने वाले कुछ लोगों के खिलाफ सुरक्षा की जा सकती है)

  3. लोड बैलेंसर से आधा (या सर्वर का कुछ प्रतिशत) लें।
  4. उन सर्वरों को कोड परिनियोजित करें।
  5. यदि संभव हो, स्वचालित धुआं परीक्षण के कुछ प्रकार चलाने/सर्वर का प्रयोग तो वे 'हॉट'
  6. स्विच जो सर्वर में और लोड संतुलन
  7. रिंस और दोहराने से बाहर हैं कर रहे हैं।

    • मैं पहली बार डेटाबेस माइग्रेशन नहीं चल सकते:
Heroku साथ

, मैं दो महत्वपूर्ण चरणों पर बहुत कम नियंत्रण है। एक तरीका यह है कि मैंने इस बारे में सोचा है कि डेटाबेस माइग्रेशन को अलग-अलग ब्रांच किया गया है, और पहले उसे हुकोकू में दबाएं - जो दर्दनाक होने पर समस्या को हल करेगा - लेकिन केवल उत्तेजित होगा ...

  • डिनो स्पिन-अप समय ले सकता है काफी लंबा समय - जाहिर है, यह हेरोोकू की तुलना में रेल की गलती है, लेकिन मुख्य समस्या यह है कि मैं लोड बैलेंसर शफल की तरह कुछ नहीं कर सकता ताकि यह सुनिश्चित किया जा सके कि मेरा ऐप तैयार है और नए तैनात सर्वर से पहले लोड हो गया है लोड बैलेंसर में वापस रखा गया है। इसके बजाए, मेरे पास उपयोगकर्ताओं को 10-15 सेकंड लोड स्क्रीन देने के लिए कोई विकल्प नहीं है और सबसे अच्छा उम्मीद है (और यदि मैं ऊपर से डेटाबेस परिनियोजन रणनीति का उपयोग करता हूं तो दो बार करें)
  • हम रखरखाव का उपयोग करते हैं वर्तमान में स्क्रीन, लेकिन यह एक स्केलेबल समाधान नहीं होगा यदि हम पूर्ण निरंतर तैनाती में जाते हैं (हमारे पास शायद दिन में लगभग 10-20 तैनाती होगी, और 10-20 * 30 सेकंड रखरखाव स्क्रीन जोड़ने लगती है)

    क्या कोई भी इसी तरह के मुद्दों में चला गया है? आपने उन्हें कैसे संबोधित किया? सच के लिए कोई भी महान केस स्टडीज/सफलता की कहानियां उसकेोकू पर निरंतर तैनाती?

    उत्तर

    10

    dynos स्पिन के समय के बारे में, Heroku सिर्फ इतना है कि पता करने के लिए एक बीटा विशेषता है:

    https://devcenter.heroku.com/articles/labs-preboot/

    यह मूल रूप से अपने नए dynos पहले बूट, थोड़ी देर के इंतजार कर रहा है, यातायात बंद कर और उसके बाद ही मारता है पुराना। मेरे ऐप ने तैनाती के दौरान प्रदर्शन में एक उल्लेखनीय सुधार देखा। आप इसे यहां पढ़ सकते हैं:

    http://ylan.segal-family.com/blog/2012/08/27/deploy-to-heroku-with-near-zero-downtime/

    +0

    यह हमारे लिए एकदम सही फिट दिखता है! मुझे बताने के लिए धन्यवाद! –

    +0

    मैं इस सुविधा का उपयोग www.versioneye.com के लिए उत्पादन में कर रहा हूं और यह पूरी तरह से काम करता है। कुछ नोटिस करने के लिए सोचते हैं। यह बड़े डेटाबेस माइग्रेशन के लिए एक समाधान नहीं है। लेकिन कम डीबी परिवर्तनों के साथ सुविधाओं को रोल करने के लिए यह सही है। मुझे यह पसंद है। –

    7

    हेरोकू पर हम आपके डायनो को पुनरारंभ करने के लिए एक सिगरेट जारी करेंगे। थोड़ी देर के बाद यदि प्रक्रिया (एस) नहीं रुकती है तो वे मारे जाएंगे। जब आप माइग्रेशन नहीं चला रहे हैं तो यह आपको एक निर्बाध पुनरारंभ करने के लिए पर्याप्त अनुग्रह समय की अनुमति दे सकता है।

    आप हमेशा एक स्टेजिंग ऐप पर कोड दबा सकते हैं जो आपके उत्पादन डीबी पर इंगित करता है और वहां से माइग्रेशन चलाता है। पेड्रो ने शून्य डाउनटाइम माइग्रेशन चलाने पर एक अच्छा ब्लॉग पोस्ट लिखा था, जो भी मदद करनी चाहिए: http://pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/

    उम्मीद है कि इससे कुछ मदद मिलती है।

    +0

    धन्यवाद! मुझे लगता है कि इसमें चीजों के डेटाबेस पक्ष के लिए बहुत सारी रणनीतियां हैं - हालांकि अभी भी डिनो स्टार्टअप समय से निपटने का समय है, यह सही दिशा में एक बड़ा कदम है। आपके पहले बिंदु के बारे में, मुझे यकीन नहीं है कि इससे कितना मदद मिलती है - हमेशा ऐसे उपयोगकर्ता होने जा रहे हैं जो साइटो को स्पिन-अप के दौरान मार रहे हैं, और वे लंबे समय तक प्रतीक्षा करने जा रहे हैं, जब तक कि मैं याद नहीं कर रहा हूं वहां कुछ –

    संबंधित मुद्दे

     संबंधित मुद्दे