Fallacy #2: Latency isn't a problem
Latency adalah waktu yang dibutuhkan untuk melakukan perjalanan network pada satu arah. Hal ini berbeda dengan roundtrip time. Kita tidak berbicara tentang roundtrip time karena waktu yang dibutuhkan melibatkan serialization dan deserialization.Hal tersebut tidak berhubungan dengan network.
Kita sebagai developer sering sekali melupakan hal ini karena kita melakukan test di environment local. Tetapi jika kita beranjak membangun aplikasi yang terdistribusi secara geografis maka kita akan mendapatkan kenyataan bahwa latency sama sekali tidak 0. Kita dapat menyimpulkan bahwa latency akan semakin besar jika kita berhubungan dengan LAN, WAN dan Internet.
Anda dapat melihat latency tersebut dalam bentuk gambar sebagai berikut.
http://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html
Jadi kita harus lebih berhati-hati tentang bagaimana programming model kita. Dan hati-hati tentang bagaimana kita dapat melakukan performance improvement dengan mendistribusikan object kita. Hal tersebut sangat-sangat bertentangan dengan network latency.
Dan terlebih dengan dependency injection kita tidak mengetahui bahwa apakah object tersebut adalah remote object atau tidak. Hal tersebut menjadi lebih tersembunyi lagi dengan infrastructure cloud. Dikarenakan cloud tentu saja merupakan distributed networked mesin yang saling terkoneksi. Dan reliability dari cloud lebih rendah dibandingkan jika anda memiliki data center sendiri.
Meskipun semua cloud provider berusaha untuk membuat semuanya lebih reliable, tetapi tetap saja jika sesuatu error atau failure terjadi maka semua hal yang berhubungan dengan latency akan terjadi.
Jadi anda sudah dapat menyimpulkan bahwa microservices yang membuat banyak remote call adalah berbahaya dari sisi latency ?
Banyak remote call adalah buruk dari sisi network dan latency.
Mungkin network akan menjadi lebih baik dan baik lebih daripada sebelumnya tetapi system yang kita buat juga lebih banyak tergantung ke network dibandingkan dengan system yang sebelumnya.
Intinya adalah jangan melakukan remote object model yang menyembunyikan kerumitan dari network dan latency. Sebelumnya kita juga melakukan remote call terhadap mengakses property yang ada. Sama seperti ORM dengan lazy loading. Tetapi kita mengubah hal tersebut dengan menggunakan Data Transfer Object ( DTO ).
Berhati-hatilah dengan ORM dimana kita mendapatkan fasilitas lazy loading untuk collections. Hal tersebut akan melakukan roundtrip ke network untuk melakukan fetching terhadap collections yang kita inginkan. Jadi apakah solusinya ?
Jangan melakukan roundtrip di network jika tidak diperlukan. Object chit-chat seharusnya tidak melewati network. Jika anda harus benar-benar melewati network bawalah data-data yang kemungkinan anda butuhkan sehingga anda tidak perlu melakukan pemanggilan network berulang-ulang