Beyin firtinasi

13 views
Skip to first unread message

nedanko

unread,
Oct 23, 2009, 10:10:42 AM10/23/09
to Developer Network
Hadi beyin firtinasi yapalim bari..

Simdi bi projede bisi lazim oldu, aslinda ben kararimi verdim, o
kararimida anlaticam ama cok mantikli yaratici bir cozum gelirse
degistirebilirim tabii..

Simdi milyonlarca dosyayi file systemde nasi dagitiriz, accesside
kolay olacak sekilde. 10-15 milyon dosyayi host edebilecek bir yapida
olmali i/o operasyonlarini yavaslatmamali. Her filesystemin bir limiti
oluyor bildiginiz gibi, ayni klasorde sonsuz sayida dosya
listeleyemiyorsunuz, ustelik limitin altinda olmaniza ragmen bir sure
sonra I/O oldukca zorlasmaya basliyor. Ornegin EXT3 de 32000 limiti
var her inode icin.

Benim tasarladigim sistem basit bi sistem, her dosyanin DB'de bir
referansi var ID olarak, bu ID ye bagli olarak bir MD5 hash i uretip
(id + key), ilk 7 harfini alip 3 level klasor yaratmayi dusunuyorum.
yani ae/b1/c5e gibi.. MD5 hexadecimal oldugu icin her karakterin 16
olasiligi var, 256 * 256 *4096 olasilik ediyor. tabii geri kalan 25
karakterin sadece 5 karakterini dosyaya isim olarak verecegim icin 20
karakter i silecegim. (bir 5 karakterde dosyanin id si olacak) 25
karakteri vermek mumkun ama 20 karakter fazlasi, gereksiz bir byte
yigini. 15 karakterden kurtulmus olacagim. Tamamen collision free bir
yapi.

2/2/3 secmemin sebebide sondaki 4096 limitini cok gec doldurmak.
Orneign basta 150 bin dosya process edilecek, yani ortalama iki klasor
yaratilacak 3. levelde.

CRC kodunu almayida dusundum, nitekim CRC cok hizli ve 8 karakter, ama
collision free degil, o yuzden 7 karekterli MD5 dan pek bir farki
kalmiyor, birte MD5 in portlari daha fazla her dilde portunu kolayca
buluyorsunuz, CRC daha az..

Varsa oneriniz sizinkinide alalim, tabii brute force a kapali olmali,
yani insanlar deneyerek tum dosyalara ulasamamali.

ned,

Başar Gülcü

unread,
Oct 23, 2009, 11:49:03 AM10/23/09
to develope...@googlegroups.com
Madem isin icine db giriyor, niye dogrudan sequence'la key ureterek dosyalari o ID'ler uzerinden uretilen klasorlere koymuyorsun (meraktan soruyorum)? MD5'e ne gerek var yani? ID olursa, sadece rakam kullansan... 2/2/3 olmaz da 2/3/3 olur veya oyle bir seyler.

Ilk olarak 2 karakter kullanirsan, 10*10'dan ./ altinda 100 klasor. Her bir klasorun altinda 100'er klasor (10k etti), onlarin da altinda 1000'er dosya olursa 10m dosya tutmus oldun (2/2/3 yaptiginda). 2/3/3 yapsan 15m'i de tutarsin.. sequence'in artirmasini en derin klasorde bulunacak dosya sayisindan buyuk bir asal sayiya gore yaparsan, her yeni dosya bir baska klasore dusmus olur. Yalniz ID olarak yazmadan once mod'unu alman gerek sadece. Kisacasi demek istedigim, matematik fonksiyonu olsun; MD5 falan niye?

2009/10/23 nedanko <nedin...@gmail.com>

Emre Erkunt

unread,
Oct 23, 2009, 3:17:01 PM10/23/09
to develope...@googlegroups.com
Selam,

Compatibility icin oyle yapiyor herhalde. Hani gunun birinde isin icinden DB cikarsa, baska bir formulle sadece fs uzerinden dosyalara ulasilabilsin diye.. Aksi takdirde, MD5 in anlamini goremedim ben de. Direk Basar'in dedigi gibi matematiksel bir fonksiyon ile olay cozulebilir.

Ama genel olarak bu tur bir sistemde ( ben de benzerini bir mail sistemi icin yapmistim qmail de ) bunlari yapmak ya da fs tune larla indexing v.s. yapmak tum i/o problemlerini cozmuyor. Sonucta guclu bir yapi yoksa bunun arkasinda bol fiziksel diskli SAN, NAS Storage falan gibi tikanma sansi, gelecek public trafik ile orantili olarak artacak.

Netekim file structure mantigi olarak ben olsam ben de senin gibi yapardim/yapmistim. Yani belirli directory lere bolerek isi halletmek ve fs tuning le indexing kullanarak i/o bottleneckleri onlemek. Tabii burada ne tur bir FS secilecegini iyi belirlemek lazim. Ornegin bol RAM li bir storage uzerinde ( ya da local diskler artik nasil tutacaksin bilemiyorum ) XFS kullanmak seni inanilmaz rahatlatabilir caching yetenekleri acisindan.

Brute force olayini tam anlamadim. Brute Force ile araya tarpitler falan koymazsan cozemeyecegin sey yok ki ? 

Anladigim kadariyla bu bir web uygulamasi olacak, insanlar direct url ile ulasacaklar, direct url de rewrite ya da ona benzeri bir sistemle file sistemden image v.s falan cekecek. Isin ucunda accounting oldugu icinde abuse edilmesin istiyorsun ?
--
Emre Erkunt


2009/10/23 Başar Gülcü <basar...@gmail.com>

Muratcan Atalay

unread,
Oct 23, 2009, 4:00:11 PM10/23/09
to develope...@googlegroups.com
ben olsam,

dosyalar hiç silinmeyecekse, file system'in elverdiği en büyük dosyaları oluşturur, DB tablosunda dosya adı, offset, ve size ı tutarım. script benzeri bişiyle output yaparım. bu sayede file systemle kafayı bozmam, id index olacağından istediğim dosyaya logaritmik zamanda erişim.

---
dosyalar silinecekse;

N sistemden sisteme değişecek optimum bir değer olarak bulunmak üzere; dosya ID sini N lik düzende yazardım. her bir basamak için bir alt dizin yaratırdım;

diyelim ki N i 16 seçtin ve sayı ABC21 çıktı;
A\B\C\2\1\MD5(strcat("ABC21","secretkey"))\dosya.zip

şeklinde yerleştirirdim.

bu sayede
1-collision olmaz
2-secretkey bilinmediğinden brute force yapılamaz.
3-file tree'in balanced olur. yani teoride sistemdeki dosya sayısı K olsa O(logK) zamanda erişebiliyor olması gerekir

2009/10/23 Emre Erkunt <emre....@gmail.com>

Emre Erkunt

unread,
Oct 23, 2009, 4:07:41 PM10/23/09
to develope...@googlegroups.com
Ulasim publicten olacaksa, secret key zaten lower layer da gerceklesecek bir durumda olur.

Yani brute force yapilir. Public bir ortamda Brute force un yapilamayacagi neredeyse yok.
--
Emre Erkunt

rahan

unread,
Oct 23, 2009, 4:13:45 PM10/23/09
to Developer Network
sharky, sanıyorum ki nedanko'nun sistemin brute force a kapalı
olmasından kastı, url nin

www.domain.com/file/12312/1.zip
www.domain.com/file/12312/2.zip
...
www.domain.com/file/12312/1000.zip
www.domain.com/file/12313/1.zip
www.domain.com/file/12313/2.zip
...

şeklinde olup da, kullanıcıların basit bi döngüyle bütün dosyaları
baştan sona erişilebilir olmaması gibi bişi.


On Oct 23, 11:07 pm, Emre Erkunt <emre.erk...@gmail.com> wrote:
> Ulasim publicten olacaksa, secret key zaten lower layer da gerceklesecek bir
> durumda olur.
> Yani brute force yapilir. Public bir ortamda Brute force un yapilamayacagi
> neredeyse yok.
> --
> Emre Erkunt
>
> 2009/10/23 Muratcan Atalay <atalay...@gmail.com>
>
> > ben olsam,
>
> > dosyalar hiç silinmeyecekse, file system'in elverdiği en büyük dosyaları
> > oluşturur, DB tablosunda dosya adı, offset, ve size ı tutarım. script
> > benzeri bişiyle output yaparım. bu sayede file systemle kafayı bozmam, id
> > index olacağından istediğim dosyaya logaritmik zamanda erişim.
>
> > ---
> > dosyalar silinecekse;
>
> > N sistemden sisteme değişecek optimum bir değer olarak bulunmak üzere;
> > dosya ID sini N lik düzende yazardım. her bir basamak için bir alt dizin
> > yaratırdım;
>
> > diyelim ki N i 16 seçtin ve sayı ABC21 çıktı;
> > A\B\C\2\1\MD5(strcat("ABC21","secretkey"))\dosya.zip
>
> > şeklinde yerleştirirdim.
>
> > bu sayede
> > 1-collision olmaz
> > 2-secretkey bilinmediğinden brute force yapılamaz.
> > 3-file tree'in balanced olur. yani teoride sistemdeki dosya sayısı K olsa
> > O(logK) zamanda erişebiliyor olması gerekir
>
> > 2009/10/23 Emre Erkunt <emre.erk...@gmail.com>
>
> > Selam,
> >> Compatibility icin oyle yapiyor herhalde. Hani gunun birinde isin icinden
> >> DB cikarsa, baska bir formulle sadece fs uzerinden dosyalara ulasilabilsin
> >> diye.. Aksi takdirde, MD5 in anlamini goremedim ben de. Direk Basar'in
> >> dedigi gibi matematiksel bir fonksiyon ile olay cozulebilir.
> >> Ama genel olarak bu tur bir sistemde ( ben de benzerini bir mail sistemi
> >> icin yapmistim qmail de ) bunlari yapmak ya da fs tune larla indexing v.s.
> >> yapmak tum i/o problemlerini cozmuyor. Sonucta guclu bir yapi yoksa bunun
> >> arkasinda bol fiziksel diskli SAN, NAS Storage falan gibi tikanma sansi,
> >> gelecek public trafik ile orantili olarak artacak.
>
> >> Netekim file structure mantigi olarak ben olsam ben de senin gibi
> >> yapardim/yapmistim. Yani belirli directory lere bolerek isi halletmek ve fs
> >> tuning le indexing kullanarak i/o bottleneckleri onlemek. Tabii burada ne
> >> tur bir FS secilecegini iyi belirlemek lazim. Ornegin bol RAM li bir storage
> >> uzerinde ( ya da local diskler artik nasil tutacaksin bilemiyorum ) XFS
> >> kullanmak seni inanilmaz rahatlatabilir caching yetenekleri acisindan.
>
> >> Brute force olayini tam anlamadim. Brute Force ile araya tarpitler falan
> >> koymazsan cozemeyecegin sey yok ki ?
>
> >> Anladigim kadariyla bu bir web uygulamasi olacak, insanlar direct url ile
> >> ulasacaklar, direct url de rewrite ya da ona benzeri bir sistemle file
> >> sistemden image v.s falan cekecek. Isin ucunda accounting oldugu icinde
> >> abuse edilmesin istiyorsun ?
> >> --
> >> Emre Erkunt
>
> >> 2009/10/23 Başar Gülcü <basargu...@gmail.com>
>
> >> Madem isin icine db giriyor, niye dogrudan sequence'la key ureterek
> >>> dosyalari o ID'ler uzerinden uretilen klasorlere koymuyorsun (meraktan
> >>> soruyorum)? MD5'e ne gerek var yani? ID olursa, sadece rakam kullansan...
> >>> 2/2/3 olmaz da 2/3/3 olur veya oyle bir seyler.
>
> >>> Ilk olarak 2 karakter kullanirsan, 10*10'dan ./ altinda 100 klasor. Her
> >>> bir klasorun altinda 100'er klasor (10k etti), onlarin da altinda 1000'er
> >>> dosya olursa 10m dosya tutmus oldun (2/2/3 yaptiginda). 2/3/3 yapsan 15m'i
> >>> de tutarsin.. sequence'in artirmasini en derin klasorde bulunacak dosya
> >>> sayisindan buyuk bir asal sayiya gore yaparsan, her yeni dosya bir baska
> >>> klasore dusmus olur. Yalniz ID olarak yazmadan once mod'unu alman gerek
> >>> sadece. Kisacasi demek istedigim, matematik fonksiyonu olsun; MD5 falan
> >>> niye?
>
> >>> 2009/10/23 nedanko <nedineda...@gmail.com>

Tim

unread,
Oct 23, 2009, 4:36:08 PM10/23/09
to Developer Network
Brute force olayi icin link'e session id tarzi birsey eklenip onunla
islem yapilabilir. Bir cok sistemde hali hazirda kullanilan bir yontem
o.

nedanko

unread,
Oct 23, 2009, 5:26:30 PM10/23/09
to Developer Network
Evet compatibility bir sorun, diger sorunda tahmini
kolaylastiriyorsun. Benim dedigim gibi bir diger amacim onu
zorlastirmak, yani sonucta id ler incremental, dosyalarin hepsine
ulasmak isteyen bir kisi basit bir scriptle tum dosyalara erisebilir.
Brute Force a kapali derken demek istedigim buydu.

Ornegin bir hesap yapalim:

Benim dedigim sistemde 281474976710656 olasilik var. Dosyalarin webde
oldugunu dusunursek, araya HTTP, TCP etc. overheadlerinide koyunca bir
omur surer diyebiliriz.

Yani tum dosyalara brute force la erismesi pratik olarak mumkun
olmamali, ayrica her yazilim diline kolayca port edilebilinmeli.
Ornegin keyim 37!'+4Azsf#' diyelim, bir satirlik kodla dosyanin yolunu
bulmak mumkun oluyor, ayrica matematiksel formulun bulunabilmesi
riskini ortadan kaldiriyor. (son 20 karakteri sildigimden dolayi, o
bile mumkun degil, mumkun bile olsa pratik olarak mumkun degil zaten)
15-20 milyon olasiliklar kolayca abuse edilebiliniyor ornegin.

Filesystem olarak bir kac test yapmayi dusunuyorum. XFS benimde
aklimdaydi fakat bazi arastirmalarimda web icin production
sunucularinda kullanilmamasini oneriyorlardi. File hosting icin iki
sunucu var zaten, 1.5 TB lik 4 diskle Raid 10 seklinde. Bir sunucuda
su an kurulu sistem EXT3 ile, diger sunucuda XFS kurup hazir olunca
bir kac test yapmayi dusunuyorum. Ona gore kararimi verecegim.

> dosyalar hiç silinmeyecekse, file system'in elverdiği en büyük dosyaları
> oluşturur, DB tablosunda dosya adı, offset, ve size ı tutarım. script
> benzeri bişiyle output yaparım. bu sayede file systemle kafayı bozmam, id
> index olacağından istediğim dosyaya logaritmik zamanda erişim.

Bu sistemde cesiti dosyalar tutulacak, ornegin bazi imajlarda
tutulacak. Onlari scriptten output olarak verdigimizde caching
ozelligini ortadan kaldirmis oluyoruz. Bu en buyuk handikap. Bu
ayrica session ID cozumunude engelliyor o yuzden. Zaten gerekli
yerlerde SESSION ID tarzi bir cozumde kullanicak.





On Oct 24, 2:49 am, Başar Gülcü <basargu...@gmail.com> wrote:
> Madem isin icine db giriyor, niye dogrudan sequence'la key ureterek
> dosyalari o ID'ler uzerinden uretilen klasorlere koymuyorsun (meraktan
> soruyorum)? MD5'e ne gerek var yani? ID olursa, sadece rakam kullansan...
> 2/2/3 olmaz da 2/3/3 olur veya oyle bir seyler.
>
> Ilk olarak 2 karakter kullanirsan, 10*10'dan ./ altinda 100 klasor. Her bir
> klasorun altinda 100'er klasor (10k etti), onlarin da altinda 1000'er dosya
> olursa 10m dosya tutmus oldun (2/2/3 yaptiginda). 2/3/3 yapsan 15m'i de
> tutarsin.. sequence'in artirmasini en derin klasorde bulunacak dosya
> sayisindan buyuk bir asal sayiya gore yaparsan, her yeni dosya bir baska
> klasore dusmus olur. Yalniz ID olarak yazmadan once mod'unu alman gerek
> sadece. Kisacasi demek istedigim, matematik fonksiyonu olsun; MD5 falan
> niye?
>


> 2009/10/23 nedanko <nedineda...@gmail.com>
> > ned,- Hide quoted text -
>
> - Show quoted text -

Emre Erkunt

unread,
Oct 27, 2009, 6:50:45 AM10/27/09
to develope...@googlegroups.com
Dosyalarin boyutu ne kadar ?

IO bottleneck ler tmpfs ile falan da cozulebilir, ama zaten duzgun configure edilmis bir Apache + XFS ile ayni kapiya cikacak.

Bu arada production da XFS kullandim ben, mail sunucularda da web sunucularda da. RAM in ne kadar yuksekse o kadar performans aliyorsun gibi bir durum olusuyor.

Gayet guzel, hizli ve stabil.
--
Emre Erkunt


2009/10/23 nedanko <nedin...@gmail.com>

nedanko

unread,
Oct 28, 2009, 1:13:20 AM10/28/09
to Developer Network
dosyalar 10 kb tan 20-30 mb a kadar gidiyor. aslinda bir dosya var
onun farkli formatlari var (4-5 tane falan oluyor, 10 kb dan 20-30 a
kadar degisiyor)

XFS i evet deneyecegim, sagol..

On Oct 27, 9:50 pm, Emre Erkunt <emre.erk...@gmail.com> wrote:
> Dosyalarin boyutu ne kadar ?
>
> IO bottleneck ler tmpfs ile falan da cozulebilir, ama zaten duzgun configure
> edilmis bir Apache + XFS ile ayni kapiya cikacak.
>
> Bu arada production da XFS kullandim ben, mail sunucularda da web
> sunucularda da. RAM in ne kadar yuksekse o kadar performans aliyorsun gibi
> bir durum olusuyor.
>
> Gayet guzel, hizli ve stabil.
> --
> Emre Erkunt
>
> 2009/10/23 nedanko <nedineda...@gmail.com>
> > > - Show quoted text -- Hide quoted text -
Reply all
Reply to author
Forward
0 new messages