Blip technicznie, czyli Inżynieria uzależnień
Nov 15, 2014
Blip technicznie, czyliInżynieria uzależnień
Co to jest ten blip?
blog na spidzie?
IRC 2.0?
kolejna FaJnA StRonKa?
Tak na początku myśląnowi użytkownicy.
A programiści,zwykle mówią...
Mylą się jednak srodze.Bo blip, to też:
Mylą się jednak srodze.
• SMS
• MMS
• GaduGadu
• Jabber (GTalk, SPIK, inne)
• API
• Widget
• naGłos
• naprawdę dynamiczne WWW
Bo blip, to też:
42%
24%
22%
2%10%
WWW GG Jabber SMS/MMS API
WWW to nie wszystko
Zacznijmy od nowa.
Programowanie w czasach zarazy.
Programowanie w czasach zarazy.
Osoby wrażliwe na piękno koduprosimy o zamknięcie oczu.
LAMP? nie, dziękuję.
• FreeBSD
• Lighttpd
• PostgreSQL (+Slony-I)
• Ruby + Rails
• one more thing..
LAMP? nie, dziękuję.
Python + ekg!
Twitter nie dawał rady, więc..
Użyliśmy ANSI C!
Maszyneria
Maszyneria
• “zapomniany” pecet, webrick:3000
• hetzner.de
• pożyczone maszyny z rsync’em
• nokia 6310 na strychu
A potem wszystko zaoraliśmy.no, prawie wszystko.
Architektura jest banalna.
DarklordWłada nami ciemny demon
Transporty to oddzielne wątki~# darklord_ctl list_services--- mms_transport: :thread_state: "#<Thread:0x2ba46d51fd78 sleep>" :uptime: 26h 55m 23sgadu_gadu_transport: :thread_state: "#<Thread:0x2ba46d591978 sleep>" :uptime: 26h 55m 23sjabber_transport: :thread_state: "#<Thread:0x2ba46d520520 sleep>" :uptime: 26h 55m 23ssms_transport: :thread_state: "#<Thread:0x2ba46d591298 sleep>" :uptime: 26h 55m 23sweb_service: :thread_state: nil :uptime: 26h 55m 23s
zarządzalne w biegu# darklord_ctl commands
commands
debug_start
debug_stop
list_services
service_restart
service_start
service_stop
stats
stop
raportujące usłużnie# darklord_ctl stats gadu_gadu_transport
--- !map:Statistics
:last_incoming_message_received: 1197378880
:inbound_messages_received: 1168
:event_disconnect_count: 4
:inbound_messages_flood_protected: 17
:updates_handled: 1148
:outbound_messages_handled: 12386
:verifications_handled: 20
:inbound_messages_handled: 1168
:last_outgoing_message_sent: 2007-12-11 14:14:53
:outbound_messages_failures: 1
:event_conn_failed_count: 653
MMS
MMS•Użytkownik wysyła na e-mail ([email protected])•Wiadomość trafia na serwer SMTP•DarkLord pobiera za pomocą POP3•E-mail jest oczyszczany za pomocą MMS2R (do którego wykonaliśmy kontrybucję!)•Odczytujemy wysyłający numer, szukamy u nas•Wysyłamy przez API żądanie POST razem z załącznikami•Potwierdzamy przyjęcie MMSa SMSem i...
Donos trafia na blipa!
SMS
SMS
•Użytkownik wysyła SMS na nasz numer
•SMS trafia do modemu GSM
•Gammu w trybie SMSD spięte z MySQLem
•SMSowy sługa DarkLorda pobiera i..
Informacja z ulicy trafia prosto na blipa!
Jabber
Jabber
•Własny serwer ejabberd (niezależność, SRV)
•Biblioteka: xmpp4r
•Wątek jabber_transport działa jako klient
Gadu naGłos
Gadu naGłos
•Użytkownik dzwoni z telefonu lub Gadu
•WS z nagłosu pyta o to, czy chcemy słuchać?
•DarkLord decyduje czy ma czas na audiencję
•WS notyfikuje o nowej, pachnącej mp3
•DarkLord pobiera mp3 i przekazuje przez API
do Rails..
Wracam po szkolei dzwonię na blipa!
Jak to się robi?
Ruby + Rails
nginx
Czemu nginx?
Czemu nginx?
•Bardzo mały
•Duże możliwości konfiguracyjne
•Nieco szybszy niż Lighttpd
•Lepsze możliwości rewrite’owania URLi
•Stabilny, nie cieknie, świetny jako reverse-proxy
GlusterFS
Czemu GlusterFS?
Czemu GlusterFS?•Część GNU Clustering Platform (FS, HPC, EP)
•Agregacja wielu źródeł danych w jeden FS
•“Skalowalność ponad Petabajty”
•Różne schedulery, brak metadanych, moduły!
•Niezależny od sprzętu i systemu.
•Prosta konfiguracja
•FUSE
CruiseControl.rb
RCov - badanie pokrycie kodu testami
BDD - specyfikacja zamiast testów
User- should add http:// to url when missing- should not add http:// to url when already present- should find users from GaduGadu contact list- should not track anyone through im when no im configuration- should send email invitations
PYTANIA?