Selasa, Juli 21, 2009

MySQL – Sharding, Perbandingan Biaya/Tarif Handphone (GSM/CDMA) dan Internet Unlimited dan URL Shortener : Terpendek Di Dunia.

MySQL – Sharding

Beberapa hari yang lalu saya hadir di konferensi online yang diadakan oleh komunitas MySQL Indonesia. Praktis, karena online, jadi bisa dihadiri dari mana saja. Tapi sialnya, saya keliru waktu – saya kira dimulai pukul 22:00, ternyata sudah berjalan sejak pukul 20:00 :)

Untunglah setiap konferensi dicatat, dan kemudian diposting di milis mysql-indonesia@googlegroups.com
Terlampir adalah catatan konferensi online pada tanggal 25 Juni 2009, dengan topik “Horizontal partitioning dengan menggunakan MySQL-Proxy dan Spock“, yang diadakan di channel #id-mysql di irc.freenode.net

Selamat menikmati.

ok..selamat malam teman-teman
malam ini confernce # 18
materinya tentang horizontal partitioning
yang akan ngizi crazynuxer
silahkan dimulai..
ok :)
beberapa minggu lalu sudah dijelas kan oleh bro dendie
mengenai partition di mysql database
cuman itu disebut sebagai vertikal partitioning
jadi partition hanya di satu mesin
nah horizontal partition ini
adalah partition di beda mesin
atau istilah kerennya sharding
jadi istilah yang lebih dikenal sharding?
atau klo saya istilahkan lebih mudahnya itu
iya
intinya sih load balance database berdasarkan record
jadi misalnya kita ada 10 record
5 record di server A dan 5 record lagi di server B
kira-kira sampai sejauh
bisa dibayangin ga
sharding itu gmn ?
bisa
klo dari wikipedia
Horizontal partitioning is a design principle whereby rows of a database table are held separately, rather than splitting by columns (as for normalization). Each partition forms part of a shard, which may in turn be located on a separate database server or physical location.
jadi kita melakukan scale out
untuk meningkatkan performance secara scale out karena dukungan scalabilitas
scale out itu apa ya? :D
ada scale out dan scale in
gini
misalkan server kita udah bottleneck nih
dan bottleneck itu karena hardware resource yg ga mumpuni atau mencukupi lagi
ada 2 solusi untuk masalah ini
* d3ptzz (n=d3ptzz@125.163.244.26) has joined #mysql-id
yang pertama kita beli server baru lagi
dengan spesifikasi hardware yg lebih bagus dan lebih handal
kemudian kita pindah datanya
dan jalankan lagi servernya
solusi ini disebut scale in
trus?
kelemahannya kita harus mengeluarkan banyak waktu dan tenaga
selain itu kita juga harus rugi
karena ada downtime
lalu ada solusi lagi
selain itu
scale out istilahnya kerennya
jadi kita memakai semacam balancer
* d3ptzz (n=d3ptzz@125.163.244.26) Quit (Remote closed the connection )
dan dibelakang balancer itu ada beberapa server sebagai backend nya
jadi ketika server kita sudah overload kita tinggal nambah backend lagi dibelakangnya
jadi mempunyai skalabilitas yang bagus
kita bisa menambah tanpa downtime
dan mengurangi backend tanpa downtime
karena dari sisi user diakan akan mengakses ipnya balancer
lalu oleh balancer akan diberikan atau dibagi ke backend sesuai dengan algoritma
sejauh ini masih paham ?
algoritma nya?
algoritmanya macem2
tergantung jenisnya dan kebutuhannya
ada round-roubin, least-connection, weight least connection
dll
itu juga tergantung dari balancernya support apa ga
ada juga yg berdasarkan schema
misalnya spock proxy
atau mysql-proxy
yg berdasarkan algoritma didalam script lua nya
nanti yg akan kita bahas adalah mengenai spock proxy
“script lua nya”, mksdnya apa ya?
dan mysql-proxy sebagai software horizontal partition di mysql
lua itu jenis bahasa pemrograman
yg biasanya di buat untuk game :D
sampai sejauh ini bagaimana ?
:D
asiiikkk
:D
lumayan
ok
keren
di mysql sendiri ada beberapa software yg digunakan untuk kebutuhan ini
bahkan sudah ada engine yg sudah diciptakan
ada mysql-proxy,spockproxy , sqlrelay dll
mysql-proxy+hscale
dan untuk engine sudah ada engine baru
namanya spider engine
cuman gue belum nyoba
yg udah gue coba mysql-proxy dan spock proxy
:D
mysql-proxy dan spock proxy itu software ?
pertama kita mulai dengan mysql-proxy ya :D
iya
mysql-proxy sekarang masih dalam tahap alpha
dan belum layak untuk production
hanya untuk main-main dan belajar saja
:D
itu yang dijelaskan di manualnya mysql-proxy
untuk manualnya silahkan download di mysql.com
:)
cuman sebenernya mysql-proxy ini sangat flexible karena mendukung scripting language
menggunakan lua
brarti belajar Lua juga dong
kekekekeke
oh ya untuk sedikit info saya menggunakan linux ketika melakukan ujicoba kedua software ini
hehehe
iya
tidak pun tidak2 apa
karena sudah banyak scritpt yg siap pakai
tapi…
Enakan bisa
keahlian untuk membaca script tetep harus dimiliki
buat kustomisasi
:D
karena untuk proses troubleshoot :)
klo bisa ya berarti lebih mantap :D
ketika kita akan melakukan installasi mysql-proxy itu dari source
jadi harus compile :)
dan disource nya itu ada banyak contoh script2 lua yg bisa di coba
:)
mysql-proxy tidak hanya bisa melakukan load balance
tapi bisa memanipulasi query
:)
mksdnya?
jadi juga bisa dipakai untuk menambah fitur keamanan
di manipulasi nya gimana nih
karena dia bisa membaca dan menganalisa query
yg bisa dilakukan oleh mysql-proxy
create new commands
 filter queries (deny specific queries)
 collect statistics on usage
 implement usage quotas
 execute shell commands
load balancing servers
jadi beberapa hal diatas bisa dijalankan oleh mysql-proxy
cuman satu kelemahan mysql-proxy
:D
belum stable :)
untuk install tinggal download
lalu ekstrak menggunakan perintah tar
tar zxvf mysql-proxy.tar.gz -C /usr/local/src/
cd /usr/local/src/mysql-proxy/
./configure –prefix=/opt/mysql-proxy
make -j4 && make install
finish
sama di semua linux mas
yups :)
harusnya sama semua
yang make -j4 itu bisa diganti make saja
:)
-j4 itu jika kita menggunakan prosesor yg quad core
klo cuman single core ya make saja
:)
biar lebih cepet compile nya
ada pertanyaan ?
sejauh ini masih paham ?
yang lain
:D
Bobo yah
Ahahaha
lumayan
lagi liatin scriptnya :D
ada cara yg lebih mudah jika pake ubuntu :D
tinggal apt-get install mysql-proxy
ada di repo
wuih enak ya pake ubuntu..
:D
slacker yah mas tundra
kekekekeke
source aja ams
:D
Mas

— read_query() gets the client query before it reaches the server

— @param packet the mysql-packet sent by client

— the packet contains a command-packet:
— * the first byte the type (e.g. proxy.COM_QUERY)
— * the argument of the command

— http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol#Command_Packet

— for a COM_QUERY it is the query itself in plain-text

function read_query( packet )
if string.byte(packet) == proxy.COM_QUERY then
print(“we got a normal query: ” .. string.sub(packet, 2))
end
end
itu contoh script yg simple nya
jadi nanti ketika anda menjalakan mysql proxy dan melakukan query
akan tampil we got a normal query: “query_anda”
di console :)
di mysql-proxy ini
ketika kita menjalankan
akan ada 2 port yg dilisten
yg pertama untuk admin port
yg kedua itu port untuk balancer yg akan diakses user atau aplikasi
saya menggunakan port 4041 untuk admin nya
4040 untuk diakses user atau aplikasi
berikut saya kasih contohnya
bentar ssh dulu ke mesinnya
:LD
:D
untuk menjalankannya
/usr/sbin/mysql-proxy –proxy-lua-script=/opt/proxy/lib/mysql-proxy/example.lua –proxy-address=xxx.xxx.xxx.xxx:4040 –proxy-backend-addresses=xxx.xxx.xxx.xxx:3306 –proxy-backend-addresses=xxx.xxx.xxx.xxx:3306
mysql-proxy –> itu binary nya
–proxy-lua-script itu agar mysql-proxy menggunakan script example.lua
–proxy-address=xxx.xxx.xxx.xxx:4040 ini adalah sebagai ip dan port yg akan diakses oleh client atau aplikasi
atau ip balancer nya
sedangkan backend address nya itu adalah server2 database yg dibelakang balancer
setelah menjalankan perintah diatas kita bisa ngecheck apakah port 4040 dan 4041
sudah listen
root@crazynuxer:~# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 xxx.xxx.xxx.10:4040 0.0.0.0:* LISTEN 29432/mysql-proxy
tcp 0 0 0.0.0.0:4041 0.0.0.0:* LISTEN 29432/mysql-proxy
tcp 0 0 xxx.xxx.xxx.9:3306 0.0.0.0:* LISTEN 25706/mysqld
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 19049/sshd
tcp6 0 0 :::22 :::* LISTEN 19049/sshd
kita lihat sudah listen
klo gitu kita akan coba melakukan query ya
mysql -uroot -h xxx.xxx.xxx.10 -P 4040 -e ’select * from mysql.user’ -p
dan masukkin passwordnya
maka diconsole akan tampil
Hello world! Seen the query: select @@version_comment limit 1
Hello world! Seen the query: select * from mysql.user
sesuai dengan isi script yg ada diexample.lua
berikut isi example.lua
function read_query(packet)
if string.byte(packet) == proxy.COM_QUERY then
print(“Hello world! Seen the query: ” .. string.sub(packet, 2))
end
end
print(“test”
)
jadi di mysql-proxy ini bisa memanipulasi query dan me load balance
sesuai dengan isi script lua nya
jadi sangat2 flexible
dan untuk load balance ini di mysql-proxy sudah ada plugin
namanya hscale
bisa coba akses situsnya
hscale.org klo ga salah :)
itu juga dalemnya lua
jadi nantinya proses load balance nya akan dihandle oleh hscale
dengan script lua didalamnya
untuk menjalankannya silahkan download di hscale.org
dan untuk installation tinggal download dan ekstrak kemudian set env variable dan local variable nya
sesuai dengan petunjuk dari situs hscale.org
itu sedikit info mengenai mysql-proxy :)
untuk ubuntu konfigurasinya ada di /etc/default/mysql-proxy dan /etc/init.d/mysql-proxy
:)
ok sekarang kita akan bahas spock proxy
spockproxy ini sudah bisa digunakan di production
ini dikeluarkan oleh spock.com
salah satu search engine :)
coba deh liat www.spock.com
dan ini merupakan forking dari mysql-proxy
untuk situs resminya
spockproxy
http://spockproxy.sourceforge.net/
spockproxy yg terbaru baru versi 0.8.7
spockproxy ini hampir sama dengan mysql-proxy
cuman spockproxy tidak pake lua
dan horizontal partition menggunakan system range base
jadi misalnya ada 10 query
nanti dia akan bagi berdasarkan range yg sudah disetting
didalam database schema
jadi spock ini dalam pengaturannya menggunakan database schema
didalam database schema itu terdapat 3 buah table
shard_database_directory
shard_table_directory
shard_range_directory
table database directory itu untuk mengatur koneksi
jadi pendefinisian backend beserta database yg mau disharding
klo table shard_table_directory itu berdasarkan table yg mau disharding
kita mendefinisikan column
sedangkan range yg range yg akan kita atur nanti
jadi misalnya kita ada 10 query
range query 0-5 di lemparkan kemesin backend database A
6-10 itu dilempar ke mesin database B
dan seterusnya
sampai sejauh ini bagaimana ?
masalahnya
:D
kalo ga tau wuery nya berapa banyak
gimana?
iya kan?
:D
*query
hehehe
yups betul banget saudara digit :P
bagaimana dengan yg lain ?
untuk sejauh ini ?
halo, saya agak sedikit rancu soal range query
iya pak
jadi itu benar2 berdasarkan urutan query yang datang ya?
bukan bagaimana isi querynya?
oooo ok
eh sori kirain mengkonfirmasi, layar saya terlalu terang
bentar…. ***atur brightness layar**
berdasarkan isi nya
jadi misalnya kita setting id sebagai column yg ingin disharding
maka spock ini akan melihat idnya
lalu berdasarkan range nya
dia akan lempar ke backend
jika didalam range tidak ada
maka akan ditolah
ditolak
itu yang saya alami kemarin :)
oke, menarik… jadi kita bisa setup semacam rule ya
untuk menentukan query yang mana untuk ke backend yang mana
iya
kalau berdasarkan urutan datangnya query saja, gimana?
bisa atau tidak ya?
memang terlalu simple sih, tapi kadang ada kasus yang sudah cukup dengan seperti ini
jadi misalnya; query yang pertama datang akan di opern ke backend1
opern=oper
query kedua dioper ke backend2
query ketiga kembali ke backend1
query keempat ke backend2
dst
iya
jadi cuma sekedar load balancer sederhana
kelemahan kita harus set itu semua :)
hehehe
iya sederhana sekali cara kerjanya
waktu kita select pun
sebenernya si spock ini melakukan query select di semua backend
ooo
ini topik yg sangat menarik, karena ada bbrp customer saya yang sudah perlu pakai multiple backend
pada saat ini, ada bbrp customer saya yang traffiknya setara dengan republika.co.id
jawapos.co
padahal servernya cuma dual-core, 2 GB RAM :)
tertolongnya karena saya pakai squid, sehingga mayoritas hits mengenai squid. Bukan ke Apache/PHP
tapi, traffic nya bertambah terus
jadi musti siap2 utk multiple backend juga
iya :)
sebaiknya mulai membuat solusi scale out :)
nah, sharding selama ini memerluka coding ulang dari web-apps ybs
dengan spock, jadi ada harapan bahwa ini tidak perlu
iya :)
jadi shardingnya di handle di level “middleware” / spock
bukan di aplikasi
wah, sedap betul ini :)
* hilman (n=adit@125.161.205.58) has joined #mysql-id
* hilman is now known as adit
ya telat ya
sepertinya begitu dit :)
:(
* sufehmi sambil testing game StarTrek Voyager : Elite Force di Ubuntu 9.04 :)
hahaha
donlot dimana
di share dunk
Hahahaha
tadi keasyikan nonton opera van java
* the_curious mupeng
:D
bagaimana sejauh ini yg masih belum jelas ?
tadi ngebahas apa ki?
tumben banget info nya telat di milis
lagi pada sibuk ya? ;) )
hehehe
yups
jadi konsepnya sperti itu untuk spockproxy
untuk install nya silahkan download
lalu ekstrak,
install dengan perintah
./autogen.sh
./configure
make
dan make install
untuk ubuntu jaunty
harus sedikit menyesuaikan gcc nya :D
untuk yg pake centos tidak perlu
untuk lebih detailnya nanti akan saya demokan di mysql monthly meeting
:)
demikian dari saya
jika ada yg mau ditanyakan , silahkan
membahas apa toh ? :D
sangat2 ketinggalan neh
adit: loe lihat log nya aja :P
ok2 :p
jadi gmn teman-teman?
ada yang mau tanya ke nuxer?
bagaimana ?
sepertinya tidak ada yang bertanya nih..?
kalo gak ada mau ditutup nih confernce nya..
ok :)
ok
baiklah…
conference mysql indonesia ke 18 berakhir disini
* udie_mysql (n=chatzill@114.123.173.175) Quit (“ChatZilla 0.9.85 [Firefox 3.0/2008052906]” )
kalo nanti tiba2 teringat ada yang mau ditanyain ttg materi ini, pm aja ke nuxer
atau kirim ke milis juga gpp..
lognya akan segera dikirim ke milis
sip
bener
terima kasih atas kesediaan temen2 ikut confernce malam ini
assalamu’alaikum semuanya..
waalaikumsalam
sampai jumpa di confernce berikutnya
* adit (n=adit@125.161.205.58) has left #mysql-id
jangan lupa mysql meeting di kantor SUN di Jl. Sudirman

Perbandingan Biaya/Tarif Handphone (GSM/CDMA) dan Internet Unlimited

Saya, seperti beberapa orang lainnya juga, memiliki beberapa handphone. Satu buah HP saya gunakan untuk komunikasi (terutama menerima telpon) dari client. HP ini sejak dahulu terus sama nomornya, tidak berubah.
Satu HP lagi, Nokia CDMA, saya gunakan untuk menelpon dengan tarif termurah. Beberapa saat yang lalu saya gunakan Flexi, yang juga digunakan oleh seluruh keluarga saya. Namun sejak Flexi tidak gratis lagi antara sesamanya, maka kini kami mulai melihat-lihat lagi pilihan yang lainnya..

Dan saya kembali kebingungan melihat berbagai skema tarif yang ada :)
Operator GSM maupun CDMA saling berlomba-lomba menawarkan harga yang “PALING MURAH”. Katanya sih begitu :)

Kenyataannya ? Namanya “lidah tidak bertulang”, tentu konyol sekali jika kita percaya begitu saja.
Karena itu saya coba membuat tabel perbandingan harga antara berbagai operator yang ada.

Beberapa catatan :

  • Tarif bicara adalah per menit
  • Pada tarif yang berbeda-beda pada setiap jam / menitnya (seperti : AXIS), akan dicantumkan tarif yang paling mahal.
  • Tabel ini hanya menampilkan produk Pra-bayar
  • Jika ada beberapa skema pada produk Pra-bayar tersebut, maka akan ditamplkan yang tarif “default” (yang otomatis berlaku / tidak perlu diaktifkan dulu)

Berikut adalah Tabel Perbandingan Tarif GSM :

Operator Sesama Antar
Operator
AXIS Rp 200 Rp 2700
Three Rp 300 Rp 1000
As Rp 780 Rp 780
Matrix Rp 840 Rp 1200
IM3 Rp 900 Rp 1500
XL Rp 1200 Rp 1500
Mentari Rp 1400 Rp 1750
Simpati Rp 1500 Rp 1800

Berikut adalah Tabel Perbandingan Tarif CDMA :

Operator Sesama Antar Operator
StarOne Rp 25 Rp 700
Esia Rp 50 Rp 2727
Smart Rp 60 Rp 600
Fren Rp 540 Rp 1320
Flexi Rp 750 (SLJJ)
/ Rp 54
Rp 1600

Untuk Internet Unlimited, diasumsikan sbb :

(1) Quota minimal 1 GB (sebelum kecepat menurun)
(2) Tidak ada charge tambahan jika quota habis

Berikut adalah Tabel Perbandingan Tarif Internet UNLIMITED :

Operator /
Nama Produk
Biaya
(bulanan)
Smart Internet Unlimited Rp 45.000
(tanpa quota)
Mobi Internet Unlimited Rp 50.000 (tanpa quota)
Flexinet Unlimited Rp 60.000
(tanpa quota, Rp 15.000 / minggu)
Indosat ISAT Eco Rp 100.000
StarOne Internet Unlimited Rp 180.000
(tanpa quota, Rp 45.000/minggu)
Wimode Online Nonstop Rp 200.000
(Rp 50.000/minggu)

Gimmick

Gimmick adalah promosi yang pada awalnya sekilas terkesan sangat murah / menarik. Namun, seringkali ada banyak persyaratannya, sehingga seringkali pada akhirnya tetap saja mahal, dan/atau malah merepotkan (membuang-buang waktu)

Namun, beberapa gimmick bisa sangat menarik / bermanfaat untuk keperluan tertentu. Untuk itu beberapa diantaranya saya cantumkan disini :

  • Fren : setelah 1 menit (Rp 540), menjadi gratis menelpon ke sesama Fren
  • StarOne Ngorbit : Rp 1 / menit dengan mendaftar via SMS ke 7825 (Rp 3000/hari) : ngorbit [spasi] ber5 [spasi] no.tujuan

Semoga panduan ini bisa bermanfaat bagi Anda :-)

Jika ada perubahan / informasi tarif baru, silakan beritahu saya via form komentar. Maka nanti artikel ini akan saya update.

URL Shortener : Terpendek Di Dunia

Website zaman sekarang sudah jauh berbeda dengan website zaman dahulu. Dulu kita harus paham HTML untuk bisa membuat website. Lalu harus tahu tentang FTP untuk bisa upload berbagai file-filenya, termasuk penempatannya yang benar agar jadi bisa muncul di website. Dan seterusnya.
Kini, dengan bantuan dari berbagai script CMS (Content Management System), maka siapa saja bisa punya website yang bagus tanpa perlu pusing mengenai berbagai seluk beluk teknis di baliknya.

Namun bersamaan dengan itu, ada beberapa perubahan juga. Antara lain URL yang makin lama menjadi semakin panjang.
Contoh : URL yang sangat panjang :)
(ternyata ini bukan sekedar URL yang sangat panjang, namun menurut laporan dari berbagai pihak, ini adalah URL PALING panjang yang pernah ada)

Nah, karena itu maka akhir-akhir ini terlah muncul berbagai website yang memberikan layanan URL Shortener, yaitu layanan pemendekan URL.
Dengan ini, maka kita jadi bisa mengakses URL yang sangat panjang melalui URL lainnya yang jauh lebih singkat.

Contoh : http://pendek.in
Cara penggunaannya pun sangat mudah. Cukup tuliskan URL yang panjang di kolom yang disediakan, dan lalu klik tombol “pendek.in”.
Maka kemudian akan ditampilkan URL yang pendeknya.

Contoh: URL panjang yang saya cantumkan diatas dipendekkan oleh pendek.in menjadi http://pendek.in/00ici
JAUH lebih ringkas ! :)

Dengan munculnya berbagai layanan Microblogging, seperti Twitter, maka tiba-tiba layanan URL Shortener menjadi sangat relevan. Karena berbagai layanan Microblogging tersebut ada keterbatasan ukuran — rata-rata hanya mengizinkan posting sebesar 140 huruf saja.

Padahal, URL panjang yang saya contohkan diatas saja panjangnya sudah mencapai 1700 huruf :)
Karena itu Twitter.com memerlukan jasa URL Shortener ini untuk kenyamanan para pemakainya.

Pada awalnya, Twitter.com menggandeng jasa URL Shortener TinyURL. Setiap link di sebuah posting Twitter secara otomatis akan diganti menjadi link dari TinyURL.
Beberapa waktu yang lalu Twitter.com kemudian menggantinya menjadi dengan layanan dari bit.ly.

Sebetulnya selain bit.ly masih ada yang lebih pendek lagi. Seperti is.gd (“is good” ? hehe).
Tidak mau kalah – kemudian muncul website j.mp – jump ! Fiuh, inilah dia yang paling pendek.

Atau, masih ada yang lebih pendek lagi kah …. ?

Beberapa hari yang lalu saya menemukan http://to./. Ternyata, website ini memberikan layanan URL Shortener juga ! Alhasil, dibandingkan dengan j.mp sekalipun, URL yang dihasilkannya masih lebih pendek.
Inilah layanan URL Shortener terpendek di dunia saat ini :)

Namun, di halaman situs http://to./ itu kita harus memasukkan password dulu untuk menggunakannya.
Yah, tidak bisa kita pakai deh.

Eits, tidak perlu kecewa, ada caranya kok. Tenang saja :)

Caranya mudah sekali – cukup ketikkan di kolom alamat di browser Anda http://to./, dan langsung sambung dengan URL yang ingin Anda pendekkan, dan lalu tekan Enter.
Maka kemudian akan muncul versi pendek dari URL tersebut.

Contoh: coba ketikkan URL ini di browser Anda :
http://to./http://harry.sufehmi.com
Gampang ya ? :D

Demikianlah cara untuk menggunakan URL Shortener terpendek di dunia. Selamat menikmati ! :)

.
.
BONUS :
Iseng-iseng saya mencoba memendekkan URL terpanjang di dunia dengan layanan http://to./ ini. Hasilnya ?
Silakan lihat sendiri di screenshot di bawah ini :D

http:--to-2f-ck

(seperti mengumpat kesal, ha ha ha !)