Entwurf
und
skalierbare Implementierung
eines
erweiterten Facebook Messengers
gliederung
- Motivation
- Anforderungen
- Technische Hürden
- Verschlüsselung
- React & Redux
- Implementierung
Datendiebstähle
1,5 Milliarden
140 Millionen
76 Millionen
- Yahoo
- eBay
- J. P. Morgan
- Daten unverschlüsselt auf Server
- schwer zu löschen
- E2EE nur zwischen zwei Handys
Funktionale Anforderungen
- Ende-zu-Ende-Verschlüsselung
- Standardfunktionen
- Zusatzfunktionen
- Meme-Generator, Autoresponder etc.
Nicht-funktionale Anforderungen
- Plattformunabhängigkeit
- zeitlich bedingt nur Desktop-UI
- Skalierbarkeit
keine offizielle API
- Browser Extension
- eingeschränkt
- Moving Target
- eigene FB-API
- Moving Target
- Facebook Chat API
Hürde 1
Inoffizielle API NUR für NOde.js
- manuelle Portierung
- Moving Target
- Module Bundler
- Same Origin Policy
- Browser Extension
- nicht unter mobilem Chrome
- Node.js Server
Hürde 2
IP-basierte Sperren
- weit entfernte IP → temporäre Kontosperre
-
lokaler Server
- Node.js auf Smartphones nur über Umwege
(Termux, J2V8) - Intranet/Tunneling möglich
- Node.js auf Smartphones nur über Umwege
Hürde 3
Verschlüsselung
- asymmetrischer RSA-Schlüsselaustausch (2048-Bit)
- symmetrische AES-Verschlüsselung (128-Bit)
Handshake
Chat
Framework-Kandidaten
- Xamarin
- primär für Smartphones
- Cordova
- keine native Performance
- Titanium
- proprietäre API
- React
React
- JavaScript-Render-Library von Facebook
- alle Plattformen
- Beispiele: Facebook, Instagram, Twitter,
WhatsApp Web, Dropbox, Netflix
- native Apps mit React Native
Jobangebote
Quelle: Hacker News / Ryan Williams
Vorteil 1a
Bezahlung
Quelle: Stackoverflow Survey 2016 (Lohnvergleich Front-End)
Vorteil 1b
PerformanZ
Quelle: http://chrisharrington.github.io/demos/performance/
- Grund: virtuelles DOM
Vorteil 2
Hot Reloading
- Components = Funktionen von Properties und State
- Injizieren von Codeänderungen zur Laufzeit
Vorteil 3
Minimale API
- nur 2 essentielle Methoden
- ReactDOM.render(...), React.createElement(...)
- this.props, propTypes, defaultProps
- this.state, this.setState
-
Lifecycle-Methoden
- componentWillUpdate, componentDidUpdate, ...
Vorteil 4
JSX
const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
const element = React.createElement(
"h1",
{className: "greeting"},
"Hello, world!"
);
Library vs. Framework
- React: View
- Model/Controller fehlen bisher
MVC
Flux
Redux
- 1 Store
- 1 State
- n Reducer
Reducer
function reducer(state, action) {
switch (action.type) {
case EXAMPLE_ACTION:
return state.set("example", action.payload);
default:
return state;
}
}
PURE FUNCTIONS
- keine Seiteneffekte
- leicht zu testen
-
React Components, Reducers, Selectors,
Action Creators, Selector Creators - Hot Module Replacement, Hot Reloading (Beispiel)
Skalierbarkeit
- Server
- CPU, RAM, Traffic etc. proportional zur
Anzahl der Nutzer - O(N)
- CPU, RAM, Traffic etc. proportional zur
- Client
- Effizienz unabhängig von Anzahl der
Programmierer und Codezeilen - Performanz auch bei komplexerem
Front-End gewährleistet
- Effizienz unabhängig von Anzahl der
Skalierbarkeit mit React/Redux
- Trennung UI - Logik
- Gliederung nach Komponenten
- Unterteilung in Components, Constants, Selectors, Actions, Reducers, Sagas, Messages
Implementierung
Fragen?
Bachelorarbeit
By Jan Kleiss
Bachelorarbeit
Entwurf und skalierbare Implementierung eines erweiterten Facebook Messengers
- 454