Jika Anda membayangkan perusahaan seperti Amazon (atau aplikasi web e-commerce besar lainnya), yang mengoperasikan toko online dalam skala besar dan hanya memiliki jumlah terbatas barang fisik di gudang, bagaimana mereka dapat mengoptimalkan ini sehingga tidak ada hambatan tunggal? Tentu saja, mereka harus memiliki sejumlah database dengan replikasi, dan banyak server yang menangani beban secara mandiri. Namun, jika banyak pengguna dilayani oleh server yang terpisah dan keduanya mencoba menambahkan item yang sama ke troli mereka, yang hanya ada satu yang tersisa, harus ada "sumber kebenaran" untuk jumlah yang tersisa untuk item itu. Bukankah ini berarti bahwa paling tidak, semua pengguna yang mengakses info produk untuk satu item harus meminta database yang sama secara serial?
Saya ingin memahami bagaimana Anda dapat mengoperasikan toko yang besar menggunakan komputasi terdistribusi dan tidak membuat hambatan besar pada DB tunggal yang berisi informasi inventaris.
sumber
Jawaban:
Tidak juga. Ini bukan masalah yang membutuhkan solusi teknis 100% sempurna, karena kedua kasus kesalahan memiliki solusi bisnis yang tidak terlalu mahal:
Bahkan, saya sendiri baru-baru ini mengalami kasus kedua, jadi ini bukan hipotesis: itulah yang terjadi dan bagaimana Amazon menanganinya.
Ini adalah konsep yang sering diterapkan ketika Anda memiliki masalah yang secara teori sangat sulit untuk dipecahkan (baik itu dalam hal kinerja, optimasi, atau apa pun): Anda sering dapat hidup dengan solusi yang bekerja sangat baik untuk sebagian besar kasus dan menerima bahwa kadang-kadang gagal, selama Anda dapat mendeteksi dan menangani kegagalan saat itu terjadi.
sumber
Kombinasi dari
Tidak ada keajaiban, hanya situasi yang semakin kompleks. Sama seperti DNS, itu dibuat untuk skala.
'Versi tunggal kebenaran' adalah bagian dari sistem semacam itu. Menghasilkan kunci baru menjadi operasi yang lebih kompleks daripada hanya menghasilkan nomor berikutnya dalam urutan. Misalnya ada sekuens lain. Ini adalah jenis kompleksitas yang dapat ditangani oleh sistem database terdistribusi dan mereka melakukannya dengan membuat beberapa operasi ke dan dari komponen ketika membuat objek baru, menjadikannya tersedia untuk orang lain, memastikan bahwa urutannya unik ketika diperlukan, kunci komposit, dll. .
sumber
Saya telah melihat masalah 'Item Terakhir Dalam Stok' diselesaikan dengan cara berikut:
Perbarui semua level stok setiap hari dan beri flag produk sebagai tinggi, rendah, sesuai pesanan atau keluar dari kategori stok sesuai dengan level ambang batas.
Jelas itu item 'stok rendah' yang bermasalah
Jangan repot-repot mengecek level stok. Tempatkan saja pesanan
Peringatkan pengguna saat menjelajah 'Sisa terakhir!'. ketika mereka pergi untuk membayar, periksa dan kurangi tingkat persediaan. Jika kehabisan stok, Perbarui status item.
Dengan cara ini Anda hanya menekan database untuk item 'stok rendah' dan Anda hanya melakukan itu ketika pelanggan cukup jauh dari proses pembelian. Biayanya adalah beberapa pelanggan tidak akan dapat menyelesaikan pembelian mereka.
Namun, dalam kebanyakan kasus 'kehabisan stok' sebenarnya hanya berarti Anda menunggu pengiriman lain, jadi Anda tetap ingin menerima pesanan dan mungkin hanya memunculkan peringatan atau membatasi opsi pengiriman. Jadi pelanggan tidak hilang.
Selama waktu muat yang tinggi seperti penjualan, Anda bahkan dapat mematikan pengecekan stok dan hanya mengirim email kepada pelanggan nanti, 'maaf kami kehabisan X, apakah Anda mau Y'
Pada dasarnya tujuan dari setiap platform e-commerce tidak pernah dibaca dari database. Selalu sajikan halaman yang di-cache dan lakukan semua sisi klien.
sumber
Dalam video ini, Martin Fowler membahas basis data NoSQL:
https://www.youtube.com/watch?v=qI_g07C_Q5I
Salah satu poin (di suatu tempat di sana), adalah bahwa tempat-tempat seperti Amazon lebih suka membuat 99% orang senang dengan menerima pesanan mereka tanpa bisa memeriksa "pasti" apakah itu benar-benar tersedia, dan mungkin mengganggu persentase yang sangat kecil dengan memiliki untuk mengatakan "maaf, sepertinya seseorang mengalahkanmu karenanya."
Artinya, tidak ada penanganan nyata untuk skenario yang Anda gambarkan, hanya saja Amazon mengambil manfaat dari keraguan berdasarkan pembacaan inventaris terakhir yang sukses, dan jika transaksi bersamaan menyelinap di antara - oopsi.
(btw, itu video yang bagus jika Anda penasaran dengan NoSQL)
sumber