HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

Saben uwong ngomong babagan proses pangembangan lan tes, staf latihan, nambah motivasi, nanging proses kasebut ora cukup nalika wektu downtime layanan mbutuhake dhuwit sing akeh banget. Apa sing kudu ditindakake nalika nindakake transaksi finansial miturut SLA sing ketat? Kepiye carane nambah linuwih lan toleransi kesalahan sistem sampeyan, njupuk pembangunan lan nyoba metu saka persamaan?

HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

Konferensi HighLoad++ sabanjure bakal dianakake tanggal 6 lan 7 April 2020 ing St. Details lan karcis kanggo link. November 9, 18:00. HighLoad++ Moscow 2018, Delhi + Balai Kolkata. Tesis lan presentasi.

Evgeniy Kuzovlev (sabanjuré - EC): - Kanca-kanca, hello! Jenengku Kuzovlev Evgeniy. Aku saka perusahaan EcommPay, divisi khusus yaiku EcommPay IT, divisi IT saka grup perusahaan. Lan dina iki kita bakal ngomong babagan downtime - babagan carane nyingkiri, babagan carane nyilikake akibate yen ora bisa dihindari. Topik kasebut dicritakake kaya ing ngisor iki: "Apa sing kudu ditindakake nalika wektu downtime biaya $ 100"? Looking ahead, nomer kita iso dibandhingke.

Apa sing ditindakake EcommPay IT?

Sapa kita? Yagene aku ngadeg ing ngarepmu? Yagene aku duwe hak kanggo ngandhani apa wae ing kene? Lan apa sing bakal kita rembug ing kene kanthi luwih rinci?

HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

Klompok perusahaan EcommPay minangka akuisisi internasional. Kita proses pembayaran ing saindenging jagad - ing Rusia, Eropa, Asia Tenggara (All Around the World). Kita duwe 9 kantor, total 500 karyawan, lan kira-kira kurang saka setengah saka spesialis IT. Kabeh sing kita lakoni, kabeh sing entuk dhuwit, kita nindakake dhewe.

Kita nulis kabeh produk kita (lan kita duwe cukup akeh - ing baris produk IT gedhe kita duwe sekitar 16 komponen beda) dhewe; Kita nulis dhéwé, kita ngembangake dhéwé. Lan saiki kita nindakake babagan yuta transaksi saben dina (mayuta-yuta mbokmenawa cara sing bener kanggo ngomong). Kita minangka perusahaan sing cukup enom - umure mung nem taun.

6 taun kepungkur iku wiwitan kaya nalika wong lanang teka bebarengan karo bisnis. Padha manunggal dening idea (ana apa-apa liyane nanging idea), lan kita mlayu. Kaya wiwitan apa wae, kita mlayu luwih cepet ... Kanggo kita, kacepetan luwih penting tinimbang kualitas.

Ing sawetara titik, kita mandheg: kita ngerti manawa kita ora bisa urip kanthi cepet lan kanthi kualitas kasebut lan kudu fokus ing kualitas dhisik. Ing wektu iki, kita mutusake kanggo nulis platform anyar sing bener, bisa diukur, lan dipercaya. Dheweke miwiti nulis platform iki (dheweke miwiti nandur modal, ngembangake pembangunan, nguji), nanging ing sawetara titik dheweke nyadari yen pangembangan lan pengujian ora ngidini kita tekan tingkat kualitas layanan sing anyar.

Sampeyan nggawe produk anyar, sampeyan sijine menyang produksi, nanging isih ana sing salah ing endi wae. Lan dina iki kita bakal ngomong babagan carane nggayuh tingkat kualitas anyar (carane kita nindakake, babagan pengalaman), njupuk pembangunan lan testing metu saka persamaan; kita bakal ngomong babagan apa sing kasedhiya kanggo operasi - operasi apa sing bisa ditindakake dhewe, apa sing bisa ditawakake kanggo nguji supaya bisa mengaruhi kualitas.

Downtimes. Perintah operasi.

Tansah watu pondasi utama, sing bakal kita omongake saiki yaiku downtime. Tembung elek. Yen kita duwe downtime, kabeh iku ala kanggo kita. Kita mlaku kanggo ngunggahake, admin nyekel server - Gusti Allah ora tiba, kaya sing diucapake ing lagu kasebut. Iki sing bakal kita bahas dina iki.

HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

Nalika kita wiwit ngganti pendekatan kita, kita mbentuk 4 commandments. Aku wis ditampilake ing slide:

Prentah iki cukup prasaja:

HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

  • Cepet ngenali masalah.
  • Nyingkirake malah luwih cepet.
  • Mbantu ngerti alesan (mengko, kanggo pangembang).
  • Lan pendekatan standarisasi.

Aku pengin narik kawigaten sampeyan menyang titik No. 2. Kita nyingkirake masalah, ora ngrampungake. Nemtokake iku sekunder. Kanggo kita, sing paling penting yaiku pangguna dilindhungi saka masalah iki. Bakal ana ing sawetara lingkungan sing terisolasi, nanging lingkungan iki ora bakal ana kontak. Bener, kita bakal ngliwati papat klompok masalah kasebut (sawetara luwih rinci, sawetara kurang rinci), aku bakal ngandhani apa sing kita gunakake, apa pengalaman sing cocog karo solusi.

Ngatasi masalah: Nalika kedadeyan lan apa sing kudu ditindakake?

Nanging kita bakal miwiti metu saka urutan, kita bakal miwiti karo titik No.. 2 - carane cepet njaluk nyisihaken saka masalah? Ana masalah - kita kudu ndandani. "Apa sing kudu kita lakoni babagan iki?" - pitakonan utama. Lan nalika kita wiwit mikir babagan carane ndandani masalah kasebut, kita ngembangake sawetara syarat sing kudu ditindakake kanggo ngatasi masalah.

HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

Kanggo ngrumusake syarat kasebut, kita mutusake kanggo takon dhewe pitakonan: "Kapan kita duwe masalah?" Lan masalah, kaya sing kedadeyan, kedadeyan ing patang kasus:

HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

  • Gagal hardware.
  • Layanan njaba gagal.
  • Ngganti versi piranti lunak (panyebaran sing padha).
  • wutah mbukak mbledhos.

Kita ora bakal ngomong babagan loro pisanan. A malfunction hardware bisa ditanggulangi cukup prasaja: sampeyan kudu duwe kabeh duplikat. Yen iki disk, disk kudu dirakit ing RAID; yen iki server, server kudu duplikat; yen sampeyan duwe infrastruktur jaringan, sampeyan kudu nyuplai salinan kapindho infrastruktur jaringan, yaiku, sampeyan njupuk lan duplikat iku. Lan yen soko gagal, sampeyan ngalih menyang cadangan daya. Iku angel ngomong liyane kene.

Kapindho yaiku kegagalan layanan eksternal. Kanggo paling, sistem ora masalah ing kabeh, nanging ora kanggo kita. Awit kita proses pembayaran, kita minangka aggregator sing ngadeg ing antarane pangguna (sing ngetik data kertu) lan bank-bank, sistem pembayaran (Visa, MasterCard, Mira, etc.). Layanan eksternal kita (sistem pembayaran, bank) cenderung gagal. Sanadyan kita utawa sampeyan (yen sampeyan duwe layanan kuwi) ora bisa mengaruhi iki.

Apa sing kudu ditindakake? Ana rong pilihan ing kene. Pisanan, yen sampeyan bisa, sampeyan kudu duplikat layanan iki ing sawetara cara. Contone, yen bisa, kita nransfer lalu lintas saka siji layanan menyang layanan liyane: contone, kertu diproses liwat Sberbank, Sberbank duwe masalah - kita nransfer lalu lintas [conditionally] kanggo Raiffeisen. Kapindho sing bisa ditindakake yaiku ngerteni kegagalan layanan eksternal kanthi cepet, mula kita bakal ngomong babagan kacepetan respon ing bagean laporan sabanjure.

Nyatane, saka papat kasebut, kita bisa mengaruhi owah-owahan versi piranti lunak khusus - njupuk tindakan sing bakal nyebabake paningkatan kahanan ing konteks penyebaran lan ing konteks pertumbuhan eksplosif ing beban. Bener, sing kita lakoni. Kene, maneh, cathetan cilik ...

Saka papat masalah iki, sawetara bisa langsung ditanggulangi yen sampeyan duwe awan. Yen sampeyan ana ing Microsoft Azhur, awan Ozon, utawa nggunakake awan kita, saka Yandex utawa Mail, mula paling ora masalah hardware dadi masalah lan kabeh bakal dadi apik kanggo sampeyan ing konteks kerusakan hardware.

Kita minangka perusahaan sing rada ora konvensional. Ing kene kabeh wong ngomong babagan "Kubernets", babagan awan - kita ora duwe "Kubernets" utawa awan. Nanging kita duwe rak hardware ing akeh pusat data, lan kita dipeksa kanggo manggon ing hardware iki, kita dipeksa tanggung jawab kanggo kabeh. Mulane, kita bakal ngomong ing konteks iki. Dadi, babagan masalah. Loro pisanan dijupuk metu saka kurung.

Ngganti versi piranti lunak. dhasar

Pangembang kita ora duwe akses menyang produksi. Kok ngono? Iku mung sing kita PCI DSS certified, lan pangembang kita mung ora duwe hak kanggo njaluk menyang "produk". Wis, titik. Sakabehe. Mulane, tanggung jawab pembangunan rampung persis ing wayahe nalika pembangunan ngirim mbangun kanggo release.

HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

Basis kaloro sing kita duwe, sing uga mbantu kita akeh, yaiku ora ana kawruh undocumented unik. Muga-muga sampeyan uga. Amarga yen ora iki, sampeyan bakal duwe masalah. Masalah bakal muncul nalika kawruh unik lan undocumented iki ora ana ing wektu sing tepat ing panggonan sing bener. Contone, sampeyan duwe siji wong sing ngerti carane nyebarake komponen tartamtu - wong kasebut ora ana ing kana, lagi liburan utawa lara - mung, sampeyan duwe masalah.

Lan basis katelu sing kita teka. Kita teka liwat rasa lara, getih, luh - kita teka ing kesimpulan manawa samubarang bangunan kita ngemot kesalahan, sanajan ora ana kesalahan. Kita mutusake iki kanggo awake dhewe: nalika nyebarake barang, nalika nggawe produksi, kita duwe kesalahan. Kita wis nggawe syarat sing kudu ditindakake sistem kita.

Requirements kanggo ngganti versi piranti lunak

Ana telung syarat:

HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

  • Kita kudu cepet muter maneh penyebaran.
  • Kita kudu nyilikake dampak saka panyebaran sing ora sukses.
  • Lan kita kudu bisa kanthi cepet nyebarake kanthi paralel.
    Persis ing urutan kasebut! Kenging punapa? Amarga, pisanan kabeh, nalika deploying versi anyar, kacepetan ora penting, nanging iku penting kanggo sampeyan, yen ana salah, cepet muter maneh lan duwe impact minimal. Nanging yen sampeyan duwe pesawat saka versi ing produksi, kang dadi metu sing ana kesalahan (metu biru, ora ana penyebaran, nanging ana kesalahan) - kacepetan panyebaran sakteruse penting kanggo sampeyan. Apa sing wis kita lakoni kanggo nyukupi tuntutan kasebut? Kita nggunakake metodologi ing ngisor iki:

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Iku cukup kondhang, kita ora tau nemokke - iki Blue / Green nyebarke. Opo iki? Sampeyan kudu duwe salinan kanggo saben klompok server sing diinstal aplikasi sampeyan. Salinan kasebut "anget": ora ana lalu lintas, nanging kapan wae lalu lintas iki bisa dikirim menyang salinan iki. Salinan iki ngemot versi sadurungé. Lan nalika nyebarake, sampeyan muter kode kasebut menyang salinan sing ora aktif. Banjur sampeyan ngalih bagean saka lalu lintas (utawa kabeh) menyang versi anyar. Mangkono, kanggo ngganti arus lalu lintas saka versi lawas menyang sing anyar, sampeyan mung kudu nindakake siji tumindak: sampeyan kudu ngganti balancer ing hulu, ngganti arah - saka siji hulu menyang liyane. Iki trep banget lan ngatasi masalah ngoper cepet lan muter maneh cepet.

    Ing kene solusi kanggo pitakonan kapindho yaiku minimalake: sampeyan mung bisa ngirim bagean saka lalu lintas menyang baris anyar, menyang baris karo kode anyar (ayo dadi, contone, 2%). Lan 2% iki ora 100%! Yen sampeyan ilang 100% lalu lintas amarga panyebaran sing ora sukses, iku medeni; yen sampeyan ilang 2% lalu lintas, iku ora nyenengake, nanging ora medeni. Kajaba iku, pangguna ora bakal sok dong mirsani iki, amarga ing sawetara kasus (ora kabeh) pangguna sing padha, mencet F5, bakal digawa menyang versi liya sing bisa digunakake.

    Panyebaran Biru/Ijo. Routing

    Nanging, ora kabeh gampang banget "Penyebaran Biru / Ijo" ... Kabeh komponen kita bisa dipérang dadi telung klompok:

    • iki frontend (kaca pembayaran sing dideleng klien kita);
    • inti pangolahan;
    • adaptor kanggo nggarap sistem pembayaran (bank, MasterCard, Visa ...).

    Lan ana nuansa ing kene - nuansa kasebut ana ing rute antarane garis. Yen sampeyan mung ngalih 100% lalu lintas, sampeyan ora duwe masalah iki. Nanging yen sampeyan pengin ngalih 2%, sampeyan miwiti takon pitakonan: "Carane nindakake iki?" Sing paling gampang langsung maju: sampeyan bisa nyetel Round Robin ing nginx kanthi pilihan acak, lan sampeyan duwe 2% ing sisih kiwa, 98% ing sisih tengen. Nanging iki ora tansah cocok.

    Contone, ing kasus kita, pangguna sesambungan karo sistem kanthi luwih saka siji panjaluk. Iki normal: 2, 3, 4, 5 panjalukan - sistem sampeyan bisa uga padha. Lan yen penting kanggo sampeyan kabeh panjalukan pangguna teka ing baris sing padha karo panjalukan pisanan, utawa (titik kapindho) kabeh panjalukan pangguna teka ing baris anyar sawise ngalih (dheweke bisa uga wis miwiti kerja luwih awal karo sistem, sadurunge ngalih), - banjur distribusi acak iki ora cocok kanggo sampeyan. Banjur ana pilihan ing ngisor iki:

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Opsi pisanan, sing paling gampang, adhedhasar paramèter dhasar klien (IP Hash). Sampeyan duwe IP, lan dibagi saka tengen ngiwa karo alamat IP. Banjur kasus nomer loro sing dakcritakake bakal bisa digunakake kanggo sampeyan, nalika panyebaran kedadeyan, pangguna bisa miwiti nggarap sistem sampeyan, lan wiwit panyebaran kabeh panjaluk bakal pindhah menyang baris anyar (kanggo sing padha, ujar).

    Yen sakperangan alesan iki ora cocog karo sampeyan lan sampeyan kudu ngirim panjalukan menyang baris ngendi panjalukan awal pangguna teka, banjur sampeyan duwe rong pilihan...
    Pilihan pisanan: sampeyan bisa tuku nginx + mbayar. Ana mekanisme sesi Sticky, sing, sawise panjaluk awal pangguna, menehi sesi menyang pangguna lan ngiket menyang siji utawa liyane hulu. Kabeh panjalukan pangguna sakteruse sajrone umur sesi bakal dikirim menyang hulu sing padha ing ngendi sesi kasebut dikirim.

    Iki ora cocog karo kita amarga kita wis duwe nginx biasa. Ngalih menyang nginx + dudu larang, mung rada lara kanggo kita lan ora bener. "Sticks Sessions", contone, ora bisa kanggo kita kanggo alesan prasaja sing "Stick Sessions" ora ngidini nuntun adhedhasar "Salah siji-utawa". Ing kana sampeyan bisa nemtokake apa sing ditindakake "Sticks Sessions", contone, kanthi alamat IP utawa alamat IP lan cookie utawa postparameter, nanging "Salah siji-utawa" luwih rumit ing kana.

    Mulane, kita teka ing pilihan kaping papat. Kita njupuk nginx ing steroid (iki openresty) - iki nginx padha, kang tambahan ndhukung Gawan saka skrip pungkasan. Sampeyan bisa nulis script pungkasan, menehi "ngaso mbukak", lan script pungkasan iki bakal kaleksanan nalika request pangguna teka.

    Lan kita nulis, nyatane, skrip kasebut, nyetel awake dhewe "openresti" lan ing naskah iki kita ngurutake 6 parameter sing beda-beda kanthi concatenation "Utawa". Gumantung ing ngarsane parameter siji utawa liyane, kita ngerti manawa pangguna teka menyang kaca utawa liyane, siji baris utawa liyane.

    Panyebaran Biru/Ijo. Kaluwihan lan cacat

    Mesthi wae, bisa uga luwih gampang (nggunakake "Sesi Sticky" sing padha), nanging kita uga duwe nuansa sing ora mung pangguna sesambungan karo kita ing kerangka siji pangolahan siji transaksi ... Nanging sistem pembayaran uga sesambungan karo kita: Sawise kita proses transaksi (kanthi ngirim panjalukan kanggo sistem pembayaran), kita nampa coolback.
    Lan ayo ngomong, yen ing sirkuit kita bisa nerusake alamat IP pangguna ing kabeh panjalukan lan mbagi pangguna adhedhasar alamat IP, mula kita ora bakal ngandhani "Visa" sing padha: "Wah, kita minangka perusahaan retro, kayane dadi internasional (ing situs web lan ing Rusia)... Mangga wenehi alamat IP pangguna ing lapangan tambahan, protokol sampeyan wis standar"! Cetha yen dheweke ora bakal setuju.

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Mulane, iki ora bisa kanggo kita - kita nindakake openresty. Mulane, kanthi nuntun kita entuk kaya iki:

    Panyebaran Biru / Ijo nduweni kaluwihan lan kekurangan sing dakkandhakake.

    Loro cacat:

    • sampeyan kudu repot karo nuntun;
    • kerugian utama kapindho iku beyo.

    Sampeyan kudu kaping pindho minangka akeh server, sampeyan kudu kaping pindho minangka akeh sumber daya operasional, sampeyan kudu nglampahi kaping pindho minangka akeh gaweyan kanggo njaga kabeh zoo iki.

    Miturut cara, ing antarane kaluwihan ana siji liyane sing durung dakcritakake sadurunge: sampeyan duwe cadangan yen ana wutah beban. Yen sampeyan duwe beban sing mbledhos, sampeyan duwe akeh pangguna, mula sampeyan mung nyakup baris nomer loro ing distribusi 50 nganti 50 - lan sampeyan langsung duwe server x2 ing kluster nganti sampeyan ngrampungake masalah duwe server liyane.

    Kepiye carane nggawe penyebaran cepet?

    Kita ngomong babagan carane ngatasi masalah minimalake lan mundur cepet, nanging isih ana pitakonan: "Carane nyebarake kanthi cepet?"

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Iku cendhak lan prasaja ing kene.

    • Sampeyan kudu duwe sistem CD (Pangiriman Terus-terusan) - sampeyan ora bisa urip tanpa. Yen sampeyan duwe siji server, sampeyan bisa masang kanthi manual. Kita duwe kira-kira siji lan setengah ewu server lan siji lan setengah ewu nangani, mesthi - kita bisa nandur departemen ukuran kamar iki mung kanggo nyebarke.
    • Penyebaran kudu paralel. Yen panyebaran sampeyan berurutan, mula kabeh bakal ala. Siji server normal, sampeyan bakal nggunakake siji lan setengah ewu server sedina muput.
    • Maneh, kanggo akselerasi, iki mbokmenawa ora perlu maneh. Sajrone panyebaran, proyek kasebut biasane dibangun. Sampeyan duwe proyek web, ana bagean ngarep (sampeyan nggawe paket web ing kana, sampeyan ngumpulake npm - kaya ngono), lan proses iki, ing asas, cendhak - 5 menit, nanging 5 menit iki bisa dadi kritis. Pramila, contone, kita ora nindakake: kita mbusak 5 menit iki, kita nyebar artefak.

      Apa artifak? Artefak minangka bangunan sing dirakit sing kabeh bagean perakitan wis rampung. Kita nyimpen artefak iki ing panyimpenan artefak. Ing sawijining wektu, kita nggunakake rong panyimpenan kasebut - yaiku Nexus lan saiki jFrog Artifactory) Wiwitane nggunakake "Nexus" amarga kita wiwit praktik pendekatan iki ing aplikasi java (cocok banget). Banjur padha nyelehake sawetara aplikasi sing ditulis ing PHP ing kana; lan "Nexus" ora cocok maneh, lan mulane kita milih jFrog Artefactory, kang bisa artifactorize meh kabeh. Kita malah wis tekan titik yen ing gudang artefak iki kita nyimpen paket binar dhewe sing diklumpukake kanggo server.

    wutah mbukak mbledhos

    Kita ngomong babagan ngganti versi piranti lunak. Ing bab sabanjure kita kudu nambah mbledhos ing mbukak. Ing kene, aku bisa uga tegese kanthi mbledhosake beban sing ora bener ...

    We wrote sistem anyar - iku layanan-oriented, modern, ayu, buruh nang endi wae, queues nang endi wae, asynchrony nang endi wae. Lan ing sistem kasebut, data bisa mili liwat aliran sing beda-beda. Kanggo transaksi pisanan, buruh 1, 3, 10 bisa digunakake, kanggo transaksi kapindho - 2, 4, 5. Lan dina iki, ayo ngomong, ing wayah esuk sampeyan duwe aliran data sing nggunakake telung buruh pisanan, lan ing wayah sore owah-owahan dramatis, lan kabeh nggunakake telung buruh liyane.

    Lan ing kene, sampeyan kudu nggedhekake para pekerja, sampeyan kudu ngukur layanan sampeyan, nanging ing wektu sing padha nyegah sumber daya.

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Kita wis nemtokake syarat kita. Persyaratan iki cukup prasaja: ana panemuan Layanan, parameterisasi - kabeh standar kanggo mbangun sistem skalabel kasebut, kajaba siji titik - panyusutan sumber daya. Kita ujar manawa ora siyap kanggo amortize sumber daya supaya server dadi panas. Kita njupuk "Konsul", kita njupuk "Nomad", sing ngatur buruh kita.

    Yagene iki dadi masalah kanggo kita? Ayo mundur sethithik. Saiki kita duwe sekitar 70 sistem pembayaran ing mburi. Ing wayah esuk, lalu lintas liwat Sberbank, banjur Sberbank ambruk, contone, lan kita ngalih menyang sistem pembayaran liyane. Kita duwe 100 buruh sadurunge Sberbank, lan sawise iku kita kudu nambah banget 100 buruh kanggo sistem pembayaran liyane. Lan iku seng di pengeni kanggo kabeh iki kelakon tanpa partisipasi manungsa. Amarga yen ana partisipasi manungsa, mesthine ana insinyur sing lungguh ing kono 24/7, sing mung kudu nindakake iki, amarga kegagalan kasebut, nalika 70 sistem ana ing mburi sampeyan, kedadeyan kanthi rutin.

    Mulane, kita nyawang Nomad, sing duwe IP mbukak, lan nulis bab kita dhewe, Scale-Nomad - ScaleNo, sing nindakake kira-kira ing ngisor iki: ngawasi wutah antrian lan nyuda utawa nambah jumlah buruh gumantung saka dinamika. saka antrian. Nalika nindakake, kita mikir: "Mungkin kita bisa mbukak sumber kasebut?" Banjur padha nyawang dheweke - dheweke kaya rong kopecks.

    Nganti saiki, kita durung mbukak sumber kasebut, nanging yen dumadakan sawise laporan, sawise ngerti yen sampeyan butuh barang kasebut, sampeyan butuh, kontakku ana ing slide pungkasan - mangga nulis menyang aku. Yen ana paling 3-5 wong, kita bakal sponsor.

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Cara kerjane? Ayo dideleng! Nggoleki ing ngarep: ing sisih kiwa ana potongan pemantauan kita: iki siji baris, ing ndhuwur iku wektu pangolahan acara, ing tengah ana jumlah transaksi, ing ngisor iki nomer buruh.

    Yen sampeyan ndeleng, ana kesalahan ing gambar iki. Ing bagan paling ndhuwur, salah sawijining grafik ambruk sajrone 45 detik - salah sawijining sistem pembayaran mudhun. Langsung, lalu lintas digawa ing 2 menit lan antrian wiwit tuwuh ing sistem pembayaran liyane, sing ora ana buruh (kita ora nggunakake sumber daya - sebaliknya, kita mbuwang sumber daya kanthi bener). Kita ora pengin dadi panas - ana jumlah minimal, udakara 5-10 buruh, nanging ora bisa ngatasi.

    Graf pungkasan nuduhake "punuk", kang mung tegese "Skaleno" tikel jumlah iki. Banjur, nalika grafik mudhun sithik, dheweke nyuda sithik - jumlah karyawan diganti kanthi otomatis. Mangkono cara iki. Kita ngomong babagan titik nomer 2 - "Carane cepet nyingkirake alasan."

    Ngawasi. Carane cepet ngenali masalah?

    Saiki titik pisanan yaiku "Carane ngenali masalah kanthi cepet?" Ngawasi! Kita kudu ngerti sawetara perkara kanthi cepet. Bab apa sing kudu dimangerteni kanthi cepet?

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Telung prakara!

    • Kita kudu ngerti lan ngerti kanthi cepet kinerja sumber daya kita dhewe.
    • Kita kudu cepet ngerti kegagalan lan ngawasi kinerja sistem sing ana ing njaba kita.
    • Titik katelu yaiku ngenali kesalahan logis. Iki nalika sistem digunakake kanggo sampeyan, kabeh normal miturut kabeh pratondho, nanging ana sing salah.

    Aku mbokmenawa ora bakal pitutur marang kowe apa-apa sing kelangan kene. Aku bakal dadi Kapten Obvious. Kita nggoleki apa sing ana ing pasar. Kita duwe "kebun binatang sing nyenengake". Iki minangka jinis kebon binatang sing saiki ana:

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Kita nggunakake Zabbix kanggo ngawasi hardware, kanggo ngawasi indikator utama server. Kita nggunakake Okmeter kanggo database. Kita nggunakake "Grafana" lan "Prometheus" kanggo kabeh pratondho liyane sing ora pas karo loro pisanan, sawetara karo "Grafana" lan "Prometheus", lan sawetara karo "Grafana" karo "Influx" lan Telegraf.

    Setaun kepungkur kita pengin nggunakake New Relic. Apik banget, bisa nindakake kabeh. Nanging yen dheweke bisa nindakake kabeh, dheweke larang banget. Nalika kita tuwuh dadi volume 1,5 ewu server, ana vendor teka lan ujar: "Ayo nggawe perjanjian kanggo taun ngarep." We katon ing rega lan ngandika ora, kita ora bakal nindakake iku. Saiki kita ninggalake New Relic, kita duwe udakara 15 server sing ditinggalake ing pengawasan New Relic. Rega diaktifake metu pancen alam bébas.

    Lan ana siji alat sing ditindakake dhewe - yaiku Debugger. Kaping pisanan kita nyebut "Bagger," nanging banjur ana guru basa Inggris liwat, ngguyu, lan jenenge "Debagger." Opo iki? Iki minangka alat sing, nyatane, ing 15-30 detik ing saben komponèn, kaya "kothak ireng" sistem, nganakake tes kinerja sakabèhé komponen kasebut.

    Contone, yen ana kaca eksternal (kaca pembayaran), dheweke mung mbukak lan ndeleng kepiye carane katon. Yen iki diproses, dheweke ngirim "transaksi" tes lan priksa manawa "transaksi" kasebut teka. Yen iki sambungan karo sistem pembayaran, kita murub panjalukan test patut, ngendi kita bisa, lan ndeleng sing kabeh iku nggoleki karo kita.

    Indikator apa sing penting kanggo ngawasi?

    Apa sing utamane kita ngawasi? Indikator apa sing penting kanggo kita?

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    • Wektu respon / RPS ing ngarep minangka indikator sing penting banget. Dheweke langsung njawab yen ana sing salah karo sampeyan.
    • Jumlah pesen sing diproses ing kabeh antrian.
    • Jumlah pegawe.
    • Metrik kabeneran dhasar.

    Titik pungkasan yaiku metrik "bisnis", "bisnis". Yen sampeyan pengin ngawasi perkara sing padha, sampeyan kudu nemtokake siji utawa loro metrik sing dadi indikator utama kanggo sampeyan. Metrik kita yaiku throughput (iki minangka rasio jumlah transaksi sing sukses kanggo total aliran transaksi). Yen ana owah-owahan ing interval 5-10-15 menit, tegese kita duwe masalah (yen owah-owahan radikal).

    Apa sing katon kanggo kita minangka conto salah sawijining papan:

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Ing sisih kiwa ana 6 grafik, iki miturut garis - jumlah buruh lan jumlah pesen ing antrian. Ing sisih tengen - RPS, RTS. Ing ngisor iki metrik "bisnis" sing padha. Lan ing metrik "bisnis" kita bisa langsung weruh yen ana sing salah ing rong grafik tengah ... Iki mung sistem liyane sing ana ing mburi kita sing wis tiba.

    Babagan kapindho sing kudu ditindakake yaiku ngawasi kejatuhan sistem pembayaran eksternal. Ing kene kita njupuk OpenTracing - mekanisme, standar, paradigma sing ngidini sampeyan nglacak sistem sing disebarake; lan iku diganti sethitik. Paradigma OpenTracing standar ujar manawa kita nggawe jejak kanggo saben panyuwunan individu. Kita ora perlu iki, lan kita kebungkus ing ringkesan, tilak kumpulan. Kita nggawe alat sing ngidini kita nglacak kacepetan sistem ing mburi.

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Grafik kasebut nuduhake manawa salah sawijining sistem pembayaran wiwit nanggapi sajrone 3 detik - kita duwe masalah. Kajaba iku, bab iki bakal nanggepi nalika masalah diwiwiti, ing interval 20-30 detik.

    Lan kesalahan ngawasi kelas katelu sing ana yaiku ngawasi logis.

    Jujur, aku ora ngerti apa sing kudu digambar ing slide iki, amarga kita wis suwe nggoleki pasar sing cocog karo kita. Kita ora nemu apa-apa, mula kita kudu nindakake dhewe.

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Apa tegese ngawasi logis? Inggih, mbayangno: sampeyan nggawe dhewe sistem (contone, tiron Tinder); sampeyan wis nggawe, dibukak. Manajer sukses Vasya Pupkin sijine ing telpon, ndeleng cah wadon ana, seneng dheweke ... lan kaya ora pindhah menyang cah wadon - kaya kanggo njaga keamanan Mikhalych saka pusat bisnis padha. Manajer mudhun, banjur takon: "Yagene penjaga keamanan iki Mikhalych mesem banget marang dheweke?"

    Ing kahanan kaya mengkono ... Kanggo kita, kahanan iki muni rada beda, amarga (aku nulis) iki mundhut reputasi sing ora langsung ndadékaké kanggo mundhut financial. Kahanan kita ngelawan: kita bisa nandhang kerugian finansial langsung - contone, yen kita nindakake transaksi minangka sukses, nanging ora kasil (utawa kosok balene). Aku kudu nulis alat dhewe sing nglacak jumlah transaksi sukses liwat wektu nggunakake indikator bisnis. Ora nemu apa-apa ing pasar! Iki pancen ide sing dakkarepake. Ora ana apa-apa ing pasar kanggo ngatasi masalah iki.

    Iki babagan carane ngenali masalah kanthi cepet.

    Carane nemtokake alasan kanggo penyebaran

    Klompok katelu saka masalah sing kita mecahaké iku sawise kita wis ngenali masalah, sawise kita nandang gerah saka iku, iku bakal apik kanggo ngerti alesan kanggo pembangunan, kanggo testing, lan nindakake soko babagan. Patut, kita kudu nyelidiki, kita kudu ngunggahake log.

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Yen kita ngomong babagan log (alasan utama yaiku log), akeh log kita ana ing ELK Stack - meh kabeh wong duwe padha. Kanggo sawetara, bisa uga ora ana ing ELK, nanging yen sampeyan nulis log ing gigabyte, banjur cepet utawa mengko sampeyan bakal teka ing ELK. Kita nulis ing terabyte.

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Ana masalah ing kene. Kita ndandani, mbenerake kesalahan pangguna, wiwit nggali apa sing ana ing kono, munggah menyang Kibana, ngetik id transaksi ana lan entuk footcloth kaya iki (nuduhake akeh). Lan pancen ora ana sing jelas ing footcloth iki. Kenging punapa? Ya, amarga ora jelas bagean endi sing kalebu buruh, bagean endi komponen. Lan ing wektu iku kita nyadari yen kita kudu nglacak - OpenTracing sing padha karo sing dakkandhakake.

    Kita panginten iki setahun kepungkur, nguripake manungsa waé menyang pasar, lan ana rong piranti - "Zipkin" lan "Jaeger". "Jager" nyatane minangka ahli waris ideologis, penerus ideologi "Zipkin". Kabeh apik ing Zipkin, kajaba iku ora ngerti carane aggregate, ora ngerti carane kalebu log ing tilak, mung wektu tilak. Lan "Jager" ndhukung iki.

    Kita ndeleng "Jager": sampeyan bisa aplikasi instrumen, sampeyan bisa nulis ing Api (standar Api kanggo PHP nalika iku, nanging ora disetujoni - iki wis setahun kepungkur, nanging saiki wis disetujoni), nanging ana pancen ora ana klien. "Oke," kita mikir, lan nulis klien kita dhewe. Apa sing kita entuk? Iki kira-kira katon kaya:

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Ing Jaeger, span digawe kanggo saben pesen. Yaiku, nalika pangguna mbukak sistem, dheweke ndeleng siji utawa rong blok kanggo saben panjaluk sing mlebu (1-2-3 - jumlah panjaluk sing mlebu saka pangguna, jumlah blok). Kanggo nggampangake pangguna, kita nambahake tag menyang log lan jejak wektu. Mulane, yen ana kesalahan, aplikasi kita bakal menehi tandha log kanthi tag Kesalahan sing cocog. Sampeyan bisa nyaring miturut tag Kesalahan lan mung jembar sing ngemot blok iki kanthi kesalahan sing bakal ditampilake. Iki kaya apa yen kita nggedhekake span:

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Ing jero span ana sakumpulan jejak. Ing kasus iki, iki telung ngambah test, lan tilak katelu ngandhani yen ana kesalahan. Ing wektu sing padha, ing kene kita ndeleng jejak wektu: kita duwe skala wektu ing ndhuwur, lan kita ndeleng ing interval wektu iki utawa log kasebut direkam.

    Pramila, prakawis punika lumampah kanthi sae. Kita nulis ekstensi kita dhewe lan kita mbukak sumber kasebut. Yen sampeyan pengin nggarap tracing, yen sampeyan pengin nggarap "Jager" ing PHP, ana extension kita, welcome kanggo nggunakake, kaya sing diucapake:

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Kita duwe ekstensi iki - iku klien kanggo OpenTracing Api, digawe minangka ekstensi php, yaiku, sampeyan kudu ngumpul lan nginstal ing sistem. Setaun kepungkur ora ana sing beda. Saiki ana klien liyane sing kaya komponen. Kene iku nganti sampeyan: sampeyan bisa pump metu komponen karo pengarang, utawa sampeyan nggunakake extension nganti sampeyan.

    Standar perusahaan

    Kita ngomong babagan telung dhawuh. Angger-angger kaping papat yaiku kanggo nggawe standarisasi pendekatan. Iki bab apa? Babagan iki:

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Napa tembung "perusahaan" ana ing kene? Ora amarga kita perusahaan gedhe utawa birokrasi, ora! Aku pengin nggunakake tembung "perusahaan" ing konteks sing saben perusahaan, saben produk kudu duwe standar dhewe, kalebu sampeyan. Apa standar sing kita duwe?

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    • Kita duwe peraturan penyebaran. Kita ora obah ing ngendi wae tanpa dheweke, kita ora bisa. Kita nyebar udakara 60 kaping seminggu, yaiku, kita nyebarake meh terus-terusan. Ing wektu sing padha, kita kudu, contone, ing peraturan penyebaran, tabu ing deployments ana - ing asas, kita ora masang.
    • We mbutuhake dokumentasi. Ora ana komponèn anyar sing mlebu produksi yen ora ana dokumentasi, sanajan lair ing sangisore pena spesialis RnD kita. Kita mbutuhake instruksi panyebaran, peta ngawasi lan gambaran kasar (uga, kaya sing bisa ditulis programer) babagan cara komponen iki, carane ngatasi masalah.
    • We ngatasi ora sabab saka masalah, nanging masalah - apa aku wis ngandika. Penting kanggo nglindhungi pangguna saka masalah.
    • Kita duwe reresik. Contone, kita ora nganggep downtime yen ilang 2% lalu lintas sajrone rong menit. Iki ora kalebu ing statistik kita. Yen luwih ing istilah persentasi utawa sauntara, kita wis count.
    • Lan kita tansah nulis postmortems. Apa wae sing kedadeyan karo kita, kahanan apa wae nalika ana wong sing tumindak ora normal ing produksi bakal dibayangke ing post-mortem. Postmortem minangka dokumen sing sampeyan nulis apa sing kedadeyan karo sampeyan, wektu sing rinci, apa sing sampeyan tindakake kanggo mbenerake lan (iki minangka pamblokiran wajib!) Apa sing bakal ditindakake kanggo nyegah kedadeyan kasebut ing mangsa ngarep. Iki wajib lan perlu kanggo analisis sabanjure.

    Apa sing dianggep downtime?

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Apa kabeh iki mimpin kanggo?

    Iki nyebabake kasunyatan manawa (kita duwe masalah tartamtu babagan stabilitas, iki ora cocog karo klien utawa kita) sajrone 6 wulan kepungkur, indikator stabilitas yaiku 99,97. Kita bisa ngomong yen iki ora akeh banget. Ya, ana sing kudu diupayakake. Saka indikator iki, kira-kira setengah minangka stabilitas, kayadene, dudu saka kita, nanging firewall aplikasi web kita, sing ana ing ngarep kita lan digunakake minangka layanan, nanging klien ora peduli babagan iki.

    Kita sinau turu ing wayah wengi. Akhire! Enem sasi kepungkur kita ora bisa. Lan ing cathetan iki kanthi asil, aku pengin nggawe cathetan. Pungkasan wengi ana laporan apik babagan sistem kontrol kanggo reaktor nuklir. Yen wong-wong sing nulis sistem iki bisa ngrungokake aku, aja lali babagan apa sing dakkandhakake babagan "2% ora downtime." Kanggo sampeyan, 2% minangka downtime, sanajan rong menit!

    Iku kabeh! Pitakonan sampeyan.

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Babagan balancers lan migrasi database

    Pitakonan para rawuh (sateruse – B): – Sugeng sonten. Matur nuwun kanthi sanget kanggo laporan admin kasebut! Pitakonan singkat babagan balancers sampeyan. Sampeyan nyebutake manawa sampeyan duwe WAF, yaiku, kaya sing dakmangerteni, sampeyan nggunakake sawetara penyeimbang eksternal ...

    EK: – Ora, kita nggunakake layanan kita minangka balancer. Ing kasus iki, WAF minangka alat perlindungan DDoS khusus kanggo kita.

    IN: – Apa sampeyan bisa ngomong sawetara tembung babagan balancers?

    EK: - Kaya sing wis dakkandhakake, iki minangka klompok server ing openresty. Saiki kita duwe 5 grup cadangan sing nanggapi sacara eksklusif ... yaiku, server sing mbukak kanthi eksklusif, mung proxy lalu lintas. Patut, kanggo ngerti carane akeh kita terus: kita saiki duwe aliran lalu lintas biasa sawetara atus megabits. Padha ngrampungake, padha aran apik, malah ora ketegangan piyambak.

    IN: – Uga pitakonan prasaja. Punika panyebaran Biru/Ijo. Apa sing sampeyan lakoni, contone, karo migrasi database?

    EK: - Pitakonan apik! Deleng, ing panyebaran Biru / Ijo kita duwe antrian sing kapisah kanggo saben baris. Tegese, yen kita ngomong babagan antrian acara sing ditularake saka buruh menyang buruh, ana antrian sing kapisah kanggo garis biru lan garis ijo. Yen kita ngomong babagan database dhewe, mula kita sengaja nyepetake sabisane, mindhah kabeh kanthi praktis menyang antrian, ing database kita mung nyimpen tumpukan transaksi. Lan tumpukan transaksi kita padha kanggo kabeh baris. Kanthi database ing konteks iki: kita ora dibagi dadi biru lan ijo, amarga loro versi kode kudu ngerti apa sing kedadeyan karo transaksi kasebut.

    Kanca-kanca, aku uga duwe hadiah cilik kanggo sampeyan - buku. Lan aku kudu dianugerahi kanggo pitakonan sing paling apik.

    IN: - Halo. Matur nuwun kanggo laporan. Pitakonan iki. Sampeyan ngawasi pembayaran, sampeyan ngawasi layanan sing sampeyan komunikasi ... Nanging kepiye carane sampeyan ngawasi supaya ana wong sing teka ing kaca pembayaran sampeyan, nggawe pembayaran, lan proyek kasebut menehi dhuwit? Sing, carane sampeyan ngawasi sing marchant kasedhiya lan wis nampa callback Panjenengan?

    EK: - "Merchant" kanggo kita ing kasus iki persis layanan external padha sistem pembayaran. Kita ngawasi kacepetan respon pedagang.

    Babagan enkripsi database

    IN: - Halo. Aku duwe pitakonan sing rada gegandhengan. Sampeyan duwe data sensitif PCI DSS. Aku pengin ngerti carane sampeyan nyimpen PAN ing antrian sing kudu ditransfer? Apa sampeyan nggunakake enkripsi apa wae? Lan iki ndadékaké kanggo pitakonan kapindho: miturut PCI DSS, perlu kanggo periodik re-encrypt database ing cilik saka owah-owahan (dismissal administrator, etc.) - apa mengkono kanggo aksesibilitas ing kasus iki?

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    EK: - Pitakonan apik tenan! Kaping pisanan, kita ora nyimpen PAN ing antrian. Kita ora duwe hak kanggo nyimpen PAN ing endi wae ing wangun sing jelas, ing prinsip, mula nggunakake layanan khusus (disebut "Kademon") - iki layanan sing mung nindakake siji: nampa pesen minangka input lan ngirim. metu pesen sing dienkripsi. Lan kita nyimpen kabeh karo pesen ndhelik iki. Patut, dawa tombol kita ana ing sangisore kilobyte, supaya iki serius lan dipercaya.

    IN: – Apa sampeyan kudu 2 kilobyte saiki?

    EK: – Kayane mung wingi iku 256... Lha, endi maneh?!

    Mulane, iki pisanan. Lan kapindho, solusi sing ana, ndhukung prosedur enkripsi maneh - ana rong pasangan "keks" (tombol), sing menehi "deck" sing ndhelik (kunci minangka kunci, dek minangka turunan saka kunci sing ndhelik) . Lan yen prosedur diwiwiti (iku kedadeyan kanthi reguler, saka 3 sasi nganti ± sawetara), kita ngundhuh pasangan "kue" anyar, lan ndhelik maneh data kasebut. Kita duwe layanan kapisah sing nyuwek kabeh data lan ndhelik kanthi cara anyar; Data kasebut disimpen ing jejere pengenal kunci sing dienkripsi. Mulane, sanalika kita ndhelik data nganggo kunci anyar, kita mbusak kunci lawas.

    Kadhangkala pembayaran kudu ditindakake kanthi manual ...

    IN: - Sing, yen mbalekaken wis teka kanggo sawetara operasi, sampeyan isih bakal decrypt karo tombol lawas?

    EK: - Ya.

    IN: – Banjur siji liyane pitakonan cilik. Nalika sawetara jinis kegagalan, tiba, utawa kedadeyan, kudu ditindakake kanthi manual. Ana kahanan kaya mengkono.

    EK: - Ya, kadhangkala.

    IN: – Saka ngendi sampeyan entuk data iki? Utawa sampeyan menyang fasilitas panyimpenan iki dhewe?

    EK: - Ora, mesthi, kita duwe sawetara sistem back-office sing ngemot antarmuka kanggo dhukungan. Yen kita ora ngerti apa status transaksi ing (contone, nganti sistem pembayaran nanggapi karo wektu entek), kita ora ngerti priori, sing, kita nemtokake status final mung karo kapercayan lengkap. Ing kasus iki, kita nemtokake transaksi menyang status khusus kanggo proses manual. Esuke, dina sabanjure, sanalika dhukungan nampa informasi yen transaksi kasebut tetep ana ing sistem pembayaran, mula diproses kanthi manual ing antarmuka iki.

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    IN: – Aku duwe saperangan saka pitakonan. Salah siji saka iku tutugan saka zona PCI DSS: carane sampeyan log sirkuit sing? Pitakonan iki amarga pangembang bisa nyelehake apa wae ing log! Pitakonan kapindho: kepiye carane nggawe hotfix? Nggunakake gagang ing database minangka salah sawijining pilihan, nanging bisa uga ana hotfix gratis - apa prosedur kasebut? Lan pitakonan katelu mbokmenawa related kanggo RTO, RPO. Kasedhiyan sampeyan ana 99,97, meh patang sangang, nanging aku ngerti, sampeyan duwe pusat data kapindho, pusat data katelu, lan pusat data kaping lima ... Kepiye carane nyinkronake, replikasi, lan liya-liyane?

    EK: - Ayo dadi miwiti karo pisanan. Apa pitakonan pisanan babagan log? Nalika kita nulis log, kita duwe lapisan sing nutupi kabeh data sensitif. Dheweke katon ing topeng lan ing lapangan tambahan. Patut, log kita metu karo data wis masked lan sirkuit PCI DSS. Iki minangka salah sawijining tugas biasa sing ditugasake ing departemen tes. Dibutuhake kanggo mriksa saben tugas, kalebu log sing ditulis, lan iki minangka salah sawijining tugas biasa sajrone review kode, kanggo ngontrol manawa pangembang ora nulis apa wae. Pemriksaan sabanjure iki ditindakake kanthi rutin dening departemen keamanan informasi babagan sepisan seminggu: log kanggo dina pungkasan dijupuk kanthi selektif lan ditindakake liwat scanner-analyzer khusus saka server tes kanggo mriksa kabeh.
    Babagan hot-fix. Iki kalebu ing peraturan penyebaran kita. Kita duwe klausa kapisah babagan hotfix. Kita pitados bilih kita masang hotfixes watara jam nalika kita perlu. Sanalika versi nglumpuk, sanalika iku mbukak, sanalika kita duwe artefak, kita duwe administrator sistem ing tugas ing telpon saka support, lan deploys ing wayahe nalika iku perlu.

    Udakara "papat sangang". Angka sing saiki wis digayuh, lan kita ngupayakake ing pusat data liyane. Saiki kita duwe pusat data kaloro, lan kita miwiti rute ing antarane, lan masalah replikasi pusat data salib pancen dadi pitakonan sing ora pati penting. Kita nyoba kanggo ngatasi ing siji wektu nggunakake cara sing beda-beda: kita nyoba kanggo nggunakake padha "Tarantula" - iku ora bisa kanggo kita, aku bakal langsung pitutur marang kowe. Pramila kita mungkasi pesen "sens" kanthi manual. Nyatane, saben aplikasi ing sistem kita nindakake sinkronisasi "pangowahan - rampung" sing dibutuhake ing antarane pusat data kanthi ora sinkron.

    IN: - Yen sampeyan entuk sing nomer loro, kenapa sampeyan ora entuk sing nomer telu? Amarga durung ana sing duwe otak pamisah ...

    EK: - Nanging kita ora duwe Split Brain. Amarga kasunyatan sing saben aplikasi mimpin dening multimaster a, iku ora Matter kanggo kita kang pusat panjalukan teka. Kita siyap kanggo kasunyatan sing yen salah siji saka pusat data gagal (kita gumantung ing iki) lan ing tengah request pangguna ngalih menyang pusat data kapindho, kita siyap kanggo ilang pangguna iki, tenan; nanging iki bakal dadi unit, unit absolut.

    IN: - Sugeng sonten. Matur nuwun kanggo laporan. Sampeyan ngomong babagan debugger sampeyan, sing nindakake sawetara transaksi tes ing produksi. Nanging marang kita bab transaksi test! Sepira jerone?

    EK: – Iku dadi liwat siklus lengkap kabeh komponen. Kanggo komponen, ora ana bedane antarane transaksi tes lan produksi. Nanging saka sudut pandang logis, iki mung minangka proyek sing kapisah ing sistem kasebut, ing ngendi mung transaksi tes ditindakake.

    IN: - Ing endi sampeyan ngethok? Kene Core dikirim ...

    EK: – We are konco "Kor" ing kasus iki kanggo transaksi test... We duwe bab kuwi minangka nuntun: "Kor" mangerténi kang sistem pembayaran ngirim menyang - kita ngirim menyang sistem pembayaran palsu, kang mung menehi sinyal http lan iku kabeh.

    IN: – Mangga ngomong, aplikasi sampeyan ditulis ing siji monolit ageng, utawa sampeyan Cut menyang sawetara layanan utawa malah microservices?

    EK: - Kita ora duwe monolit, mesthi, kita duwe aplikasi berorientasi layanan. Kita guyon yen layanan kita digawe saka monoliths - padha tenan cukup gedhe. Pancen angel diarani layanan mikro, nanging iki minangka layanan ing ngendi para pekerja mesin sing disebarake.

    Yen layanan ing server dikompromi ...

    IN: – Banjur aku duwe pitakonan sabanjure. Sanajan monolith, sampeyan isih ujar manawa sampeyan duwe akeh server cepet iki, kabeh padha ngolah data, lan pitakon yaiku: "Yen ana kompromi saka salah sawijining server instan utawa aplikasi, link individu apa wae. , apa padha duwe sawetara jinis kontrol akses? Sapa sing bisa nindakake apa? Sapa sing kudu aku hubungi kanggo informasi apa?

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    EK: - Ya, mesthi. Syarat keamanan cukup serius. Kaping pisanan, kita duwe gerakan data sing mbukak, lan port kasebut mung sing kita ngarepake gerakan lalu lintas. Yen komponèn komunikasi karo database (ngomong, karo Muskul) liwat 5-4-3-2, mung 5-4-3-2 mbukak kanggo, lan bandar liyane lan pituduh lalu lintas ora kasedhiya. Kajaba iku, sampeyan kudu ngerti manawa ing produksi kita ana sekitar 10 puteran keamanan sing beda. Lan sanajan aplikasi kasebut wis dikompromi, Gusti Allah ngalang-alangi, panyerang ora bakal bisa ngakses konsol manajemen server, amarga iki minangka zona keamanan jaringan sing beda.

    IN: - Lan ing konteks iki, sing luwih menarik kanggo aku yaiku sampeyan duwe kontrak tartamtu karo layanan - apa sing bisa ditindakake, liwat "tumindak" apa sing bisa dikontak... Lan ing aliran normal, sawetara layanan tartamtu njaluk sawetara baris, dhaptar "tumindak" ing liyane. Padha ora katon kanggo wong liya ing kahanan normal, lan padha duwe wilayah liyane tanggung jawab. Yen salah sijine dikompromi, apa bisa ngganggu "tumindak" layanan kasebut?..

    EK: - Aku ngerti. Yen ing kahanan normal karo komunikasi server liyane diijini ing kabeh, banjur ya. Miturut kontrak SLA, kita ora ngawasi sing mung diijini pisanan 3 "tumindak", lan sampeyan ora diijini 4 "tumindak". Iki mbokmenawa keluwih kanggo kita, amarga kita wis duwe sistem pangayoman 4-tingkat, ing asas, kanggo sirkuit. Kita luwih seneng mbela diri kanthi kontur, tinimbang ing tingkat njero.

    Carane Visa, MasterCard lan Sberbank bisa

    IN: - Aku pengin njlentrehake titik babagan ngalih pangguna saka siji pusat data menyang liyane. Sa adoh aku ngerti, Visa lan MasterCard operate nggunakake 8583 protokol sinkron binar, lan ana campuran ana. Lan aku pengin ngerti, saiki tegese ngoper - apa langsung "Visa" lan "MasterCard" utawa sadurunge sistem pembayaran, sadurunge diproses?

    EK: - Iki sadurunge campuran. Campuran kita dumunung ing pusat data sing padha.

    IN: – Kira-kira, apa sampeyan duwe siji titik sambungan?

    EK: - "Visa" lan "MasterCard" - ya. Mung amarga Visa lan MasterCard mbutuhake investasi sing cukup serius ing infrastruktur kanggo ngrampungake kontrak sing kapisah kanggo entuk pasangan campuran liya, contone. Padha dilindhungi undhang-undhang ing siji pusat data, nanging yen, Gusti Allah ngalang-alangi, pusat data kita, ing ngendi ana campuran kanggo nyambungake menyang Visa lan MasterCard, mati, banjur kita bakal duwe sambungan karo Visa lan MasterCard ilang...

    IN: – Carane padha bisa dilindhungi undhang-undhang? Aku ngerti sing Visa ngidini mung siji sambungan ing asas!

    EK: – Padha nyedhiyani peralatan dhewe. Ing kasus apa wae, kita nampa peralatan sing akeh banget ing njero.

    IN: – Dadi ngadeg iku saka Connects Orange sing?..

    EK: - Ya.

    IN: - Nanging babagan kasus iki: yen pusat data sampeyan ilang, kepiye sampeyan bisa terus nggunakake? Utawa lalu lintas mung mandheg?

    EK: - Ora. Ing kasus iki, kita mung bakal ngalih lalu lintas menyang saluran liyane, sing, mesthi, bakal luwih larang kanggo kita lan luwih larang kanggo klien kita. Nanging lalu lintas ora bakal liwat sambungan langsung kita kanggo Visa, MasterCard, nanging liwat Sberbank saratipun (banget exaggerated).

    Aku njaluk ngapura wildly yen aku gelo karyawan Sberbank. Nanging miturut statistik kita, ing antarane bank-bank Rusia, Sberbank tiba paling asring. Ora ana sasi tanpa ana sing tiba ing Sberbank.

    HighLoad ++, Evgeniy Kuzovlev (EcommPay IT): apa sing kudu ditindakake nalika wektu downtime $ 100000

    Sawetara iklan 🙂

    Matur nuwun kanggo tetep karo kita. Apa sampeyan seneng karo artikel kita? Pengin ndeleng konten sing luwih menarik? Ndhukung kita kanthi nggawe pesenan utawa menehi rekomendasi menyang kanca, cloud VPS kanggo pangembang saka $4.99, analog unik saka server level entri, sing diciptakake kanggo sampeyan: Bebener kabeh babagan VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps saka $ 19 utawa carane nuduhake server? (kasedhiya karo RAID1 lan RAID10, munggah 24 intine lan nganti 40GB DDR4).

    Dell R730xd 2 kaping luwih murah ing pusat data Equinix Tier IV ing Amsterdam? Mung kene 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV saka $199 ing Walanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - saka $99! Maca babagan Carane mbangun infrastruktur corp. kelas karo nggunakake Dell R730xd E5-2650 v4 server worth 9000 euro kanggo Penny?

Source: www.habr.com

Add a comment