Saturday, April 20, 2013

TCP? Haruskah saya peduli?


Bagi yang sudah lama berkecimpung dalam dunia IT tentu tidak asing lagi dengan istilah TCP (Transmision Control Protocol). Bahkan secara tidak sadar, kita selalu berurusan dengan TCP setiap harinya. Ketika Anda browse blog saya ini, Anda menggunakan protokol HTTP yang merupakan application protocol di atas transport protokol TCP ini. Saya tidak akan membahas panjang lebar TCP ini, kelebihan dan kekurangannya apa dibanding saudaranya UDP (jika Anda tertarik mendalami, saya sarankan Anda membaca referensi ini: http://ulam2.cs.luc.edu/ebook/chap06.html).

Nah, Integrasi di dunia juga berhubungan erat sama TCP. Faktanya, hampir semua protokol penting integrasi antar aplikasi di IT pada umumnya dibuat di atas TCP, seperti HTTP, FTP, SSH, dan lain-lain. Salah satu ciri khas dari TCP ini adalah connection-oriented, artinya ketika dua aplikasi (client dan server) akan berkomunikasi, maka harus dilakukan connection establishment terlebih dahulu, yang biasanya dilakukan di port-port tertentu. HTTP misalnya, umumnya dilakukan pada port 80, dan integrasi client dengan MySQL server biasanya dilakukan di port 3306.

Pengetahuan dasar mengenai TCP state perlu dipelajari, terutama bagi yang sering berurusan dengan integrasi. Cukup sering saya menemui technical issue terkait integrasi, masing-masing pihak saling menyalahkan. Menurut client, response dari server lambat sehingga mengakibatkan timeout, sedangkan menurut server, request dari client tidak pernah sampai. Apalagi koneksi antara client dan server kadang juga melewati beberapa firewall, sehingga menambah node potensial yang bermasalah. Salah satu cara ampuh yang objektif untuk mengetahui akar permasalahan adalah dengan melakukan TCP Dump dan melakukan analisa lebih jauh. Supaya lebih akurat, TCP Dump mesti dilakukan di setiap titik yang terlibat, misalnya: client, server, load balancer dan firewall. Pengetahuan tentang TCP state akan sangat membantu dalam melakukan analisa.
Memang melakukan analisa mendalam mengenai hasil TCP Dump merupakan domain teman-teman yang lebih capable dalam Networking, tetapi tidak ada salahnya kita juga mengetahui pengetahuan dasarnya, seperti TCP State. Salah satu diagram TCP State terkait pembuatan sampai dengan penutupan koneksi adalah sebagai berikut:





Monday, February 18, 2013

Antara Integrasi, Dosa dan Komitmen

Blog ini saya coba buat untuk menjadi catatan saya mendalami Enterprise Integration Pattern (EIP) atau dalam bahasa Indonesianya, kita sebut Pola Integrasi (bingung mencari terjemahan kata Enterprise, hehe). Kenapa EIP atau Pola Integrasi ini diperlukan? Bagi yang sering berurusan antar integrasi antar sistem/aplikasi, tentu sudah paham bahwa integrasi itu ribet dan menghabiskan waktu. Integrasi di sini bukan hanya bagaimana memanggil suatu API, konsep integrasi jauh lebih kompleks. Integrasi akan semakin kompleks ketika banyak sistem yang harus diintegrasikan.

Enterprise Integration Pattern (source: www.eaipatterns.com)

Dalam dunia enterprise, kita akan semakin banyak berurusan dengan integrasi. Enterprise biasanya memiliki beberapa domain sistem: Customer Relationship Management (CRM), Supply Chain Management (SCM), Enterprise Resource Planning (ERP) dan Business Intelligence (BI). Masing-masing domain ini akan memiliki banyak aplikasi di dalamnya, dan masing-masing aplikasi baik dalam domain yang sama atau berbeda akan saling terintegrasi 

Background saya adalah sebagai kuli IT yang bekerja di operator seluler di Indonesia. Ada beberapa aplikasi yang sudah saya buat dan diimplementasikan dan juga menjadi revenue generator bagi perusahaan saya, tetapi juga sekaligus ini merupakan 'dosa terselubung' saya karena saya dulu melakukan development tanpa arah yang jelas, problematic dan error-prone. Akibatnya, aplikasi yang saya buat semakin lama semakin sulit di maintain.

Hal ini menjadi pelajaran berharga bagi saya pribadi dan saya tidak ingin teman-teman saya mengulangi kesalahan saya. Oleh karena itu, saya berkomitmen untuk mencoba berbagi melalui blog ini tentang bagaimana menerapkan EIP/Pola Integrasi untuk membangun integrasi yang baik dan benar, terutama dalam dunia enterprise. Saya juga berencana melakukan reengineering salah satu aplikasi yang saya buat, dan blog ini akan bercerita tentang implementasinya.

Blog ini akan bercerita banyak tentang integrasi menggunakan bahasa pemrograman Java, dan solusi open-source. Kita juga akan sama-sama belajar bagaimana proses development (khususnya Java) sebaiknya dilakukan, mulai dari penggunaan Maven sebagai project management automation (compile, build, testing, release), penggunaan Spring sebagai framework, ActiveMQ sebagai messaging middleware sampai dengan github untuk repository.

Akhir kata, saya bukan seorang Java expert apalagi integration expert, saya cuma sedang mempelajari bagaimana integrasi diimplementasikan dengan benar dan berbagi di blog ini. Mohon masukan dan koreksinya juga :)