Kelompok web Bitrix. Kelompok web - pengalaman sebenar

Hari ini Bitrix mempersembahkan penyelesaian baharunya - "kelompok web". Bagi mereka yang tidak tahu, saya akan menerangkan bahawa perkara ini membolehkan anda meletakkan projek yang sangat dikunjungi bukan pada satu, tetapi pada beberapa pelayan, dan pada bila-bila masa menambah pelayan baharu untuk mempercepatkan tapak. Ia juga selamat untuk mengalih keluar mana-mana pelayan untuk pembaikan, naik taraf, atau sekiranya berlaku kegagalan. Sudah tentu, sebagai pesaing pertama mereka (diwakili oleh syarikat Yumisoft), saya pertama sekali perlu mengetahui perkara asas baharu yang mereka tawarkan kepada pasaran.

tiada apa. Tiada apa-apa dengan cara yang baik. Bitrix berhenti bermain-main dan "mencipta semula roda" - nampaknya ahli teknologi pintar menyertai pasukan, jadi bukannya "basikal" mereka mengambil dan melakukan segala-galanya seperti orang biasa. Dalam entri ini saya akan memberitahu dalam kata mudah– apakah sebenarnya yang mereka lakukan dan bagaimana anda boleh mengulangi perkara yang sama dalam projek anda.

Mari lihat bahagian utama kluster:

0. Awan – awan, satu set pelayan di mana semua ini akan dijalankan.
1. Pengimbang beban – pengimbang beban masuk.
2. Replikasi MySQL ialah jenis pengelompokan pangkalan data yang popular.
3. Rangkaian sistem fail– diedarkan penyimpanan fail.

Seperti yang dinyatakan di atas, kluster ialah satu set bilangan pelayan web yang sewenang-wenangnya. Mereka boleh melakukan tugas yang sama, atau yang berbeza bergantung pada matlamat. Mari kita mulakan dengan pelayan: di sini dicadangkan untuk menggunakan mesin maya aws.amazon.com untuk mereka. Saya tidak akan mengatakan bahawa ini adalah penyelesaian yang munasabah: mesin maya adalah priori perlahan, tetapi di sini detik penting- kemudahan penciptaan. Saya menekan butang dan ia dicipta. Dan bukan mesin lalai, tetapi mesin yang dikonfigurasikan khusus untuk keperluan anda. Anda boleh menciptanya mengikut jadual atau secara dinamik apabila beban meningkat. Tapak anda berada di bawah aliran yang kuat pelawat - ia r-r-r-az dan mencipta beberapa mesin baharu. Beban tamat - mesin dimatikan. Kecantikan.

Sudah tentu, mana-mana pelayan di Internet boleh bertindak sebagai pelayan kluster: sama ada maya atau perkakasan. Untuk rujukan: sesiapa sahaja yang tidak terlalu malas untuk mula memasang yang baharu boleh membuat kluster "Amazon" peribadi mereka sendiri secara percuma. pengedaran Ubuntu pelayan.

Pengimbang diperlukan untuk mengedarkan permintaan masuk daripada pelawat tapak antara pelayan kluster. Adalah dicadangkan untuk menggunakan nginx kerana ia, "baki beban nginx" Google dan anda akan mendapat banyak pautan ke contoh yang sudah siap.

Replikasi pangkalan data diperlukan untuk menulis data pada satu pelayan (ia dipanggil master) dan membacanya dari semua yang lain (masing-masing, hamba). Oleh kerana biasanya terdapat sedikit operasi tulis dan banyak operasi baca, dengan hanya menambah bilangan hamba, anda boleh meningkatkan "kuasa" projek tanpa had. Data dari tuan kepada hamba mengalir ke latar belakang semata-mata menggunakan MySQL, dan hamba boleh ditambah dan dikeluarkan pada bila-bila masa. Google "replikasi mysql" dan dapatkan arahan.

Storan fail yang diedarkan diperlukan untuk memastikan semua pelayan mempunyai set fail yang sama. Jika pengguna memuat naik gambar "di suatu tempat" ke salah satu pelayan, maka ia sepatutnya muncul di mana-mana. kenapa? Kerana maklumat mungkin diberikan kepada pengguna lain dari pelayan lain. Untuk pelaksanaan, rakan-rakan dari Bitrix mengesyorkan "csync2" - ia berfungsi di latar belakang dan bodoh menyegerakkan fail antara pelayan supaya semuanya sama di mana-mana.

Semua. Jadi anda telah membuat kluster. Dan sekarang - penalaan halus:

Batu penghalang pertama yang anda akan tersandung apabila memindahkan projek anda (maksud saya projek pada CMS lain atau yang ditulis sendiri) kepada model sedemikian akan berada dalam operasi pangkalan data. Intinya ialah aplikasi mesti dapat membezakan permintaan "menulis" daripada permintaan "membaca". Dengan kata lain, INSERT, UPDATE, DELETE, serta CREATE, ALTER dan DROP perlu dilakukan hanya pada master. PILIH pertanyaan pada dasarnya boleh dilakukan di mana-mana sahaja. Ia akan mengambil masa yang agak lama untuk melatih semula enjin anda kepada cara berfikir ini.

Di samping itu, Bitrixoids mencipta perkara yang menarik: memandangkan data mengalir dari tuan kepada hamba dengan sedikit kelewatan, mereka mengajar sistem untuk mengenali permintaan penulisan "kritikal". Selepas permintaan sedemikian, semua data sehingga akhir pelaksanaan skrip PHP diambil (PILIH) hanya daripada induk untuk mengelakkan ralat akibat kelewatan yang sama.

Idea kedua yang perlu dipertimbangkan ialah peruntukan pelayan untuk tugas. Ia tidak perlu membuat semua pelayan sama dan memberikan mereka tugas yang sama. Biarkan sebahagian daripada mereka berkhidmat, sebagai contoh, kedai dalam talian, dan sebahagian lagi mengumpul statistik.

Pemikiran ketiga ialah pengelompokan memcached. Bitrix memasukkannya pada permulaan pembentangannya, tetapi anda boleh melancarkannya kemudian. Kelebihannya ialah ia bersambung secara langsung dengan nginx (ingat titik pertama?) dan membolehkannya menyampaikan halaman cache (atau blok) terus dari memori capaian rawak. Tugas anda - atau lebih tepatnya tugas skrip anda - ialah meletakkan kandungan cache dalam memcached.

Bagaimana untuk membangunkan projek pada kelompok? Soalan yang kerap ditanya untuk wakil studio web. Ya, betul-betul sama seperti pada pelayan biasa. Hanya akan ada satu kluster untuk anda komputer besar, yang anda log masuk melalui ssh dengan cara yang sama dan berfungsi.

Modul Kluster Web ialah gabungan penyelesaian teknologi yang membolehkan anda mengedarkan satu tapak web merentasi beberapa pelayan, dengan itu menyelesaikan beberapa masalah: menyediakan ketersediaan yang tinggi laman web, menskalakannya dalam keadaan peningkatan beban, mengimbangi beban, trafik, data antara beberapa pelayan. Dengan kluster web anda akan meningkatkan prestasi, skalabiliti dan kebolehpercayaan projek anda!

Apakah tugasan anda memerlukan kluster web?

Kluster diperlukan untuk menyelesaikan masalah peningkatan beban dan peningkatan kestabilan perkhidmatan secara fleksibel. Oleh itu, apabila trafik meningkat, anda boleh menambah pelayan baharu pada kluster dengan cepat. Dan jika salah satu pelayan kluster gagal, sistem akan terus melayani pelawat/pelanggan. Tidak kurang juga tugas penting– ini adalah pengimbangan beban, trafik, data antara beberapa pelayan. Pada masa yang sama, sistem membenarkan anda mengalih keluar sandaran daripada nod kluster yang ditetapkan khas, tanpa menjejaskan operasi tapak, tanpa mematikan mesin atau memperlahankannya. Terdapat tugas berasingan pengagihan geo. Apabila anda menjalankan kluster web geografi, ia membolehkan anda meningkatkan keseluruhan kumpulan pelayan. Setiap kumpulan ini mempunyai tuannya sendiri - di pusat data bebas antara satu sama lain. Oleh itu, tapak web dan perniagaan anda dilindungi sepenuhnya daripada ketidakbolehcapaian pusat data dan saluran komunikasi itu sendiri.

Bagaimanakah kluster web 1C Bitrix berfungsi?

Mari lihat teknologi yang digunakan oleh kluster web 1C Bitrix:

  • Untuk pangkalan data ini adalah serpihan menegak(memindahkan modul ke dalam berasingan pelayan MySQL)
  • replikasi MySQL Dan pengimbangan beban antara pelayan
  • Diedarkan cache data(memcached)
  • Kesinambungan sesi antara pelayan web (menyimpan sesi dalam pangkalan data)

Pengelompokan Pelayan Web berlaku kerana penyegerakan fail, pengimbangan beban antara pelayan, geo-kebebasan dari pusat data (sekiranya berlaku kegagalan satu pusat data, yang lain segera beroperasi, tanpa perlu meningkatkan sandaran dan tindakan lain, ini adalah nyata pertukaran panas).

Rahsia muatan tinggi pada 1C Bitrix dengan kluster web

1. MySQL Sharding

Membahagikan satu pangkalan data aplikasi web kepada dua atau lebih pangkalan data dengan mengasingkan modul berasingan, tanpa mengubah logik aplikasi web.



Modul produk berikut boleh diletakkan dalam pangkalan data berasingan: , .

2. replikasi MySQL

Skim " tuan hamba»dilaksanakan menggunakan MySQL/MariaDB. Timbunan teknologi ini diterangkan dengan baik dan digunakan secara meluas.

3. Pengimbang untuk pengimbangan beban antara pelayan

Mari kita lihat lebih dekat pada pengimbang. Platform 1C-Bitrix: Pengurusan Tapak dalam fungsi Kluster Web membolehkan anda mengimbangi beban secara fleksibel antara pelayan yang mengambil bahagian dalam replikasi.



Kami mendapat yang berikut Ciri-ciri utama: pengimbangan beban fleksibel dalam MySQL, pentadbiran mudah daripada satu antara muka, pantas penskalaan tanpa had tiada kos tambahan, sandaran panas (sebenarnya ini ialah: membuat salinan sandaran keadaan sebenar). Semua fungsi ini tidak memerlukan pengubahsuaian logik aplikasi web; semuanya sudah berfungsi dalam edisi ini.

4. Cache data teragih (diuruskan oleh: memcached)

Teknologi ini membolehkan data dicache dalam RAM berbilang pelayan yang tersedia. Pengedaran dilaksanakan dengan memecah data mengikut nilai cincang utama, serupa dengan soket jadual cincang. Pustaka klien, menggunakan kunci data, mengira cincang dan menggunakannya untuk memilih pelayan yang sesuai.


Ini memastikan kecekapan tinggi - disebabkan oleh penggunaan terpusat cache oleh aplikasi web, serta kebolehpercayaan - disebabkan oleh rintangan subsistem caching terhadap kegagalan komponen individu, sambil menjamin kebolehskalaan tanpa had dengan menambahkan pelayan memcached baharu apabila beban bertambah.

5. Kesinambungan sesi

Untuk mengatur kesinambungan sesi antara pelayan web, adalah perlu untuk membolehkan penyimpanan sesi dalam pangkalan data, dan pangkalan data itu sendiri direplikasi, seperti yang ditunjukkan di atas.



Keupayaan untuk menyimpan data sesi pengguna dalam pangkalan data memastikan "ketelusan" sesi untuk semua pelayan web dalam kelompok, kerana Selepas kebenaran pada salah satu pelayan, pengguna mesti dianggap dibenarkan untuk semua pelayan lain. Dan sebaliknya, selepas tamat sesi pada mana-mana pelayan, ia sepatutnya berakhir pada semua pelayan sekaligus.

Salam, rakan sejenayah yang dikasihi!

Artikel ini adalah tentang cara kami melaksanakan kluster web untuk portal berita(dengan puncak 130 ribu lawatan pelawat unik setiap hari - ini ialah 7TB trafik selama 3 hari - pilihan raya dan 2 pilihan raya berikutnya. Kini, secara purata, satu kluster mengagihkan 35-40 TB trafik setiap bulan), tentang cara pengaturcara dan wartawan memahami tugas yang sama secara berbeza, tentang cara anda boleh mencapai matlamat yang sama dengan mengambil jalan yang berbeza.

Ia akan menarik minat mereka yang ingin membina kluster web yang mudah berskala dan diedarkan secara geografi tanpa melaburkan jumlah astronomi dalam peralatan (dan mengikut piawaian televisyen, jumlah tersebut secara amnya tidak masuk akal).

Saya lebih pasti bahawa pemasar yang mendorong penyelesaian uber untuk produk yang baru dikeluarkan dengan perkataan "kluster web boleh skala" atau "kelompok web boleh skala tak terhingga mendatar" dalam nama mereka akan membenci saya.

Saya lebih pasti bahawa pesaing pelanggan kami akan terkejut dengan kesederhanaan penyelesaian yang kami gunakan.

Saya tidak akan memberikan konfigurasi cetek yang boleh didapati dalam mana-mana tutorial tentang Tetapan PHP, Nginx dan Firebird (yang terakhir, secara tegasnya, tidak mempunyai apa-apa untuk dikonfigurasikan - semuanya berfungsi di luar kotak) dan secara umum saya akan bercakap tentang intipati penyelesaian, dan bukan tentang yang mana satu versi PHP lebih baik.

Pereka yang berpengalaman tidak mungkin berminat - mereka sudah mengetahui segala-galanya, tetapi bagi mereka yang baru bermula dalam bidang reka bentuk sistem yang sukar, ia lebih sukar daripada "Hello, World!" pasti ada sesuatu untuk dipelajari - penyelesaiannya telah berada dalam mod pertempuran selama hampir 2 tahun sekarang, dan tiada masalah seni bina telah timbul (walaupun kegagalan dua sekaligus cakera keras berada pada dua daripada tiga nod, tetapi tiada siapa yang perasan apa-apa - tapak dibuka sedikit perlahan daripada biasa).

Jadi, beberapa perkataan tentang bagaimana semuanya bermula. Pada suatu masa dahulu terdapat laman web sekumpulan wartawan bebas yang benar-benar bermimpi untuk menjadi televisyen sebenar (melihat ke hadapan, saya akan mengatakan bahawa mereka berjaya - mereka mencipta televisyen mereka sendiri, agak berjaya dengan "blackjack dan..." - lanjut dalam teks). Negara kita kecil, tiada apa yang buruk berlaku (dan kami gembira mengenainya), tetapi 4 tahun sekali kita secara tradisinya mengadakan pilihan raya ke Parlimen. Yang secara tradisinya tidak memilih Presiden dalam apa cara sekalipun. (Jangan takut, tidak akan ada politik di sini, ia hanya untuk persefahaman bersama seketika).

Sudah tentu, dalam tempoh sebelum pilihan raya dan sedikit selepas itu, semua media dalam talian sangat tidak stabil. Sesetengah tapak tidak hanya terletak di sana, mereka berbaring, beberapa secara berkala cuba menyediakan sekurang-kurangnya baris teks, tetapi masalahnya adalah universal dan terkenal - tapak tidak dapat menampung kemasukan pelawat. Saya bercakap tentang tapak biasa berasaskan teks. Dan pelanggan kami mempunyai tapak web yang luar biasa. Hakikatnya mereka juga mempunyai video - berita, mereka menghasilkan 10 gigabait sebulan - pada masa itu, kini mereka mencipta video sebanyak itu sehari. Di atas segala-galanya (ini adalah sebutan terakhir tentang politik, secara jujur) wartawan ini tidak begitu setia kepada pihak berkuasa. Mereka berkata dan menulis apa yang mereka mahu. Agak kurang ajar, ya? Kami sentiasa meletakkan diri kami sebagai askar upahan - pelanggan menawarkan masalah, kami menawarkan penyelesaiannya. Segala-galanya tidak menarik minat kami; kami mengekalkan neutraliti.

Kami diberi tugas untuk menawarkan penyelesaian untuk laman berita yang bukan sahaja membolehkan mereka menahan kemasukan 50-100 ribu pelawat, tetapi juga akan tersebar secara geografi di seluruh dunia dan dikawal dari bunker mudah alih di mana-mana sahaja di Alam Semesta di planet. Sudah tentu, penyebaran geografi nod kluster diserahkan kepada kami. Akibatnya, kami mencadangkan skim berikut (saya bukan seorang artis, jika anda boleh maafkan saya):

(Ini rajah yang dipermudahkan setakat November, kemudian hampir semua pelayan telah dipindahkan ke Hetzner, memandangkan saluran Netdirekt sentiasa bergelut pada masa itu. Kini keadaan dengan rangkaian mereka jauh lebih baik).
Pelawat biasa melihat salah satu daripada 3 pelayan, sementara kami membuatnya supaya semua pelawat dari Moldova menarik kandungan "ringan" dalam bentuk teks dan gambar dari salah satu daripada 3, dan kandungan "berat" (video) yang ditarik dari pelayan yang terletak di tempatan pembekal. Pelawat luar hanya tidak melihat cermin Moldova dan menarik semua kandungan dari salah satu pelayan Jerman.

Inilah yang kami dapat dengan pelawat sebagai hasilnya (setiap bahagian portal mempunyai kaunter sendiri):

Skim ini membolehkan anda menukar pelayan kawalan pada bila-bila masa, ia sendiri menyemak ketersediaan nod kluster, ia mudah berskala - Amazon EC juga dianggap sebagai sandaran - lebih-lebih lagi, Amazon EC telah digunakan untuk beberapa waktu untuk penstriman video ( kira-kira 4 bulan), tetapi disebabkan oleh kos trafik yang tinggi, ia telah memutuskan untuk memindahkan nod penstriman ke Hetzner Jerman.
Sejurus 2 minggu sebelum jam "X" kami ambil pelayan sandaran dan memastikan mereka bersedia (tetapi pengguna tidak melihatnya, kerana mengekalkan pelayan aktif agak lebih murah daripada menggunakannya dalam mod pertempuran - hanya kerana lalu lintas).

Bagaimana semuanya berfungsi? Sangat mudah - senyap dan sepanjang masa;).

Pada pelayan kawalan (seperti yang telah saya nyatakan, portal mempunyai 2 "bahagian" besar: berita dalam bentuk teks dengan gambar dan berita dalam bentuk ringkasan teks dan video; de facto, 2 pelayan digunakan, tetapi untuk kesederhanaan Saya menggambarkan satu) terdapat sesuatu yang biasa dirujuk sebagai sistem pengurusan kandungan.

Tujuan utama pelayan ini adalah untuk membolehkan wartawan menambah berita. sekali setiap masa tertentu(3-5 minit) skrip bermula, yang menghasilkan... salinan luar talian tapak. Sudah tentu, hanya halaman yang telah berubah atau yang perlu dibina semula kerana pautan silang dan kebergantungan dijana.

Ini sangat mudah untuk dilaksanakan menggunakan jujukan dan pencetus lata dalam Firebird - prosedur hanya perlu membuat perubahan pada halaman utama tapak, dan pencetus lata akan mengemas kini semua kebergantungan, menandakan setiap halaman yang perlu dikemas kini. Tanda ditetapkan bukan dalam bentuk bendera 1/0, tetapi dalam bentuk nombor unik, diperolehi berdasarkan penjana. Skrip untuk mencipta versi luar talian pada permulaan mengiktiraf nilai baharu penjana, membaca nilai penjana ini daripada pelancarannya sebelum ini dan mencipta semula semua halaman dalam julat yang terhasil. Pada masa yang sama, memandangkan kami menggunakan mekanisme transaksi Firebird, skrip tidak peduli apa perubahan yang berlaku semasa pelaksanaannya - i.e. Kami sentiasa mencipta versi tapak yang koheren dan konsisten, tidak kira apa yang dilakukan oleh wartawan.

Oleh itu, kami mencipta salinan induk portal (atau dua portal, jika anda suka - teks dan video). Skrip (seperti panel pentadbir itu sendiri) ditulis dalam PHP dan menggunakan ADODB untuk berfungsi dengan Firebird - jadi ia boleh dibina semula dengan mudah atas permintaan pelanggan*.

(* Tetapi kami akan menyingkirkan ADODB tidak lama lagi dalam semua projek masa hadapan kami - kepelbagaiannya hanya membahayakan mekanisme biasa untuk bekerja dengan pangkalan data, membolehkan anda menggunakan semua ciri Firebird pelayan SQL(namun, seperti yang lain) tidak dilaksanakan di sana - sebagai contoh, adalah mustahil untuk menangkap pengecualian apabila pensampelan daripada prosedur terpilih, tidak pengurusan yang fleksibel urus niaga dan secara amnya, kelas ini mempunyai terlalu banyak AI - Saya lebih suka membuat keputusan sendiri apabila saya mahu membatalkan transaksi dan bila untuk mengesahkan.)

Satu-satunya perkara yang perlu diubah dalam tetapan Firebird ialah nilai saiz cache halaman pangkalan data - kerana bilangan sambungan ke pangkalan data adalah sangat kecil (jarang lebih daripada 50-60 sambungan serentak), maka bilangan halaman telah ditingkatkan secara eksperimen kepada 2048 (kami menggunakan versi Klasik; untuk seni bina Super nilai ini dengan mudah boleh ditingkatkan sebanyak 10 kali ganda, kerana terdapat cache halaman biasa. Dalam versi Firebird 3.0 yang akan datang, pemaju menjanjikan satu seni bina mesra SMP dengan cache kongsi, jadi mungkin untuk menggunakan nilai yang besar untuk tetapan cache halaman untuknya).

Kemudian, menggunakan rsync biasa, perbezaan dalam perubahan tersebar di seluruh cermin, iaitu nod biasa untuk mengedarkan fail statik berdasarkan Nginx. Saya rasa tidak perlu memberitahu anda apakah pelayan 4-teras dengan 12 GB RAM mampu apabila mengedarkan hanya data statik? ;-)

Pada masa yang sama, 10% daripada saluran setiap nod (ini betul-betul 10 atau 100 megabit, bergantung pada sambungan tertentu) dikhaskan untuk penyegerakan. Penyegerakan berlaku dalam 2 peringkat - pertama, kandungan "berat" disegerakkan - gambar dan video, kemudian - teks (html/xml/js).

Kadangkala (apabila saluran dari pelayan kawalan ke cermin sibuk), pelawat mungkin melihat ketidakkonsistenan kecil dalam bentuk gambar dan/atau video yang tidak dimuatkan - memandangkan DNS round-robin digunakan, pengguna boleh menerima teks halaman dari satu cermin dan pautan ke video dari yang lain . Ini tidak menghalang portal daripada berfungsi - teks sentiasa ada, dan gambar atau video akan muncul lambat laun.

Memandangkan tapak mempunyai bentuk dinamik - contohnya, melanggan surat berita - borang ini diproses oleh pelayan khusus yang berasingan (ia tidak ditunjukkan dalam rajah, tetapi ini tidak mengubah intipati). Walaupun kita menganggap bahawa semua pelawat tergesa-gesa untuk melanggan berita pada masa yang sama dan pelayan ini terputus, tiada perkara buruk akan berlaku - borang dimuatkan ke dalam iframe dan ketiadaan borang ini tidak menjejaskan ketersediaan berita.

Menambah nod baharu adalah mudah - pertama cermin baharu disegerakkan dengan salinan utama (ini berlaku selari dengan mod operasi biasa penyegerak), kemudian entri itu ditambahkan pada DNS dan... tiada siapa yang perasan apa-apa.

Mengalih keluar nod adalah lebih mudah - hanya mengalih keluar masukan daripada DNS. Menambah dan memadam agak sesuai dengan automasi (inilah yang kami lakukan dengan bahagian yang bertanggungjawab untuk penstriman web kira-kira 1000 aliran megabit pada Amazom EC), tetapi jika anda tiba-tiba memutuskan untuk mengulangi perkara ini, saya nasihatkan anda untuk mengira terlebih dahulu bagaimana banyak yang diperlukan oleh penyegerakan data awal (bagi kami 2 Gigabait untuk " versi ringan portal" dan kira-kira 1 terabait untuk video, hanya beberapa yang disimpan bulan lepas).

Inilah sebabnya kami mengalih keluar penambahan/pembuangan dinamik nod daripada kumpulan ganti selepas beberapa lama dalam kerja projek - kandungan mengambil terlalu banyak dan skrip ternyata terlalu paranoid - ia mengalih keluar nod apabila terdapat masalah berkomunikasi dengan mereka.

Secara berasingan, adalah bernilai menyebut pengiraan paparan berita. Saya mendapat tanggapan bahawa hobi kegemaran wartawan (selain menulis/menggambar laporan) mengukur bilangan pelawat ke berita tertentu. Kami terpaksa menghabiskan kira-kira satu liter darah dan satu kilometer saraf untuk meyakinkan persaudaraan wartawan bahawa tidak perlu memaparkan perubahan balas dalam masa nyata.

Pengaturcara memahami dengan baik bahawa mengetahui bilangan orang yang ada pada masa ini Adalah mustahil untuk membaca artikel, anda hanya boleh mengira bilangan permintaan untuk artikel dari pelayan, tetapi untuk wartawan ini adalah konsep yang sama. :)

Untuk mengira tontonan, kami menghubungi Kiril Korinsky (juga dikenali sebagai catap), yang dengan baik hati bersetuju untuk menambah ciri pengiraan paparan URL pada cawangan Nginxnya. Nah, maka semuanya mudah - semua nod ditinjau secara berkala dan kaunter halaman diambil kira dalam sifat halaman itu sendiri. Oleh kerana pembilang (iaitu nilai itu sendiri) disimpan dalam fail berasingan(pada masa ini ini adalah satu fail bagi setiap berita, tidak lama lagi kami merancang untuk membuat sekumpulan pembilang dalam satu fail untuk mengurangkan bilangan fail itu sendiri) - kemudian semasa penyegerakan, bukan keseluruhan halaman tapak dipindahkan, tetapi hanya fail pembilang. Dengan sejumlah besar fail, ini mewujudkan beban tambahan pada subsistem cakera - oleh itu, apabila menggunakan pendekatan yang sama, segera fikirkan tentang cara membahagikan pembilang kepada kumpulan - kami memutuskan untuk membahagikan pembilang mengikut jenis berita dan tarikh - fail adalah agak kecil dan lama kelamaan mereka berhenti berubah, kerana boleh dikatakan tiada siapa yang berminat dengan berita lama.

Di sini, secara ringkas, adalah kelebihan penyelesaian yang kami gunakan:

  1. Menggunakan tapak statik sebagai nod kluster web membolehkan anda mengurangkan pentadbiran keseluruhan kluster kepada beberapa tugas rutin- kemas kini sistem operasi nod dan pembayaran trafik. Titik yang sama ini membolehkan anda menyerakkan nod kluster secara geografi, yang, bersama-sama dengan GEO-DNS, secara amnya boleh dianggap sebagai sejenis analog rangkaian penghantaran kandungan (CDN) - sebenarnya, itulah hakikatnya.
  2. Menggunakan mekanisme transaksi pangkalan data dan memindahkan logik ke pangkalan data itu sendiri membolehkan anda sentiasa mempunyai versi tapak yang holistik dan konsisten secara logik - walau bagaimanapun, saya akan sangat terkejut jika "kepingan" data dari pelayan secara logiknya tidak konsisten .
  3. Jika kebanjiran pengunjung dijangka, maka pembesaran mudah nod kluster boleh mengendalikannya dengan mudah. Dalam kes kami, input penuh Ia mengambil masa lebih kurang sejam untuk meletakkan nod baharu untuk bahagian teks portal dan kira-kira sehari (anda tidak boleh memuatkan sesuatu yang tidak boleh dimampatkan) untuk video. Jika anda menerima penyegerakan separa tapak dan menambah selebihnya di latar belakang, maka memasukkan nod baharu untuk video juga boleh dikurangkan kepada satu jam.
  4. Pelayan pentadbiran boleh dibuat daripada mana-mana nod (jika perlu) - hanya gunakannya sandaran pangkalan data(dimampatkan kira-kira seratus megabait). Semua kandungan lain sudah ada.

Nah, beberapa kelemahan, supaya tidak semuanya kelihatan begitu cerah:

  1. Penyelesaiannya tidak sesuai untuk kes di mana terdapat bahagian tapak yang harus dilihat secara berbeza pengguna yang berbeza, iaitu apabila, mengikut syarat tugasan, halaman dijana secara peribadi untuk setiap pengguna. Dalam kes kami, ini ternyata tidak perlu.
  2. Kaunter pelawat dikemas kini dengan ketinggalan kira-kira setengah jam hingga satu jam. Boleh diterima, tetapi anda perlu meyakinkan pelanggan tentang perkara ini untuk masa yang lama.
  3. Masalah terbesar ialah penyegerakan dengan cermin tempatan - pembekal kami belum lagi menjual trafik pada harga 7 euro setiap Terabait, dan walaupun mereka memberikan 100 Megabit yang jujur ​​kepada dunia, ia adalah pada harga yang sangat tidak mencukupi.
  4. Reka bentuk sistem yang kurang paranoid untuk menjejaki nod kluster - milik kami ternyata terlalu sensitif, kami terpaksa meletakkan menambah dan mengalih keluar nod ke dalam mod manual.

Dan secara harfiah secubit pengalaman kecil yang akan menambah kelainan kepada kekacauan hambar dalam kehidupan seharian.

Kami menggunakan sistem fail JFS untuk menyimpan salinan luar talian tapak. Ia telah membuktikan dirinya dengan baik apabila bekerja dengan banyak fail kecil dan semasa bekerja dengannya fail besar(dalam pengalaman saya, hanya XFS boleh memadamkan fail bersaiz 200-300GB hampir serta-merta).

Jadi ini adalah lalai sistem fail dipasang dengan parameter lalai. Tetapi kerana kami mempunyai banyak fail dari masa ke masa, operasi cakera Mereka mula memperlahankan sedikit. Sejak masa akses terakhir Kami tidak memerlukannya pada fail, saya menambah pilihan "noatime" pada parameter pemasangan FS. Inilah yang berlaku - Saya rasa anda boleh memutuskan sendiri bila hendak menambahkannya:

Biar saya ulang secara ringkas - untuk operasi yang stabil V mod biasa digunakan:

  • 3 pelayan untuk pengedaran kandungan
  • 2 pelayan untuk "pentadbir"
  • 2 pelayan untuk DNS dan sistem penjejakan untuk pelayan lain.
Nod kluster bertaburan secara geografi dan terletak di pembekal yang berbeza.
Sekiranya berlaku peristiwa yang dijangka menarik sejumlah besar pelawat - berhubung pelayan tambahan untuk mengedarkan kandungan.

Kira-kira 40TB trafik digunakan setiap bulan, jumlah keseluruhan kandungan - lebih daripada 1 Terabait, kandungan video disimpan selama kira-kira 3 bulan.

Saya dengan senang hati akan menjawab soalan daripada komuniti habra.

1C-Bitrix: Kelompok web Tugas utama yang perlu diselesaikan: 1. Memastikan ketersediaan perkhidmatan yang tinggi (yang dipanggil HA - Kelompok Ketersediaan Tinggi atau Failover) 2. Menskala projek web dalam keadaan beban yang meningkat (HP - Kelompok Prestasi Tinggi) 3. Mengimbangi beban, trafik, data antara beberapa pelayan. 4. Mencipta salinan sandaran lengkap data untuk MySQL.


1C-Bitrix: Kelompok web "Kluster web" memastikan kesinambungan perniagaan, toleransi kesalahan, penskalaan, pengagihan beban. Mana-mana projek baharu atau sedang berjalan pada 1C-Bitrix: Pengurusan Tapak 10.0 boleh dipersembahkan sebagai kluster web pelayan boleh tukar ganti. 1. Apabila trafik meningkat, anda boleh menambah pelayan baharu pada kluster dengan cepat. 2. Jika salah satu pelayan kluster gagal, sistem akan terus berkhidmat kepada Pelanggan. 3. Pengimbangan beban, trafik, data antara beberapa pelayan. 4. Sistem ini membolehkan anda mengambil salinan sandaran daripada nod kluster yang ditetapkan khas tanpa menjejaskan operasi tapak.




Sejarah prestasi platform Sehingga tahun 2005, isu prestasi tidak ditangani secara sistematik selama setahun - prestasi menjadi tugas penting untuk pembangunan; tahun - kemunculan alat untuk menyahpepijat pertanyaan SQL. Kerja sistematik pada tahun prestasi produk - pertama Ujian Tekanan dengan QSOFT (1.5 juta hits setiap hari pada edisi "Perniagaan", 6 juta pada edisi "Mula") tahun - menggunakan 4 konfigurasi Oracle RAC dengan 4 pelayan tahun - "monitor prestasi" dalam semua edisi tahun produk - "1C ” dikeluarkan -Bitrix: Mesin maya" dan "1C-Bitrix: Persekitaran Web" - tahun pensijilan penyedia pengehosan - pertumbuhan produktiviti - sebanyak 430%! Ujian muat baharu: 8.5 juta hits – “Perniagaan”, 12.4 juta – “Mula”, 85 juta – “Cache HTML”.




Pilihan untuk menskalakan sehingga Pemisahan kepada dua pelayan: pelayan web + pangkalan data. 2.Meningkatkan kuasa peralatan (lebih berkuasa, lebih mahal; peningkatan kos tidak berkadar). 3. Peruntukan cache kepada satu pelayan luaran melalui memcached. 4. Peralihan kepada Oracle (lesen minimum +$5000 setiap pemproses). 5. Penciptaan Oracle RAC (Real Application Cluster). Projek – kira-kira $ (peralatan + lesen + "rak kongsi"). Terdapat sangat sedikit pakar. Bagi kebanyakan pelanggan, prestasi adalah mencukupi, tetapi masalah toleransi kesalahan, redundansi dan ketersediaan rangkaian belum diselesaikan.


1C-Bitrix: Kelompok web "1C-Bitrix: Kelompok web" ialah gabungan teknologi: Sharding menegak (mengedarkan modul kepada pelayan berasingan MySQL) Replikasi MySQL (Oracle dan MS SQL pada masa hadapan) dan pengimbangan beban antara pelayan Cache data teragih (memcached) Kesinambungan sesi antara pelayan web (menyimpan sesi dalam pangkalan data) Pengelompokan pelayan web: – Penyegerakan fail – Pengimbangan beban antara pelayan






Membahagikan satu pangkalan data aplikasi web kepada dua atau lebih pangkalan data dengan mengasingkan modul berasingan, tanpa mengubah logik aplikasi web: Carian analitik web 1. Pengagihan beban yang berkesan. 2. Penskalaan. 3. Pemisahan jumlah yang besar data. Pecahan menegak









Pangkalan pelayan web data MySQL aplikasi sesawang Beban tinggi: ~10^3 writes/sec ~10^4 reads/sec Trafik tinggi 1) Permintaan diproses oleh hanya satu pelayan DBMS 2) CPU dan subsistem cakera DBMS - Penskalaan terlebih beban dengan peningkatan beban MySQL




Kecekapan tinggi - disebabkan penggunaan cache secara berpusat aplikasi sesawang Kebolehpercayaan - disebabkan oleh rintangan subsistem caching terhadap kegagalan komponen individu. Skala tidak terhad - disebabkan oleh penambahan pelayan memcached baharu. memcached 1 memcached 2 memcached 3 Kelompok web "1C-Bitrix" 40%30% Pelayan web Cache data teragih (memcached)



Kesinambungan sesi antara pelayan web Sesi pengguna harus "telus" kepada semua pelayan kelompok web. 1.Selepas kebenaran pada salah satu pelayan, pengguna mesti dianggap dibenarkan untuk semua pelayan lain. 2. Dan sebaliknya - tamat sesi pada mana-mana pelayan harus bermakna tamat pada semua pelayan sekaligus.


80% Trafik tinggi 1) Muatan diproses oleh hanya satu pelayan web 2) CPU terlebih muatan Pemprosesan PHP, precompiler didayakan, kesalahan segmentasi diperhatikan Tugas: skala" title="Pelayan web pangkalan data MySQL Aplikasi web Muatan CPU tinggi >80% Trafik tinggi 1) Muatan diproses oleh hanya satu pelayan web 2) CPU sedang terlalu sarat dengan pemprosesan PHP, prapenyusun didayakan, kesalahan pembahagian diperhatikan Tugas: skala" class="link_thumb"> 22 !} Pelayan web Pangkalan data MySQL Aplikasi web Muatan CPU tinggi >80% Trafik tinggi 1) Beban diproses oleh hanya satu pelayan web 2) CPU terlebih beban dengan pemprosesan PHP, prapenyusun didayakan, kesalahan pembahagian diperhatikan Tugas: penskalaan sebagai beban bertambah 80% Trafik tinggi 1) Beban diproses oleh hanya satu pelayan web 2) CPU dibebankan dengan pemprosesan PHP, prapenyusun didayakan, kesalahan segmentasi diperhatikan Tugas: skala"> 80% Trafik tinggi 1) Beban diproses oleh hanya satu pelayan web 2) CPU terlebih beban dengan pemprosesan PHP , prapenyusun didayakan, kesalahan segmentasi diperhatikan Tugas: skala apabila beban bertambah"> 80% Trafik tinggi 1) Beban diproses oleh hanya satu pelayan web 2) CPU terlebih beban dengan pemprosesan PHP, prapenyusun didayakan, kesalahan segmentasi diperhatikan Tugas: penskalaan" title="(! LANG:Pelayan web pangkalan data MySQL Aplikasi web Muatan CPU tinggi >80% Trafik tinggi 1) Muatan diproses oleh hanya satu pelayan web 2) CPU dibebankan dengan pemprosesan PHP, prapenyusun didayakan, kesalahan pembahagian diperhatikan Tugas: skala"> title="Pelayan web Pangkalan data MySQL Aplikasi web Muatan CPU tinggi >80% Trafik tinggi 1) Beban diproses oleh hanya satu pelayan web 2) CPU terlebih beban dengan pemprosesan PHP, prapenyusun didayakan, kesalahan pembahagian diperhatikan Tugas: skala"> !}














Mengapa kami memilih csync2? Akses pantas kepada fail aplikasi dengan menggunakan storan tempatan. Kelajuan tinggi kerja. Penggunaan sumber yang rendah (CPU, operasi cakera). Kedua-dua faktor ini membolehkan proses penyegerakan berjalan sekerap mungkin, jadi data pada pelayan menjadi sama dalam hampir "masa nyata". Mudah disediakan untuk pertukaran data antara sebarang bilangan pelayan. Keupayaan untuk menyegerakkan pemadaman fail. Komunikasi hos-ke-hos selamat (SSL).


Pelayan web Pangkalan data MySQL MASTER "1C-Bitrix: Kelompok web" Pangkalan data MySQL SLAVE 1 Pangkalan data MySQL SLAVE N Online sandaran data Cakera Holistik sandaran logik/fizikal MySQL tanpa melambatkan sistem utama pangkalan data MySQL calon MASTER DRBD – dalam talian sandaran cakera dengan Organisasi pangkalan data Salinan simpanan- MySQL


Pelayan web "1C-Bitrix: Web Cluster" /var/www LVM /var/www – syot kilat 1 /var/www – syot kilat 2 /var/www – syot kilat 3 Cepat, sandaran lengkap dihidupkan Tahap Linux Sandaran cepat, holistik, tambahan, disatukan secara automatik menggunakan alat pengehosan Organisasi sandaran - fail


"1C-Bitrix: Kelompok web", DC di Moscow DB nod Web "1C-Bitrix: Kelompok web", DC di New York "1C-Bitrix: Kelompok web", DC dalam bulatan Novosibirsk, tak segerak, replikasi induk -master untuk memastikan pengendalian kluster web yang diedarkan secara geografi Cache 1C-Bitrix Cache DB Web nod Cache DB Web nod Cache Kami sedang mengusahakan…


"1C-Bitrix: Kelompok web", DC di Moscow DB nod Web "1C-Bitrix: Kelompok web", DC di New York "1C-Bitrix: Kelompok web", DC dalam bulatan Novosibirsk, tak segerak, replikasi induk -master untuk memastikan pengendalian kluster web yang diedarkan secara geografi 1C-Bitrix DB Cache Nod web Cache DB Nod web Cache DB Nod web Cache DB Nod web Cache DB Nod web Cache DB Nod web Cache DB Nod web Cache DB Nod web Cache Kami sedang mengusahakan...


Kestabilan sistem apabila nod kluster web dimatikan Apabila nod kluster dimatikan, sistem tidak mengganggu perkhidmatan pelanggan. Barisan gilir meningkat (masa yang diperlukan untuk menghantar halaman kepada pelanggan meningkat), tetapi secara keseluruhan sistem adalah seimbang beban. Menambah kembali nod kluster web meningkatkan prestasi sistem secara berkadar. Ujian beban– penutupan salah satu nod kluster