Jumat, 17 Juni 2011

Konsep Three Tier

Aplikasi Desktop Menggunakan Arsitektur Three Tier

Beberapa waktu terakhir ini saya cukup banyak memposting topik tentang bagaimana membuat aplikasi desktop menggunakan arsitektur Three Tier. Selama ini aplikasi desktop sebagian besar menggunakan arsitektur Client Server, dimana client akan langsung melakukan koneksi ke database. Konsep ini dipopulerkan oleh Microsoft bersama dengan platform VB. Konsep utamanya adalah meletakkan bisnis proses dan logic aplikasi di dalam server database lewat Stored Procedure dan Trigger.
Belakangan konsep client-server mulai mendapat tantangan dengan berkembangnya jaringan internet. Perusahaan ingin membuat aplikasi desktop namun kantor-kantor cabang tersebar di beberapa tempat, jika masih ingin menggunakan arsitektur client-server lewat jaringan internet, maka banyak sekali pertimbangan keamanan yang perlu diperhatikan, karena membuka port database di jalur internet bukanlah ide yang baik dari sisi security. Masalah lain adalah lisensi, banyak database vendor yang memberlakukan lisensi per user untuk menentukan harga lisensi. Dengan arsitektur client server, setiap client harus menggunakan user yang berbeda sehingga secara drastis menaikkan harga lisensi mana kala ada ratusan client terhubung ke server. Masalah lain yang muncul adalah jika client menggunakan koneksi dialup miskin bandwith, komunikasi client ke server akan sedikit terganggu (corupt).
Selain alasan diatas, alasan performance tuning juga menjadi perhatian kalau menggunakan arsitektur client server. Misalnya clientnya sudah membengkak menjadi ratusan, maka server (database) harus melayani semua client tersebut, kalau database sudah tidak sanggup lagi maka harus beli hardware lebih besar dan migrasi dari hardware lama. Arsitektur Three tier dapat mengatasi hal ini dengan membebankan sebagian pekerjaan ke Server Aplikasi, sehingga database server tidak bekerja sendirian.
Teknologi-teknologi baru semacam cache, hibernate search dapat meningkatkan kinerja aplikasi secara keseluruhan dengan meminimalisasi hit ke database. Dimana database connection sering kali menjadi bottleneck dalam aplikasi dengan ukuran data yang sangat besar. Ukuran data yang besar memunculkan masalah serius, yaitu slow query. Hal ini terjadi karena proses select-join dilakukan dalam table yang berukuran naudzubillah besarnya.
Model Three Tier ini meletakkan server application antara client (swing) dan database, sehingga client tidak langsung konek ke database. Alesanya bernacam-macam, terutama kalau database ada di server yang harus konek lewat internet, nah kalau port database dibuka lewat public IP, bisa dihack server databasenya, makanya client koneknya gak ke database tapi ke application server. Seperti yang saya jelaskan sebelumnya.
Koneksi antara client ke application server menggunakan protokol yang disebut remoting. Alternatif remoting di java sangat banyak, pilih salah satu alternatif yang sesuai dengan infrastruktur dan kebutuhan. Saya coba bikin matriks perbandingan antara berbagai macam remoting ini deh :
remotingJenis RemotingProtokolIteroperability dengan platform lainImplementasiKeamananKebutuhan bandwith
RMIBinaryTCP socketHanya aplikasi javaEJB, RMI murniSangat aman, bisa menggunakan JAAS kalau menggunakan EJBSangat besar, cocok di intranet
RMIBinaryTCP socketJava, C++, Python dllImplementasi sudah jarang, nyaris absoleteamanSangat besar, cocok di intranet
Spring HTTPinvokerBinaryHTTPJava dan harus pake springSpring remotingamanCukup besar, cocok untuk intranet
HessianBinaryHTTPJava dan library hessianHessianamanCukup besar, cocok untuk intranet
HessianText / XMLHTTPJava dan library hessianHessianamanCocok untuk internet, karena berbasis text
WebserviceText / XMLHTTPSemua platform bisaJAX-WS, Spring WS, Axis2amanCocok untuk internet, karena berbasis text
HTTP call with json/XMLText / json / XMLHTTPSemua platform bisa. Apache HTTPClientJakson, JSON lib,tidak aman, harus ada mekanisme security, https misalnyaCocok untuk internet, karena berbasis tex
Pilihan favorit :
1. Aplikasi intranet : Spring Remoting Http Invoker
2. Aplikasi internet : HTTP call with json/XML + Https + Application client certicifate signing kalau aplikasinya critical. Kalau seperti twitter atau facebook sih ga perlu sampe application client certicifate signing.
Implementasi Three Tier
Untuk mengerti implementasi Three Tier, baca blog saya terdahulu mengenai arsitektur three tier dan perlu dipelajari dulu apa itu remoting, sebaiknya baca blog endy tentangspring remoting dan http invoker.
Kalau anda sudah pernah membuat aplikasi desktop dengan Hibernate dan Spring, sebaiknya langsung saja lihat contoh kodenya.
Persiapan pertama adalah membuat aplikasi desktop dengan menggunakan Spring framework. Proses development tidak ada yang istimewa, lakukan seperti biasa. Dalam proses development ini masih menggunakan arsitektur client server, sehingga tidak perlu repot menjalankan web server seperti tomcat atau glassfish. Development sangat nyaman, cepat dan tidak ribet.
Setelah developement selesai, berikutnya adalah fase deployment. Dalam fase ini barulah kita deploy aplikasi yang sudah dibuat dalam arsitektur three tier. Brilian bukan? develop dengan arsitektur client-server yang ringkas, deploy dengan arsitektur three tier yang robust.
Proses perubahan arsitektur client server ke three tier hanya melibatkan 3 file konfigurasi saja, tanpa ada perubahan sama sekali di kode java-nya.
1. konfigurasi spring untuk expose service menjadi http invoker : server-httpinvoker-ctx.xml
       
Dalam konfigurasi diatas kita membuat bean dengan nama transaksiServiceHttpInvoker dan masterServiceHttpInvoker, kedua bean ini digunakan untuk mengekspose TransaksiService dan MasterService agar bisa diakses dari client yang berada di jaringan berbeda menggunakan remote protokol http invoker.
2. konfigurasi spring untuk client invoke http invoker dr server : client-contex-httpinvoker.xml
       
Konfigurasi di atas diletakkan di client, bean transaksiService dan masterService digunakan untuk mengakses service Spring yang berada di server localhost port 8080. Kalau servernya berada di tempat lain, ganti localhost dengan alamat IP server.
3. Buat satu Project web, kemudian tambahkan konfigurasi berikut ini di dalam web.xml-nya
   contextConfigLocationclasspath:applicationContext.xml classpath:server-httpinvoker-ctx.xml   org.springframework.web.context.ContextLoaderListener    masterServiceHttpInvoker org.springframework.web.context.support.HttpRequestHandlerServlet   transaksiServiceHttpInvoker org.springframework.web.context.support.HttpRequestHandlerServlet    masterServiceHttpInvoker /MasterService   transaksiServiceHttpInvoker /TransaksiService    
Konfigurasi web.xml ini digunakan untuk membuat servlet mapping yang memberikan alamat ke bean transaksiServiceHttpInvoker dan masterServiceHttpInvoker agar bisa diakses lewat protokol http dari client.
Penutup
Tulisan ini bertujuan untuk membuka wawasan tentang implementasi arsitektur Three Tier dalam aplikasi desktop. Masih banyak teknik lain dalam implementasi arsiktektur Three Tier. Kalau anda familiar dengan arsitektur aplikasi Java ME yang terhubung dengan Server, anda pasti tidak asing lagi dengan konsep Three Tier.
Tidak semua aplikasi desktop harus menggunakan konsep Three Tier, silahkan disesuaikan dengan kebutuhan masing-masing dan pastikan anda mengerti manfaat Three Tier dibanding Client-Server, beserta kelemahanya. Tidak ada teknologi yang sempurnya.
Semoga bermanfaat.
Sumber: ifnu

Tidak ada komentar:

Posting Komentar