Arsitektur client-server dalam gambar



Gambar yang akrab? Tetapi Anda terus-menerus dihadapkan dengan arsitektur ini - ketika Anda membeli tiket film online, memesan tiket ke laut atau membuat janji dengan dokter.

Pada arsitektur client-server semua situs dan layanan Internet dibangun. Ini juga digunakan oleh program desktop yang mengirimkan data melalui Internet. Oleh karena itu, para profesional TI perlu memahami apa itu dan bagaimana cara kerjanya.

Saya akan membicarakan ini di artikel. Saya akan menjelaskan dengan jari, dengan contoh dan gambar lucu =) Jika Anda lebih menyukai format video, Anda dapat menonton video youtube saya pada topik yang sama.

Kandungan




Apa itu dan bagaimana cara kerjanya


Di sini kita memiliki seorang Vasya tertentu yang memutuskan untuk membeli mobil. Seperti dalam iklan - cepat, kuat, cantik! Dia hanya berdiri seperti ekor pesawat terbang, Vasya tidak memiliki uang sebanyak itu.



Tentu saja, Vasya dapat menggali selama beberapa tahun, dan kemudian membeli mobil. Tetapi Anda ingin di sini dan sekarang! Ya, dan kendaraan diperlukan ...

Dan Vasya tidak tahu bagaimana cara menabung - menerima gaji, membeli yang utama, membayar untuk perumahan, itu saja! Sisanya bisa dihabiskan. Untuk orang-orang seperti itu, ada bank tempat Anda bisa datang dan mengambil uang dengan kredit.



Tentu saja, maka Anda akan membayar lebih, mengembalikannya. Bunga adalah kuda. Tetapi sekarang Anda sudah mampu membeli sesuatu yang mahal.

Vasya berpikir, memperkirakan dan berkata:

- Ya, saya ingin seperti itu! Saya dapat membayar 100 rubel dari gaji saya ke bank, tetapi saya tidak bisa menyimpannya. Saya akan menghabiskannya.

Oleh karena itu, Vasya pergi ke bank dan berkata:

- Saya Vasily Ivanov, saya ingin pinjaman mobil untuk 1000 rubel.



Petugas Katya harus memeriksa riwayat kreditnya. Tiba-tiba dia tidak bisa diberi pinjaman, apakah dia punya cerita buruk? Mungkin dia sudah mencetak 10 kredit dan tidak membayar satu? Atau mungkin dia teroris sama sekali ?! Perlu untuk memeriksa bahwa operator tidak tahu daftar hitam dengan hati.



Katya memiliki program khusus untuk memeriksa data pelanggan. Program ini dapat berupa web atau desktop:

  • Web - buka di browser seperti google atau facebook
  • Desktop - di komputer, seperti kata atau kalkulator

Tidak masalah jika Katya melihat browser atau hanya pada program. Bagaimanapun, itu akan menjadi klien. Klien adalah aplikasi Anda. Yang digunakan operator kami.



Katya menggerakkan program "Vasily Ivanov" dan menerima informasi tentang klien - apakah dia ada dalam daftar hitam? Apakah ada riwayat kredit sebelumnya? Dll Tetapi apa yang terjadi dalam jeroan ayam itik aplikasi?



Katya memasukkan data pada klien. Tetapi ketika dia mengklik "centang", klien mengirim permintaan ke server:

- Beri saya informasi tentang Vasya Ivanov!



Server mengirim permintaan ke database, database:

- Pilih * dari klien mana fio = 'Vasily Ivanov'. (Beri aku semua informasi pada nama 'Vasily Ivanov')



Pangkalan itu menjawab:

- Di sini Anda memiliki semua yang saya temukan.



Server mengembalikan informasi ini ke klien:



Dan klien sudah menariknya untuk Katya:



Katya terlihat:

- Ya, sejarah kreditnya bagus.



Dan dia mengusulkan ke Vasya:

- Tolong, jika Anda ingin mengambil pinjaman, kami siap untuk mengalokasikan 1000 rubel selama 12 tahun dengan 80% per tahun. Diatur?



Vasya senang:

- Ya, semuanya cocok untuk saya, beri saya lebih banyak uang, dan saya berlari setelah mobil!
Setiap orang bahagia, semua orang bahagia.



Katya bahkan tidak tahu ke arah mana data dalam program itu lakukan ketika dia mengendarai nama lengkap kliennya di sana. Tetapi Anda dan saya harus mencari tahu jalan seperti apa ini. Dan mengapa semua kesulitan ini? Mengapa struktur seperti itu? Mengapa ada klien, mengapa ada server?


Mengapa saya membutuhkan klien?



Semuanya sederhana di sini - pengguna bekerja dengan klien. Diperlukan untuk mengubah byte kode program menjadi gambar yang indah dan dapat dimengerti. Pengguna bukan seorang programmer, ia tidak mengerti bahasa pemrograman atau sql. Dia mengerti cetakan dan kancing. Kami menarik mereka di klien.




Kenapa kita perlu server



Dia lebih kuat,

mungkin ada banyak klien. Dalam contoh dengan bank, kita dapat memiliki 10 cabang di 10 kota di Rusia, dan setiap cabang memiliki 10 agen operasi. Seribu Katek, dan masing-masing memiliki komputer yang terpisah.



Tetapi kami ingin aplikasi bekerja dengan cepat. Sehingga tidak bodoh dan tidak membeku, membuat operator ngeri dan membuat klien menunggu. Jadi, mobil itu membutuhkan yang kuat. Tetapi jika setiap komputer operator menjadi kuat, Anda harus menginvestasikan banyak uang!

Oleh karena itu, kami mentransfer semua logika dasar ke server. Dan sekarang kita melakukannya dengan sangat kuat! Dan mesin klien bisa murah, karena mereka hanya memiliki logika dalam gaya "informasi permintaan dan membuat indah".


Tidak ada duplikasi kode

Jika kita hanya memiliki mesin klien, masing-masing dari mereka akan memiliki kode pemrosesan logika yang sama, seluruh database, semua direktori teroris dan sebagainya. Tetapi karena server dan database ditempatkan di tautan yang terpisah, banyak ruang dibebaskan dari mesin klien ... Dan kodenya.

Tidak perlu menggandakan kode, karena semua logika utama dibawa ke server yang lebih kuat.




Ini lebih aman

Di server dan di dalam database tersimpan informasi yang tidak dapat diakses oleh operator sederhana. Itu:

  • Data pelanggan
  • Informasi tentang keuangannya
  • Daftar hitam bank
  • ...

Mengapa menunjukkan informasi ini kepada semua orang dan semua orang? Operator hanya melihat antarmuka nya. Saya mengendarai nama lengkap - saya mendapat jawaban apakah akan memberikan pinjaman atau tidak. Semua. Dia tidak membutuhkan yang lain.

Ada panitera yang siap untuk menggabungkan informasi pelanggan untuk denyushki. Ada orang yang tidak jujur ​​yang siap untuk secara tidak sengaja melihat ke atas bahu mereka. Atau mungkin klien itu sendiri adalah orang semacam itu. Bayangkan, Vasya mendorong Katya yang rapuh, duduk di depan komputernya, dan mentransfer jutaan ke akunnya sampai diikat oleh keamanan.




Mengapa kita membutuhkan basis?


Apa hubungannya database dengan itu? Di sini kami memiliki server kami, bahkan jika itu menyimpan semua informasi. Itu terjadi, kadang-kadang database tidak diperlukan dan kami masih memiliki arsitektur client-server dua tingkat.



Dalam hal ini, server menyimpan semua data dalam memori. Tetapi hanya jika server macet, atau hanya reboot, semua informasi akan hilang. Segala sesuatu yang ada di memori terhapus saat sistem dimatikan.

DB (database) - produk perangkat lunak terpisah yang memungkinkan Anda untuk:

  • Cepat ambil informasi
  • menyimpan informasi bahkan ketika memulai ulang sistem.

Yaitu, jika jaringan tiba-tiba menghilang, basis membeku, mesin dengan basis reboot, atau sesuatu yang lain terjadi, perubahan kita tidak akan hilang. Ini disebut kegigihan. Hal ini dicapai melalui transaksi yang mundur ketika terjadi kesalahan. Tetapi dalam artikel ini kita tidak akan membahas topik ini))

Ya, mungkin tidak ada basis. Tetapi ketika itu, kami yakin akan keamanan data dan dapat dengan mudah mencarinya.




Keuntungan arsitektur


Kami merangkum keunggulan arsitektur:

  1. Server yang kuat lebih murah daripada 100+ mesin klien yang kuat - jika kita ingin aplikasi tidak melambat, kita membutuhkan mesin yang bagus. Anda akan memilikinya. Atau sedikit, jika bebannya besar, tetapi jelas kurang dari jumlah pelanggan.
  2. β€” , Β« Β» Β« , 100 Β».
  3. β€” . , .



Satu tautan telah

jatuh - semua orang sedang beristirahat. Jika server telah jatuh atau pangkalan telah jatuh, yaitu, satu tautan telah memburuk - semuanya, semua orang dalam keadaan pingsan, semua orang beristirahat. Ratusan, ribuan, dan bahkan jutaan pelanggan, jika ada, tidak ada yang bisa bekerja. Semua petugas operasi dengan sedih melihat ke jendela "Maaf, ada yang tidak beres" dan mengangkat tangan mereka di depan klien.



Itulah mengapa dalam perangkat lunak bisnis yang penting arsitekturnya rumit dan bahkan diduplikasi. Sebuah bank dengan ribuan teller tidak dapat melakukan downtime. Oleh karena itu, mereka menggunakan server cluster - satu jatuh, sisanya berfungsi.



Lalu bagaimana klien memahami ke mana harus mengirim permintaan kepadanya?

Sebuah penyeimbang ditempatkan di depan server, dan klien mengirim permintaan di sana. Tidak peduli berapa banyak server yang dimasukkan ke dalam cluster, klien tidak tertarik. Ini memiliki satu URL - alamat penyeimbang.



Dan sekarang klien menerima permintaan:

- Beri saya semua informasi tentang Vasya Ivanov.

Penyeimbang mengatakan:

- Guys, permintaan baru! Siapa yang kurang dimuat?



Server pertama:

- Saya memiliki 5 permintaan dalam antrian.

Kedua:

- Dan saya punya 2.

Penyeimbang mengirim permintaan ke server kedua.



Skema semacam itu digunakan untuk aplikasi yang sangat dimuat - ketika ada begitu banyak permintaan sehingga satu server tidak bisa mengatasinya.

Facebook, amazon, google - jutaan pengguna pergi ke sana. Satu server tidak dapat menangani mereka. Oleh karena itu, mereka menempatkan sebuah cluster, dan penyeimbang berbagi beban di antara mereka. Dan dalam hal ini, dalam cluster mungkin tidak ada 2 server, tetapi 10, 15, selama yang kami butuhkan, kami menetapkan banyak.



Dengan melakukan itu, kita dapat menyeimbangkan database dengan cara yang sama. Kami dapat memiliki beberapa salinan database di berbagai mesin, dan penyeimbang mengirimkan permintaan ke salah satu atau yang lain.



Skema ini disebut hot siaga - ketika kami memiliki beberapa server berjalan secara paralel, dan penyeimbang mendistribusikan beban di antara mereka.

Mungkin juga ada skema cadangan dingin - ketika server kedua kami adalah cadangan "berjaga-jaga". Semua permintaan masuk ke server pertama, yang kedua bertumpu.



Tetapi jika sesuatu terjadi pada server pertama dan itu mati, penyeimbang akan mengalihkan beban ke server kedua:





Pada saat ini, administrator akan punya waktu untuk menangani masalah pada server 1.

Skema cadangan dingin digunakan ketika satu server mampu menahan beban dan memberikan kecepatan yang baik. Tetapi aplikasi bisnis kritis dan sederhana tidak dapat diterima.

Ini bisa sederhana bukan hanya karena sesuatu yang buruk terjadi. Ada juga pembaruan aplikasi reguler. Kedua skema cadangan memungkinkan Anda meningkatkan tanpa rasa sakit. Jika ada dua server di kluster, pembaruan akan terlihat seperti ini:

  1. Redirect semua beban ke server 2
  2. Hentikan server 1
  3. Memperbarui server 1
  4. Kami meluncurkannya dan mengarahkan seluruh muatan di atasnya
  5. Hentikan server 2
  6. Perbarui itu
  7. Kami meluncurkan
  8. Bagilah beban lagi (jika cadangan panas)

Artinya, aplikasi tidak berhenti bekerja sama sekali!

Dengan demikian, skema redundansi membantu kita menghilangkan masalah "1 tautan telah jatuh - semua orang sedang beristirahat." Klien tidak akan pernah tahu bahwa satu atau lebih server di cluster sudah mati, semuanya telah bekerja untuknya, dan itu berfungsi.





Peralatan

Server berbiaya tinggi mahal. Di sana Anda tidak dapat menempatkan SSD biasa untuk komputer di rumah. Mengapa? Karena persyaratan perangkat keras untuk server sama sekali berbeda untuk perangkat keras + terdapat dukungan untuk fungsi-fungsi tertentu:

- HDD memiliki firmware pengontrol khusus, yang dioptimalkan untuk operasi disk dalam RAID, ini tidak diperlukan di rumah.

- SSD memiliki keberadaan sekelompok kapasitor yang menyimpan energi jika terjadi kegagalan daya, sehingga ada cukup waktu untuk membuang data dari cache DDR ke dalam memori yang tidak mudah menguap dan data tidak pecah.

SSD - disk yang bekerja cepat, HDD - normal. RAID - saat kami menghubungkan N disk bersama-sama, dan cache DDR adalah RAM

Plus, solusi server biasanya memiliki garansi lebih lama: 5 tahun, bukan setahun.




Untuk harga mereka berbeda 2 kali. Misalnya, SSD:

  • untuk gigabyte rumah biaya 16,53r
  • untuk pertunjukan server perusahaan biaya 32 rubel

Angka untuk Desember 2019. Ini kalau bukan besi bermerek untuk diambil, tapi dari pabrikan.

Sepertinya tidak jauh berbeda, kan? Tetapi intinya adalah bahwa untuk rumah 1 TB sudah cukup untuk mata - dan semuanya akan cocok di foto, dan film, dan banyak aplikasi ... Dan untuk database, kadang-kadang 10 TB akan kecil. Dan jika Anda membuat sebuah cluster, maka kami mengalikan biayanya dengan 2, jika tidak lebih. Oleh karena itu, perbedaan harga tampak besar, tetapi ketika dikonversi menjadi gigabyte, yang kecil keluar.

Jangan lupa bahwa di rumah Anda hanya perlu menyimpan foto Anda, dan bahkan itu biasanya di awan. Dan di server ada fungsi bisnis-kritis yang memakan banyak sumber daya dan yang harus digandakan jika "tiba-tiba yang pertama mati."


Perlu menyewa administrator sistemツ

Kita perlu menyewa administrator sistem yang akan memonitor semua server aplikasi dan database kita. Tambahkan gajinya ke biaya peralatan!



Apa yang harus diuji


Untuk memahami apa yang harus diuji, Anda perlu memahami apa yang dihadapi seseorang.

Pengguna bekerja dengan klien. Ini bisa berupa aplikasi web atau desktop, bukan itu intinya. Operator Kate diberi tempat kerja, mereka menunjukkan program mana yang harus dijalankan dan bagaimana cara bekerja dengannya. Dia tidak tahu tentang ketersediaan server dan database, dia hanya bekerja dengan klien.



Oleh karena itu, tester terlebih dahulu memeriksa klien! Karena server dapat bekerja dengan sempurna, Anda bahkan dapat menulis tes di tingkat API dan semuanya akan berwarna hijau, dan tampaknya semua orang terluka! Dan pengguna akan mengunduh laporan dan melihat kesalahannya. Oh

Server sedang berjalan, kesalahan telah terjadi pada klien. Dan tidak peduli dengan ratusan autotest "hijau". Pengguna masih memiliki kesalahan. Dan tugas kita adalah melihat dari sudut pandangnya.



Namun, jika Anda memiliki akses ke server aplikasi dan databasenya - ada baiknya juga memeriksanya! Jadi kita bisa melihat "bug masa depan". Contohnya:

  • Kami menyimpan kartu produk - sistem menariknya dan mengatakan bahwa semuanya baik-baik saja. Semuanya baik-baik saja pada klien!
  • Kami memeriksa database - dan ada bagian bidang yang tetap kosong, pengembang salah menyebutkan nama bidang dalam database. Dan informasinya hilang.

Apa yang sekarang dilihat pengguna di klien hanyalah sebuah cache, "apa yang saya masukkan adalah apa yang saya tampilkan." Jika Anda tidak memeriksa database, masalah seperti itu mungkin tidak langsung terbuka. Pengguna membuka kartu produk - beberapa bidang tidak terisi:

- Yah, mungkin tidak terisi.

Dan mereka dipenuhi! Hemat saja berhasil. Karena itu, jika kita hanya memiliki kotak hitam, maka kita perlu memeriksa, "Apakah data benar-benar disimpan?" Diselamatkan? Buka kartu di jendela baru atau panggil informasi melalui metode API.

Jika Anda memiliki akses ke database - cukup periksa bahwa semuanya baik-baik saja. Jika Anda memiliki akses ke log server, periksa apakah ada kesalahan.



Selain pengguna biasa, ada orang jahat yang mencoba untuk tetap masuk ke aplikasi kita dan mencuri uang / data. Mereka tidak menggunakan klien atau server - mereka tidak memiliki akses di sana. Mereka mencoba mencegat data dari klien ke server, atau dari server ke database.



Nah, jika orang jahat bisa melakukan ini, maka penguji harus bisa melakukannya juga! Karena tester memberikan informasi tentang produk kami.



Penguji memeriksa kerentanan dan kemudian memberitahu tim:

- Guys, jadi saya memeriksa, kami memiliki lubang potensial ini dan itu. Mari kita pikirkan apakah kita perlu menutupnya atau tidak.

Itu bukan fakta bahwa mereka akan memperbaiki masalah. Mungkin Anda memiliki aplikasi yang tidak penting - data tidak akan bocor, Anda tidak menyimpan uang. Maka tidak ada yang akan repot lagi, karena pengujian untuk keamanan itu mahal, ada beberapa spesialis.

Tetapi beberapa pemeriksaan dasar seperti injeksi sql atau serangan XSS patut ditelusuri dan diperiksa aplikasi Anda. Setidaknya untuk memahami kekritisan mereka. Lagi pula, jika serangan itu menghancurkan klien - well, biarkan dirinya menjadi Pinocchio. Dan jika serangan itu menempatkan server, itu tidak terlalu baik. Dan setidaknya seseorang harus tahu dari apa itu terjadi.


Total




Klien adalah program yang digunakan pengguna. Dia tidak tahu apakah ini seluruh program di komputernya, atau di suatu tempat server dengan basis atau bahkan seluruh RAID bersembunyi di baliknya. Ini bekerja di browser atau dengan aplikasi desktop. Dan yang perlu dia ketahui adalah ke mana harus menyodok.

Klien tidak membutuhkan banyak memori, ruang disk dan sumber daya lainnya. Karena itu, pekerjaan relatif murah. Dan inilah yang kita butuhkan, terutama jika kita perlu membeli peralatan untuk ribuan petugas operasional bank.

Server - komputer tempat aplikasi itu sendiri disimpan. Semua kode, semua logika, semua bahan tambahan dan buku referensi. Misalnya, direktori alamat FIAS atau direktori badan hukum register - mereka juga menempati tempat, baik sendiri maupun dalam memori aplikasi.

Kadang-kadang mereka mengatakan "server aplikasi" dan "server database". Ini normal, karena sebenarnya server hanyalah mesin, komputer. Dan database dan server aplikasi biasanya disimpan di mesin yang berbeda, demi keamanan. Dalam hal ini, jika mereka mengatakan "server aplikasi" - kita berbicara tentang tautan kedua dari skema kita.

Aplikasi sangat berbeda. Ada sumber daya yang intensif, mereka membutuhkan banyak memori dan ruang disk. Ada "paru-paru" yang dapat digunakan bahkan di komputer di rumah.

DB (database) - gudang data. Di sini Anda dapat dengan mudah mencari informasi + yakin itu akan tetap ada, walaupun ada sesuatu yang rusak dalam aplikasi.

Berapa banyak ruang yang dibutuhkan untuk database tergantung pada jumlah data. Ada pangkalan besar di bank, di mana 1tb akan sedikit. Dan ada yang sangat kecil yang dapat Anda instal pada mesin Anda. Contohnya,XAMPP dapat disediakan. Dan tidak mungkin Anda menjejalkan banyak data ke dalamnya sehingga Anda tidak akan punya tempat untuk itu.

Mungkin tidak ada basis yang terpisah, maka strukturnya akan menjadi dua tingkat: client-server. Dan itu saja!

Skema ini bersyarat, dalam kehidupan nyata kita setidaknya akan memiliki lebih banyak pelanggan. Dan jika aplikasi ini sangat dimuat, maka akan ada beberapa server dan beberapa database:



PS - cari artikel yang lebih bermanfaat di blog saya di bawah tag "berguna"

All Articles