1 how to process thousands of requests per second a story of unexpected success july, 2015

18
1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

Upload: amanda-manning

Post on 13-Dec-2015

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

1

HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND

A STORY OF UNEXPECTED SUCCESSJULY, 2015

Page 2: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

2

FALL 2010: ...A NEW PROJECT

WITH OLD PROBLEMS. OLD CODEBASE.

THE NEW CHALLENGE.

Page 3: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

3

FUNCTIONAL REQUIREMENTS

CLIENTS

BANK ECOSYSTEM

STORAGE / LOGS

SMS BANKING SERVICES

SMS GATESMS / USSD

Page 4: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

4

NONE-FUNCTIONAL REQUIREMENTS

STORAGE / LOGS

SMS BANKING SERVICES

SMS GATE

PERFORMAINCE 4000+ records per sec

AVAILABILITY NONE-STOP on re-config & scale

SCALABILITY aka PLUG-AND-SCALE

RESILIENCE 10 000 000+ records as a start

CONSISTENCY Guaranteed Delivery

Page 5: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

5

NONE-FUNCTIONAL REQUIREMENTS

PERFORMAINCE 4000+ records per sec

AVAILABILITY NONE-STOP on re-config & scale

SCALABILITY aka PLUG-AND-SCALE

RESILIENCE 10 000 000+ records as a start

CONSISTENCY Guaranteed Delivery

ON DESSERT LEGACY CODE

Page 6: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

6

UNEXPECTED SUCCESS

Page 7: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

7

MESSAGE QUEUING SOLUTIONS

How to process thousands of requests per second? SCALE UP, SCALE OUT…

IBM X6 Oracle SPARC

DELL PowerEdgeIntel Server System

HP BladeSystem

Microsoft Azure

AWS

Google Cloud

Rackspace

Oracle Exalogic Elastic Cloud

IBM MQ

Oracle Tuxedo

Tibco EMS / ActiveMatrix

MSMQ

OpenAMQ

RabbitMQActiveMQ

Apache Qpid

Page 8: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

8

TASK HANDLER

“THROUGHPUT”

“REQUEST PROCESSING”

REQUESTS

QUEUE: INCOMINGARTEFACTS

SERVICES

Page 9: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

9

ORACLE: WORK ITEMS SELECTION

QUEUE: INCOMING

WHERE ... mod (dbms_rowid.ROWID_BLOCK_NUMBER(rowid), M) = N

Page 10: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

10

SQL SERVER: WORK ITEMS SELECTION

QUEUE: INCOMING

ID Data State

… … …

... … FREE = 0 … WHERE [State] = 0

Page 11: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

11

SQL SERVER: WORK ITEMS SELECTION

QUEUE: INCOMING

ID Data State

… … …

... … IN PROGRESS = 1

UPDATE …SET [State] = 1WHERE [State] = 0

Page 12: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

12

SQL SERVER: WORK ITEMS SELECTION

QUEUE: INCOMING

ID Data State

… … …

... … IN PROGRESS = 1

... ... IN PROGRESS = 1

... … FREE = 0

UPDATE TOP (...)SET [State] = 1WHERE [State] = 0OUTPUT inserted.ID, inserted.Data …

Page 13: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

13

SQL SERVER: WORK ITEMS SELECTION

QUEUE: INCOMING

ID Data State

… … …

... … IN PROGRESS = 1

... ... IN PROGRESS = 1

... … FREE = 0

... … LOCKED / INSERTING = 0

... … LOCKED / INSERTING = 0

UPDATE TOP (...)WITH (READPAST)SET [State] = 1WHERE [State] = 0OUTPUT inserted.ID, inserted.Data …

Page 14: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

14

SQL SERVER: WORK ITEMS SELECTION

UPDATE TOP (...)WITH (READPAST)SET [State] = 1WHERE [State] = 0OUTPUT inserted.ID, inserted.Data …

PREVENT LOCKS ESCALATION

#SQLSERVER

Page 15: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

15

THREAD POOL (Simple approach)

REQUESTS

QUEUE: INCOMINGARTEFACTS

SERVICES

THREAD POOLSERVICE API

WORKER THREAD

Page 16: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

16

MASTER WORKER #1/4CACHE

NGINX (God-like approach)

REQUESTS

Sockets (OS Kernel)

ARTEFACTS

SERVICES

Page 17: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

17

LEGACY: WIN SERVICELEGACY: LOCKS

RESOLUTION

…our unexpected success -)

REQUESTS

QUEUE: INCOMING

SQL Server

PARSING

WORKER #1/4 M, N

Page 18: 1 HOW TO PROCESS THOUSANDS OF REQUESTS PER SECOND A STORY OF UNEXPECTED SUCCESS JULY, 2015

18

LEGACY: LOCKS RESOLUTION

DEMO

QUEUE: INCOMING

WORKER #1/4 M, N

SQL Server