Serwis społecznościowy - jakie technologie, load balancing

0

Cześć wszystkim. Mam w planach napisać serwis społecznościowy, dlatego chciałbym dowiedzieć się coś o load balancing'u, i miałbym kilka pytań o technologie do takiego serwisu.
Możemy założyć, że w serwisie byłoby kilkadziesiąt tysięcy użytkowników w jednym momencie (online). Chciałbym również mieć ten serwis w formie aplikacji, najpierw na Androida (wiadomo czemu).
Obecnie potrafię pisać w PHP i używam bazy danych MySQL, nie znam żadnego c/ruby/pythona/asp net.

Tak wiem, wszystko zależy od skryptu, ale pomińmy tę kwestię. Pamiętam o cache więc to również możemy pominąć.

  1. Czy mogę taki serwis napisać w PHP (framework Kohana - raczej lekki)? Jak PHP ma się do skalowalności, w czym w ogóle jest problem z PHP przy load balancingu, skoro i tak load balancer rozdziela ruch? - bo nie rozumiem co ma do tego język i kod.
  2. Jeszcze raz o tym load balancingu - jak to w końcu działa? W kodzie strony coś się zmienia? Jeśli będę korzystał z chmury, np. Oktawave, to czy ułatwia to load balancing np. w PHP?
  3. Czy baza danych MySQL będzie wystarczająca? Co się będzie działo, jeśli osiągnie ten swój "próg" kilku milionów rekordów? Jaką bazę danych zalecacie, i czy ciężko się przerzucić z MySQL na np. PostgreSQL (o ile się nadaje ta baza do takiego serwisu)?
  4. Mam w planach funkcję czatu publicznego, jak np. na fotce - z podziałem na "pokoje" i ludzie mogą na żywo pisać - jak najlepiej takie coś ugryźć w PHP, by nie zarzynało serwera i bazy przy sporej liczbie użytkowników?
  5. Chcę również zrobić aplikację dla tego serwisu, więc będę musiał ruszyć również coś innego niż PHP - jaki język proponujecie, bym nie musiał uczyć się rok czasu, aby napisać taką aplikację (zakładki jakieś, posty, wiadomości - podobne rzeczy jak w apce Facebooka)? Do pisania apek na androida jest chyba Java, ale kiedyś czytałem, że można w Pythonie to napisać i przy okazji zmieniając maszynę interpretującą/kompilator (?), można utworzyć od razu aplikacje na kilka systemów mobilnych.
27
  1. Możesz. Nikt z tego korzystać nie będzie więc problemy wydajności z jakimi boryka sie pejsbuk cię nie dotyczą. Problem skalowalności wynika z tego ile cykli procesora potrzeba do obsłużenia zapytania użytkownika. To nie ma znaczenia że masz milion serwerów w load balancerze, bo konkretny request obsługuje tylko jeden z nich.
  2. W kodzie zmienia sie tyle że musisz mieć na uwadze np. rozproszone sesje / bezstanowość. Użytkownik wykonuje requesty i każdy z nich może obsługiwać inna maszyna oddalona od poprzedniej o setki kilometrów. Nie mozesz więc np. zapisać sobie czegoś w "pamięci" programu bo inny serwer tej informacji nie będzie miał
  3. Należy to sensownie zaprojektować.
  4. Niekonieczne musisz coś dziwnego robić. Możesz wrzucić tam webview, na stronce zrobic wersje "mobile" i viola. Są rozwiązania cross-platform (ionic, xamarin, phonegap) jeśli chcesz natywne aplikacje, ale to nie jest tak że piszesz jeden kod a to ci generuje aplikacje na każdy system. Każda platforma wymaga trochę własnej pracy.

Twój post brzmi tak:

Cześć wszystkim. Mam w planach zbudować myśliwiec odrzutowy, dlatego chciałbym dowiedzieć sie coś o sile nośnej i udźwigu uzbrojenia, i miałbym kilka pytań o technologie do takiego myśliwca.
Mozemy założyć, że samolot ma być porównywalny z F-18. Chciałbym również żeby był wielozadaniowy, zdolny do bombardowania oraz walki powietrznej, najpierw wystarczy bombardowanie (wiadomo czemu).
Obecnie potrafie budować samoloty z papieru oraz układać klocki lego.

Tak wiem, wszystko zależy od projektu myśliwca, ale pomińmy tę kwestię. Pamiętam o silnikach więc to również możemy pominąć.

  1. Czy mogę taki samolot zbudować z drewna (sklejka - raczej lekka?). Jak drewno ma się do siły nośnej samolotu, w czym w ogóle jest problem z drewnem przy udźwigu samolotu, skoro i tak to silniki popychają samolot - bo nie rozumiem co ma do tego kształt samolotu oraz materiały.
  2. Jeszcze raz o tej sile nośnej - jak to w końcu działa? W kształcie samolotu coś sie zmienia? Jeśli będę korzystał z paździerzowej sklejki to czy ułatwi to dźwiganie głowic jądrowych?
  3. Czy konstrukcja dwusilnikowa będzie wystarczająca? Co się będzie działo, jeśli osiagnie ten swój próg "kilku głowic jądrowych? Jakie silniki zalecacie i czy ciężko się przerzucić z silników turbofan na ramjet (o ile się nadaje do takiego samolotu)?
  4. Mam w planach funkcje zdalnego sterowania jak w dronach - ze sztuczną inteligencją i można sterować na żywo lub tylko oglądać wykonanie zadania - jak najlepiej takie cos ugryźć, by optymalnie wyznaczać trasę nalotu przy sporej liczbie celów?
  5. Chcę również umożliwić walkę powietrzną dlatego samolotu więc będę musiał ruszyć również cos innego niż bomby - jakie rakiety powietrze-powietrze proponujecie, bym nie musiał sam przez rok projektować własnych (zasięg 15km, samonaprowadzanie - podobne rzeczy jak w F-22)? Do budowania rakiet jest chyba tytan, ale kiedyś czytałem że można z aluminium to wykonać i przy okazji zmieniając kolor farby/wzorek (?), można utworzyć od razu rakiety które działają w atmosferze jak i w próżni.
1

pewno i tak się skończy na jakimś blogu na wordpress :)

4

Ambitne - kiedy już to napiszesz proponuję coś mniej legalnego. Poczytaj o API, które wystawia facebook , Selenium i różne biblioteki są też do fb dedykowane do tego. Napisz sobie facebookowego crawlero-spidera (lecz nie jest to łatwe, bo fb robi różne tricki i zabezpiecza się przed tym) żeby trochę pochodził na fb i na samym początku zasilił Ci bazę pierwszymi "fejkowymi" użytkownikami z fb. Na początku symuluj ruch na serwisie i zrób generator fejkowych kont, fejkowego wszystkiego. Musisz to cwanie przemyśleć i dodać ciekawe opcje.
To się sprzeda adriano. Pozdrawiam

1

Wiedziałem, że w odpowiedziach do takiego tematu zobacze same posty typu "rzuć to". a ja ci powiem tak. Rób to. Masz swój cel więc rób. Po pierwsze tworząc go nauczysz się bardzo wielu nowych rzeczy a to jest najważniejsze. Po drugie nigdy nic nie wiadomo co się z tym stanie. Podam ci 2 przykłady:

  1. Zrobiłem portal społecznościowy jako swója pierwsza porządna strona w php. Oczywiście po przejrzeniu kodu zrobiłem ctr+A, del. I napisałem go od początku. Działa już 4 lata. Co prawda żyje z dotacji ale żyje i jest na drugiej pozycji takich portali w Polsce.
  2. Robiłem portal dla kolegi. zawarł w nim wiele moich pomysłów. Co prawda nigdy nie zyskał jakiejś wielkiej rzeszy użytkowników, ale 1000 kont założonych przez rok wystarczyło by pojawił się większy gracz i kupił portal za 80tys zł. Zarobić 80tys zł po roku działania serwisu odliczając powiedzmy te 10tys na koszty prowadzenia i stworzenia serwisu? Nie jeden by chciał.
0

@Shalom, sprawdziłem phonegap i spodobał mi się bardzo, ale wyczytałem, że nie nadaje się do gier i do serwisów, które będą miały dużo contentu, chociaż to były jakieś artykuły chyba z przed 2 lat - czy może coś wiesz na ten temat? I dlaczego nie nadaje się do gier? Jakieś problemy z javascriptem?
Całą logikę serwisu musiałbym napisać w JS, lub pobierać niektóre "przemielone" dane przez API z wersji przeglądarkowej?
Sam webview to raczej mało, ludziom średnio chce się wchodzić przez przeglądarkę mobilną, wydaje mi się, że wolą jednym klikiem przez apkę odwiedzać ulubione usługi.

0

skoro jestesmy w temacie "polskich serwisów społecznościowych", to polecam:
http://extra.natemat.pl/czemu-upadlo-grono

drugi opis:
http://www.spidersweb.pl/2012/04/upadle-legendy-polskiego-internetu-grono-net.html

generalnie nawet im to wyszło (3jce facetów) , ale zabrakło pomysłu na monetyzację i "zarobienie na tym"

swoją drogą to ja pamiętam grono.net, jakby tak dopracować i przemyśleć parę spraw, znaleźć inwestora, to by było lepsze od facebooka (na tamte czasy)

0

generalnie nawet im to wyszło (3jce facetów) , ale zabrakło pomysłu na monetyzację i "zarobienie na tym"

@NieGooglujMnie Wydaje mi się, że pomysł na monetyzację to nie wszystko (przecież wstawili reklamy, potem konta premium a i tak upadli). Problem z Gronem był inny. Gdzieś koło 2009 roku serwis ten został strasznie zaniedbany. Miało poważne braki (np. wydajność - na ładowanie jednej podstrony na Gronie czekało się czasem z kilkanaście sekund. To po prostu męczyło i zniechęcało do używania). Nie wiem czemu, ale za cholerę nie było to zoptymalizowane, natomiast programiści gronowi zamiast łatać bugi/polepszać wydajność zajmowali się masowym wdrażaniem nowych designów / nowego interfejsu na siłę bez słuchania użytkowników, którzy z całej siły protestowali przeciwko ciągłym zmianom i upodobnianiem serwisu do Facebooka.

Na Gronie było jednak parę fajnych rzeczy, przede wszystkim były tam prawdziwe fora("grona") dyskusyjne (wyglądało to tak mniej więcej jak na Goldenline), gdzie toczyły się dyskusje w jakiejś uporządkowanej formie, a nie tak jak teraz na fejsie, że jest jakaś durna ściana i zamiast wątków są komentarze. Przecież to co jest na fejsie to jakaś parodia portalu XD

Miało to też swój klimat, i w sumie szkoda, że twórcy Grona sami swój portal zaciachali (smuci mnie to też o tyle, że zrobiłem na gronie aplikacje, która potem się stała drugą najpopularniejszą na całym Gronie, i przez to, że Grono zaczęło upadać, to mi zyski spadały z reklam, aż w końcu musiałem wyłączyć aplikację, ponieważ przestała na siebie zarabiać...).

swoją drogą to ja pamiętam grono.net, jakby tak dopracować i przemyśleć parę spraw, znaleźć inwestora, to by było lepsze od facebooka (na tamte czasy)

Wydaje mi się, że największym błędem Grona było po prostu to, że olali swoich użytkowników, nie słuchali ich, tylko robili wszystko na siłę. To bardziej zła polityka niż brak kasy chyba (tam coś jest o serwerach w tym artykule, że niby potrzebowali serwerów - okej, tylko, że np. kiedyś z ciekawości spojrzałem w Firebugu czemu się Grono tak długo wczytuje - i okazało się, że jest jakiś bug, który polegał na tym, że każda strona 2 razy się wczytywała - coś z iframe nie tak im poszło. No i różne inne miejsca, gdzie nawet nie widząc kodu serwerowego(a jedynie frontend) można by przypuszczać, że ten serwis nie został należycie zoptymalizowany.

A administracja miała to w głębokim poważaniu, bo wdrażali nowy design i zmieniali kolorystykę grona.

Niestety ścieżką podobną do Grona poszedł również Goldenline, chociaż tu już chyba w ogóle twórcy postawili kreskę na nim. Może się poddali uznając, że i tak przegrają z Linkedin więc nie ma co nawet konkurować?

0

Grono padło, Goldenline zdycha, a jeszcze było przecież PROFEO.pl (odpowiednik GL, który padł jeszcze wcześniej) - ktoś pamięta?

Ogólnie jak się nie ma wsparcia (sponsorów, kolesi i zaprzyjaźnionych mediów) tak jak ma F. to nie ma co zaczynać takiego portalu :)

Obecnie potrafię pisać w PHP i używam bazy danych MySQL, nie znam żadnego c/ruby/pythona/asp net.

Naucz się ROR lub coś podobnego, bo od PHP powoli się odchodzi.

Druga sprawa, są gotowe skrypty portali społecznościowych za kilkaset $ masz całkiem niezły. Nie nauczysz się tworzyć takich portali w ten sposób, ale będziesz mniej wku..... jak to wszystko się nie uda.

1

Niestety ścieżką podobną do Grona poszedł również Goldenline, chociaż tu już chyba w ogóle twórcy postawili kreskę na nim. Może się poddali uznając, że i tak przegrają z Linkedin więc nie ma co nawet konkurować?

Właśnie zauważyłem, że GL podupada - coraz mniej się tam dzieje, fora jakieś takie puste, nie przybywa wątków. Szkoda, że serwis pada.

A co do LINKEDIN - niby strona super (w sensie liczby użytkowników i pozycji na rynku), ale nie do końca. Wchodzę szukam pewnej grupy. Są setki grup programistycznych, dziesiątki podgrup, podgrupy podgrup i na końcu jest ...znalazłem grupę - ale,... ma tylko 5 członków :D

LINKEDIN ma straszny bajzel w tych (pod)grupach, layout całej strony też cienki jak na serwis za grube miliony dolców. Ze względu, że jest to serwis angielskojęzyczny to raczej dla GOLDENLINE stanowi średnią konkurencję.

0

Naucz się Node.js jeden język (JS/ES6) do wszystkiego lub Ruby, Python, PHP 7 z frameworkami.

0

skoro w PHP jest problem z sesjami przy skalowaniu, to jak to rozwiązuje się w innych językach, np. w Pythonie lub Javie?

0

Ale w czym masz problem? Każdy liczący się framework ma możliwość ustawienia domyślnego sposobu składowania danych sesyjnych w plikach konfiguracyjnych, w czystym PHP piszesz tylko swój session save handler.

Alternatywy:

MySQL
PostgreSQL
Memcached
Redis
SSDB
MongoDB
Cookie

W tym ostatnim też można składować sesje (nie mają jednak swojego session id), pytanie w jakich przypadkach (bezpieczeństwo i pojemność cookie)?
To samo by się odnosiło do składowania cache, bo też domyślnie jest File Store i też domyślnie można w configu w którymś frameworku zmienić na Memcached, Redis albo np. SSDB.

0

Co do load balancingu - to zależy co chcesz load balansować i na jakim poziomie.

Możesz zrobić load balancing na poziomie L3 (maglev, teoretycznie, jak masz dużą infrastrukturę), L4 (np load balancery komercyjne), L7(nginx albo komercyjne) czy na poziomie samej aplikacji (jak robi to cassandra czy riak - metoda consistent hashing, żeby rozproszyć dane w klastrze).

Zdroworozsądkowo można założyć, że przed każdym serwisem powinien stać jakiś load balancer i z tą myślą zaprojektowałby aplikację.
Przykładowo nginex przed bezstaowymi serwisami. Jako baza baza casssandra, to (przykładowo) pozwoli Ci zmniejszyć poziom konsystencji do ewentualnej w zamian za availability, partition tolerance i dodatkowo skorzystać z load balancingu wynikającego z równomiernego rozproszenia danych. To załatwia load balancing na poziomie lokalnym, globalnie chcesz mieć inne serwery na rożne rejony, teoretycznie można do tego wykorzystać DNSy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1