Nyalakan Grid Perkhidmatan - But semula

Pada 26 Februari, kami mengadakan pertemuan Apache Ignite GreenSource, tempat penyumbang kepada projek sumber terbuka bercakap Apache Ignite. Satu peristiwa penting dalam kehidupan komuniti ini ialah penstrukturan semula komponen Nyalakan Grid Perkhidmatan, yang membolehkan anda menggunakan perkhidmatan mikro tersuai terus ke dalam kelompok Ignite. Dia bercakap tentang proses sukar ini pada pertemuan itu Vyacheslav Daradur, jurutera perisian dan penyumbang Apache Ignite selama lebih dua tahun.

Nyalakan Grid Perkhidmatan - But semula

Mari kita mulakan dengan apa itu Apache Ignite secara umum. Ini ialah pangkalan data yang merupakan storan Kunci/Nilai yang diedarkan dengan sokongan untuk SQL, transaksi dan caching. Selain itu, Ignite membolehkan anda menggunakan perkhidmatan tersuai terus ke dalam kelompok Ignite. Pembangun mempunyai akses kepada semua alatan yang disediakan oleh Ignite - struktur data yang diedarkan, Pemesejan, Penstriman, Pengiraan dan Grid Data. Sebagai contoh, apabila menggunakan Grid Data, masalah mentadbir infrastruktur yang berasingan untuk penyimpanan data dan, sebagai akibatnya, kos overhed yang terhasil hilang.

Nyalakan Grid Perkhidmatan - But semula

Menggunakan API Grid Perkhidmatan, anda boleh menggunakan perkhidmatan dengan hanya menentukan skema penggunaan dan, dengan itu, perkhidmatan itu sendiri dalam konfigurasi.

Lazimnya, skema penempatan ialah petunjuk bilangan kejadian yang harus digunakan pada nod kelompok. Terdapat dua skim penggunaan biasa. Yang pertama ialah Cluster Singleton: pada bila-bila masa, satu contoh perkhidmatan pengguna dijamin tersedia dalam kelompok. Yang kedua ialah Node Singleton: satu contoh perkhidmatan digunakan pada setiap nod kluster.

Nyalakan Grid Perkhidmatan - But semula

Pengguna juga boleh menentukan bilangan kejadian perkhidmatan dalam keseluruhan kluster dan menentukan predikat untuk menapis nod yang sesuai. Dalam senario ini, Grid Perkhidmatan sendiri akan mengira pengedaran optimum untuk menggunakan perkhidmatan.

Di samping itu, terdapat ciri seperti Perkhidmatan Affinity. Perkaitan ialah fungsi yang mentakrifkan perhubungan kunci kepada partition dan perhubungan pihak kepada nod dalam topologi. Menggunakan kekunci, anda boleh menentukan nod utama di mana data disimpan. Dengan cara ini anda boleh mengaitkan perkhidmatan anda sendiri dengan cache fungsi kunci dan perkaitan. Jika fungsi perkaitan berubah, penempatan semula automatik akan berlaku. Dengan cara ini, perkhidmatan akan sentiasa terletak berhampiran dengan data yang diperlukan untuk memanipulasi, dan, dengan itu, mengurangkan overhed mengakses maklumat. Skim ini boleh dipanggil sejenis pengkomputeran berkolokasi.

Sekarang setelah kita mengetahui apakah keindahan Grid Perkhidmatan, mari kita bincangkan tentang sejarah pembangunannya.

Apa yang berlaku sebelum ini

Pelaksanaan Grid Perkhidmatan sebelum ini adalah berdasarkan cache sistem replikasi transaksi Ignite. Perkataan "cache" dalam Ignite merujuk kepada storan. Iaitu, ini bukan sesuatu yang sementara, seperti yang anda fikirkan. Walaupun fakta bahawa cache direplikasi dan setiap nod mengandungi keseluruhan set data, di dalam cache ia mempunyai perwakilan terbahagi. Ini disebabkan oleh pengoptimuman storan.

Nyalakan Grid Perkhidmatan - But semula

Apakah yang berlaku apabila pengguna ingin menggunakan perkhidmatan tersebut?

  • Semua nod dalam kluster melanggan untuk mengemas kini data dalam storan menggunakan mekanisme Pertanyaan Berterusan terbina dalam.
  • Nod permulaan, di bawah transaksi komited baca, membuat rekod dalam pangkalan data yang mengandungi konfigurasi perkhidmatan, termasuk contoh bersiri.
  • Apabila diberitahu tentang kemasukan baharu, penyelaras mengira pengedaran berdasarkan konfigurasi. Objek yang terhasil telah ditulis kembali ke pangkalan data.
  • Jika nod adalah sebahagian daripada pengedaran, penyelaras perlu mengerahkannya.

Apa yang tidak sesuai dengan kami

Pada satu ketika kami sampai pada kesimpulan: ini bukan cara untuk bekerja dengan perkhidmatan. Terdapat beberapa sebab.

Jika beberapa ralat berlaku semasa penggunaan, maka ia hanya boleh didapati daripada log nod di mana segala-galanya berlaku. Terdapat hanya penempatan tak segerak, jadi selepas mengembalikan kawalan kepada pengguna daripada kaedah penggunaan, beberapa masa tambahan diperlukan untuk memulakan perkhidmatan - dan pada masa ini pengguna tidak dapat mengawal apa-apa. Untuk membangunkan Grid Perkhidmatan dengan lebih lanjut, cipta ciri baharu, menarik pengguna baharu dan menjadikan kehidupan semua orang lebih mudah, sesuatu perlu diubah.

Apabila mereka bentuk Grid Perkhidmatan baharu, kami pertama sekali mahu memberikan jaminan penggunaan segerak: sebaik sahaja pengguna mengembalikan kawalan daripada API, dia boleh menggunakan perkhidmatan tersebut dengan serta-merta. Saya juga ingin memberi pemula keupayaan untuk mengendalikan ralat penggunaan.

Di samping itu, saya ingin memudahkan pelaksanaan, iaitu, lari daripada urus niaga dan pengimbangan semula. Walaupun fakta bahawa cache direplikasi dan tidak ada pengimbangan, masalah timbul semasa penggunaan besar dengan banyak nod. Apabila topologi berubah, nod perlu bertukar maklumat, dan dengan penggunaan yang besar, data ini boleh menimbang banyak.

Apabila topologi tidak stabil, penyelaras perlu mengira semula pengagihan perkhidmatan. Dan secara umum, apabila anda perlu bekerja dengan urus niaga pada topologi yang tidak stabil, ini boleh membawa kepada ralat yang sukar untuk diramal.

Masalah

Apakah perubahan global tanpa disertai masalah? Yang pertama ialah perubahan dalam topologi. Anda perlu memahami bahawa pada bila-bila masa, walaupun pada saat penggunaan perkhidmatan, nod boleh memasuki atau meninggalkan kluster. Selain itu, jika pada masa penggunaan nod menyertai kluster, adalah perlu untuk secara konsisten memindahkan semua maklumat tentang perkhidmatan ke nod baharu. Dan kita bercakap bukan sahaja tentang apa yang telah digunakan, tetapi juga tentang penggunaan semasa dan akan datang.

Ini hanyalah salah satu masalah yang boleh dikumpul dalam senarai berasingan:

  • Bagaimana untuk menggunakan perkhidmatan yang dikonfigurasikan secara statik pada permulaan nod?
  • Meninggalkan nod daripada kluster - apa yang perlu dilakukan jika nod dihoskan perkhidmatan?
  • Apa yang perlu dilakukan jika penyelaras telah bertukar?
  • Apa yang perlu dilakukan jika pelanggan menyambung semula ke kluster?
  • Adakah permintaan pengaktifan/penyahaktifan perlu diproses dan bagaimana?
  • Bagaimana jika mereka meminta pemusnahan cache, dan kami mempunyai perkhidmatan perkaitan yang terikat dengannya?

Dan bukan itu sahaja.

keputusan

Sebagai sasaran, kami memilih pendekatan Event Driven dengan pelaksanaan proses komunikasi menggunakan mesej. Ignite sudah melaksanakan dua komponen yang membenarkan nod memajukan mesej sesama mereka - komunikasi-spi dan penemuan-spi.

Nyalakan Grid Perkhidmatan - But semula

Communication-spi membolehkan nod berkomunikasi secara langsung dan memajukan mesej. Ia sangat sesuai untuk menghantar sejumlah besar data. Discovery-spi membolehkan anda menghantar mesej kepada semua nod dalam kelompok. Dalam pelaksanaan standard, ini dilakukan menggunakan topologi cincin. Terdapat juga integrasi dengan Zookeeper, dalam kes ini topologi bintang digunakan. Satu lagi perkara penting yang perlu diberi perhatian ialah discovery-spi memberikan jaminan bahawa mesej pasti akan dihantar dalam susunan yang betul kepada semua nod.

Mari lihat protokol penggunaan. Semua permintaan pengguna untuk penempatan dan penyahlerahan dihantar melalui discovery-spi. Ini memberikan yang berikut jaminan:

  • Permintaan akan diterima oleh semua nod dalam kelompok. Ini akan membenarkan permintaan untuk meneruskan pemprosesan apabila penyelaras bertukar. Ini juga bermakna bahawa dalam satu mesej, setiap nod akan mempunyai semua metadata yang diperlukan, seperti konfigurasi perkhidmatan dan contoh bersirinya.
  • Susunan ketat penghantaran mesej membantu menyelesaikan konflik konfigurasi dan permintaan bersaing.
  • Memandangkan kemasukan nod ke dalam topologi juga diproses melalui discovery-spi, nod baharu akan menerima semua data yang diperlukan untuk bekerja dengan perkhidmatan.

Apabila permintaan diterima, nod dalam kluster mengesahkannya dan mencipta tugas pemprosesan. Tugasan ini dibariskan dan kemudian diproses dalam urutan lain oleh pekerja yang berasingan. Ia dilaksanakan dengan cara ini kerana penggunaan boleh mengambil banyak masa dan melambatkan aliran penemuan yang mahal secara tidak tertahankan.

Semua permintaan daripada baris gilir diproses oleh pengurus penempatan. Ia mempunyai pekerja khas yang menarik tugas daripada baris gilir ini dan memulakannya untuk memulakan penggunaan. Selepas ini, tindakan berikut berlaku:

  1. Setiap nod secara bebas mengira taburan terima kasih kepada fungsi penugasan deterministik baharu.
  2. Nod menjana mesej dengan hasil penempatan dan menghantarnya kepada penyelaras.
  3. Penyelaras mengagregatkan semua mesej dan menjana hasil daripada keseluruhan proses penggunaan, yang dihantar melalui discovery-spi ke semua nod dalam kelompok.
  4. Apabila keputusan diterima, proses penempatan tamat, selepas itu tugas dialih keluar daripada baris gilir.

Nyalakan Grid Perkhidmatan - But semula
Reka bentuk terdorong peristiwa baharu: org.apache.ignite.internal.processors.service.IgniteServiceProcessor.java

Jika ralat berlaku semasa penggunaan, nod serta-merta memasukkan ralat ini dalam mesej yang dihantar kepada penyelaras. Selepas pengagregatan mesej, penyelaras akan mempunyai maklumat tentang semua ralat semasa penggunaan dan akan menghantar mesej ini melalui discovery-spi. Maklumat ralat akan tersedia pada mana-mana nod dalam kelompok.

Semua peristiwa penting dalam Grid Perkhidmatan diproses menggunakan algoritma operasi ini. Sebagai contoh, menukar topologi juga merupakan mesej melalui discovery-spi. Dan secara umum, jika dibandingkan dengan yang sebelumnya, protokol itu ternyata agak ringan dan boleh dipercayai. Cukup untuk mengendalikan sebarang situasi semasa penempatan.

Apa yang akan berlaku seterusnya

Sekarang tentang rancangan. Sebarang perubahan besar kepada projek Ignite diselesaikan sebagai inisiatif penambahbaikan Ignite, yang dipanggil IEP. Reka bentuk semula Grid Perkhidmatan juga mempunyai IEP - IEP #17 dengan tajuk mengejek "Penukaran minyak dalam Grid Perkhidmatan". Tetapi sebenarnya, kami tidak menukar minyak enjin, tetapi keseluruhan enjin.

Kami membahagikan tugasan dalam IEP kepada 2 fasa. Yang pertama ialah fasa utama, yang terdiri daripada mengolah semula protokol penggunaan. Ia sudah termasuk dalam induk, anda boleh mencuba Grid Perkhidmatan baharu, yang akan muncul dalam versi 2.8. Fasa kedua merangkumi banyak tugas lain:

  • Atur semula panas
  • Versi perkhidmatan
  • Peningkatan toleransi kesalahan
  • Klien kurus
  • Alat untuk memantau dan mengira pelbagai metrik

Akhir sekali, kami boleh menasihati anda tentang Grid Perkhidmatan untuk membina sistem yang tahan terhadap kerosakan dan ketersediaan tinggi. Kami juga menjemput anda untuk melawat kami di senarai dev ΠΈ senarai pengguna kongsi pengalaman anda. Pengalaman anda sangat penting untuk komuniti; ia akan membantu anda memahami ke mana hendak bergerak seterusnya, cara membangunkan komponen itu pada masa hadapan.

Sumber: www.habr.com

Tambah komen