Buka webinar "Pengembangan sistem yang sangat dimuat dalam PHP"

Selamat malam Untuk mengantisipasi dimulainya kursus "Pengembang PHP Backend", kami secara tradisional mengadakan pelajaran terbuka. Mereka berbicara tentang sistem, penskalaan, arsitektur yang penuh muatan. Kami memeriksa secara rinci HighLoad, serta pendekatan dan taktik utama dalam pengembangan sistem yang sangat dimuat.

Tujuan pelajaran berikut ditetapkan:

  • mendiskusikan apa itu arsitektur sistem dan mengapa itu diperlukan;
  • mendiskusikan apa itu Beban Tinggi;
  • pertimbangkan taktik arsitektur;
  • diskusikan kursusnya.

Dosen - Igor Sakhankov , pengembang di Booking.com.


Arsitektur


Beberapa ratus tahun yang lalu, raja Swedia Gustaf II Adolf ingin membangun kapal terbesar di dunia. Dia mengundang pembuat kapal Belanda Henrik Hubertsson dan memberinya instruksi. Sang master tidak pernah membangun yang seperti ini, tetapi ia memiliki pengalaman luas dalam membangun kapal-kapal berukuran kecil. Tampaknya tidak ada yang rumit - ambil gambar sebuah kapal kecil dan perbesar beberapa kali. Tidak lebih cepat dikatakan daripada dilakukan. Maka, setelah beberapa tahun bekerja, sebuah konstruksi yang indah dan megah muncul:



Semuanya akan baik-baik saja, tetapi ketika diluncurkan, kapal ini tidak bertahan bahkan setengah jam, segera tenggelam. Itu adalah kapal perang Vasa, dan itu terjadi pada tahun 1628.

Sekarang bayangkan Anda diminta membuat rumah burung atau rumah anjing untuk seekor anjing. Tentu saja, kebanyakan dari kita akan mengatasi tugas ini. Dan jika diminta untuk membuat gedung pencakar langit?

Semua contoh ini menunjukkan bahwa semakin kompleks sistem, semakin banyak interdependensi, nuansa implementasi, dan jebakan. Dan agar berhasil mengatasi desain dan penciptaan sistem yang kompleks, hanya ada pola arsitektur.

Dalam istilah akademik, arsitektur sistem informasi adalah konsep yang mendefinisikan model, struktur, fungsi, dan interkoneksi komponen IP.

Namun, mari kita kembali dari membangun kapal dan rumah ke pemrograman. Lihat, kami selalu memiliki persyaratan yang datang kepada kami dari bisnis. Dan arsitektur membantu untuk mengubahnya menjadi persyaratan teknis. Berdasarkan persyaratan teknis yang diterima, Anda dapat dengan mudah menguraikan sistem, menulis dependensi antara modul dan melanjutkan dengan implementasi langsung.



Jadi, arsitekturnya:

  • Membantu menyediakan persyaratan sistem non-fungsional
  • Ini adalah sarana komunikasi antara para pemangku kepentingan;
  • mengoptimalkan biaya, mengurangi biaya sistem besar;
  • memungkinkan Anda untuk menggunakan kembali pola arsitektur, memperhitungkan pengalaman sebelumnya, jangan mengulangi kesalahan masa lalu

Beban tinggi


Konsep beban tinggi itu sendiri sangat relatif, dan tidak ada definisi yang ditetapkan. Namun, aman untuk mengatakan bahwa momen ini datang ketika infrastruktur Anda saat ini berhenti untuk mengatasi beban. Dan itu berarti saatnya untuk melakukan penskalaan. Itu terjadi:

  • vertikal. Intinya sederhana: jika setrika tidak dapat mengatasinya, kami membeli yang baru, sangat kuat, produktif dan mahal;
  • horisontal. Kami memiliki satu server yang tidak dapat mengatasinya. Kami membeli server kedua dengan karakteristik yang sama, kemudian yang ketiga, dan seterusnya. Pada output, kami memiliki banyak mesin yang relatif bersahaja.

Taktik Arsitektur


Semua orang tahu hal itu sebagai antrian ( FIFO ). Ini adalah cara mengatur pemrosesan data, yang memungkinkan Anda untuk melayani persyaratan yang bertentangan dengan merampingkan proses sesuai dengan prinsip "pertama datang, cuti pertama." Antrian dapat digunakan sebagai alat load balancing, decoupling klien dan server, dan banyak lagi.

Keuntungan:

  • konektivitas klien dan server yang buruk;
  • Status tugas diketahui.
  • konfigurasi dengan cepat;
  • load balancing.

Kekurangan:

  • entitas tambahan dalam sistem;
  • pemrosesan tugas yang lebih kompleks;
  • kehilangan / duplikasi pesan.

Sekarang mari kita bicara tentang apa yang dapat Anda lakukan dengan repositori . Penyimpanan mengacu pada sistem penyimpanan apa pun, seperti database relasional. Jadi, kami memiliki opsi berikut untuk memecahkan masalah penyimpanan:

1. Replikasi.



Salah satu masalah penyimpanan yang diketahui terkait dengan situasi ketika kita memiliki banyak bacaan dan catatan yang tidak cukup. Ini bisa menjadi situs berita - semua orang membaca berita, tetapi hanya admin yang menambahkan materi baru. Jadi, replikasi hanyalah tentang ketika penyimpanan kami mengalami pembacaan, dan kami memiliki keterlambatan dalam sistem. Penting untuk dicatat di sini bahwa replikasi memecahkan masalah membaca, tetapi tidak menulis. Tidak hanya itu, ia agak menurunkan kemampuan database untuk menulis karena harus mendistribusikan sebagian data ke replika, seperti yang terlihat pada gambar di atas. Dalam kasus yang paling sederhana, ketika menyiapkan replikasi, kami memiliki satu Master - database utama yang kami tulis, dan slave - salinan database (replika dari mana semua data dibaca).

2. Partisi . Misalkan kita memiliki tabel besar, tetapi kita hanya menggunakan beberapa data. Kita bisa memecahnya menjadi beberapa bagian. Misalnya, kami mengambil data kami dan meletakkannya di piring yang berbeda tergantung pada bulan. Hasilnya adalah tabel kecil alih-alih satu besar dan, sebagai hasilnya, sampel lebih cepat untuk bulan tertentu. Ini mengoptimalkan waktu eksekusi permintaan.

CREATE TABLE my_table (id INT, amount DECIMAL(7,2), some_date DATE) ENGINE=INNODB PARTITION BY HASH( MONTH(some_date) ) PARTITIONS 6; 

3. Sharding vertikal . Dalam hal partisi, kami berbicara tentang satu server dan satu database. Dalam hal sharding, kami memiliki beberapa mobil dan beberapa pangkalan. Kami mengambil semua data kami, membaginya menjadi kelompok-kelompok logis, dan setiap kelompok logis disimpan dalam database yang terpisah.

 $users = new PDO("pgsql:db_name=my_db;host=192.168.1.1", "user", "password"); $photos = new PDO("pgsql:db_name=my_db;host=192.168.1.2", "user", "password"); $users->prepare('SELECT * FROM users ...'); $photos->prepare('SELECT * FROM photos ...'); 

Metode ini mudah diimplementasikan dan skala beban dengan baik. Tapi itu juga memiliki kekurangan, yang dijelaskan secara lebih rinci dalam video.

4. Sharding horisontal . Di sini, setiap pecahan terletak pada mesin yang terpisah.



Resep

Poin-poin berikut akan membantu Anda membuat sistem yang dapat diskalakan:

  • menyederhanakan pada tingkat persyaratan!
  • jangan menyulitkan keputusan
  • mencoba menjadi tanpa kewarganegaraan,
  • cache
  • pemantauan + peringatan,
  • kompeten.

Kolega, menceritakan kembali agak singkat, jadi lebih baik untuk menonton webinar lengkap. Juga, jangan lewatkan Hari Terbuka dari program "Pengembang PHP Backend".

Source: https://habr.com/ru/post/id440334/


All Articles