Fallacy #7: Transport cost isn't a problem

Selain dari pada transport time, kita juga memiliki mekanisme serialization dan deserialization. Hal ini juga membutuhkan waktu untuk processing. Sebelum dan sesudah kita melakukan transport di wire ( network ) kita akan melakukan serialization dan deserialization. Semakin kompleks struktur data yang kita buat semakin besar pula waktu untuk melakukan serialization deserialization. Kita sering sekali melupakan hal tersebut karena hal ini tidak terlihat.

Fokus kita kebanyakan di controller, service boundary semua hal ini di lakukan setelah serialization/deserialization dilakukan. Kita biasanya tidak melakukan profiling berapa lama undercover proses tersebut berlangsung. Hal ini perlu juga di hitung jika user berkomentar bahwa sistem tersebut lambat.Jika kita menggunakan infrastuktur cloud maka CPU time akan menambah biaya anda. Karena biasanya business logic kita tidak merupakan hal yang banyak menghabiskan banyak CPU time dibandingkan dengan ser/deser. Jadi jangan kaget jika anda menerima tagihan pembayaran dari Amazon atau Azure :). Hal tersebut tidak dapat dihindari tetapi kita dapat melakukan design yang lebih baik untuk mengatasi masalah pembayaran tersebut.

Jadi anda sudah dapat melihat apa permasalahan yang muncul mengenai banyak service-service yang kecil ? Selain coupling kita juga memiliki permasalahan cost maintenance. Apakah cara tersebut merupakan cara yang benar ? Saya rasa tidak.

Tetapi jika kita bisa memisahkan service-service secara logical, maka kita akan dapat memisahkan secara physical jika dibutuhkan. Kita juga dapat melakukan deployment secara physical dalam mesin yang sama atau mesin yang berbeda sesuai dengan kebutuhan. Jika kita membutuhkan suatu mekanisme parallelism kita juga dapat melakukan hal tersebut dengan benar dan efektif secara cost.

Di banyak hal, pemrosesan dengan queue dan asynchronous mempermudah kita melakukan decoupling dan pemrosesan secara parallel. Sehingga kita memiliki pemrosesan yang performance nya lebih tinggi dari keseluruhan workflow dibanding dengan pemrosesan syncrhonous, sequential dan blocking.

Kebanyakan kita juga memiliki pemahaman bahwa physical dan logical model dari coupling atau dekomposisi system merupakan hubungan satu ke satu. Artinya jika kita memisahkan secara logical, maka kita harus melakukan deployment ke mesin terpisah.

Jadi apakah monolith design adalah salah ? Jika hal tersebut adalah logical monolith design maka ya hal tersebut salah. Tetapi jika hal tersebut adalah physical monolith deployment maka belum tentu. Sesuai dengan kebutuhan. Oleh karena itu selalulah memulai dengan design yang benar secara logical sejak awal. Jadi tidak ada silver bullet atau one stop solution untuk masalah architecture. Tergantung context nya.

Transport cost merupakan hal yang tidak gratis. Terutama jika kita ingin mendistribusikan system kita secara network. Komunikasi antar satu Data Center dengan Data Center lain maka jaringan network tersebut menjadi lebih mahal. Karena harganya mahal untuk mendapatkan bandwith dari satu tempat ke tempat lain yang cukup jauh. Semakin jauh jarak semakin besar transport cost yang ada. Jika anda melakukan remote call dari satu data center ke data center yang lain, selalulah tanyakan berapa besar cost yang dibutuhkan oleh remote call tersebut.

Salah satu contoh adalah jika anda menggunakan SQL Server Replication dengan selular network atau satelite link. Hal ini tentu saja akan memberikan cost yang cukup besar bagi anda. Karena replication tersebut membutuhkan bandwith dan network cost yang besar. Selalulah perhatikan mengenai hal ini dalam arsitektur anda.

results matching ""

    No results matching ""