RonaldWidha

percaya sama occam razor
See also: Other Geeks@INDC

Apa sih yang dianggap stateless?

Mo menanggapi diskusi apa yang dianggap stateless / stateful di milis dotnet yang berkaitan sama gimana ngebikin aplikasi di web bisa lebih nge-scale

Jadi kalo kita misah2in bahwa session-specific data mesti dilewatin ke HttpSession (ke memcache ato sql-server), sedangkan application-data mesti dilewatin ke repository dan ORM, ini adalah diskriminasi yg artificial.

Karna kedua2nya sebenernya sama2 data.

Keputusan kemana datanya mesti disimpen adalah case-per-case decision (e.g. temporary/persistent, size, write/read frequency, importance, recoverable) yang gak terikat dengan apakah itu session-data ato application-data.

Menurut aku, definisi state harus dikonstrain dari sudut pandang "hubungan client dan servernya" (konsep bukan hardware loh ya), siapa yang menyimpan konteks sebuah situasi.

  • Kalo servernya bisa mengenali konteks si client tanpa informasi dari client = servernya stateful
  • Sedangkan kalo sebaliknya, si server tidak bisa mengenali konteks si client, dan client harus ngasih tau ke server konteks dirinya = servernya stateless.

Coba liat contoh pseudo code di client untuk ngebayar sebuah transaksi:

di contoh ini, client-nya stateful, karena tau siapa user-nya.

var saya = Current.User

using ( var pelayan = new serverconnection) 

{

  var pesanan = pelayan.pesan(saya, "makanan")

  var bill = pelayan.mintaBill(saya)

  pelayan.bayar(bill)

}

sementara di server (class pelayan) itu stateless. Karena kita selalu harus ngasih tau konteks transaksi kita.

  • pas mesan, saya harus pas identitas current user...pesanan ini untuk siapa
  • pas minta bill, saya juga harus pas identitas current user...bill yang mana yang harus diambil
  • lalu pas bayar jg, saya harus ngasi tau bill mana yang mo di bayar.

contoh yang sama kalo servernya (class pelayan-nya) stateful

using ( var pelayan = new serverconnection) 
{
  pelayan.pesan("makanan")

  pelayan.mintaBill()

  pelayan.bayar()
}

di sini kita bisa liat bahwa untuk memesan makanan, si client tidak perlu mengidentifikasi dirinya.

  • Si pelayan mengingat identitas requestnya mungkin dari IP address, atau Identity Context call-nya.
  • begitu jg pas minta bill, kita bisa ngeliat bahwa si pelayan "ingat" pesanan sebelumnya
  • pas bayar, kita bisa tau bill mana yang terakhir di "aktif"kan.

informasi tentang user, pesanan dan bill tentunya disimpan di dalam "pelayan", tapi ini bukan faktor penentu apakah sebuah komponen itu statefull atau stateless, melainkan hubungan antara siapa yang mengerti konteks runtime di saat apapun.

UserRepository.FindCurrentActiveUser()

UserRepository.FindById(int id)

2-2nya repository, tapi kira2 yang mana yang stateful dan mana yang stateless?

Share this post: | | | |
Posted: Feb 02 2010, 11:11 AM by ronaldwidha | with 1 comment(s)
Filed under: ,

Comments

Twitter Trackbacks for Apa sih yang dianggap stateless? - RonaldWidha [netindonesia.net] on Topsy.com said:

Pingback from  Twitter Trackbacks for                 Apa sih yang dianggap stateless? - RonaldWidha         [netindonesia.net]        on Topsy.com

# February 7, 2010 6:54 AM