Kaip įdiegti ASP.NET programą su nuliniu prastovu

Jei norite įdiegti naują mūsų svetainės versiją, atlikome šiuos veiksmus:

  • Pakeiskite naują kodą ir įkelkite jį į serverį.
  • Iš tikrųjų serverio pašalinkite visus gyvus kodus iš IIS svetainės katalogo.
  • Ištraukite naują pašto kodo failą į tuščią IIS katalogą

Šis procesas yra parašytas visuose scenarijuose ir vyksta gana greitai, tačiau, jei ištrinsite senus failus ir diegiate naujus failus, gali būti, kad 10-20 sekundžių bus tuščias.

Ar 0 sekundžių trukmės pasiūlymai dėl prastovų?

117
29 сент. nustatė Karl Glennon 29 sep. 2008-09-29 12:25 '08 12:25 val. 2008-09-29 12:25
@ 11 atsakymų

Jums reikia 2 serverių ir apkrovos balansavimo. Čia atlikite šiuos veiksmus:

  • Įjunkite visą srautą 2 serveryje
  • Serverio diegimas 1
  • Bandymų serveris 1
  • Įtraukti visą srautą serveryje 1
  • Serverio diegimas 2
  • Test Server 2
  • Pasukite srautą abiejuose serveriuose.

Faktas yra tai, kad net ir tokiu atveju, jei naudosite lipnias sesijas, vis tiek turėsite iš naujo įkelti ir sesijos nuostolius. Jei turite duomenų bazės sesiją ar valstybės serverį, viskas turėtų būti gerai.

70
29 сент. atsakymas pateikiamas Sklivvz 29 sep . 2008-09-29 12:35 '08, 12:35 2008-09-29 12:35

„Microsoft“ žiniatinklio diegimo įrankis tai šiek tiek palaiko:

Apima „Windows Transaction System Support“ (TxF) failą. Kai palaikoma TxF, failų operacijos yra nedalomos; tai yra, jie sėkmingai arba visiškai nepavyksta. Jis užtikrina duomenų vientisumą ir duomenų ar failų, esančių „pusiaukelėje“ ar pažeistoje valstybėje, prevenciją. Pagal nutylėjimą MS Deploy TxF yra išjungtas.

Atrodo, kad tai yra visų sinchronizavimo sandoris. Be to, „TxF“ yra „Windows Server 2008“ funkcija, todėl ši sandorio funkcija neveiks su ankstesnėmis versijomis.

Manau, kad galima pakeisti savo scenarijų 0 prastovų, naudodami aplankus, pvz., Versijas ir IIS metabazę:

  • esamo kelio / URL:
  • Nukopijuokite naują (arba pakeistą) svetainę į serverį
    • Tinklalapis v2.1 \ t
  • Redaguokite IIS metabazę, kad pakeistumėte svetainės maršrutą
    • interneto 2.0 \ t
    • į interneto v2.1 \ t

Šis metodas siūlo šias privalumus:

  • Jei naujoji versija turi problemų, galite lengvai grįžti į 2.0 versiją.
  • Jei norite įdiegti kelis fizinius ar virtualius serverius, galite naudoti scenarijų failams diegti. Kai visi serveriai turi naują versiją, vienu metu galite keisti visų serverių metabazę naudodami „Microsoft Web Deployment Tool“.
59
13 окт. George Tsiokos atsakymas spalio 13 d 2008-10-13 23:40 '08, 11:40 2008-10-13 23:40

Paskutinį kartą pažvelgiau į jį, o sprendimas, kurį aš atėjau, buvo sukurti dvi svetaines IIS ir pereiti tarp jų.

Mano konfigūracijai aš turėjau žiniatinklio katalogą kiekvienai A ir B vietai, pavyzdžiui: c: intranetas Live A sąsaja c: intranetas Live B sąsaja

IIS sistemoje turiu dvi identiškas svetaines (identiškus prievadus, autentifikavimą ir tt), kurių kiekvienas turi savo taikomųjų programų grupę. Viena iš svetainių veikia (A), o kita yra sustabdyta (B). gyvas taip pat turi pagrindinį pagrindinį antraštę.

Kai kalbama apie dislokavimą gyvenimui, tiesiog jį paskelbsiu svetainėje STOPPED. Kadangi galiu prieiti prie svetainės B naudodamas savo prievadą, galiu iš anksto pašildyti svetainę taip, kad pirmasis vartotojas nepradėtų paleisti programos. Tada, naudodami paketinį failą, nukopijuoju pagrindinę pagrindinio kompiuterio antraštę į B, sustabdykite A ir paleiskite B.

7
19 нояб. atsakymą pateikė Rob King Nov 2009-11-19 05:39 '09 5:39 2009-11-19 05:39

Jūs galite pasiekti nulinį prastovą viename serveryje naudodami „Application Request Routing“ IIS kaip programinės įrangos apkrovos balansavimą tarp dviejų vietinių IIS svetainių skirtinguose uostuose. Tai vadinama „ mėlyna-žalia“ diegimo strategija, kurioje bet kuriuo metu yra tik vienas iš dviejų vietų. Išplėskite mazgelį „žemyn“, pašildykite jį ir įeikite į apkrovos balansavimo įrenginį (paprastai praleidžiant užklausos užklausos užklausą dėl sveikatos patikrinimo), tada imkite pradinę svetainę, kuri buvo iš „baseino“ (dar kartą tikrinant sveikatą).

Čia rasite visą pamoką.

6
08 нояб. Atsakymą pateikė kavun 08 lapkričio. 2015-11-08 09:04 '15 - 09:04 2015-11-08 09:04

Naudodami „Microsoft.Web.Administration ServerManager“ klasę, galite sukurti savo diegimo agentą.

Apgaulė yra pakeisti „PhysicalPath VirtualDirectory“, kuri veda prie interaktyvaus atominio perjungimo tarp senų ir naujų interneto programų.

Turėkite omenyje, kad tai gali lemti tai, kad senieji ir nauji „AppDomains“ veiks lygiagrečiai!

Problema yra tai, kaip sinchronizuoti duomenų bazių pakeitimus ir kt.

Apklausę, ar egzistuoja „AppDomains“ su senais arba naujais „PhysicalPaths“, galite nustatyti, kada baigėsi senasis „AppDomain“ ir ar veikia naujas „AppDomain“.

Norėdami priversti „AppDomain“ paleisti, turite atlikti HTTP užklausą („IIS 7.5“ palaiko „autorun“ funkciją)

Dabar jums reikia būdas užblokuoti naujų „AppDomain“ užklausų. Naudoju pavadinimą „mutex“, kuris yra sukurtas ir priklauso diegimo agentui, kuris laukia naujos žiniatinklio programos „Application_Start“ programos taikymo ir po to, kai duomenų bazės atnaujinimai bus išleisti.

(Naudodamas internetinę taikomąją programą, noriu įjungti „mutex“ laukimo režimą, naudoju „token“ failą. Paleidus naują žiniatinklio programą, ištrinu ženklo failą.

6
07 сент. Atsakymą pateikia Jack 07 Sep. 2012-09-07 16:31 '12 at 16:31 pm 2012-09-07 16:31

Gerai, nes kiekvienas iš mūsų nepakankamai įvertina atsakymą, kurį parašiau 2008 m.

Aš jums pasakysiu, kaip tai darome 2014 m. Mes nebenaudojame svetainių, nes dabar naudojame ASP.NET MVC.

Žinoma, tam nereikia apkrovos balansavimo ir dviejų serverių, tai yra gerai, jei kiekvienam jūsų palaikomam tinklalapiui turite 3 serverius, tačiau tai yra pilnas daugumos svetainių perteklius.

Be to, mes nepasitikime naujausiu „Microsoft“ vedikliu - per lėtas ir per daug paslėptas magija ir pernelyg linkę keisti savo pavadinimą.

Štai kaip mes tai darome:

  • Turime įdiegimo etapą, kuriame nukopijuotos DLL bylos nukopijuojamos į aplanką „bin-pub“.

  • Mes naudojame „Beyond Compare“ (puikiai **), jei norite patikrinti ir sinchronizuoti pakeistus failus (per FTP, nes jis yra plačiai palaikomas) į gamybos serverį

  • Svetainėje yra saugus URL, kuriame yra mygtukas, kuris viską nukopijuoja į „bin-pub“ į „bin“ (pirmiausia reikia atsarginės kopijos, kad būtų galima greitai atkurti). Šiame etape programa paleidžiama iš naujo. Tada mūsų ORM patikrina, ar yra kokių nors lentelių ar stulpelių, kuriuos reikia pridėti ir sukurti.

Tai tik milisekundė prastovos trukmė. Programos iš naujo paleidimas gali užtrukti antrą ar du, bet perkrovimo užklausų metu jis yra buferinis, todėl praktiškai nulinis prastovos laikas.

Visas diegimo procesas trunka nuo 5 sekundžių iki 30 minučių, priklausomai nuo failų skaičiaus ir pakeitimų skaičiaus.

Taigi, nereikia kopijuoti visos svetainės į kitą katalogą, bet tik į aplanką. Jūs taip pat galite visiškai kontroliuoti procesą ir tiksliai žinoti, kas keičiasi.

** Mes visada atliekame greitus pakeitimų, kuriuos mes diegiame, apžvalgą - kaip dvigubą patikrinimą paskutinę minutę, todėl žinome, ką išbandyti, ir jei kažkas pertrauka, mes esame pasiruošę. Mes naudojame „Beyond Compare“, nes leidžia lengvai palyginti failus per FTP. Aš niekada to nedarau be BC, jūs neturite idėjos, ką perrašote.

* Slinkite žemyn, kad pamatytumėte jį :( BTW Aš nerekomenduotu svetainių, nes jos yra lėtesnės kurti ir gali daug nukentėti su sukauptais temp failais. Juos naudojome anksčiau, nes jie leido sukurti lankstesnius failų failus Labai greitai išspręskite nedidelę problemą ir galite tiksliai nustatyti, ką diegiate (jei naudojate „Beyond Compare“, žinoma, kitaip pamiršite apie tai).

5
09 янв. atsakymas, kurį pateikė mike nelson 09 jan. 2014-01-09 15:01 '14 at 15:01 2014-01-09 15:01

Vieninteliai nulio prastovos metodai, kuriuos galiu galvoti, apima prieglobą bent 2 serveriuose.

4
29 сент. Atsakymas, kurį pateikė Sam Meldrum rugsėjo 29 d 2008-09-29 12:29 '08, 12:29, 2008-09-29 12:29

Štai kaip tai padaryti:

Absoliutūs minimalūs sistemos reikalavimai:
1 serveris iš

  • 1 apkrovos balansavimo / atvirkštinis proxy (pvz., Nginx), veikiantis 80 prievadą
  • 2 ASP.NET/mono fastcgi-chroot dviejuose skirtinguose TCP prievaduose

Darbo eiga:

pradėti operaciją myupdate

 try Web-Service: Tell all applications on all web-servers to go into primary read-only mode Application switch to primary read-only mode, and responds Web sockets begin notifying all clients Wait for all applications to respond wait (custom short interval) Web-Service: Tell all applications on all web-servers to go into secondary read-only mode Application switch to secondary read-only mode (data-entry fuse) Updatedb - secondary read-only mode (switches database to read-only) Web-Service: Create backup of database Web-Service: Restore backup to new database Web-Service: Update new database with new schema Deploy new application to apt-repository (for windows, you will have to write your own custom deployment web-service) ssh into every machine in array_of_new_webapps run apt-get update then either apt-get dist-upgrade OR apt-get install <packagename> OR apt-get install --only-upgrade <packagename> depending on what you need -- This deploys the new application to all new chroots (or servers/VMs) Test: Test new application under test.domain.xxx -- everything that fails should throw an exception here commit myupdate; Web-Service: Tell all applications to send web-socket request to reload the pages to all clients at time x (+/- random number) @client: notify of reload and that this causes loss of unsafed data, with option to abort @ time x: Switch load balancer from array_of_old_webapps to array_of_new_webapps Decomission/Recycle array_of_old_webapps, etc. catch rollback myupdate switch to read-write mode Web-Service: Tell all applications to send web-socket request to unblock read-only mode end try 
1
07 марта '14 в 15:34 2014-03-07 15:34 Atsakymą pateikė Stefan Steiger kovo 14 d. 14 d. 15:34 2014-03-07 15:34

Norėčiau paaiškinti, kad George'ui šiek tiek, kaip nurodyta toliau, dėl vieno serverio:

  • Naudokite žiniatinklio diegimo projektą, jei norite iš anksto sukompiliuoti svetainę į vieną DLL
  • Pradėkite naują svetainę ir įkelkite ją į serverį.
  • Išimkite jį į naują aplanką, esantį aplanke, turinčiame prieigos teises į svetainę, todėl neišpakuoti failai teisingai paveldi leidimus (galbūt, e: žiniatinklyje, su poaplankiais v20090901, v20090916 ir tt).
  • Naudokite „IIS Manager“, jei norite pakeisti aplanko, kuriame yra svetainė, pavadinimą.
  • Laikykite seną aplanką tam tikrą laiką, kad galėtumėte grįžti prie jo, jei kyla problemų.

4 žingsnis perdirbs IIS darbo eigą.

Tai yra tik nulinis prastovos laikas, jei nenaudojate „InProc“ sesijų; vietoj to, naudokite SQL režimą, jei galite (dar geriau, visiškai pašalinkite sesijos būseną).

Žinoma, tai šiek tiek labiau susiję su keliais serveriais ir (arba) duomenų bazės pakeitimais.

1
15 нояб. atsakymą pateikė RickNZ, lapkričio 15 d. 2009-11-15 20:11 '09 ne 20:11 2009-11-15 20:11

Norėdami išplėsti atsakymą į sklivvz, kuris buvo pagrįstas tam tikros apkrovos balanso buvimu (arba tik atsargine kopija tame pačiame serveryje)

  • Tiesioginis srautas į svetainę / serverį 2
  • Pasirinktinai palaukite šiek tiek, kad būtų užtikrinta, jog kuo mažiau naudotojų turi laukiančias darbo eigas įdiegtoje versijoje
  • Įdiekite į svetainę / serverį 1 ir kiek įmanoma šildykite.
  • Atlikite operacijų duomenų bazėje operacijas (stenkitės tai padaryti)
  • Nedelsiant atsiųskite visą srautą į svetainę / serverį 1
  • Įdiegti į svetainę / serverį 2
  • Tiesioginis srautas į abi svetaines / serverius

Galite įvesti šiek tiek dūmų bandymų, sukurdami duomenų bazės vaizdą / kopiją, tačiau tai ne visada įmanoma.

Jei įmanoma ir būtina naudoti „maršruto skirtumus“, pvz., Skirtingus nuomininkų URL: s (customerX.myapp.net) ar skirtingus naudotojus, pirmiausia įdėkite nepažįstamų jūrų kiaulių grupę. Jei visa kita nepavyksta, atleiskite visus.

Dėl duomenų bazės perkėlimo dažnai neįmanoma grįžti prie ankstesnės versijos.

Yra būdų, kaip pritaikyti programas šiais scenarijais, pavyzdžiui, naudojant įvykių eiles ir atkūrimo mechanizmus, bet kadangi kalbame apie pakeitimų diegimą, kas yra naudojama, ten tikrai nėra kvailio.

1
15 янв. atsakymą pateikė gliljas sausio 15 d 2014-01-15 03:06 '14 at 3:06 2014-01-15 03:06

Siūlyčiau išlaikyti senus failus ir tiesiog juos perrašyti. Taigi tuščiosios eigos laikas ribojamas vienkartiniais perrašomais failais, o vienu metu trūksta tik vieno failo.

Nežinote, ar tai padeda „žiniatinklio taikomojoje programoje“, nors (manau, jūs sakote, kad naudojate), todėl visada naudojame „svetaines“. Be to, „žiniatinklio svetainių“ diegimas nepaleidžia jūsų svetainės ir nepanaikina visų naudotojų sesijų.

-7
20 нояб. atsakymas, kurį pateikė mike nelson lapkričio 20 d 2008-11-20 12:07 '08 12:07 val. 2008-11-20 12:07

Kiti klausimai, susiję su žymėmis, yra arba užduoti klausimą