Własny serwis społecznościowy - czy łatwo zrobić?

13 january 2022
Jakub Rojek Jakub Rojek
Zdjęcie autorstwa Tracy Le Blanc z Pexels (https://www.pexels.com/pl-pl/zdjecie/osoba-trzymajaca-iphone-pokazuje-folder-sieci-spoleczne-607812/)
Categories: Industry, Programming, Web, Social media

Portale, które umożliwiają nam kontakt z innymi użytkownikami w celu wypowiadania się, wymiany opinii czy dzielenia ciekawymi rzeczami, istnieją już od naprawdę dawna. Jako internauci przeszliśmy wiele form takiej komunikacji - czaty, grupy dyskusyjne, fora internetowe... Aż w którymś momencie technologia pozwoliła na coraz bardziej zaawansowane witryny, pozwalające dyskutować większej liczbie osób. Obecnie portale społecznościowe nie są już dla nas ani nowinką, ani czymś atrakcyjnym. Głównie dlatego, że tak wsiąknęły do naszego życia, że dla niektórych są codziennością i wręcz "obowiązkiem", z którego nie zdają sobie sprawy, a dla innych - czymś, z czym mogą walczyć.

Tak szerokie rozpowszechnienie się "social mediów" pociąga za sobą też trudności po stronie developerów - obecnie to tak ogromne przedsięwzięcia, że niełatwo przebić się ze swoim, potencjalnie innowacyjnym pomysłem na internetowe miejsce dla społeczności. W efekcie, mimo że portali pojawia się całkiem dużo, to większość z nich nie jest w stanie utrzymać się na rynku przez dłuższy czas, nawet jeśli wprowadzają coś nowego. Swego czasu taką nowinką był Snapchat, którego pomysły zostały wchłonięte przez inne serwisy. Obecnie na topie jest TikTok, który rzeczywiście już dość długo utrzymuje się na powierzchni poprzez ciekawy (czy wartościowy - to już inna sprawa) pomysł na siebie. Niedawno pojawiła się wersja testowa Clubhouse'a, który stawia na komunikację głosową, z pominięciem tekstu.

Tym niemniej, pomysłów na serwisy społecznościowe jest więcej niż ich faktycznie powstaje. Nie jest to odkryciem Ameryki, ale warto się zastanowić, z czego to wynika. Przecież potencjalnie wydaje się, że taki portal jest dość prosty w budowie i nieskomplikowany pomysł może być nawet dobrym ćwiczeniem dla programisty, a przy okazji może z tego powstać coś ciekawego. Tak samo, jak dla młodego twórcy gier wideo takim przetarciem mogłaby być przecież prosta produkcja MMORPG, a wszyscy dziwnym trafem doradzają np. platformówki. Gdzie zatem jest haczyk i czy faktycznie stworzenie serwisu społecznościowego może być łatwe?

Pewnie domyślacie się odpowiedzi i w dużej mierze udzieliła nam jej premiera portalu Albicla.com na początku 2021 roku. Analizą tego przypadku zajęła się w sumie cała polska społeczność internetowa, a ja chciałbym szczególnie polecić artykuły Tomasza Zielińskiego na jego blogu InformatykZakładowy.pl (pierwszy i drugi tekst). Spróbujmy przeanalizować taki projekt na spokojnie, gdyż uważam, że jest to dobre ćwiczenie (nawet myślowe), pomagające rozwijać swoje umiejętności w zakresie projektowania architektury.

Pomysł i podstawowa funkcjonalność

Każdy chyba się zgodzi, że na każdą aplikację (a szczególnie na portal społecznościowy) trzeba mieć dobry pomysł. Należy wiedzieć, dla kogo będzie to serwis, jakiego charakteru treści użytkownicy będą mogli w nim zamieszczać, co z tymi postami będzie można robić itd. Weźmy jednak pod uwagę podstawową, wręcz szkolną koncepcję i wykorzystajmy formę opisową, aby ją zaprezentować:

Jako użytkownik mogę w systemie przeglądać posty zamieszczone przez innych użytkowników na ich profilach. Aby samemu publikować treści, muszę zarejestrować się, potwierdzić swoje konto i zalogować się. Jako uwierzytelniony użytkownik mam do dyspozycji specjalną stronę (nazywaną "ścianą"), na której system będzie wyświetlał mi posty umieszczone przez profile, które dodałem do obserwowanych. Każdy post mogę polubić, podać dalej na swoim profilu oraz umieścić komentarz.

Jak widać, w teorii funkcjonalność wygląda dość prosto - widzimy tutaj:

  • wyświetlanie profilu,
  • wyświetlanie postów (według filtrowania po profilu lub obserwacji),
  • rejestracja,
  • logowanie się,
  • opublikowanie postu,
  • wyświetlenie ściany,
  • polubienie postu,
  • podanie dalej postu,
  • skomentowanie postu.

Oczywiście, ta lista nie jest zamknięta, gdyż zapewne chcielibyśmy także, aby użytkownik mógł cofać swoje akcje, przypomnieć sobie hasło, wylogować się i móc robić inne operacje. Tym niemniej, nadal to wszystko brzmi, jak dość prosta funkcjonalność, której technicznie podołałaby nawet osoba, która dopiero jest na drodze do zostania programistą i to nawet pracując nie na przestrzeni roku, ale kilku miesięcy lub (przy uproszczonej wersji) tygodni. Prawdę mówiąc, wygląda to na dobry projekt na zaliczenie semestru z konkretnego przedmiotu lub temat na pracę inżynierską.

Jednak ten artykuł nie miałby sensu, gdyby wszystko okazało tak proste, prawda? Po pierwsze, każda szeroko używana aplikacja wymaga tego, aby zaimplementowane funkcje były dobrze przetestowane i poprawnie działały, w efekcie czego do czasu realizacji należałoby doliczyć jeszcze konieczność weryfikacji i dokonania poprawek. A po drugie - powyższa lista to tylko wierzchołek góry lodowej, o istnieniu której trzeba pamiętać, gdyż przychodzi w pakiecie wraz z decyzją o rozpoczęciu tworzenia i upowszechnienia portalu społecznościowego.

Teraz omówimy sobie, co składa się na tę górę lodową.

Wydajność oraz przepustowość

Funkcjonalność jest najważniejsza, ale to nie wszystko. Czy korzystalibyśmy z Facebooka, Twittera czy Instagrama, gdyby działały poprawnie, ale bardzo wolno? Zauważcie, że wyświetlenie postów na ścianie oznacza wykonanie zapytania do bazy danych z odpowiednimi kryteriami. Te ostatnie mogą być dość skomplikowane, w zależności od formy, w jakiej utrzymujemy dane np. o obserwowanych profilach. Co więcej, takich zapytań może być wiele w każdej sekundzie (dla każdego użytkownika osobno), a w dodatku co jakiś czas system powinien sam odświeżać informacje, pokazując, czy odbiorca dostał nową wiadomość do wyświetlenia. A żeby tego było mało, to wszystko działa na bazie danych, która jest cały czas obciążona.

Oczywiście, przy prostym serwisie społecznościowym dla kilkunastu lub kilkudziesięciu osób, te ograniczenia nie mają większego znaczenia, ale portal społecznościowy nie powstaje z myślą o ograniczonej liczbie osób, tylko o tysiącach, milionach. W tym momencie należy już zadbać o wydajność różnych operacji, szczególnie pobierania danych (szybkość wyświetlania informacji), jak i przepustowość (zdolność do obsłużenia dużej liczby osób w jednym momencie). Jest to blisko związane ze skalowaniem, o którym powstał tekst jakiś czas temu. Jeśli nasz portal społecznościowy będzie wolny, zniechęci do siebie użytkowników, którzy poszukają alternatywy.

Jakiekolwiek działania w tym zakresie bardzo wpływają na wewnętrzną konstrukcję aplikacji, a także formę przechowywania danych. To wiąże się z wieloma zmianami architektonicznymi lub (co lepsze) projektowaniem systemu od początku w określony, niekoniecznie trywialny sposób. Dodatkowo, prawdopodobnie z danymi związane będzie zbieranie wielu statystyk i towarzących informacji, przez co ich zapis i odczyt będzie musiał być cache'owany, a to pociąga za sobą konieczność przemyślenia kwestii synchronizacji podsystemów i niekiedy kompromisu pomiędzy szybkością działania a dostarczaniem spójnych wiadomości na czas. Przykładowo, na Twitterze istnieją sytuacje, w których można zobaczyć tego samego tweeta obok siebie na dwóch timeline'ach, gdzie mają różne statystyki lub nie zgadzają się chwilowo powiadomienia z liczbą polubień - to właśnie efekt kompromisów.

Zatem stworzenie poprawnie działającego serwisu społecznościowego to rzeczywiście zadanie niekoniecznie skomplikowane i pracochłonnie programistycznie. Jednak włączenie do tego odpowiedniej optymalizacji koniecznej do obsłużenia wielu osób naraz (którzy są przecież sercem takiego portalu) wymaga już odpowiedniej wiedzy i prób architektonicznych, bardzo wpływających na późniejszą optymalizację.

Bezpieczeństwo

Wyzwania stojące obecnie przed osobami zajmującymi się aplikacjami w dużej mierze koncentrują się na ich zabezpieczaniu na różnych płaszczyznach. Inne obszary są brane pod uwagę przy oprogramowaniu dla wąskiego grona odbiorców (np. dla konkretnych firm), a inaczej wygląda podejście przy systemach dla masowego użytkownika. Zwłaszcza, że w portalach społecznościowych często dochodzi do wymiany wiadomości o charakterze prywatnym, a także próbach podejrzenia w systemie czegoś, do czego dana osoba nie powinna mieć dostępu. I nie ma tutaj znaczenia, że użytkownicy czasami sami są sobie winni, publikując w Internecie wrażliwe informacje - zadaniem programistów i administratorów jest sprawić, aby system możliwie skutecznie chronił przed nieuprawnionym dostępem i próbami "rozsadzenia" portalu.

Nie od dzisiaj też wiadomo, że kwestie bezpieczeństwa wpływają na wygodę tworzenia aplikacji i wydajność jej działania. Z jednej strony, trzeba utrzymać odpowiedni poziom zaufania użytkowników, ale z drugiej - mechanizmy nie mogą diametralnie wpłynąć na komfort użytkowania aplikacji (chyba że na tym polega siła serwisu i zakładamy, że użytkownicy są tego świadomi). Zatem jest to kolejne wyzwanie architektoniczne, które wpływa na proces implementacji.

Jeden z punktów, na który trzeba zwrócić uwagę, to treści publikowane przez użytkowników. Z jednej strony możemy mieć tutaj do czynienia ze "spryciarzami", którzy za pomocą odpowiednich postów spróbują zmusić system do niepoprawnego działania. Do tego zalicza się też np. spamowanie, przed którym trzeba się zabezpieczyć (a co znowu ma wpływ na wydajność). Z drugiej strony, na pewno będziemy mieli do czynienia z działaniami niezgodnymi z regulaminem - sam fakt istnienia takich treści zostanie omówiony w innym akapicie, ale siłą rzeczy nie wszystko zostanie w porę zablokowane, co może wpłynąć nawet nie tyle na bezpieczeństwo, co odbiór serwisu w oczach użytkowników oczekujących tego bezpieczeństwa. Zwłaszcza, że - tak jak już pisałem - portale społecznościowe mają tutaj rzeczy do poprawienia.

Estetyka i przystępność

Portale społecznościowe muszą być ładne i estetyczne. Nie zawsze przyciągają wzrok samym swoim layoutem, ale wyświetlana na nich treść powinna być wyraźna, a dostępne opcje odpowiednio oznaczone, biorąc pod uwagę fakt, że użytkownicy będą bardzo różni. I mimo że nie zawsze na ekranie jest dużo elementów, to muszą być zorganizowane w logiczny sposób, pokazujący odbiorcy, że tutaj się odnajdzie niczym w domu. A twórcom takich systemów zależy właśnie na tym, aby użytkownicy chętnie wracali do ich portali.

Co więcej, portale społecznościowe są o tyle specyficzne, że użytkownicy wchodzą na nie często z nudów, aby poprzewijać wiadomości i dowiedzieć się, co tam ciekawego napisali znajomi bądź profile, które obserwują. To oznacza, że treść jest wyświetlana w najróżniejszych warunkach (np. w komunikacji miejskiej), na różnych urządzeniach i za każdym razem musi być wyraźnie wyświetlona, a serwis wygodny w użytkowaniu. To wyzwanie dla osób zajmujących się interfejsem oraz tzw. doświadczeniem użytkownika i ponownie wymaga dobrego opracowania architektury, tym razem frontendu.

Jakby tego było mało, w grę wchodzi też decyzja o ewentualnej (a często obowiązkowej) aplikacji mobilnej i możliwościach, które oferuje. Jednak w tym przypadku niekiedy sytuacja się upraszcza, ponieważ istnieją portale społecznościowe, które działają tylko i wyłącznie na smartfonach lub udostępniają tam lwią część funkcjonalności.

Wolumen danych

Jest to temat związany z sekcją o wydajności i przepustowości, ale trzeba wyraźnie podkreślić, że w krótkim czasie w takim portalu twórcy będą mieli do czynienia z ogromną ilością danych. To skutkuje koniecznością zadbania o odpowiednią strukturę bazy danych, indeksowanie kolumn i konstrukcję zapytań, aby ich wykonywanie nie trwało wieki. Ale to nie wszystko.

Dużo danych oznacza również dużo powiadomień i to w różnej formie, w zależności od profilu portalu - wyskakujące liczby w interfejsie, powiadomienia push, maile, SMS-y itd. A to wszystko musi zostać wysłane tak, aby kanały komunikacyjne nie zostały zablokowane. Nie wszyscy sobie też życzą otrzymywania wszystkich informacji - należy zatem wdrożyć odpowiedni podsystem, w którym użytkownik będzie decydował o tym, o czym ma być powiadamiany.

Niekiedy chcemy też filtrować informacje w całym portalu po hashtagach czy po prostu słowach kluczowych - zachodzi zatem potrzeba przeszukiwania zamieszczanych treści i to w taki sposób, aby ta operacja nie trwała godzinami. Zatem być może od początku trzeba zdecydować się na konkretny system do zarządzania bazą danych lub kilka silników naraz, co ma swoje konsekwencje i na pewno nie ułatwia tworzenia portalu.

Wraz z tym zachodzi potrzeba pobierania statystyk (choćby liczby polubień), gdzie ponownie mamy kompromis pomiędzy zliczaniem tego na bieżąco (raczej niewykonalne w dużych portalach) a przechowywaniem zapisanych wcześniej wartości, być może nieaktualnych w momencie wyświetlenia. Co więcej, odpowiedni model biznesowy może wymagać zbierania wielu danych o użytkownikach (pomińmy na chwilę kwestie RODO i polityki prywatności), których nie widać na pierwszy rzut oka - te informacje muszą zostać gdzieś zapisane, a następnie wykorzystane, a zatem zachodzi potrzeba magazynowania naprawdę ogromnej ilości informacji.

Administracja

Patrzymy cały czas pod kątem technikaliów, jednak pamiętajmy, że portal społecznościowy to nie tylko kwestie techniczne. Oczywiście, każdy portal wymaga regulaminów i obsługi, ale chyba nie doceniamy zespołu konsultantów i analityków, który stoi za każdą "społecznościówką" i pozwala jej funkcjonować oraz zarabiać. Pamiętajmy bowiem, że obecnie takie serwisy to nie tylko miejsce do wymiany informacji pomiędzy znajomymi, ale także wręcz platformy marketingowe dla firm, które opierają na nich czasem cały swój biznes (czy słusznie, to już inna kwestia).

Potrzeba zatem ludzi, którzy przygotują i odpowiednio będą aktualizować regulaminy (m.in. sekcje dotyczące danych użytkowników, co jest teraz bardzo istotne), moderować treści, odpowiadać za wsparcie, analizować rynek i odbiorców... To oznacza naprawdę duży zespół, który na początku może być niewielki, ale wraz z rozwojem portalu i dotarciem na niego użytkowników będzie miał naprawdę pełne ręce roboty. Zwłaszcza moderatorzy, którzy muszą zmagać się nie tylko z dużą ilością danych, ale też nieprzyzwoitymi treściami, które muszą obejrzeć przed oceną materiału, a już wspomnieliśmy o tym, że użytkownicy potrafią być złośliwi.

Wróćmy jeszcze na chwilę do osób technicznych - przy chęci obsługi bardzo dużej liczby użytkowników, potrzebna jest zaawansowana architektura i wiele serwerów, co oznacza znaczne rozbudowanie pionu odpowiedzialnego za administrowanie infrastrukturą. Także programiści mają co robić - samo stworzenie portalu może nie wydaje się aż tak skomplikowane (co jest, oczywiście, złudne), ale potem każda poprawka musi być wprowadzana ostrożnie. Zazwyczaj portale mają też wiele podsystemów związanych z rzeczami, które widzą np. tylko partnerzy biznesowi lub administratorzy danych. To wielka machina, która wraz z dużą popularnością wymaga dużych zasobów ludzkich.

Model biznesowy

W momencie, kiedy tworzymy aplikację bardziej dla nauki i zabicia czasu, nie myślimy o tym, w jaki sposób mogłaby ona zarabiać, jednak przy jakimkolwiek przedsięwzięciu biznesowym ta kwestia jest fundamentalna i zdarzało się już, że portale upadały przez brak zdecydowanych działań w tym zakresie. Model bzinesowy jest istotny, gdyż musi uwzględniać zarówno popularność portalu (a zatem jego zamknięcie tylko dla płacących może być gwoździem do trumny), jak i gotowość użytkowników do przelewania środków. Nie bez powodu wiele serwisów polega na swoich reklamach, gdyż daje to złudne wrażenie darmowości dla wielu milionów odbiorców, podczas gdy każdy zostawia swój ślad w rodzaju danych, które są później przetwarzane. To też pokazuje, że wraz z decyzją o sposobie zarabiania na portalu, muszą iść konkretne decyzje techniczne, projekt przechowywania i obsługi informacji itd. Aktywnych serwisów społecznościowych byłoby naprawdę wiele, gdyby tylko było więcej kreatywnych pomysłów na wykorzystanie ich w celach zarobkowych. A tutaj poległy już takie tuzy, jak np. Google ze swoim Google+.

Podsumowanie

Tworzenie własnego serwisu społecznościowego może być ciekawym doświadczeniem i ćwiczeniem dla programistów, gdyż pozwala na szlifowanie swoich umiejętności na bazie fascynującego projektu. Musimy jednak pamiętać, że czymś innym jest poprawnie działający serwis społecznościowy, a co innego kryje się pod DOBRYM serwisem społecznościowym. Ten drugi wymaga zazwyczaj znacznie bardziej rozbudowanej architektury, co z kolei powoduje wydłużenie procesu realizacji lub pójście na kompromis w kilku kwestiach. I to nadal może być dobre ćwiczenie oraz doświadczenie, tylko pytanie, czy opłaca się do niego podchodzić w momencie, gdy zespół nie dysponuje odpowiednimi zasobami i pomysłem na ich transformację w zysk.

Pozdrawiam i dziękuję - Jakub Rojek.

We like to write, even a lot, but on a daily basis we develop web and mobile applications. Check some of the programs we have made.

About author

Jakub Rojek

Lead programmer and co-owner of Wilda Software, with many years of experience in software creation and development, but also in writing texts for various blogs. A trained analyst and IT systems architect. At the same time he is a graduate of Poznan University of Technology and occasionally teaches at this university. In his free time, he enjoys playing video games (mainly card games), reading books, watching american football and e-sport, discovering heavier music, and pointing out other people's language mistakes.

Jakub Rojek