jss 2015 stream analytics
TRANSCRIPT
#JSS2015
Les journées
SQL Server 2015
Un événement organisé par GUSS
@GUSS_FRANCE
#JSS2015
Les journées
SQL Server 2015
Un événement organisé par GUSS
Architecture Lambda -Stream AnalyticsMichel Hubert
Georges Damien
#JSS2015
Merci à nos sponsors
#JSS2015
About me
• Directeur Technique chez Cellenza
• MVP Azure
• Microsoft P-Seller
#JSS2015
About me
#JSS2015
Démonstrateur
http://tinyurl.com/cellenza
#JSS2015
• « La meilleure façon de prédire le futur
est de regarder le passé et le présent ! »
Introduction• Pourquoi les architectures lambda ?
#JSS2015
• Historiquement, le BigData est une suite logique de la B.I.
• Donc on a appliqué les techniques de la B.I. : Le Batch
• Ce n’est pas plus suffisant !
• Des flux de données à prendre en compte en temps-réel
• Des historiques très volumineux qui recèlent de la valeur
IntroductionPourquoi les architectures lambda ?
#JSS2015
• Architecture lambda ?
De quoi parle-t-on ?
#JSS2015
• La base de données classique :• Ex d’une action utilisateur (changement d’adresse) :
• Chaque update écrase des données précédentes !
Principe de baseArchitecture basée sur des données immuables
UPDATE
#JSS2015
• Stockage immuable :• La mort de l’update, vive l’insert !
• Toute autre information peut être dérivée/reconstruite à partir de ces données brutes
Principe de base• Architecture basée sur des données immuables
#JSS2015
• Quels cas d’usage ?
Big Data + Temps réel
#JSS2015
• Prenons un scénario Exemple :– Site eCommerce / Retail
• Quels gains ?• Analyse temps réel des comportements,
• Calcul du Taux d’abandon de panier,
• Prévision de stock
• Détection de Fraude
• Analyse d’une campagne marketing
• Quels produits ne déclenchent pas d’achat ? Problème de stock ? De prix ?
ScénarioArchitecture Lambda
#JSS2015
Réponse Microsoft
#JSS2015
EVENT HUB
La « Master Data »
#JSS2015
Azure Service BusAzure Service Bus
Relay
Queue
Topic
Notification Hub
Event Hub
NAT and Firewall Traversal Service
Request/Response Services
Unbuffered with TCP Throttling
Many publishers and many consumers to
communicate over a FIFO like channel.
(Competing consumers and Queue-based
Load leveling scenarios)
Pub / Sub communication channel. Each
Consumer subscribes to a copy of message
High-scale notification distribution
Most mobile push notification services
Millions of notification targets
#JSS2015
EventHub
Event Hub vs Topics / Queues
• Bus de messages
Topics / Queues Event Hub
#JSS2015
Event Hub : Principe généralArchitecture Lambda
Event Producers
Azure Event Hub
> 1M Producers> 1GB/sec
Aggregate Throughput
Up to 32 partitions via portal, more on
request
Part
itio
ns
Direct
PartitionKey
Hash
Consumer Group(s)
Receivers
AMQP 1.0
Credit-based flow control
Client-side cursors
Offset by Id or Timestamp
#JSS2015
Event Hub : Envoi de données
Partition 1
Partition 2
Partition “n”
Event 1
PartitionKey=A
Event 1
PartitionKey=B
#JSS2015
Publication de message .Net / AMQP
#JSS2015
Publication de message via HTTP<protocol>://<namespace>.servicebus.windows.net/<eventhubname>/publisher/<partitionkey>/messages
#JSS2015
Event Hub : Consommation de données
Partition 1
Partition 2
Partition “n”
Event 1
Pkey = A
Event 2
Pkey = B Receiver 6
Receiver 2
Worker “n”
Receiver 1
Receiver “n”
Worker 1
#JSS2015
Event Hub : Consommation multiple
Partition 1
Partition 2
Partition “n”
Consumer Group C
Callback for prtn. 6
Callback for prtn. 2
Worker “n”
Callback for prtn. 1
Callback “n”
Worker 1Consumer Group B
Callback for prtn. 6
Callback for prtn. 2
Worker “n”
Callback for prtn. 1
Callback “n”
Worker 1Consumer Group A
Worker “n”
Callback for prtn. 6
Callback for prtn. 2
Callback for prtn. 1
Callback “n”
Worker 1
#JSS2015
IEventProcessor
Architecture Lambda
#JSS2015
IEventProcessor
Architecture Lambda
#JSS2015
EVENT HUB
#JSS2015
STREAM ANALYTICS
Complex Event Processing
#JSS2015
Données au repos
SELECT count(*) FROM ParkingLot
WHERE type = 'Auto'AND color = 'Red'
Question“Combien de voitures rouges dans le parking?”
Répondre avec une base de donnée relationnelleMarcher jusqu’au parking
Compter les véhicules qui sont: Rouge, Voiture
#JSS2015
Données en mouvementLa question est différente“Combien de voitures rouges sont passées au marqueur 18A sur l’A-10 dans
la dernière heure?”
Répondre avec une base de donnée relationnelleS’arrêter, faire se garer toutes les voitures qui arrivent pendant l’heure dans un parking, les compter
Pas la meilleure des solutions…
#JSS2015
L’avantage définitif
SELECT count(*) FROM A-10WHERE Type = ‘Voiture’ and Color = ‘Rouge’GROUP BY TumblingWindow(hour, 1)
La question est différente“Combien de voitures rouges sont passées au marqueur 18A sur l’A-10 dans
la dernière heure?”
#JSS2015
Agrégation temporelle – SQL Like
TumblingWindow(minute,5) HoppingWindow(minute, 10 , 5)
SlidingWindow(minute, 3)
https://msdn.microsoft.com/fr-fr/library/azure/dn834998.aspx
#JSS2015
Stream Analytics
#JSS2015
Stream Analytics
#JSS2015
• Agrégation simple :
– SELECT sensorId, MIN(temp) as temp
FROM SensorReadings
TIMESTAMP BY time
GROUP BY sensorId, SlidingWindow(second, 5)
HAVING MIN(temp) > 75
Exemples de requêtes
#JSS2015
• Agréagation plusieurs flux :
– SELECT s1.time, s1.dspl, s1.hmdt as previousHmdt, s2.hmdt as newHmdt, datediff(ss,
s1.time, s2.time) as secondsApart
FROM SensorData s1 timestamp by time
JOIN SensorData s2 timestamp by time
ON s1.dspl = s2.dspl
AND DATEDIFF(s, s1, s2) BETWEEN 0 AND 5
WHERE (s2.hmdt - s1.hmdt >= .1) or (s1.hmdt - s2.hmdt >= .1)
Exemples de requêtes
#JSS2015
• Jointure avec table de référence :
– SELECT SensorReadings.sensorID, SensorReadings.temp
FROM SensorReadings
JOIN thresholdRefData
ON SensorReadings.sensorID = thresholdRefData.sensorID
WHERE SensorReadings.temp > thresholdRefData.value
Exemples de requêtes
#JSS2015
• Plusieurs sorties :– SELECT *
INTO outputLog
FROM SensorReadings
– SELECT *
INTO outputTempAlert
FROM SensorReadings
WHERE temp > 75
Exemples de requêtes
#JSS2015
ANALYSE DE LOGS
Stream Analytics
#JSS2015
DÉTECTION DE FRAUDES
Stream Analytics
#JSS2015
ANALYSE DE TWEETS
Stream Analytics
#JSS2015
Des questions ?
#JSS2015#JSS2015
Les évaluations des sessions,
c’est important !!
http://GUSS.Pro/jss
#JSS2015
Merci à nos volontaires…
#JSS2015#JSS2015