SlideShare ist ein Scribd-Unternehmen logo
1 von 58
Downloaden Sie, um offline zu lesen
2© The Pythian Group Inc., 2018
AllThingsOpen, Raleigh, NC, USA
October 15, 2019
Matthias Crauwels
Implementing MySQL
Database-as-a-Service
using Open Source tools
3© The Pythian Group Inc., 2018
Who am I?
4© The Pythian Group Inc., 2018 4© The Pythian Group Inc., 2019
Matthias Crauwels
● Living in Ghent, Belgium
● Bachelor Computer Science
● ~20 years Linux user / admin
● ~10 years PHP developer
● ~8 years MySQL DBA
● 3rd year at Pythian
● Currently Lead Database Consultant
● Father of Leander
5© The Pythian Group Inc., 2018 5© The Pythian Group Inc., 2018
Helping businesses
use data to compete
and win
6© The Pythian Group Inc., 2018
AGENDA
6© The Pythian Group Inc., 2019
Introduction and history
DBaaS: frontend
DBaaS: backend
Communication
7© The Pythian Group Inc., 2018
Let's get started!
8© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 8
You start a new application, in many cases on a LAMP stack
● Linux
● Apache
● MySQL
● PHP
Everything on a single server!
History
9© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 9
Your application grows… What do you do?
You buy a bigger server!
History
10© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 10
You application grows even more. Yay!
You buy more servers and split your infrastructure.
History
Database
Web server File server
11© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 11
Your application grows even more!
● You scale up the components
● Web servers are easy, just add more and load balance
● File servers are easy, get more/bigger disks, implement RAID solutions, ...
● What about the database??
■ More servers?
● Ok but what about the data?
■ I want all my web servers to see the same data.
● Writing it on all the servers? Overhead!
History
12© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 12
MySQL replication
● Writing to master
● Reading from replica’s (slaves)
History
13© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 13
Million dollar questions
● How do we know what server is the master?
● How do we know which servers are the replica’s?
● How do we manage this replication topology?
● What if the master goes down?
● What about maintenance?
● …
History
14© The Pythian Group Inc., 2018
Database-as-a-Service
Frontend Solution
15© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 15
ProxySQL
16© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 16
ProxySQL is a high performance layer 7 proxy application for MySQL.
● It provides ‘intelligent’ load balancing of application requests onto
multiple databases
● It understands the MySQL traffic that passes through it, and can split
reads from writes.
● It understands the underlying database topology, whether the
instances are up or down
● It shields applications from the complexity of the underlying
database topology, as well as any changes to it
● ...
ProxySQL: What?
17© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 17
● Hostgroup
All backend MySQL servers are grouped into hostgroups. These “hostgroups” will be used
for query routing.
● Query rules
Query rules are used for routing, mirroring, rewriting or blocking queries. They are at the
heart of ProxySQL’s functionalities
● MySQL users and servers
These are configuration items which the proxy uses to operate
ProxySQL: terminology
18© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 18
ProxySQL: Basic design (1)
19© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 19
ProxySQL: Basic design (2)
20© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 20
ProxySQL: Internals
21© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 21
ProxySQL will be configured to share configuration values with its peers.
Currently, all instances are equal and can be used to reconfigure, there is
no “master” or “leader”. This is a feature on the roadmap
(https://github.com/sysown/proxysql/wiki/ProxySQL-Cluster#roadmap).
Helps to:
● Avoid your ProxySQL instance to be the single point of failure
● Avoid having to reconfigure every ProxySQL instance on the
application server
● Helps to (auto-)scale the ProxySQL infrastructure
ProxySQL: Clustering
22© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 22
ProxySQL exists between the application and the database.
● It hides the complexity of the database topology to the application
● It knows which server is the master and which are the slaves
● It will not make changes to the topology so topology management
is not solved with this product.
● It has support for gracefully taking a server out of service
● It is easy to configure
● It can be clustered for not being a single-point-of-failure
ProxySQL: Conclusions
23© The Pythian Group Inc., 2018
Question about
ProxySQL?
24© The Pythian Group Inc., 2018
Database-as-a-Service
Backend management
25© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 25
Orchestrator
26© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 26
Orchestrator is a High Availability and replication management tool.
It can be used for:
● Discovery of a topology
● Visualisation of a topology
● Refactoring of a topology
● Recovery of a topology
Orchestrator: What?
27© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 27
Orchestrator can (and will) discover your entire replication technology as
soon as you connect it to a single server in the topology.
It will use SHOW SLAVE HOSTS, SHOW PROCESSLIST, SHOW
SLAVE STATUS to try and connect to the other servers in the topology.
Requirement: the orchestrator_topology_userneeds to be created
on every server in the cluster so it can connect.
Orchestrator: Discovery
28© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 28
Orchestrator comes with a web interface that visualizes the servers in the
topology.
Orchestrator: Visualization
29© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 29
Orchestrator can be used to refactor the topology.
This can be done from the command line tool, via the API or even via the
web interface by dragging and dropping.
You can do things like
● Repoint a slave to a new master
● Promote a server to a (co-)master
● Start / Stop slave
● ...
Orchestrator: Refactoring
30© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 30
All of these features are nice, but they still require a human to execute
them. This doesn’t help you much when your master goes down at 3AM
and you get paged to resolve this.
Orchestrator can be configured to automatically recover your topology
from an outage.
Orchestrator: Recovery
31© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 31
To be able to perform a recovery, Orchestrator first needs to detect a
failure.
As indicated before Orchestrator connects to every server in the topology
and gathers information from each of the instances.
Orchestrator uses this information to make decisions on the best action to
take. They call this the holistic approach.
Orchestrator: How recovery works?
32© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 32
Orchestrator: Failure detection example
33© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 33
Orchestrator was written with High Availability as a basic concept.
You can easily run multiple Orchestrator instances with a shared MySQL
backend. All instances will collect all information but they will allow only
one instance to be the “active node” and to make changes to the
topology.
To eliminate a single-point-of-failure in the database backend you can
use either master-master replication (2 nodes) or Galera synchronous
replication (3 nodes).
Orchestrator High Availability
34© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 34
Since version 3.x of Orchestrator there is “Orchestrator-on-Raft”.
Orchestrator now implements the ‘raft consensus protocol’. This will
● Ensure that a leader node is elected from the available nodes
● Ensure that the leader node has a quorum (majority) at all times
● Allow to run Orchestrator without a shared database backend
● Allow to run without a MySQL backend but use a sqlite backend
Orchestrator High Availability
35© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 35
A common example of a High Availability setup
● 3 Orchestrator nodes in different DC’s
● Often one primary DC, one backup DC and one “arbitrator” node in a
cloud DC.
● Orchestrator developers have made changes to raft protocol to allow
■ leader to step down
■ other nodes to yield to a certain node to become the leader
● Shlomi Noach from GitHub will definitely go into more detail on how
they implemented this at GitHub.
Orchestrator High Availability
36© The Pythian Group Inc., 2018
Questions about
Orchestrator?
37© The Pythian Group Inc., 2018
Overview
38© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 38
Architecture overview
APP(S)
Leader
39© The Pythian Group Inc., 2018
Communication
Default behaviour
40© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 40
● Using the read only flag monitoring in ProxySQL by adding a hostgroup-pair to
mysql_replication_hostgroupstable
Admin> SHOW CREATE TABLE mysql_replication_hostgroupsG
*************************** 1. row ***************************
table: mysql_replication_hostgroups
Create Table: CREATE TABLE mysql_replication_hostgroups (
writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,
reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND reader_hostgroup>0),
comment VARCHAR,
UNIQUE (reader_hostgroup)
)
1 row in set (0.00 sec)
● Requires monitoring user to be configured correctly
ProxySQL read only flag monitoring
41© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 41
● Orchestrator will flip the read-only flag on master failover
● Setting ApplyMySQLPromotionAfterMasterFailover
● default value was false (Orchestrator version < 3.0.12)
● since 3.0.12 default is true
● Recommendation has always been to enable this.
● Configure MySQL to be read-only by default (best practise)
Orchestrator ApplyMySQLPromotionAfterMasterFailover
42© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 42
● What happens on network partitions?
● Orchestrator sees master being unavailable and promotes a new
● Old master still is writeable (Orchestrator can not reach it to toggle the
flag)
● ProxySQL will move the new master (writable) to the writer hostgroup
● ProxySQL will place old master as SHUNNED.
● When network partition gets resolved it will still be writable so it will
return to ONLINE.
● this will lead to split brain
Default behaviour: Caveats
43© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 43
● Solutions to prevent this split brain scenario
● STONITH (shoot the other node in the head)
● Run script in ProxySQL scheduler that deletes any SHUNNED writers
from the configuration (both from the writer and reader hostgroups)
Default behaviour: Caveats / workarounds
44© The Pythian Group Inc., 2018
Communication
Orchestrator hooks
45© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 45
● Orchestrator implements hooks on various stages of the recovery
process
● These "hooks" are like events that will be called and you can
configure your own scripts to run
● This makes Orchestrator highly customisable and scriptable
● Default (naive) configuration will echo text to /tmp/recovery.log
● Use the hooks! If not for scripting then for alerting / notifying you
that something happened
Orchestrator hooks: What?
46© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 46
● Instead of relying on ProxySQL's monitoring of the read-only flag we
can now actively push changes to ProxySQL using the hooks.
● Whenever a planned or unplanned master change takes place we
will update the ProxySQL.
● Pre-failover:
■ Remove {failedHost} from the writer hostgroup
● Post-failover:
■ If the recovery was successful: Insert {successorHost} in the writer
hostgroup
● WARNING: test test test test test test !!!!!
(before enabling automated failovers in production)
Orchestrator hooks: Why?
47© The Pythian Group Inc., 2018
Communication
Decouple communication (between ProxySQL and Orchestrator)
48© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 48
● Orchestrator hooks are great but...
● ... what happens if there is no communication possible between
Orchestrator and ProxySQL?
● Hooks are only fired once
● What if ProxySQL is not reachable? Stop failover?
● You need ProxySQL admin credentials available on Orchestrator
The problem
49© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 49
● Decouple Orchestrator and ProxySQL
● Use Consul as key-value store in between both
● Orchestrator has built-in support to update master coordinates in the
K/V store (both for Zookeeper and Consul)
● Configuration settings
● "KVClusterMasterPrefix": "mysql/master",
● "ConsulAddress": "127.0.0.1:8500",
● "ZkAddress": "srv-a,srv-b:12181,srv-c",
The solution
50© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 50
● KVClusterMasterPrefixis the prefix to use for master discovery
entries. As example, your cluster alias is mycluster and the master
host is some.host-17.comthen you will expect an entry where:
● The Key is mysql/master/mycluster
● The Value is some.host-17.com:3306
● Additionally following key/values will be available automatically
● mysql/master/mycluster/hostname , value is some.host-17.com
● mysql/master/mycluster/port , value is 3306
● mysql/master/mycluster/ipv4 , value is 192.168.0.1
● mysql/master/mycluster/ipv6 , value is <whatever>
Which keys and values?
51© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 51
● Recommended setup for Orchestrator is to run 3 nodes with their
own local datastore (MySQL or SQLite)
● Communication between nodes happens using the RAFT protocol.
● This is also the preferred setup for the Consul K/V store
● We install Consul "server" on each Orchestrator nodes
● Consul "server" comes also with an "agent"
● We let the Orchestrator leader send it's updates to the local Consul
agent.
● Consul agent updates the Consul leader node and the leader
distributes the data to all 3 nodes using the RAFT protocol.
Avoiding single-point-of-failures (1)
52© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 52
● We now have our HA for Orchestrator and Consul.
● We have avoided network partitioning
● Majority vote is required to be the leader on both applications
● If our local Consul agent is unable to reach the Consul leader node, then
Orchestrator will not be able to reach its peers and thus not be the
Leader node.
● Optional: Orchestrator extends RAFT to implement a yield option to
yield to a specific leader. We could implement a cronjob for
Orchestrator to always yield Orchestrator leadership to the Consul
leader for faster updates but this not a requirement.
Avoiding single-point-of-failures (2)
53© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 53
● Orchestrator really doesn't care all that much for slaves
● Masters are important for HA
● the native support for the K/V store ends with updating the masters to it
("KVClusterMasterPrefix": "mysql/master" )
● API to the rescue!
● We can create a fairly simple script that runs in a cron
● pull ALL the servers from the API (get JSON response)
● compare the slave entries with values in Consul (for example keys
starting with mysql/slaves)
● update Consul if needed
What about the slaves?
54© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 54
● Now Orchestrator is updating Consul K/V (master via native support,
slaves via our script)
● Let's install a Consul "agent" on every ProxySQL machine.
● We can now query Consul data via this local agent
root@proxysql-1:~ $ consul members
Node Address Status Type Build Protocol DC Segment
orchestrator-1 10.0.1.2:8301 alive server 1.4.3 2 default <all>
orchestrator-2 10.0.2.2:8301 alive server 1.4.3 2 default <all>
orchestrator-3 10.0.3.2:8301 alive server 1.4.3 2 default <all>
proxysql-1 10.0.1.3:8301 alive client 1.4.3 2 default <default>
proxysql-2 10.0.2.3:8301 alive client 1.4.3 2 default <default>
How to configure ProxySQL?
55© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 55
● First option is to use the scripted approach
● Run a script in a cronjob or in the ProxySQL scheduler
● Crawl the Consul K/V store
● Update ProxySQL config
How to configure ProxySQL?
Pro Con
Fairly easy A lot of wasted CPU cycles
Fairly quick (ProxySQL scheduler works on
a millisecond base)
56© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 56
● Use consul-template
● Registers as listener to the Consul values
● Every time a value is changed it will re-generate a file from a template
● Example:
{{ if keyExists "mysql/master/testcluster/hostname" }}
DELETE FROM mysql_servers where hostgroup_id = 0;
REPLACE into mysql_servers (hostgroup_id, hostname) values ( 0, "{{ key
"mysql/master/testcluster/hostname" }}" );
{{ end }}
{{ range tree "mysql/slave/testcluster" }}
REPLACE into mysql_servers (hostgroup_id, hostname) values ( 1, "{{ .Key }}{{ .Value }}" );
{{ end }}
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
How to configure ProxySQL?
57© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 57
Architecture
58© The Pythian Group Inc., 2018
Questions?
59© The Pythian Group Inc., 2018
Contact
Matthias Crauwels
crauwels@pythian.com
+1 (613) 565-8696 ext. 1215
Twitter @mcrauwel
We're hiring!!
https://pythian.com/careers

Weitere ähnliche Inhalte

Was ist angesagt?

Kubernetes: The evolution of distributed systems | DevNation Tech Talk
Kubernetes: The evolution of distributed systems | DevNation Tech TalkKubernetes: The evolution of distributed systems | DevNation Tech Talk
Kubernetes: The evolution of distributed systems | DevNation Tech TalkRed Hat Developers
 
01. lab instructions starting project
01. lab instructions   starting project01. lab instructions   starting project
01. lab instructions starting projectrajul14
 
Getting Started with Kafka on k8s
Getting Started with Kafka on k8sGetting Started with Kafka on k8s
Getting Started with Kafka on k8sVMware Tanzu
 
Migrating from oracle soa suite to microservices on kubernetes
Migrating from oracle soa suite to microservices on kubernetesMigrating from oracle soa suite to microservices on kubernetes
Migrating from oracle soa suite to microservices on kubernetesKonveyor Community
 
Flux is incubating + the road ahead
Flux is incubating + the road aheadFlux is incubating + the road ahead
Flux is incubating + the road aheadLibbySchulze
 
Flink Forward San Francisco 2018: Jörg Schad and Biswajit Das - "Operating Fl...
Flink Forward San Francisco 2018: Jörg Schad and Biswajit Das - "Operating Fl...Flink Forward San Francisco 2018: Jörg Schad and Biswajit Das - "Operating Fl...
Flink Forward San Francisco 2018: Jörg Schad and Biswajit Das - "Operating Fl...Flink Forward
 
Kubernetes-Native DevOps: For Apache Kafka® with Confluent
Kubernetes-Native DevOps: For Apache Kafka® with ConfluentKubernetes-Native DevOps: For Apache Kafka® with Confluent
Kubernetes-Native DevOps: For Apache Kafka® with Confluentconfluent
 
44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw
44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw
44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw44CON
 
The service mesh management plane
The service mesh management planeThe service mesh management plane
The service mesh management planeLibbySchulze
 
Cloud Economics - Crayon Optimization Services
Cloud Economics - Crayon Optimization ServicesCloud Economics - Crayon Optimization Services
Cloud Economics - Crayon Optimization ServicesAnfernee Bonds
 
The what, why and how of knative
The what, why and how of knativeThe what, why and how of knative
The what, why and how of knativeMofizur Rahman
 
Flink Forward San Francisco 2018: Dave Torok & Sameer Wadkar - "Embedding Fl...
Flink Forward San Francisco 2018:  Dave Torok & Sameer Wadkar - "Embedding Fl...Flink Forward San Francisco 2018:  Dave Torok & Sameer Wadkar - "Embedding Fl...
Flink Forward San Francisco 2018: Dave Torok & Sameer Wadkar - "Embedding Fl...Flink Forward
 
Toward Hybrid Cloud Serverless Transparency with Lithops Framework
Toward Hybrid Cloud Serverless Transparency with Lithops FrameworkToward Hybrid Cloud Serverless Transparency with Lithops Framework
Toward Hybrid Cloud Serverless Transparency with Lithops FrameworkLibbySchulze
 
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkCloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkRed Hat Developers
 
Designing a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd productsDesigning a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd productsJulian Mazzitelli
 
Why you should have a Schema Registry | David Hettler, Celonis SE
Why you should have a Schema Registry | David Hettler, Celonis SEWhy you should have a Schema Registry | David Hettler, Celonis SE
Why you should have a Schema Registry | David Hettler, Celonis SEHostedbyConfluent
 
GitOps for Helm Users by Scott Rigby
GitOps for Helm Users by Scott RigbyGitOps for Helm Users by Scott Rigby
GitOps for Helm Users by Scott RigbyWeaveworks
 
Moving existing apps to the cloud
 Moving existing apps to the cloud Moving existing apps to the cloud
Moving existing apps to the cloudTiera Fann, MBA
 

Was ist angesagt? (20)

Kubernetes: The evolution of distributed systems | DevNation Tech Talk
Kubernetes: The evolution of distributed systems | DevNation Tech TalkKubernetes: The evolution of distributed systems | DevNation Tech Talk
Kubernetes: The evolution of distributed systems | DevNation Tech Talk
 
01. lab instructions starting project
01. lab instructions   starting project01. lab instructions   starting project
01. lab instructions starting project
 
Getting Started with Kafka on k8s
Getting Started with Kafka on k8sGetting Started with Kafka on k8s
Getting Started with Kafka on k8s
 
Migrating from oracle soa suite to microservices on kubernetes
Migrating from oracle soa suite to microservices on kubernetesMigrating from oracle soa suite to microservices on kubernetes
Migrating from oracle soa suite to microservices on kubernetes
 
Flux is incubating + the road ahead
Flux is incubating + the road aheadFlux is incubating + the road ahead
Flux is incubating + the road ahead
 
Flink Forward San Francisco 2018: Jörg Schad and Biswajit Das - "Operating Fl...
Flink Forward San Francisco 2018: Jörg Schad and Biswajit Das - "Operating Fl...Flink Forward San Francisco 2018: Jörg Schad and Biswajit Das - "Operating Fl...
Flink Forward San Francisco 2018: Jörg Schad and Biswajit Das - "Operating Fl...
 
Kubernetes-Native DevOps: For Apache Kafka® with Confluent
Kubernetes-Native DevOps: For Apache Kafka® with ConfluentKubernetes-Native DevOps: For Apache Kafka® with Confluent
Kubernetes-Native DevOps: For Apache Kafka® with Confluent
 
44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw
44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw
44CON 2014 - Binary Protocol Analysis with CANAPE, James Forshaw
 
The service mesh management plane
The service mesh management planeThe service mesh management plane
The service mesh management plane
 
Cloud Economics - Crayon Optimization Services
Cloud Economics - Crayon Optimization ServicesCloud Economics - Crayon Optimization Services
Cloud Economics - Crayon Optimization Services
 
The what, why and how of knative
The what, why and how of knativeThe what, why and how of knative
The what, why and how of knative
 
dA Platform Overview
dA Platform OverviewdA Platform Overview
dA Platform Overview
 
Flink Forward San Francisco 2018: Dave Torok & Sameer Wadkar - "Embedding Fl...
Flink Forward San Francisco 2018:  Dave Torok & Sameer Wadkar - "Embedding Fl...Flink Forward San Francisco 2018:  Dave Torok & Sameer Wadkar - "Embedding Fl...
Flink Forward San Francisco 2018: Dave Torok & Sameer Wadkar - "Embedding Fl...
 
Toward Hybrid Cloud Serverless Transparency with Lithops Framework
Toward Hybrid Cloud Serverless Transparency with Lithops FrameworkToward Hybrid Cloud Serverless Transparency with Lithops Framework
Toward Hybrid Cloud Serverless Transparency with Lithops Framework
 
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkCloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
 
Operator development made easy with helm
Operator development made easy with helmOperator development made easy with helm
Operator development made easy with helm
 
Designing a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd productsDesigning a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd products
 
Why you should have a Schema Registry | David Hettler, Celonis SE
Why you should have a Schema Registry | David Hettler, Celonis SEWhy you should have a Schema Registry | David Hettler, Celonis SE
Why you should have a Schema Registry | David Hettler, Celonis SE
 
GitOps for Helm Users by Scott Rigby
GitOps for Helm Users by Scott RigbyGitOps for Helm Users by Scott Rigby
GitOps for Helm Users by Scott Rigby
 
Moving existing apps to the cloud
 Moving existing apps to the cloud Moving existing apps to the cloud
Moving existing apps to the cloud
 

Ähnlich wie Implementing MySQL Database-as-a-Service using open source tools

Deploying MariaDB for HA on Google Cloud Platform
Deploying MariaDB for HA on Google Cloud PlatformDeploying MariaDB for HA on Google Cloud Platform
Deploying MariaDB for HA on Google Cloud PlatformMariaDB plc
 
Replication Whats New in Mysql 8
Replication Whats New in Mysql 8Replication Whats New in Mysql 8
Replication Whats New in Mysql 8Luís Soares
 
OSMC 2018 | Why we recommend PMM to our clients by Matthias Crauwels
OSMC 2018 | Why we recommend PMM to our clients by Matthias CrauwelsOSMC 2018 | Why we recommend PMM to our clients by Matthias Crauwels
OSMC 2018 | Why we recommend PMM to our clients by Matthias CrauwelsNETWAYS
 
In-Memory Stream Processing with Hazelcast Jet @MorningAtLohika
In-Memory Stream Processing with Hazelcast Jet @MorningAtLohikaIn-Memory Stream Processing with Hazelcast Jet @MorningAtLohika
In-Memory Stream Processing with Hazelcast Jet @MorningAtLohikaNazarii Cherkas
 
Using The Mysql Binary Log As A Change Stream
Using The Mysql Binary Log As A Change StreamUsing The Mysql Binary Log As A Change Stream
Using The Mysql Binary Log As A Change StreamLuís Soares
 
How YugaByte DB Implements Distributed PostgreSQL
How YugaByte DB Implements Distributed PostgreSQLHow YugaByte DB Implements Distributed PostgreSQL
How YugaByte DB Implements Distributed PostgreSQLYugabyte
 
Oracle Open World 2018 / Code One : MySQL 8.0 High Availability with MySQL I...
Oracle Open World 2018 / Code One  : MySQL 8.0 High Availability with MySQL I...Oracle Open World 2018 / Code One  : MySQL 8.0 High Availability with MySQL I...
Oracle Open World 2018 / Code One : MySQL 8.0 High Availability with MySQL I...Frederic Descamps
 
Gimel at Dataworks Summit San Jose 2018
Gimel at Dataworks Summit San Jose 2018Gimel at Dataworks Summit San Jose 2018
Gimel at Dataworks Summit San Jose 2018Romit Mehta
 
Dataworks | 2018-06-20 | Gimel data platform
Dataworks | 2018-06-20 | Gimel data platformDataworks | 2018-06-20 | Gimel data platform
Dataworks | 2018-06-20 | Gimel data platformDeepak Chandramouli
 
MySQL 8 High Availability with InnoDB Clusters
MySQL 8 High Availability with InnoDB ClustersMySQL 8 High Availability with InnoDB Clusters
MySQL 8 High Availability with InnoDB ClustersMiguel Araújo
 
YugaByte + PKS CloudFoundry Meetup 10/15/2018
YugaByte + PKS CloudFoundry Meetup 10/15/2018YugaByte + PKS CloudFoundry Meetup 10/15/2018
YugaByte + PKS CloudFoundry Meetup 10/15/2018AlanCaldera
 
QCon 2018 | Gimel | PayPal's Analytic Platform
QCon 2018 | Gimel | PayPal's Analytic PlatformQCon 2018 | Gimel | PayPal's Analytic Platform
QCon 2018 | Gimel | PayPal's Analytic PlatformDeepak Chandramouli
 
In-Memory Stream Processing with Hazelcast Jet @JEEConf
In-Memory Stream Processing with Hazelcast Jet @JEEConfIn-Memory Stream Processing with Hazelcast Jet @JEEConf
In-Memory Stream Processing with Hazelcast Jet @JEEConfNazarii Cherkas
 
Why You Need Manageability Now More than Ever and How to Get It
Why You Need Manageability Now More than Ever and How to Get ItWhy You Need Manageability Now More than Ever and How to Get It
Why You Need Manageability Now More than Ever and How to Get ItGustavo Rene Antunez
 
One bridge to connect them all. Oracle GoldenGate for Big Data.UKOUG Tech 2018
One bridge to connect them all. Oracle GoldenGate for Big Data.UKOUG Tech 2018One bridge to connect them all. Oracle GoldenGate for Big Data.UKOUG Tech 2018
One bridge to connect them all. Oracle GoldenGate for Big Data.UKOUG Tech 2018Gleb Otochkin
 
MySQL InnoDB Cluster and Group Replication in a nutshell hands-on tutorial
MySQL InnoDB Cluster and Group Replication in a nutshell  hands-on tutorialMySQL InnoDB Cluster and Group Replication in a nutshell  hands-on tutorial
MySQL InnoDB Cluster and Group Replication in a nutshell hands-on tutorialFrederic Descamps
 
MySQL Innovation Day Chicago - MySQL HA So Easy : That's insane !!
MySQL Innovation Day Chicago  - MySQL HA So Easy : That's insane !!MySQL Innovation Day Chicago  - MySQL HA So Easy : That's insane !!
MySQL Innovation Day Chicago - MySQL HA So Easy : That's insane !!Frederic Descamps
 

Ähnlich wie Implementing MySQL Database-as-a-Service using open source tools (20)

Deploying MariaDB for HA on Google Cloud Platform
Deploying MariaDB for HA on Google Cloud PlatformDeploying MariaDB for HA on Google Cloud Platform
Deploying MariaDB for HA on Google Cloud Platform
 
Replication Whats New in Mysql 8
Replication Whats New in Mysql 8Replication Whats New in Mysql 8
Replication Whats New in Mysql 8
 
OSMC 2018 | Why we recommend PMM to our clients by Matthias Crauwels
OSMC 2018 | Why we recommend PMM to our clients by Matthias CrauwelsOSMC 2018 | Why we recommend PMM to our clients by Matthias Crauwels
OSMC 2018 | Why we recommend PMM to our clients by Matthias Crauwels
 
Cloud Native with Kyma
Cloud Native with KymaCloud Native with Kyma
Cloud Native with Kyma
 
In-Memory Stream Processing with Hazelcast Jet @MorningAtLohika
In-Memory Stream Processing with Hazelcast Jet @MorningAtLohikaIn-Memory Stream Processing with Hazelcast Jet @MorningAtLohika
In-Memory Stream Processing with Hazelcast Jet @MorningAtLohika
 
Using The Mysql Binary Log As A Change Stream
Using The Mysql Binary Log As A Change StreamUsing The Mysql Binary Log As A Change Stream
Using The Mysql Binary Log As A Change Stream
 
How YugaByte DB Implements Distributed PostgreSQL
How YugaByte DB Implements Distributed PostgreSQLHow YugaByte DB Implements Distributed PostgreSQL
How YugaByte DB Implements Distributed PostgreSQL
 
Oracle Open World 2018 / Code One : MySQL 8.0 High Availability with MySQL I...
Oracle Open World 2018 / Code One  : MySQL 8.0 High Availability with MySQL I...Oracle Open World 2018 / Code One  : MySQL 8.0 High Availability with MySQL I...
Oracle Open World 2018 / Code One : MySQL 8.0 High Availability with MySQL I...
 
Gimel at Dataworks Summit San Jose 2018
Gimel at Dataworks Summit San Jose 2018Gimel at Dataworks Summit San Jose 2018
Gimel at Dataworks Summit San Jose 2018
 
Dataworks | 2018-06-20 | Gimel data platform
Dataworks | 2018-06-20 | Gimel data platformDataworks | 2018-06-20 | Gimel data platform
Dataworks | 2018-06-20 | Gimel data platform
 
MySQL 8 High Availability with InnoDB Clusters
MySQL 8 High Availability with InnoDB ClustersMySQL 8 High Availability with InnoDB Clusters
MySQL 8 High Availability with InnoDB Clusters
 
Huge pages why-what-how
Huge pages why-what-howHuge pages why-what-how
Huge pages why-what-how
 
YugaByte + PKS CloudFoundry Meetup 10/15/2018
YugaByte + PKS CloudFoundry Meetup 10/15/2018YugaByte + PKS CloudFoundry Meetup 10/15/2018
YugaByte + PKS CloudFoundry Meetup 10/15/2018
 
Doc store
Doc storeDoc store
Doc store
 
QCon 2018 | Gimel | PayPal's Analytic Platform
QCon 2018 | Gimel | PayPal's Analytic PlatformQCon 2018 | Gimel | PayPal's Analytic Platform
QCon 2018 | Gimel | PayPal's Analytic Platform
 
In-Memory Stream Processing with Hazelcast Jet @JEEConf
In-Memory Stream Processing with Hazelcast Jet @JEEConfIn-Memory Stream Processing with Hazelcast Jet @JEEConf
In-Memory Stream Processing with Hazelcast Jet @JEEConf
 
Why You Need Manageability Now More than Ever and How to Get It
Why You Need Manageability Now More than Ever and How to Get ItWhy You Need Manageability Now More than Ever and How to Get It
Why You Need Manageability Now More than Ever and How to Get It
 
One bridge to connect them all. Oracle GoldenGate for Big Data.UKOUG Tech 2018
One bridge to connect them all. Oracle GoldenGate for Big Data.UKOUG Tech 2018One bridge to connect them all. Oracle GoldenGate for Big Data.UKOUG Tech 2018
One bridge to connect them all. Oracle GoldenGate for Big Data.UKOUG Tech 2018
 
MySQL InnoDB Cluster and Group Replication in a nutshell hands-on tutorial
MySQL InnoDB Cluster and Group Replication in a nutshell  hands-on tutorialMySQL InnoDB Cluster and Group Replication in a nutshell  hands-on tutorial
MySQL InnoDB Cluster and Group Replication in a nutshell hands-on tutorial
 
MySQL Innovation Day Chicago - MySQL HA So Easy : That's insane !!
MySQL Innovation Day Chicago  - MySQL HA So Easy : That's insane !!MySQL Innovation Day Chicago  - MySQL HA So Easy : That's insane !!
MySQL Innovation Day Chicago - MySQL HA So Easy : That's insane !!
 

Mehr von All Things Open

Building Reliability - The Realities of Observability
Building Reliability - The Realities of ObservabilityBuilding Reliability - The Realities of Observability
Building Reliability - The Realities of ObservabilityAll Things Open
 
Modern Database Best Practices
Modern Database Best PracticesModern Database Best Practices
Modern Database Best PracticesAll Things Open
 
Open Source and Public Policy
Open Source and Public PolicyOpen Source and Public Policy
Open Source and Public PolicyAll Things Open
 
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...All Things Open
 
The State of Passwordless Auth on the Web - Phil Nash
The State of Passwordless Auth on the Web - Phil NashThe State of Passwordless Auth on the Web - Phil Nash
The State of Passwordless Auth on the Web - Phil NashAll Things Open
 
Total ReDoS: The dangers of regex in JavaScript
Total ReDoS: The dangers of regex in JavaScriptTotal ReDoS: The dangers of regex in JavaScript
Total ReDoS: The dangers of regex in JavaScriptAll Things Open
 
What Does Real World Mass Adoption of Decentralized Tech Look Like?
What Does Real World Mass Adoption of Decentralized Tech Look Like?What Does Real World Mass Adoption of Decentralized Tech Look Like?
What Does Real World Mass Adoption of Decentralized Tech Look Like?All Things Open
 
How to Write & Deploy a Smart Contract
How to Write & Deploy a Smart ContractHow to Write & Deploy a Smart Contract
How to Write & Deploy a Smart ContractAll Things Open
 
Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
 Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlowAll Things Open
 
DEI Challenges and Success
DEI Challenges and SuccessDEI Challenges and Success
DEI Challenges and SuccessAll Things Open
 
Scaling Web Applications with Background
Scaling Web Applications with BackgroundScaling Web Applications with Background
Scaling Web Applications with BackgroundAll Things Open
 
Supercharging tutorials with WebAssembly
Supercharging tutorials with WebAssemblySupercharging tutorials with WebAssembly
Supercharging tutorials with WebAssemblyAll Things Open
 
Using SQL to Find Needles in Haystacks
Using SQL to Find Needles in HaystacksUsing SQL to Find Needles in Haystacks
Using SQL to Find Needles in HaystacksAll Things Open
 
Configuration Security as a Game of Pursuit Intercept
Configuration Security as a Game of Pursuit InterceptConfiguration Security as a Game of Pursuit Intercept
Configuration Security as a Game of Pursuit InterceptAll Things Open
 
Scaling an Open Source Sponsorship Program
Scaling an Open Source Sponsorship ProgramScaling an Open Source Sponsorship Program
Scaling an Open Source Sponsorship ProgramAll Things Open
 
Build Developer Experience Teams for Open Source
Build Developer Experience Teams for Open SourceBuild Developer Experience Teams for Open Source
Build Developer Experience Teams for Open SourceAll Things Open
 
Deploying Models at Scale with Apache Beam
Deploying Models at Scale with Apache BeamDeploying Models at Scale with Apache Beam
Deploying Models at Scale with Apache BeamAll Things Open
 
Sudo – Giving access while staying in control
Sudo – Giving access while staying in controlSudo – Giving access while staying in control
Sudo – Giving access while staying in controlAll Things Open
 
Fortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML ApplicationsFortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML ApplicationsAll Things Open
 
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...All Things Open
 

Mehr von All Things Open (20)

Building Reliability - The Realities of Observability
Building Reliability - The Realities of ObservabilityBuilding Reliability - The Realities of Observability
Building Reliability - The Realities of Observability
 
Modern Database Best Practices
Modern Database Best PracticesModern Database Best Practices
Modern Database Best Practices
 
Open Source and Public Policy
Open Source and Public PolicyOpen Source and Public Policy
Open Source and Public Policy
 
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
 
The State of Passwordless Auth on the Web - Phil Nash
The State of Passwordless Auth on the Web - Phil NashThe State of Passwordless Auth on the Web - Phil Nash
The State of Passwordless Auth on the Web - Phil Nash
 
Total ReDoS: The dangers of regex in JavaScript
Total ReDoS: The dangers of regex in JavaScriptTotal ReDoS: The dangers of regex in JavaScript
Total ReDoS: The dangers of regex in JavaScript
 
What Does Real World Mass Adoption of Decentralized Tech Look Like?
What Does Real World Mass Adoption of Decentralized Tech Look Like?What Does Real World Mass Adoption of Decentralized Tech Look Like?
What Does Real World Mass Adoption of Decentralized Tech Look Like?
 
How to Write & Deploy a Smart Contract
How to Write & Deploy a Smart ContractHow to Write & Deploy a Smart Contract
How to Write & Deploy a Smart Contract
 
Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
 Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
 
DEI Challenges and Success
DEI Challenges and SuccessDEI Challenges and Success
DEI Challenges and Success
 
Scaling Web Applications with Background
Scaling Web Applications with BackgroundScaling Web Applications with Background
Scaling Web Applications with Background
 
Supercharging tutorials with WebAssembly
Supercharging tutorials with WebAssemblySupercharging tutorials with WebAssembly
Supercharging tutorials with WebAssembly
 
Using SQL to Find Needles in Haystacks
Using SQL to Find Needles in HaystacksUsing SQL to Find Needles in Haystacks
Using SQL to Find Needles in Haystacks
 
Configuration Security as a Game of Pursuit Intercept
Configuration Security as a Game of Pursuit InterceptConfiguration Security as a Game of Pursuit Intercept
Configuration Security as a Game of Pursuit Intercept
 
Scaling an Open Source Sponsorship Program
Scaling an Open Source Sponsorship ProgramScaling an Open Source Sponsorship Program
Scaling an Open Source Sponsorship Program
 
Build Developer Experience Teams for Open Source
Build Developer Experience Teams for Open SourceBuild Developer Experience Teams for Open Source
Build Developer Experience Teams for Open Source
 
Deploying Models at Scale with Apache Beam
Deploying Models at Scale with Apache BeamDeploying Models at Scale with Apache Beam
Deploying Models at Scale with Apache Beam
 
Sudo – Giving access while staying in control
Sudo – Giving access while staying in controlSudo – Giving access while staying in control
Sudo – Giving access while staying in control
 
Fortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML ApplicationsFortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML Applications
 
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
 

Kürzlich hochgeladen

Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 

Kürzlich hochgeladen (20)

Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 

Implementing MySQL Database-as-a-Service using open source tools

  • 1. 2© The Pythian Group Inc., 2018 AllThingsOpen, Raleigh, NC, USA October 15, 2019 Matthias Crauwels Implementing MySQL Database-as-a-Service using Open Source tools
  • 2. 3© The Pythian Group Inc., 2018 Who am I?
  • 3. 4© The Pythian Group Inc., 2018 4© The Pythian Group Inc., 2019 Matthias Crauwels ● Living in Ghent, Belgium ● Bachelor Computer Science ● ~20 years Linux user / admin ● ~10 years PHP developer ● ~8 years MySQL DBA ● 3rd year at Pythian ● Currently Lead Database Consultant ● Father of Leander
  • 4. 5© The Pythian Group Inc., 2018 5© The Pythian Group Inc., 2018 Helping businesses use data to compete and win
  • 5. 6© The Pythian Group Inc., 2018 AGENDA 6© The Pythian Group Inc., 2019 Introduction and history DBaaS: frontend DBaaS: backend Communication
  • 6. 7© The Pythian Group Inc., 2018 Let's get started!
  • 7. 8© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 8 You start a new application, in many cases on a LAMP stack ● Linux ● Apache ● MySQL ● PHP Everything on a single server! History
  • 8. 9© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 9 Your application grows… What do you do? You buy a bigger server! History
  • 9. 10© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 10 You application grows even more. Yay! You buy more servers and split your infrastructure. History Database Web server File server
  • 10. 11© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 11 Your application grows even more! ● You scale up the components ● Web servers are easy, just add more and load balance ● File servers are easy, get more/bigger disks, implement RAID solutions, ... ● What about the database?? ■ More servers? ● Ok but what about the data? ■ I want all my web servers to see the same data. ● Writing it on all the servers? Overhead! History
  • 11. 12© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 12 MySQL replication ● Writing to master ● Reading from replica’s (slaves) History
  • 12. 13© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 13 Million dollar questions ● How do we know what server is the master? ● How do we know which servers are the replica’s? ● How do we manage this replication topology? ● What if the master goes down? ● What about maintenance? ● … History
  • 13. 14© The Pythian Group Inc., 2018 Database-as-a-Service Frontend Solution
  • 14. 15© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 15 ProxySQL
  • 15. 16© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 16 ProxySQL is a high performance layer 7 proxy application for MySQL. ● It provides ‘intelligent’ load balancing of application requests onto multiple databases ● It understands the MySQL traffic that passes through it, and can split reads from writes. ● It understands the underlying database topology, whether the instances are up or down ● It shields applications from the complexity of the underlying database topology, as well as any changes to it ● ... ProxySQL: What?
  • 16. 17© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 17 ● Hostgroup All backend MySQL servers are grouped into hostgroups. These “hostgroups” will be used for query routing. ● Query rules Query rules are used for routing, mirroring, rewriting or blocking queries. They are at the heart of ProxySQL’s functionalities ● MySQL users and servers These are configuration items which the proxy uses to operate ProxySQL: terminology
  • 17. 18© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 18 ProxySQL: Basic design (1)
  • 18. 19© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 19 ProxySQL: Basic design (2)
  • 19. 20© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 20 ProxySQL: Internals
  • 20. 21© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 21 ProxySQL will be configured to share configuration values with its peers. Currently, all instances are equal and can be used to reconfigure, there is no “master” or “leader”. This is a feature on the roadmap (https://github.com/sysown/proxysql/wiki/ProxySQL-Cluster#roadmap). Helps to: ● Avoid your ProxySQL instance to be the single point of failure ● Avoid having to reconfigure every ProxySQL instance on the application server ● Helps to (auto-)scale the ProxySQL infrastructure ProxySQL: Clustering
  • 21. 22© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 22 ProxySQL exists between the application and the database. ● It hides the complexity of the database topology to the application ● It knows which server is the master and which are the slaves ● It will not make changes to the topology so topology management is not solved with this product. ● It has support for gracefully taking a server out of service ● It is easy to configure ● It can be clustered for not being a single-point-of-failure ProxySQL: Conclusions
  • 22. 23© The Pythian Group Inc., 2018 Question about ProxySQL?
  • 23. 24© The Pythian Group Inc., 2018 Database-as-a-Service Backend management
  • 24. 25© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 25 Orchestrator
  • 25. 26© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 26 Orchestrator is a High Availability and replication management tool. It can be used for: ● Discovery of a topology ● Visualisation of a topology ● Refactoring of a topology ● Recovery of a topology Orchestrator: What?
  • 26. 27© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 27 Orchestrator can (and will) discover your entire replication technology as soon as you connect it to a single server in the topology. It will use SHOW SLAVE HOSTS, SHOW PROCESSLIST, SHOW SLAVE STATUS to try and connect to the other servers in the topology. Requirement: the orchestrator_topology_userneeds to be created on every server in the cluster so it can connect. Orchestrator: Discovery
  • 27. 28© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 28 Orchestrator comes with a web interface that visualizes the servers in the topology. Orchestrator: Visualization
  • 28. 29© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 29 Orchestrator can be used to refactor the topology. This can be done from the command line tool, via the API or even via the web interface by dragging and dropping. You can do things like ● Repoint a slave to a new master ● Promote a server to a (co-)master ● Start / Stop slave ● ... Orchestrator: Refactoring
  • 29. 30© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 30 All of these features are nice, but they still require a human to execute them. This doesn’t help you much when your master goes down at 3AM and you get paged to resolve this. Orchestrator can be configured to automatically recover your topology from an outage. Orchestrator: Recovery
  • 30. 31© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 31 To be able to perform a recovery, Orchestrator first needs to detect a failure. As indicated before Orchestrator connects to every server in the topology and gathers information from each of the instances. Orchestrator uses this information to make decisions on the best action to take. They call this the holistic approach. Orchestrator: How recovery works?
  • 31. 32© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 32 Orchestrator: Failure detection example
  • 32. 33© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 33 Orchestrator was written with High Availability as a basic concept. You can easily run multiple Orchestrator instances with a shared MySQL backend. All instances will collect all information but they will allow only one instance to be the “active node” and to make changes to the topology. To eliminate a single-point-of-failure in the database backend you can use either master-master replication (2 nodes) or Galera synchronous replication (3 nodes). Orchestrator High Availability
  • 33. 34© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 34 Since version 3.x of Orchestrator there is “Orchestrator-on-Raft”. Orchestrator now implements the ‘raft consensus protocol’. This will ● Ensure that a leader node is elected from the available nodes ● Ensure that the leader node has a quorum (majority) at all times ● Allow to run Orchestrator without a shared database backend ● Allow to run without a MySQL backend but use a sqlite backend Orchestrator High Availability
  • 34. 35© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 35 A common example of a High Availability setup ● 3 Orchestrator nodes in different DC’s ● Often one primary DC, one backup DC and one “arbitrator” node in a cloud DC. ● Orchestrator developers have made changes to raft protocol to allow ■ leader to step down ■ other nodes to yield to a certain node to become the leader ● Shlomi Noach from GitHub will definitely go into more detail on how they implemented this at GitHub. Orchestrator High Availability
  • 35. 36© The Pythian Group Inc., 2018 Questions about Orchestrator?
  • 36. 37© The Pythian Group Inc., 2018 Overview
  • 37. 38© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 38 Architecture overview APP(S) Leader
  • 38. 39© The Pythian Group Inc., 2018 Communication Default behaviour
  • 39. 40© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 40 ● Using the read only flag monitoring in ProxySQL by adding a hostgroup-pair to mysql_replication_hostgroupstable Admin> SHOW CREATE TABLE mysql_replication_hostgroupsG *************************** 1. row *************************** table: mysql_replication_hostgroups Create Table: CREATE TABLE mysql_replication_hostgroups ( writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY, reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND reader_hostgroup>0), comment VARCHAR, UNIQUE (reader_hostgroup) ) 1 row in set (0.00 sec) ● Requires monitoring user to be configured correctly ProxySQL read only flag monitoring
  • 40. 41© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 41 ● Orchestrator will flip the read-only flag on master failover ● Setting ApplyMySQLPromotionAfterMasterFailover ● default value was false (Orchestrator version < 3.0.12) ● since 3.0.12 default is true ● Recommendation has always been to enable this. ● Configure MySQL to be read-only by default (best practise) Orchestrator ApplyMySQLPromotionAfterMasterFailover
  • 41. 42© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 42 ● What happens on network partitions? ● Orchestrator sees master being unavailable and promotes a new ● Old master still is writeable (Orchestrator can not reach it to toggle the flag) ● ProxySQL will move the new master (writable) to the writer hostgroup ● ProxySQL will place old master as SHUNNED. ● When network partition gets resolved it will still be writable so it will return to ONLINE. ● this will lead to split brain Default behaviour: Caveats
  • 42. 43© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 43 ● Solutions to prevent this split brain scenario ● STONITH (shoot the other node in the head) ● Run script in ProxySQL scheduler that deletes any SHUNNED writers from the configuration (both from the writer and reader hostgroups) Default behaviour: Caveats / workarounds
  • 43. 44© The Pythian Group Inc., 2018 Communication Orchestrator hooks
  • 44. 45© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 45 ● Orchestrator implements hooks on various stages of the recovery process ● These "hooks" are like events that will be called and you can configure your own scripts to run ● This makes Orchestrator highly customisable and scriptable ● Default (naive) configuration will echo text to /tmp/recovery.log ● Use the hooks! If not for scripting then for alerting / notifying you that something happened Orchestrator hooks: What?
  • 45. 46© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 46 ● Instead of relying on ProxySQL's monitoring of the read-only flag we can now actively push changes to ProxySQL using the hooks. ● Whenever a planned or unplanned master change takes place we will update the ProxySQL. ● Pre-failover: ■ Remove {failedHost} from the writer hostgroup ● Post-failover: ■ If the recovery was successful: Insert {successorHost} in the writer hostgroup ● WARNING: test test test test test test !!!!! (before enabling automated failovers in production) Orchestrator hooks: Why?
  • 46. 47© The Pythian Group Inc., 2018 Communication Decouple communication (between ProxySQL and Orchestrator)
  • 47. 48© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 48 ● Orchestrator hooks are great but... ● ... what happens if there is no communication possible between Orchestrator and ProxySQL? ● Hooks are only fired once ● What if ProxySQL is not reachable? Stop failover? ● You need ProxySQL admin credentials available on Orchestrator The problem
  • 48. 49© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 49 ● Decouple Orchestrator and ProxySQL ● Use Consul as key-value store in between both ● Orchestrator has built-in support to update master coordinates in the K/V store (both for Zookeeper and Consul) ● Configuration settings ● "KVClusterMasterPrefix": "mysql/master", ● "ConsulAddress": "127.0.0.1:8500", ● "ZkAddress": "srv-a,srv-b:12181,srv-c", The solution
  • 49. 50© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 50 ● KVClusterMasterPrefixis the prefix to use for master discovery entries. As example, your cluster alias is mycluster and the master host is some.host-17.comthen you will expect an entry where: ● The Key is mysql/master/mycluster ● The Value is some.host-17.com:3306 ● Additionally following key/values will be available automatically ● mysql/master/mycluster/hostname , value is some.host-17.com ● mysql/master/mycluster/port , value is 3306 ● mysql/master/mycluster/ipv4 , value is 192.168.0.1 ● mysql/master/mycluster/ipv6 , value is <whatever> Which keys and values?
  • 50. 51© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 51 ● Recommended setup for Orchestrator is to run 3 nodes with their own local datastore (MySQL or SQLite) ● Communication between nodes happens using the RAFT protocol. ● This is also the preferred setup for the Consul K/V store ● We install Consul "server" on each Orchestrator nodes ● Consul "server" comes also with an "agent" ● We let the Orchestrator leader send it's updates to the local Consul agent. ● Consul agent updates the Consul leader node and the leader distributes the data to all 3 nodes using the RAFT protocol. Avoiding single-point-of-failures (1)
  • 51. 52© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 52 ● We now have our HA for Orchestrator and Consul. ● We have avoided network partitioning ● Majority vote is required to be the leader on both applications ● If our local Consul agent is unable to reach the Consul leader node, then Orchestrator will not be able to reach its peers and thus not be the Leader node. ● Optional: Orchestrator extends RAFT to implement a yield option to yield to a specific leader. We could implement a cronjob for Orchestrator to always yield Orchestrator leadership to the Consul leader for faster updates but this not a requirement. Avoiding single-point-of-failures (2)
  • 52. 53© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 53 ● Orchestrator really doesn't care all that much for slaves ● Masters are important for HA ● the native support for the K/V store ends with updating the masters to it ("KVClusterMasterPrefix": "mysql/master" ) ● API to the rescue! ● We can create a fairly simple script that runs in a cron ● pull ALL the servers from the API (get JSON response) ● compare the slave entries with values in Consul (for example keys starting with mysql/slaves) ● update Consul if needed What about the slaves?
  • 53. 54© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 54 ● Now Orchestrator is updating Consul K/V (master via native support, slaves via our script) ● Let's install a Consul "agent" on every ProxySQL machine. ● We can now query Consul data via this local agent root@proxysql-1:~ $ consul members Node Address Status Type Build Protocol DC Segment orchestrator-1 10.0.1.2:8301 alive server 1.4.3 2 default <all> orchestrator-2 10.0.2.2:8301 alive server 1.4.3 2 default <all> orchestrator-3 10.0.3.2:8301 alive server 1.4.3 2 default <all> proxysql-1 10.0.1.3:8301 alive client 1.4.3 2 default <default> proxysql-2 10.0.2.3:8301 alive client 1.4.3 2 default <default> How to configure ProxySQL?
  • 54. 55© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 55 ● First option is to use the scripted approach ● Run a script in a cronjob or in the ProxySQL scheduler ● Crawl the Consul K/V store ● Update ProxySQL config How to configure ProxySQL? Pro Con Fairly easy A lot of wasted CPU cycles Fairly quick (ProxySQL scheduler works on a millisecond base)
  • 55. 56© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 56 ● Use consul-template ● Registers as listener to the Consul values ● Every time a value is changed it will re-generate a file from a template ● Example: {{ if keyExists "mysql/master/testcluster/hostname" }} DELETE FROM mysql_servers where hostgroup_id = 0; REPLACE into mysql_servers (hostgroup_id, hostname) values ( 0, "{{ key "mysql/master/testcluster/hostname" }}" ); {{ end }} {{ range tree "mysql/slave/testcluster" }} REPLACE into mysql_servers (hostgroup_id, hostname) values ( 1, "{{ .Key }}{{ .Value }}" ); {{ end }} LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK; How to configure ProxySQL?
  • 56. 57© The Pythian Group Inc., 2018© The Pythian Group Inc., 2019 57 Architecture
  • 57. 58© The Pythian Group Inc., 2018 Questions?
  • 58. 59© The Pythian Group Inc., 2018 Contact Matthias Crauwels crauwels@pythian.com +1 (613) 565-8696 ext. 1215 Twitter @mcrauwel We're hiring!! https://pythian.com/careers