Blok bangunan aplikasi yang diedarkan. Anggaran sifar

Blok bangunan aplikasi yang diedarkan. Anggaran sifar

Dunia tidak berdiam diri. Kemajuan mencipta cabaran teknologi baharu. Selaras dengan keperluan yang berubah-ubah, seni bina sistem maklumat mesti berkembang. Hari ini kita akan bercakap tentang seni bina dipacu acara, konkurensi, konkurensi, tak segerak dan cara anda boleh hidup dengan aman dengan semua ini di Erlang.

Pengenalan

Bergantung pada saiz sistem yang direka bentuk dan keperluan untuknya, kami, pembangun, memilih kaedah pertukaran maklumat dalam sistem. Dalam kebanyakan kes, untuk mengatur interaksi perkhidmatan, pilihan kerja mungkin skim dengan broker, contohnya, berdasarkan RabbitMQ atau kafka. Tetapi kadangkala aliran peristiwa, SLA dan tahap kawalan ke atas sistem sedemikian rupa sehingga pemesejan sedia tidak sesuai untuk kita. Sudah tentu, anda boleh merumitkan sedikit sistem dengan mengambil tanggungjawab untuk lapisan pengangkutan dan pembentukan kluster, contohnya menggunakan ZeroMQ atau nanomsg. Tetapi jika sistem mempunyai daya pemprosesan yang mencukupi dan keupayaan kluster Erlang standard, maka isu memperkenalkan entiti tambahan memerlukan kajian terperinci dan justifikasi ekonomi.

Topik aplikasi teragih reaktif agak luas. Untuk mengekalkan format artikel, subjek perbincangan hari ini hanya akan menjadi persekitaran homogen yang dibina di atas Erlang/Elixir. Ekosistem Erlang/OTP membolehkan anda melaksanakan seni bina reaktif dengan usaha yang paling sedikit. Tetapi dalam apa jua keadaan, kita memerlukan lapisan pemesejan.

Asas teori

Reka bentuk bermula dengan menentukan matlamat dan kekangan. Matlamat utama bukan dalam bidang pembangunan untuk kepentingan pembangunan. Kita perlu mendapatkan alat yang selamat dan berskala atas dasar yang boleh kita cipta dan, yang paling penting, membangunkan aplikasi moden dari pelbagai peringkat: bermula daripada aplikasi pelayan tunggal yang melayani khalayak kecil, yang kemudiannya boleh berkembang menjadi kelompok sehingga 50 -60 nod, berakhir dengan persekutuan kelompok. Oleh itu, matlamat utama adalah untuk memaksimumkan keuntungan dengan mengurangkan kos pembangunan dan pemilikan sistem akhir.

Mari kita serlahkan 4 keperluan utama untuk sistem akhir:

  • Π‘berorientasikan acara.
    Sistem sentiasa bersedia untuk melalui aliran peristiwa dan melakukan tindakan yang diperlukan;
  • Мkebolehskalaan.
    Blok individu boleh diskalakan secara menegak dan mendatar. Keseluruhan sistem mesti mampu pertumbuhan mendatar yang tidak terhingga;
  • Оtoleransi kesalahan.
    Semua peringkat dan semua perkhidmatan seharusnya dapat pulih secara automatik daripada kegagalan;
  • Π“masa tindak balas yang terjamin.
    Masa adalah berharga dan pengguna tidak perlu menunggu terlalu lama.

Ingat kisah dongeng lama tentang "Enjin kecil yang boleh"? Agar sistem yang direka bentuk berjaya keluar dari peringkat prototaip dan menjadi progresif, asasnya mesti memenuhi keperluan minimum SMOG.

Satu lagi perkara ditambahkan pada pemesejan sebagai alat infrastruktur dan asas untuk semua perkhidmatan: kemudahan penggunaan untuk pengaturcara.

Berorientasikan acara

Untuk aplikasi berkembang daripada pelayan tunggal kepada kluster, seni binanya mesti menyokong gandingan longgar. Model tak segerak memenuhi keperluan ini. Di dalamnya, pengirim dan penerima mengambil berat tentang beban maklumat mesej dan tidak bimbang tentang penghantaran dan penghalaan dalam sistem.

Kebolehskalaan

Kebolehskalaan dan kecekapan sistem adalah bersebelahan antara satu sama lain. Komponen aplikasi mesti boleh menggunakan semua sumber yang ada. Lebih cekap kita boleh menggunakan kapasiti dan lebih optimum kaedah pemprosesan kita, lebih sedikit wang yang kita belanjakan untuk peralatan.

Dalam satu mesin, Erlang mencipta persekitaran yang sangat kompetitif. Keseimbangan antara konkurensi dan selari boleh ditetapkan dengan memilih bilangan rangkaian sistem pengendalian yang tersedia untuk Erlang VM dan bilangan penjadual yang menggunakan rangkaian ini.
Proses Erlang tidak berkongsi keadaan dan beroperasi dalam mod tidak menyekat. Ini memberikan kependaman yang agak rendah dan daya pemprosesan yang lebih tinggi daripada aplikasi berasaskan penyekatan tradisional. Penjadual Erlang memastikan peruntukan CPU dan IO yang adil, dan ketiadaan sekatan membolehkan aplikasi bertindak balas walaupun semasa beban atau kegagalan puncak.

Di peringkat kluster, masalah dengan pelupusan juga wujud. Adalah penting bahawa semua mesin dalam kluster dimuatkan sama rata dan rangkaian tidak terlebih beban. Mari bayangkan situasi: trafik pengguna mendarat pada pengimbang masuk (haproxy, nginx, dll), mereka mengedarkan permintaan pemprosesan sekata mungkin antara set backend yang tersedia. Dalam infrastruktur aplikasi, perkhidmatan yang melaksanakan antara muka yang diperlukan hanyalah batu terakhir dan perlu meminta beberapa perkhidmatan lain untuk membalas permintaan awal. Permintaan dalaman juga memerlukan penghalaan dan pengimbangan.
Untuk mengurus aliran data dengan berkesan, pemesejan mesti menyediakan antara muka pembangun untuk mengurus penghalaan dan pengimbangan beban. Terima kasih kepada ini, pembangun akan dapat, menggunakan corak perkhidmatan mikro (agregator, proksi, rantai, cawangan, dll), untuk menyelesaikan kedua-dua masalah standard dan yang jarang timbul.

Dari sudut perniagaan, skalabiliti adalah salah satu alat pengurusan risiko. Perkara utama adalah untuk memenuhi permintaan pelanggan dengan menggunakan peralatan secara optimum:

  • Apabila kuasa peralatan meningkat akibat kemajuan. Ia tidak akan terbiar kerana perisian yang tidak sempurna. Erlang menskala secara menegak dengan baik dan akan sentiasa dapat menggunakan semua teras CPU dan memori yang tersedia;
  • Dalam persekitaran awan, kami boleh mengurus jumlah peralatan bergantung pada beban semasa atau yang diramalkan dan menjamin SLA.

toleransi kesalahan

Mari kita pertimbangkan dua aksiom: "Kegagalan tidak boleh diterima" dan "Kegagalan akan sentiasa ada." Untuk perniagaan, kegagalan perisian bermakna kehilangan wang, dan lebih teruk lagi, kehilangan reputasi. Mengimbangi antara kemungkinan kerugian dan kos membangunkan perisian toleran kesalahan, kompromi selalunya boleh ditemui.

Dalam jangka pendek, seni bina yang menggabungkan toleransi kesalahan menjimatkan wang untuk membeli penyelesaian pengelompokan di luar rak. Mereka mahal dan mereka juga mempunyai pepijat.
Dalam jangka panjang, seni bina yang tahan terhadap kesalahan membayar sendiri berkali-kali ganda pada semua peringkat pembangunan.
Pemesejan dalam pangkalan kod membolehkan anda menyelesaikan secara terperinci interaksi komponen dalam sistem pada peringkat pembangunan. Ini memudahkan tugas untuk bertindak balas dan mengurus kegagalan, kerana semua komponen kritikal mengendalikan kegagalan, dan sistem yang terhasil tahu cara untuk kembali normal secara automatik selepas kegagalan melalui reka bentuk.

Responsif

Tanpa mengira kegagalan, aplikasi mesti membalas permintaan dan memenuhi SLA. Realitinya ialah orang ramai tidak mahu menunggu, jadi perniagaan mesti menyesuaikan diri dengan sewajarnya. Semakin banyak aplikasi dijangka sangat responsif.
Aplikasi responsif beroperasi dalam hampir masa nyata. Erlang VM beroperasi dalam mod masa nyata lembut. Untuk sesetengah kawasan, seperti perdagangan saham, perubatan dan kawalan peralatan industri, mod masa nyata keras adalah penting.
Sistem responsif meningkatkan UX dan memberi manfaat kepada perniagaan.

Ringkasan awal

Semasa merancang artikel ini, saya ingin berkongsi pengalaman saya mencipta broker pemesejan dan membina sistem kompleks berdasarkannya. Tetapi bahagian teori dan motivasi ternyata agak luas.
Di bahagian kedua artikel, saya akan bercakap tentang nuansa melaksanakan mata pertukaran, corak pemesejan dan aplikasinya.
Dalam bahagian ketiga, kami akan mempertimbangkan isu-isu umum mengatur perkhidmatan, penghalaan dan pengimbangan. Mari kita bincangkan tentang sisi praktikal kebolehskalaan dan toleransi kesalahan sistem.

Akhir bahagian pertama.

Photo @lucabravo.

Sumber: www.habr.com

Tambah komen