Jak działa MindTheClub

System, który możesz zrozumieć

Większość komunikatorów prosi Cię o zaufanie. Mówią, że Twoje wiadomości są szyfrowane, dane bezpieczne, a prywatność ważna — a potem przepuszczają wszystko przez swoje serwery, gdzie Twoje treści istnieją w formie, której nie możesz zweryfikować ani kontrolować.

MindTheClub podchodzi do tego inaczej. Zamiast prosić o zaufanie, zbudowaliśmy system na tyle prosty do zrozumienia, że sam możesz przeanalizować, co dzieje się z Twoimi danymi. Wierzymy, że najważniejszą cechą narzędzia komunikacji jest przewidywalność: wysyłając wiadomość, powinieneś dokładnie wiedzieć, dokąd trafia, jaką drogą podróżuje i gdzie kończy. Bez niespodzianek.

Oto jak to działa.

Twoje wiadomości podróżują bezpośrednio między urządzeniami

MindTheClub to komunikator peer-to-peer. Gdy wysyłasz wiadomość, podróżuje ona bezpośrednio z Twojego telefonu na telefon odbiorcy. Nie ma pośrodku żadnego serwera MindTheClub, który przechowuje, czyta, przetwarza czy przekazuje Twoje treści.

Umożliwia to WebRTC, ten sam otwarty standard, który napędza rozmowy wideo w przeglądarce. WebRTC ustanawia bezpośredni, szyfrowany kanał danych między dwoma urządzeniami. Twoja wiadomość wchodzi do tego kanału z jednej strony i wychodzi z drugiej. To cała jej podróż.

Gdy dwa urządzenia znajdują się za zaporami sieciowymi lub w sieciach komórkowych utrudniających bezpośrednie połączenia, połączenie jest przekazywane przez serwer TURN hostowany w globalnej sieci Cloudflare. Nawet w tym przypadku przekaźnik jedynie przekazuje zaszyfrowane pakiety — nie może odczytać treści. Pomyśl o nim jak o listonoszu niosącym zapieczętowaną kopertę: zna adres, ale nigdy nie widzi, co jest w środku.

Sygnalizacja: jak urządzenia się znajdują

Zanim dwa urządzenia zdołają nawiązać bezpośrednie połączenie, muszą uzgodnić, jak się połączyć — wymieniając adresy sieciowe, klucze szyfrujące i parametry połączenia. Ta negocjacja nazywa się sygnalizacją i jest jedynym krokiem, który dotyka serwera.

MindTheClub używa Cloudflare Workera jako lekkiego przekaźnika sygnalizacji. Dane sygnalizacyjne są ulotne: służą tylko do zestawienia połączenia i potem nie mają żadnej wartości. Nie zawierają żadnej treści wiadomości.

Gdy sygnalizacja się kończy i kanał WebRTC zostaje otwarty, rola serwera dobiega końca. Wszystko, co następuje później, dzieje się bezpośrednio między dwoma urządzeniami.

Budzenie śpiącego telefonu

Telefony agresywnie oszczędzają baterię. Gdy telefon jest bezczynny, jego połączenia sieciowe są zawieszane. Jak więc wysłać wiadomość do kogoś, czyj telefon śpi?

MindTheClub używa Firebase Cloud Messaging (FCM) — tej samej infrastruktury powiadomień push, z której korzysta praktycznie każda aplikacja na Androida — do wysłania lekkiego sygnału budzenia. Ten sygnał nie zawiera treści wiadomości; mówi po prostu urządzeniu odbiorcy: „Ktoś chce Ci coś wysłać. Obudź się i połącz”.

Urządzenie odbiorcy budzi się, nawiązuje połączenie WebRTC z nadawcą, a właściwa wiadomość jest przesyłana bezpośrednio, peer-to-peer, jak zawsze.

Wysyłanie dużych treści w blokach

Zdjęcie, film, notatka głosowa — to mogą być megabajty, a połączenia mobilne mogą zostać przerwane w każdej chwili. Wysyłanie dużego pliku jako jednej całości oznaczałoby zaczynanie od zera, gdy coś pójdzie nie tak.

MindTheClub dzieli duże treści na małe bloki i wysyła je kolejno kanałem danych WebRTC. Urządzenie odbierające składa bloki z powrotem i weryfikuje wynik. Jeśli połączenie zerwie się w trakcie transferu, ponownie przesłane muszą być tylko brakujące bloki, a nie cały plik.

To ta sama zasada, z której korzysta każdy niezawodny protokół przesyłania plików. Nie jest nowatorska, ale jest niezbędna dla dobrego doświadczenia w prawdziwych sieciach komórkowych.

Gwarantowane dostarczenie

Co się stanie, jeśli odbiorca jest w samolocie, ma wyłączony telefon albo jedzie tunelem? Wiadomości nie da się dostarczyć teraz, ale w końcu musi dotrzeć.

MindTheClub używa WorkManagera Androida, by zagwarantować dostarczenie. Gdy wiadomości nie można wysłać od razu, jest zapisywana lokalnie i planowana do ponownej próby. WorkManager przeżywa restarty aplikacji, ponowne uruchomienia urządzenia i optymalizację baterii. Będzie próbował ponownie, z odpowiednimi odstępami, aż wiadomość zostanie dostarczona.

W połączeniu z sygnałami budzenia FCM tworzy to niezawodny łańcuch dostarczania: Twoja wiadomość jest bezpiecznie przechowywana na Twoim urządzeniu, impuls budzenia wychodzi, gdy odbiorca jest prawdopodobnie osiągalny, a bezpośredni transfer kończy się, gdy tylko oba urządzenia są online. W żadnym momencie treść wiadomości nie leży na serwerze, czekając na odbiór.

Wiadomości grupowe: protokół plotkowy (gossip)

Wiadomości grupowe w systemie peer-to-peer to wyjątkowe wyzwanie. W tradycyjnej aplikacji wysyłasz jedną kopię na serwer, a serwer rozprowadza ją do każdego członka grupy. Bez serwera nadawca musiałby łączyć się z każdym członkiem z osobna, co źle się skaluje i całkowicie zawodzi, gdy część członków jest nieosiągalna.

MindTheClub rozwiązuje to protokołem gossip. Nadawca przekazuje wiadomość tym członkom grupy, do których może dotrzeć. Ci członkowie z kolei mogą przekazać wiadomość innym, do których nadawca nie dotarł. Jak plotka rozchodząca się po pokoju, wiadomość rozprzestrzenia się, aż każdy ma kopię.

Jeśli członek grupy pojawi się online później i odkryje, że brakuje mu wiadomości, prosi o nią dowolnego członka, który już ją ma — nie tylko pierwotnego nadawcę. To czyni dostarczanie grupowe odpornym: żadne pojedyncze urządzenie nie jest wąskim gardłem, a grupa nie zależy od tego, czy konkretny członek jest online.

Co to oznacza w praktyce

Gdy używasz MindTheClub, zachowanie systemu jest przewidywalne:

Nie zbudowaliśmy MindTheClub w ten sposób dlatego, że peer-to-peer jest modny. Zbudowaliśmy go tak, bo powstaje z tego system, którego zachowanie możesz przewidzieć i zweryfikować. I wierzymy, że to lepszy fundament zaufania niż jakakolwiek polityka prywatności.