




Aklımdaki Projeyi Hayata Geçirmek Ve Karşılaştığım Zorluklar
-
@RockZs Minimalize et, düşük yeteneklerde temel fikri verecek şekilde yaz. Sonra geliştirirsin, Node.js kodlama bilmeyen adama eziyettir, bilene ise apayrı bir eziyettir.
Bahsettiğin kadarıyla Node.js ihtiyaçların için en ideali gibi duruyor. Kolay gelsin, işin zor.
-
kodlamadan anlamam diğer türlü danışmanlık istersen bu aralar kafam boş senin için düşünebilirim :)
beni bilen bilir cok pis düşünürüm :)=
-
hocam nodejs tek çekirdekte çalışıyor diye bişey yok.
https://nodejs.org/api/cluster.html Şurayı incelersen yaptığın uygulamayı bütün çekirdeklerde aynı anda çalıştırmaya başlatabiliyorsun. Sorguların hangi çekirdekteki programda çalışacağını kendisi ayarlıyor.
birde veritabanı olarak neden redis kullanıyorsun ? Redis memory storage, misal olarak bir uygulaman var birden fazla çekirdekte çalışıyor. Bu birden fazla çalışan uygulamanın sessionlarını birleştirmek için redis kullanırsın veya sonucu sık sık değişmeyen veritabanı sorgularının cevaplarını redise atar bide redise timeout tanımlar ordan çekersin birdahaki sefere falan filan
yanlış bir sorguda nasıl patlar, sen girdileri kontrol etmiyormusun ?
eğer siteni açtığın zaman girecek kişi hakkında bir fikrin yoksa vps al geç benim görüşüm.
-
Anlatmadan anlayamazsin :D
-
by_Tet bunu yazdı
Hocam forever yerine pm2 kullan loglamayı aç
Çoklu çekirdek olayına gelirsek hiç ihtiyacım olmadığından araştırmadım bile fakat c/c++ ile plugin yazılan bir dilden bahsediyoruz çekirdeğin allahına hükmetmesi lazım mantıken fakat bakacağım müsait olduğumda..
pm2 tavsiyesi için sağol, eksik olma, pm2 cluster ayarlarını da kendisi yapıyormuş, çoklu çekirdekte ayarlama yapmak gerekmeyecek gibi.
ozgunlu bunu yazdı@RockZs Minimalize et, düşük yeteneklerde temel fikri verecek şekilde yaz. Sonra geliştirirsin, Node.js kodlama bilmeyen adama eziyettir, bilene ise apayrı bir eziyettir.
Bahsettiğin kadarıyla Node.js ihtiyaçların için en ideali gibi duruyor. Kolay gelsin, işin zor.
ben de aynı fikirdeyim. node.js öğrendik az-çok eskisi gibi bomboş değiliz çok şükür :) çok sağolasın..
DJ_Alper bunu yazdıkodlamadan anlamam diğer türlü danışmanlık istersen bu aralar kafam boş senin için düşünebilirim :)
beni bilen bilir cok pis düşünürüm :)=
sağol hocam, eksik olma.. rahatsız ederim bi' ara :)
detCode bunu yazdıhocam nodejs tek çekirdekte çalışıyor diye bişey yok.
https://nodejs.org/api/cluster.html Şurayı incelersen yaptığın uygulamayı bütün çekirdeklerde aynı anda çalıştırmaya başlatabiliyorsun. Sorguların hangi çekirdekteki programda çalışacağını kendisi ayarlıyor.
birde veritabanı olarak neden redis kullanıyorsun ? Redis memory storage, misal olarak bir uygulaman var birden fazla çekirdekte çalışıyor. Bu birden fazla çalışan uygulamanın sessionlarını birleştirmek için redis kullanırsın veya sonucu sık sık değişmeyen veritabanı sorgularının cevaplarını redise atar bide redise timeout tanımlar ordan çekersin birdahaki sefere falan filan
yanlış bir sorguda nasıl patlar, sen girdileri kontrol etmiyormusun ?
eğer siteni açtığın zaman girecek kişi hakkında bir fikrin yoksa vps al geç benim görüşüm.
cluster'ı kullanmak lazım hocam ama pm2 kullanırsam buna da gerek kalmayacak gibi. redis bellekte çalışan key-value bir db olduğundan tercih ettim, oldukça hızlı ve yine kolayıma geldi. şu anda rediste yaşadığım sorun şu; client disconnect olduğunda aktif clientlerin listelerini tuttuğum bir setten srem ile keyi siliyorum ama geçen denerken browserda sayfayı kapatmama rağmen felan bir türlü session u kapatmadı ve kayıt SET te kaldı. bu sorunun önüne geçmek için de timeout tanımlamayı düşünüyorum.
admin yetkisi gerektiren ve clientten gelen komut taşıyan emitleri sunucu tarafında socket.id ile doğrulayarak kontrol ediyorum. şimdilik clientlerdeki inputlardan gelen strignleri kontrol edecek, düzenleyecek birşey yazmadım. hocam şöyle patlıyor, genelde rediste hatalı bir işlem yapmaya çalışırsa oluyor, ya da bazen undefined variable hatası felan alıyorum. en son aldığım hata, eğer kullanıcı kendi verilerini girip göndermeden önce browser console dan bir buton için çalışan socket.emit'ini yazıp çalıştırırsa node.js "cannot read property 'username' of null" deyip kendini sonlandırıyor. bu gibi davranışları engellemek için hatayı verdiren sorguya bir IF eklemek felan gerekiyor çoğu zaman, yani ben böyle biliyorum.. yani işi bilen biri çok da zorlanmadan sunucuyu rahatsız edebilir, kapatabilir. node.js buna oldukça yatkın geliyor bana.
vps de alabilirim, cloud hostingleri inceliyorum, node.js için çokça kullanılan Amazon Web Services, Heroku gibi.. ya da bluehost cloud a sanırım yeni girmiş, ona baktım, fiyatlar gayet iyi.. ama cloud olayını tam kavrayamadım daha.
EnableTurk bunu yazdıAnlatmadan anlayamazsin :D
bir ben var benden içeri :)
-
Hocam browser kapatmama olayı senelerdir kronik bir sorun.
Jquery ile çok önceden karşılaştığım sorun dahi henüz çözülmüş değil fakat alternatifler var
Tabiki socket ile çalışıyorsundur fakat yine de söyleyeyim vereceğim tavsiyede socket.io kullanacağız.
Giren kişilerin tarayıcı davranışlar var bkz. Google-analytics bu konuda çok uyanık :) Bu davranışların temeli mouse takibi. Şuan tam kafamda değil hatırlamıyorum fakat misalen bir kişi browseri kapatmış olsun bu kişinin mouseu asla oynamaz. Problem şu ki mouse koordinatları derinlemesi 5-10 dk boyunca yazı okuyan kişide de değişmeyecektir.
Bu durumu jqueryde mouseu 1 birim sağa ve sola hareket ettirmek üzere aşıyoruz. Mouse koordinatları değişirken bu koordinatlara etkimiz olmayacak fakat değişmediği andan itibaren sağa ve sola oynattıracağız kişinin ruhu duymadan biz bir canlılık olduğunu anlayacağız. Bu sayede mouseu socket ile dinleyerek kişinin o an sitede mi değil mi olduğunu göreceğiz.
Yine problem bitmiyor bu insan mobilde mouse işleci deaktif edilmiş bir browserda kullanıyorsa ne yapacağız?
Bunun çözümünde de yine front end olarak javascript kullanıp setInterval ile belirli saniyelerle sockete sinyal göndereceğiz.
Hepsi çözüldü görünse de bir problemimiz kalıyor sadece: o da kişi javascript kullanmazsa ne halt edeceğiz? Sitemizde hayaletler mi bulunacak? Dert etmeye lüzum yok siteyi javascript kullanmayan kişilere kapatacağız :)
Mobilden yazdığım için bu postta hatalar düşük cümleler olabilir mazur görün. Örnek kod göndermek isterdim fakat hem şuan elimde kodlar yok hem de zaten node.js ile yapmamıştım bu olayı.
Fakat browser focus blur gibi komutların tüm problemlerini bu mantık çözecektir
-
Ek olarak pm2da kullandığım komutları yazayım ingilizce kaynak olsa da kendi tabirimle güzel bir arşiv olur hem belki sana da faydalı olur
pm2 logs-> canlı olarak (nontime) kayıt girdilerini gösterir güzel bir ekranı var
pm2 list-> tüm aktif işlemleri görüntüler. Uptime restart count vs de veriyor olmazsa olmazım
pm2 restart 0-> söylememe gerek yok sanırım el aşinalığı gerek. 0 id kodu
pm2 monit-> cpu felan gösteren güzel bir görsel sayfa açar
pm2 flush-> tüm logları sıfırlar temiz bir log sayfadı görürsün fakat log dosyasının temizlenmesi için isim drğiştirip restart çekmek gerekiyor
pm2 reset-> listedeki tüm değerleri sıfırlar uptime restart count vs
Aklıma gelenler şimdilik bunlar. Bunlar sayesinde yönetim panelsiz sitemi yönetiyorum hoş oluyor çok sevdim komutlarla yönetmeyi :)
-
verdiğin fikir için çok teşekkür ederim by_TeT.. belli aralıklarda clientler "ben buradayım" mesajı gönderebilir dediğin gibi.. mouse işlemeye gerek yok gibi şimdilik hocam..
pm2 canmış ya :) çok sağol..
-
RockZs bunu yazdı
selamlar, biraz içimi dökeceğim, konu bir web-sitesini hayata geçirme hakkında..
aklıma bir web projesi geldi. Dünya'da benzeri yok gibi, bulamadım. şahsen kullanacağım ve başkalarının da kullanacağını düşündüğüm, uluslarası kullanımı olabilecek "basit" bir web uygulaması. bilmem, belki de ben abartıyorumdur..
lakin daha önce hiç web sitesi yapmadım "sayılır", daha doğrusu bunu hiç iş olarak görmedim, eş-dosta basit şeyler yaptım 1-2 o kadar.. birkaç ay önce JS 'ye giriş yaptım, şimdi Node.JS ile fln uğraşıp duruyorum. takdir edersiniz ki deneyimsiz biri için tek başına kodlamalarla uğraşmak pek de kolay olmuyor.
biraz biraz herşeyi çözdüm gibi oldu, frontend baya oturdu, sona yaklaştı (tasarım 2-3 kez değişti fln, sil baştan..) , backend devam ediyor.. ama içimde bir huzursuzluk var, başladığım işi bitiren biriyim ve yoruldum, bunu paylaşmak amacım. şöyle ki:
-node.js çok hızlı fakat yanlış bir sorguda patlıyor, duruyor (forever npm i var ama patlamasın işte, çalışsın diyorum; ileride denerken patlarsa nereden patladı, ne oldu bulmak zor olacak)
-db olarak redis tercih ettim, kaptım fakat şimdi rediste bir keyword'u arayıp, sonuçları göstermek felan diğer db lere göre daha zor gibi, bu ileride sorun olabilir, belki arama için bakşa bir db kullanabilirim,
-şimdi ben bu siteyi yapıcam, tutulursa 1-2 hafta sonra adamlar kopyasını yapacak, yani fikrin bi' değeri kalmadı gibi hakkaten, parası olan düdüğü çalıyor gibi bir durum var.. girdimi sağlam girmek lazım ki bu da en az kodlama kadar zor.
-cloud server mi kullanmalı, yoksa vps alıp geçmeli mi. node.js tek çekirdek destekliyor, sanırım çok çekirdek için cluster (ya da böyle birşey) yapmak gerekiyor. aynı şey Redis için de geçerli.. ya da agar.io da olduğu gibi gerek duyulursa load-balancing yapılabilir belki ama yine de çok çekirdekte çalıştırmayı bilmiyorum, db'yi ortak kullanmak lazım felan.. şimdilik oralara bakamıyorum..
-ilk kodlamam olduğundan kodlarda muhtemelen birkaç açık olacak, bu can sıkıcı olacak çünkü node.js çökmeye çok meyilli.
vs.. vs.. aklıma gelmeyen daha bir çok güncel ve potansiyel sorunumsularla bunalmış durumdayım.
amacım web sitesini sürdürmek de değil, siteyle ileride teknik olarak uğraşmak istemiyorum, bu benim işim değil, fakat bu fikri paraya çevirmek için de uğraşıp durdum. dediğim gibi başladığım işi bitiren biriyim ama bir hava almak, bu işi bilenlerle paylaşmak istedim, çevremde pek bu işlerden anlayan birileri yok.
acaba bu fikri satabileceğim birileri (bir ekip) var mı? proje oluşturup yatırımcı ile, ya da başka kişilerle uğraşmak/sunum yapmak/başvuru hazırlamak da zor geliyor. ayrıca güven meselesi vs..
kafam karışık, bu yüzden kusra bakmayın. sadece sizlerden gelecek önerileri/yorumları/tavsiyeleri merak ediyorum.
sevgiler..
Bu mesajı yazdıktan sonra yaklaşık 3 ay geçmiş. 3 ayda neler yaptığımı, sorunlara nasıl çözümler bulduğumu yazmak isterim, başkaları faydalanabilir.
-node.js çok hızlı fakat yanlış bir sorguda patlıyor, duruyor (forever npm i var ama patlamasın işte, çalışsın diyorum; ileride denerken patlarsa nereden patladı, ne oldu bulmak zor olacak)
demişim. evet node.js gerçekten "hızlı", amacı da bu zaten ve bu hız kullanıcı tarafından gelebilecek ya da programcı kaynaklı hata(error)/istisna(exception) 'ların oluşması için uygun bir zemin hazırlıyor. bu gibi durumlarda hataları çok iyi takip etmek gerekiyor ve node.js exception/hata durumlarında kendiliğinden çalışmayı durduruyor (bu engellenebilse de tavsiye edilmiyor : "An unhandled exception means your application — and by extension node.js itself — is in an undefined state. Blindly resuming means anything could happen. You have been warned." - http://nodejs.org/api/process.html#process_event_uncaughtexception) . Sunucu tarafında bol bol validation, sanitization yapıp, olabilecek tüm potansiyel hataları, açıkları düşünerek if 'li asenkron kod öbekleri yazmak gerekiyor. callback 'in mantığını biraz kavradıktan sonra çok da zor değil ama ciddi zaman istiyor. bir de kodun nerede senktron nerede asenkron çalışacağını bilmek önemli. node.js içindeki for döngülerinden hala uzak durmaya çalışıyorum.
forever, pm2 (özellikle bu paket "efsane") vb.. yazılımlar node.js'nin "patladığı" anlarda yardıma koşup, node.js 'yi tekrar çalıştıran faydalı yardımcılar ama node.js'in özellikle soket uygulamalarında (genellikle socket.io kütüphanesi ile) yaygın olarak kullanıldığını düşünürsek, önlemini almamışsanız uygulamanın yeniden başlaması ile tüm bağlantılarınızı kaybetmeniz içten bile değil.
hatayı bulmak o kadar da zor değilmiş. istenirse bunyan, winston gibi çok detaylı LOGlama yapabilen eklentiler rahatlıkla kurulup, kullanılabilir.
db olarak redis tercih ettim, kaptım fakat şimdi rediste bir keyword'u arayıp, sonuçları göstermek felan diğer db lere göre daha zor gibi, bu ileride sorun olabilir, belki arama için bakşa bir db kullanabilirim,
demişim. Redis'i tercih etmekle çok iyi bir iş yapmışım çünkü Redis bellek üzerinde çalışıyor (hıza çok etkili), diğer memory key-value "db"lere göre hem kalıcılık sağlıyor (yani bilgisayar açılıp-kapansa bile veriler silinmiyor, hem de dahili bir çok faydalı fonksiyonu var- listeleri sıralamak felan çok kolay ve işlemci dostu ayrıca faydalanabileceğim birçok uygun ücretli redis servisi de var.. zorluğu bana göre biraz zahmetli cluster edilmesi ama zaten "as a service" olarak kullanırsanız bunlarla uğraşmıyorsunuz. ayrıca tek çekirdek çalışıyor, yani işlemcinin 4 ayrı çekirdeği olsa da tek çekirdekte çalışıyor, her bir çekirdeğe ayrı redis kurup, cluster için master-slave 'le felan uğraşmak gerek.. burada benim için işler biraz karışıyor, Load Balancer'lar, heartbeat'lar, ve adını hatırlayamadığım birkaç terim daha devreye giriyor. Node.JS'de aslında tek çekirdekte çalışıyor fakat pm2 yazılımı cluster'ı node.js için neredeyse sorunsuz bir biçimde ayarlıyor.
-şimdi ben bu siteyi yapıcam, tutulursa 1-2 hafta sonra adamlar kopyasını yapacak, yani fikrin bi' değeri kalmadı gibi hakkaten, parası olan düdüğü çalıyor gibi bir durum var.. girdimi sağlam girmek lazım ki bu da en az kodlama kadar zor.
demişim. evet kopyasını yapmak 1-2 haftayı bile bulmayabilir. zaten tüm html insanların elinde olacak. node.js kısmı insanları biraz zorlayacaktır ama işi bilen biri rahatlıkla benzerini, belki daha iyisini bile yapabilir. siteyi iyi tanıtmak, başlangıçta reklam vermek vs. önemli tabi ama büyük paralar vermek de akıl karı gelmiyor. işin prodüksiyon öncesi kısmı kodlamadan biraz daha zor gibi. siteyi bir aksilik olmazsa çok yakında açacağım, kullanılırsa, insanlar faydalanırsa ne ala..
-cloud server mi kullanmalı, yoksa vps alıp geçmeli mi. node.js tek çekirdek destekliyor, sanırım çok çekirdek için cluster (ya da böyle birşey) yapmak gerekiyor. aynı şey Redis için de geçerli.. ya da agar.io da olduğu gibi gerek duyulursa load-balancing yapılabilir belki ama yine de çok çekirdekte çalıştırmayı bilmiyorum, db'yi ortak kullanmak lazım felan.. şimdilik oralara bakamıyorum..
demişim. VPS 'i baştan eliyorum çünkü başkalarıyla aynı kaynağı kullanmak, onu da kısıtlı kullanmak mantıklı gelmiyor ama olmaz da değil, denenebilir, ileride daha iyi sistemlere telafi edilir. cloud sistemleri (aws, amazon gibi..) acayip pahallı, ay sonunda nasıl bir fatura ile karşılacağınızı iyi kestirmeniz lazım. tabi buna göre de hizmet kalitesi sunuyorlar. altyapıyla fazla uğraşmak istemiyorum, kolaylıkla ölçeklendirebileceğim (scale) bir altyapı olsun diyorsanız heroku gibi platformlar tam size göre. ben şimdilik AWS 'den, Scaleway'den ve Redislabs'dan hizmet alarak siteyi açmayı düşünüyorum. Scaleway çok ucuza, yönetimi kolay, 2gb ram'li , 1.6ghz 4 çekirdek arm işlemcili dedicated server'ları 3 euro'dan veriyor (şu an üyelik alımları kapalı diye biliyorum). bunların önüne bir Load Balancer koyarsam beni bir süre rahatlıkla idare ederler ama araştırmalarım devam ediyor.. AWS'yi statik sayfa sunmak için tavsiye ederim, en azından o kısımda başınız ağrımaz. Dns yönlendirmesi başına 0.5 USD/ay 'lık bir ücreti var. Bantgenişliğinden de biraz para kesecektir, onu da ayrıca hesaplamak lazım. Bana fazla bir bant genişliği lazım değil. Ayrıca CDN de kullanmak istiyorum. Hatta bootstrap, jquery vb.. JS kütüphanelerinin hepsini kendi CDN'imde barındırayım diyorum ama bakalım..
-ilk kodlamam olduğundan kodlarda muhtemelen birkaç açık olacak, bu can sıkıcı olacak çünkü node.js çökmeye çok meyilli.
demişim. illa ki açık olacaktır ama elimden geleni yapıyorum. şu andan sonra sitenin başına gelecek her şey bana yeni birşey öğretir. kodlara hakim oldukça gözünüzdeki korku da azalıyor. çökme konusuna değinmiştim.
Bunları yazmak istedim. Başta By_TeT olmak üzere yardımlarını esirgemeyen arkadaşlara çok teşekkürler.
Okuyan varsa teşekkür eder, sevgiler dilerim..
RockZs tarafından 30/Kas/15 04:56 tarihinde düzenlenmiştir -
google'da ara: girişimcilik