Как сделать высоконагруженный сервис, не зная...

139
How to make High- Loaded service with no data about load Oleg Obleukhov Site Reliability Engineer, InnoGames

Transcript of Как сделать высоконагруженный сервис, не зная...

Page 1: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

How to make High-Loaded service with no data about loadOleg Obleukhov Site Reliability Engineer, InnoGames

Page 2: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

What is CRM and why do we need it

Page 3: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

What is CRM and why do we need it

• Actions are tracked while playing

Page 4: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

What is CRM and why do we need it

• Actions are tracked while playing

• Data in Hadoop (~25TB, 400B events)

Page 5: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

What is CRM and why do we need it

• Actions are tracked while playing

• Data in Hadoop (~25TB, 400B events)

• Templates of behavior

Page 6: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

What is CRM and why do we need it

• Actions are tracked while playing

• Data in Hadoop (~25TB, 400B events)

• Templates of behavior

• Near-time campaign

Page 7: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

What is CRM and why do we need it

• Actions are tracked while playing

• Data in Hadoop (~25TB, 400B events)

• Templates of behavior

• Near-time campaign

• Money, money, money

Page 8: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

What is CRM and why do we need it

• Actions are tracked while playing

• Data in Hadoop (~25TB, 400B events)

• Templates of behavior

• Near-time campaign

• Money, money, money

• Keep players playing

Page 9: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

What is CRM and why do we need it

• Actions are tracked while playing

• Data in Hadoop (~25TB, 400B events)

• Templates of behavior

• Near-time campaign

• Money, money, money

• Keep players playing

• Attract new players

Page 10: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Blackbox of CRM

Page 11: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Blackbox of CRM

Page 12: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Blackbox of CRM

• Games send 500 M events per day in realtime to Hadoop

Page 13: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Blackbox of CRM

• Games send 500 M events per day in realtime to Hadoop

• Events need to be selected, filtered, used

Page 14: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Blackbox of CRM

• Games send 500 M events per day in realtime to Hadoop

• Events need to be selected, filtered, used

• In-game messages are sent to the game

Page 15: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Blackbox of CRM

• Games send 500 M events per day in realtime to Hadoop

• Events need to be selected, filtered, used

• In-game messages are sent to the game

• As fast as possible

Page 16: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Blackbox of CRM

• Games send 500 M events per day in realtime to Hadoop

• Events need to be selected, filtered, used

• In-game messages are sent to the game

Questions• As fast as possible

Page 17: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Blackbox of CRM

• Games send 500 M events per day in realtime to Hadoop

• Events need to be selected, filtered, used

• In-game messages are sent to the game

Questions• Architecture?

• As fast as possible

Page 18: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Blackbox of CRM

• Games send 500 M events per day in realtime to Hadoop

• Events need to be selected, filtered, used

• In-game messages are sent to the game

Questions

• Reliability?

• Architecture?

• As fast as possible

Page 19: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Blackbox of CRM

• Games send 500 M events per day in realtime to Hadoop

• Events need to be selected, filtered, used

• In-game messages are sent to the game

Questions

• Reliability?

• Architecture?

• How much load?

• As fast as possible

Page 20: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Page 21: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Page 22: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Frontend

Page 23: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Data-api

Frontend

Database

Page 24: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Data-api

Frontend

Database

Page 25: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Consumer

Data-api

Frontend

Database

Page 26: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

QueueConsumer

Data-api

Frontend

Database

Page 27: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Producer

QueueConsumer

Data-api

Frontend

Database

Page 28: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Producer

QueueConsumer

Data-api

Frontend

Database

•Microservices

Page 29: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Producer

QueueConsumer

Data-api

Frontend

Database

•Microservices

•Load grows sequentially

Page 30: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Producer

QueueConsumer

Data-api

Frontend

Database

•Microservices

•Load grows sequentially

Page 31: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Producer

QueueConsumer

Data-api

Frontend

Database

•Microservices

•Load grows sequentially

Page 32: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Producer

QueueConsumer

Data-api

Frontend

Database

•Microservices

•Load grows sequentially

Page 33: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Producer

QueueConsumer

Data-api

Frontend

Database

•Microservices

•Load grows sequentially

•Components need to be reliable

Page 34: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Service architecture

Producer

QueueConsumer

Data-api

Frontend

Database

•Microservices

•Load grows sequentially

•Components need to be reliable

•How many components?

Page 35: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Watts and Virtual servers

Page 36: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Watts and Virtual servers

Page 37: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Watts and Virtual servers

Page 38: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling!

Page 39: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling!

• When idle - keep only high availability

Page 40: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling!

• When idle - keep only high availability

• If needed - add instances

Page 41: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling!

• When idle - keep only high availability

• If needed - add instances

• Not enough - add servers

Page 42: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling!

• When idle - keep only high availability

• If needed - add instances

• Not enough - add servers

• System repairs itself

Page 43: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure What we had

Page 44: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure What we had• 3 DataCenters

Page 45: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure What we had• 3 DataCenters

• Thousands of VMs, a hundreds of HW

Page 46: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure What we had• 3 DataCenters

• Thousands of VMs, a hundreds of HW

• Just migrated from Xen to KVM (live migrations)

Page 47: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure What we had• 3 DataCenters

• Thousands of VMs, a hundreds of HW

• Just migrated from Xen to KVM (live migrations)

• Testing different cloud solutions. Much more expensive

Page 48: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure What we had• 3 DataCenters

• Thousands of VMs, a hundreds of HW

• Just migrated from Xen to KVM (live migrations)

• Testing different cloud solutions. Much more expensive

• Testing of Docker

Page 49: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure What we had• 3 DataCenters

• Thousands of VMs, a hundreds of HW

• Just migrated from Xen to KVM (live migrations)

• Testing different cloud solutions. Much more expensive

• Testing of Docker

Page 50: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure What we had• 3 DataCenters

• Thousands of VMs, a hundreds of HW

• Just migrated from Xen to KVM (live migrations)

• Testing different cloud solutions. Much more expensive

• Testing of Docker

Page 51: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure What we had• 3 DataCenters

• Thousands of VMs, a hundreds of HW

• Just migrated from Xen to KVM (live migrations)

• Testing different cloud solutions. Much more expensive

• Testing of Docker

Page 52: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure LB pools and nodes

Page 53: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure LB pools and nodes

Host 1 eth0: 10.0.1.1 lo: 212.53.146.1

212.53.146.5

Service 1

Service N

Host N eth0: 10.0.1.5 lo: 212.53.146.1

212.53.146.5

Service 1

Service N

• Every host has IP of service on lo interface

Page 54: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

HWLB

Infrastructure LB pools and nodes

• Load balancing is done by PF and FreeBSD

Host 1 eth0: 10.0.1.1 lo: 212.53.146.1

212.53.146.5

LB pool 1 212.53.146.1

LB pool N 212.53.146.5

Service 1

Service N

Host N eth0: 10.0.1.5 lo: 212.53.146.1

212.53.146.5

Service 1

Service N

• Every host has IP of service on lo interface

Page 55: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

HWLB

Infrastructure LB pools and nodes

• Load balancing is done by PF and FreeBSD

Host 1 eth0: 10.0.1.1 lo: 212.53.146.1

212.53.146.5

LB pool 1 212.53.146.1

LB pool N 212.53.146.5

Internet

Service 1

Service N

Host N eth0: 10.0.1.5 lo: 212.53.146.1

212.53.146.5

Service 1

Service N

• Every host has IP of service on lo interface

Page 56: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

HWLB

Infrastructure LB pools and nodes

• Load balancing is done by PF and FreeBSD

Host 1 eth0: 10.0.1.1 lo: 212.53.146.1

212.53.146.5

LB pool 1 212.53.146.1

LB pool N 212.53.146.5

Internet

Service 1

Service N

Host N eth0: 10.0.1.5 lo: 212.53.146.1

212.53.146.5

Service 1

Service N

• Every host has IP of service on lo interface

Page 57: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

HWLB

Infrastructure LB pools and nodes

• Load balancing is done by PF and FreeBSD

Host 1 eth0: 10.0.1.1 lo: 212.53.146.1

212.53.146.5

LB pool 1 212.53.146.1

LB pool N 212.53.146.5

Internet

Service 1

Service N

Host N eth0: 10.0.1.5 lo: 212.53.146.1

212.53.146.5

Service 1

Service N

• Every host has IP of service on lo interface

• Linux network stack wants to use a «short way»

Page 58: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

HWLB

Infrastructure LB pools and nodes

• Load balancing is done by PF and FreeBSD

Host 1 eth0: 10.0.1.1 lo: 212.53.146.1

212.53.146.5

LB pool 1 212.53.146.1

LB pool N 212.53.146.5

Internet

Service 1

Service N

Host N eth0: 10.0.1.5 lo: 212.53.146.1

212.53.146.5

Service 1

Service N

• Every host has IP of service on lo interface

• Linux network stack wants to use a «short way»

Page 59: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

HWLB

Infrastructure LB pools and nodes

• Load balancing is done by PF and FreeBSD

Host 1 eth0: 10.0.1.1 lo: 212.53.146.1

212.53.146.5

LB pool 1 212.53.146.1

LB pool N 212.53.146.5

Internet

Service 1

Service N

Host N eth0: 10.0.1.5 lo: 212.53.146.1

212.53.146.5

Service 1

Service N

• Every host has IP of service on lo interface

• Linux network stack wants to use a «short way»

• Going always via LBpool

Page 60: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

HWLB

Infrastructure LB pools and nodes

• Load balancing is done by PF and FreeBSD

Host 1 eth0: 10.0.1.1 lo: 212.53.146.1

212.53.146.5

LB pool 1 212.53.146.1

LB pool N 212.53.146.5

Internet

Service 1

Service N

Host N eth0: 10.0.1.5 lo: 212.53.146.1

212.53.146.5

Service 1

Service N

• Every host has IP of service on lo interface

• Linux network stack wants to use a «short way»

• Going always via LBpool# delete route from local table $ ip route list table local local 212.53.146.1 dev lo proto kernel scope host src 212.53.146.1

# Create table 42 and add there our IP $ ip route list table 42 local 212.53.146.1 dev lo proto kernel scope host src 212.53.146.1

# Add rule for our IP $ ip rule 42: from all to 212.53.146.1 iif eth0 lookup 42

Page 61: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Load balancing in CRM

Page 62: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Load balancing in CRM

Host1

Microservice1

MicroserviceN

HostH

Microservice1

Microservice3

Page 63: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Load balancing in CRM

Host1

Microservice1

MicroserviceN

HostH

Microservice1

LB pool 1

LB pool N

Microservice3

Page 64: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Load balancing in CRM

Host1

Microservice1

MicroserviceN

HostH

Microservice1

LB pool 1

LB pool N

Microservice3

Page 65: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Load balancing in CRM

Host1

Microservice1

MicroserviceN

HostH

Microservice1

LB pool 1

LB pool N

Microservice3

Page 66: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Load balancing in CRM

Host1

Microservice1

MicroserviceN

HostH

Microservice1

LB pool 1

LB pool N

Microservice3

Page 67: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Load balancing in CRM

Host1

Microservice1

MicroserviceN

HostH

Microservice1

LB pool 1

LB pool N

MariaDBHost1

MariaDBHost2

MariaDBHostD

Microservice3

Page 68: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Load balancing in CRM

Host1

Microservice1

MicroserviceN

HostH

Microservice1

LB pool 1

LB pool N

MariaDB LB

MariaDBHost1

MariaDBHost2

MariaDBHostD

Microservice3

Page 69: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Load balancing in CRM

Host1

Microservice1

MicroserviceN

HostH

Microservice1

LB pool 1

LB pool N

MariaDB LB

MariaDBHost1

MariaDBHost2

MariaDBHostD

Microservice3

Page 70: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Load balancing in CRM

Host1

Microservice1

MicroserviceN

HostH

Microservice1

LB pool 1

LB pool N

MariaDB LB

MariaDBHost1

MariaDBHost2

MariaDBHostD

RMQ LB

RMQHost1

RMQHost2

RMQHostRMicroservice3

Page 71: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Page 72: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Page 73: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Hypervisor H

Page 74: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Virtual Host 1

Virtual Host V

Hypervisor H

Page 75: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Virtual Host 1

Microservice 1

Microservice M

Virtual Host V

Hypervisor H

Page 76: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Virtual Host 1

Microservice 1

Microservice MGrafsy

Virtual Host V

• Microservices report CPU and MEM usage

Hypervisor H

Page 77: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Virtual Host 1

Microservice 1

Microservice MGrafsy

Graphite

Virtual Host V

• Microservices report CPU and MEM usage

• Grafsy reliably sends it to Graphite

Hypervisor H

Page 78: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Graphite

Page 79: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Graphite

Page 80: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Graphite• Only 2 hosts, ~400 GB of RAM. Whisper

Page 81: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Graphite• Only 2 hosts, ~400 GB of RAM. Whisper

• 50000+ metrics per second

Page 82: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Graphite• Only 2 hosts, ~400 GB of RAM. Whisper

• Tried integration with Clickhouse, Cassandra…

• 50000+ metrics per second

Page 83: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Graphite• Only 2 hosts, ~400 GB of RAM. Whisper

• Client: Grafsy

• Tried integration with Clickhouse, Cassandra…

• 50000+ metrics per second

Page 84: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Graphite• Only 2 hosts, ~400 GB of RAM. Whisper

• Client: Grafsy

• Notifier: Graphite2monitoring

• Tried integration with Clickhouse, Cassandra…

• 50000+ metrics per second

Page 85: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Graphite• Only 2 hosts, ~400 GB of RAM. Whisper

• Client: Grafsy

• Notifier: Graphite2monitoring

• Statistic: igcollect

• Tried integration with Clickhouse, Cassandra…

• 50000+ metrics per second

Page 86: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Virtual Host 1

Microservice 1

Microservice MGrafsy

Graphite

Virtual Host V

• Microservices report CPU and MEM usage

• Grafsy reliably sends it to Graphite

Hypervisor H

Page 87: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Virtual Host 1

Microservice 1

Microservice MGrafsy

Graphite

Nagios

Virtual Host V

• Microservices report CPU and MEM usage

• Grafsy reliably sends it to Graphite

• Graphite2monitoring notifies Nagios

Hypervisor H

Page 88: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Nagios

Page 89: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Nagios

• Special host-type «aggregator»

Page 90: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Nagios

• 451.44 checks/sec

• Special host-type «aggregator»

Page 91: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Nagios

• 451.44 checks/sec

• 2 Fully replicated hosts

• Special host-type «aggregator»

Page 92: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Virtual Host 1

Microservice 1

Microservice MGrafsy

Graphite

Nagios

Virtual Host V

• Microservices report CPU and MEM usage

• Grafsy reliably sends it to Graphite

• Graphite2monitoring notifies Nagios

Hypervisor H

Page 93: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Virtual Host 1

Microservice 1

Microservice MGrafsy

Graphite

Nagios

BrassmonkeyVirtual Host V

• Microservices report CPU and MEM usage

• Grafsy reliably sends it to Graphite

• Graphite2monitoring notifies Nagios

• Brassmonkey reacts on events in Nagios

Hypervisor H

Page 94: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Brassmonkey: Python-sysadmin

Page 95: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Brassmonkey: Python-sysadmin

Page 96: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Brassmonkey: Python-sysadmin

• Used for routine tasks (reboot server, restart daemon, cron…)

Page 97: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Brassmonkey: Python-sysadmin

• Used for routine tasks (reboot server, restart daemon, cron…)

• Checking Nagios

Page 98: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Brassmonkey: Python-sysadmin

• Used for routine tasks (reboot server, restart daemon, cron…)

• Checking Nagios

• Notifying admins

Page 99: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Brassmonkey: Python-sysadmin

• Used for routine tasks (reboot server, restart daemon, cron…)

• Checking Nagios

• Notifying admins

• Performing actions

Page 100: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Brassmonkey: Python-sysadmin

• Used for routine tasks (reboot server, restart daemon, cron…)

• Checking Nagios

• Notifying admins

• Performing actions

• Can do more…

Page 101: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure. Brassmonkey: Python-sysadmin

• Used for routine tasks (reboot server, restart daemon, cron…)

• Checking Nagios

• Notifying admins

• Performing actions

• Can do more… Autoscaling

Page 102: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Virtual Host 1

Microservice 1

Microservice MGrafsy

Graphite

Nagios

BrassmonkeyVirtual Host V

• Microservices report CPU and MEM usage

• Grafsy reliably sends it to Graphite

• Graphite2monitoring notifies Nagios

• Brassmonkey reacts on events in Nagios

Hypervisor H

Page 103: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Virtual Host 1

Microservice 1

Microservice MGrafsy

Graphite

Nagios

BrassmonkeyVirtual Host V

Serveradmin

• Microservices report CPU and MEM usage

• Grafsy reliably sends it to Graphite

• Graphite2monitoring notifies Nagios

• Brassmonkey reacts on events in Nagios

Hypervisor H

Page 104: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling A chain

Hypervisor 1

Virtual Host 1

Microservice 1

Microservice MGrafsy

Graphite

Nagios

BrassmonkeyVirtual Host V

Serveradmin

• Microservices report CPU and MEM usage

• Grafsy reliably sends it to Graphite

• Graphite2monitoring notifies Nagios

• Brassmonkey reacts on events in Nagios

• Serveradmin makes changes (new host/Puppet)

Hypervisor H

Page 105: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Serveradmin

Page 106: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Serveradmin

•Single source of truth

Page 107: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Serveradmin

•Single source of truth

•Controls role by Puppet classes

Page 108: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Serveradmin

•Single source of truth

•Controls role by Puppet classes

•DNS

Page 109: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Serveradmin

•LB node of LB pool

•Single source of truth

•Controls role by Puppet classes

•DNS

Page 110: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Serveradmin

•LB node of LB pool

•Location of VM

•Single source of truth

•Controls role by Puppet classes

•DNS

Page 111: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Infrastructure Serveradmin

•LB node of LB pool

•Location of VM

•Single source of truth

•Controls role by Puppet classes

•Nagios checks/Graphite graphs

•DNS

Page 112: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)
Page 113: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling. Less components

Page 114: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling. Less components

2016-10-13 12:40:42,115 [DEBUG] Initilizing crm3 2016-10-13 12:40:42,115 [DEBUG] Query adminapi for 'hostname=aggregator.crm state=online' 2016-10-13 12:40:42,215 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-batch-target-producer 2016-10-13 12:40:42,215 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-catalog 2016-10-13 12:40:42,215 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-content-producer 2016-10-13 12:40:42,216 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-data-api 2016-10-13 12:40:42,216 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-event-consumer 2016-10-13 12:40:42,216 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-event-target-producer 2016-10-13 12:40:42,216 [DEBUG] Found service: aggregator.crm -> num_crm-frontend 2016-10-13 12:40:42,217 [DEBUG] Running crm3_instance 2016-10-13 12:40:42,311 [WARNING] [crm3_instance] Reached the lowest limit of instances for batch-target-producer 2016-10-13 12:40:42,393 [WARNING] [crm3_instance] Reached the lowest limit of instances for catalog 2016-10-13 12:40:42,472 [WARNING] [crm3_instance] Reached the lowest limit of instances for content-producer 2016-10-13 12:40:42,550 [WARNING] [crm3_instance] Reached the lowest limit of instances for data-api 2016-10-13 12:40:42,646 [WARNING] [crm3_instance] Reached the lowest limit of instances for event-consumer 2016-10-13 12:40:42,718 [WARNING] [crm3_instance] Reached the lowest limit of instances for event-target-producer 2016-10-13 12:41:35,876 [INFO] [crm3_instance] added frontend on af-web02.crm

Page 115: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling. Load is coming

Page 116: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling. More load

Page 117: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling. More load

2016-10-14 18:31:06,141 [WARNING] [crm3_instance] Reached the highest limit of instances for event-consumer

Page 118: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling. More load

2016-10-14 18:31:06,141 [WARNING] [crm3_instance] Reached the highest limit of instances for event-consumer

Page 119: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling. Load is gone

Page 120: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Autoscaling. Load is gone

2016-10-13 15:10:05,449 [DEBUG] Initilizing crm3 2016-10-13 15:10:05,449 [DEBUG] Query adminapi for 'hostname=aggregator.crm state=online' 2016-10-13 15:10:05,524 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-batch-target-producer 2016-10-13 15:10:05,525 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-catalog 2016-10-13 15:10:05,525 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-content-producer 2016-10-13 15:10:05,525 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-data-api 2016-10-13 15:10:05,525 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-event-consumer 2016-10-13 15:10:05,525 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-event-target-producer 2016-10-13 15:10:05,525 [DEBUG] Found service: aggregator.crm -> cpu_usage_crm-frontend 2016-10-13 15:10:05,526 [DEBUG] Running crm3_instance 2016-10-13 15:10:05,604 [WARNING] [crm3_instance] Reached the instances limit of components for batch-target-producer 2016-10-13 15:10:05,709 [WARNING] [crm3_instance] Reached the instances limit of components for catalog 2016-10-13 15:10:05,789 [WARNING] [crm3_instance] Reached the instances limit of components for content-producer 2016-10-13 15:10:05,903 [WARNING] [crm3_instance] Reached the instances limit of components for data-api 2016-10-13 15:11:25,887 [INFO] [crm3_instance] removed event-consumer from af-web02.crm

Page 121: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

The path

Page 122: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

The path• Needs to be written

Page 123: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

The path• Needs to be written

• Grafsy

Page 124: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

The path• Needs to be written

• Grafsy

• Graphite2monitoring

Page 125: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

The path• Needs to be written

• Grafsy

• Graphite2monitoring

• ClusterHC - healthchecking clusters

Page 126: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

The path• Needs to be written

• Grafsy

• Graphite2monitoring

• ClusterHC - healthchecking clusters

• mmdu - management of users in MySQL (Puppet module sucks)

Page 127: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

The path• Needs to be written

• Grafsy

• Graphite2monitoring

• ClusterHC - healthchecking clusters

• mmdu - management of users in MySQL (Puppet module sucks)

• Brassmonkey modules (Python)

Page 128: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

The path• Needs to be written

• Grafsy

• Graphite2monitoring

• ClusterHC - healthchecking clusters

• mmdu - management of users in MySQL (Puppet module sucks)

• Architecture

• Brassmonkey modules (Python)

Page 129: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

The path• Needs to be written

• Grafsy

• Graphite2monitoring

• ClusterHC - healthchecking clusters

• mmdu - management of users in MySQL (Puppet module sucks)

• Architecture

• Integral or differential way of monitoring

• Brassmonkey modules (Python)

Page 130: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

The path• Needs to be written

• Grafsy

• Graphite2monitoring

• ClusterHC - healthchecking clusters

• mmdu - management of users in MySQL (Puppet module sucks)

• Architecture

• Integral or differential way of monitoring

• Build VMs with one command

• Brassmonkey modules (Python)

Page 131: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

The path• Needs to be written

• Grafsy

• Graphite2monitoring

• ClusterHC - healthchecking clusters

• mmdu - management of users in MySQL (Puppet module sucks)

• Architecture

• Integral or differential way of monitoring

• Build VMs with one command

• Brassmonkey modules (Python)

• More then 1 component work at the same moment. Deadlocks

Page 132: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Conclusion

Page 133: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Conclusion• It is not hard to make your own autoscaling

Page 134: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Conclusion

• Much cheaper than AWS or Azure

• It is not hard to make your own autoscaling

Page 135: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Conclusion

• Much cheaper than AWS or Azure

• It is not hard to make your own autoscaling

• Does not require migration to other technology

Page 136: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Conclusion

• Saves company resources

• Much cheaper than AWS or Azure

• It is not hard to make your own autoscaling

• Does not require migration to other technology

Page 137: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Conclusion

• Saves company resources

• Much cheaper than AWS or Azure

• It is not hard to make your own autoscaling

• Does not require migration to other technology

• Keeps sysadmin calm

Page 138: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

Conclusion

• Saves company resources

• Much cheaper than AWS or Azure

• It is not hard to make your own autoscaling

• Does not require migration to other technology

• Keeps sysadmin calm

• Forces to have proper application architecture

Page 139: Как сделать высоконагруженный сервис, не зная количество нагрузки / Олег Облеухов (InnoGames)

https://github.com/leoleovich https://github.com/innogames

https://www.innogames.com