Skip to content
/ wescale Public

WeScale is a Modern MySQL proxy that supports read-write-split, read-after-write-consistency, load balancing and OnlineDDL.

License

Notifications You must be signed in to change notification settings

wesql/wescale

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WeScale

LICENSE Language
Unit Test (mysql57) Unit Test (mysql80) E2E Test MTR Test

WeScale is a database proxy designed to enhance the scalability, performance, security, and resilience of your applications.
By managing connections, read-write-split, read-after-write-consistency, load balancing, WeScale offers a valuable tool for developers and database administrators.

Getting Started

  • To Get Started On Your Local Machine with WeScale, simply clone the repository and follow the installation instructions provided in the documentation.
  • To Deploy WeScale on Kubernetes, you can use the powerful Kubeblocks Operator to quickly launch a WeScale cluster in a Kubernetes cluster. We recommend this method for production environments.

Getting Started with Docker

To Start WeScale with Docker, you can simply run the following command:

docker network create wescale-network

docker run -itd --network wescale-network --name mysql-server \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=passwd \
  -e MYSQL_ROOT_HOST=% \
  -e MYSQL_LOG_CONSOLE=true \
  mysql/mysql-server:8.0.32 \
  --bind-address=0.0.0.0 \
  --port=3306 \
  --log-bin=binlog \
  --gtid_mode=ON \
  --enforce_gtid_consistency=ON \
  --log_replica_updates=ON \
  --binlog_format=ROW

docker run -itd --network wescale-network --name wescale \
  -p 15306:15306 \
  -w /vt/examples/wesql-server \
  -e MYSQL_ROOT_USER=root \
  -e MYSQL_ROOT_PASSWORD=passwd \
  -e MYSQL_PORT=3306 \
  -e MYSQL_HOST=mysql-server \
  apecloud/apecloud-mysql-scale:0.3.7 \
  /vt/examples/wesql-server/init_single_node_cluster.sh

Now you can connect to WeScale and the original MySQL server:

# Connect to WeScale
mysql -h127.0.0.1 -uroot -ppasswd -P15306

# You can still connect to the original MySQL server
mysql -h127.0.0.1 -uroot -ppasswd -P3306

Clean up the containers:

docker rm -f mysql-server wescale
docker network rm wescale-network

Blogs

Documentation

Developer

Features

Connection Management: WeScale efficiently manages connections to your database, reducing the overhead on your application and improving performance. WeScale relieves you of the worry of the max_connection problem in your database.

Read Write Split: WeScale simplify application logic by automatically routing read queries to read-only nodes and write queries to the primary node. This is achieved by parsing and analyzing SQL statements, which ensures efficient use of available resources.

Read After Write Consistency: When an application writes data to the primary node and subsequently reads it on a read-only node, WeScale makes sure that the data that was just written to the primary node can be accessed and read from the read-only node.

Load Balancing: The proxy intelligently routes queries to the appropriate read-only nodes using various load balancing policies. This ensures that the workload is evenly distributed across all available nodes, optimizing performance and resource utilization

Transparent Failover: WeScale is capable of automatically detecting failovers and buffering application SQL in its memory while keeping application connections intact, thus enhancing application resilience in the event of database failures.

Contributing

We welcome contributions to WeScale! If you have any ideas, bug reports, or feature requests, please feel free to open an issue or submit a pull request.

License

WeScale is released under the Apache 2.0 License.

Acknowledgements

WeScale is a fork of the Vitess project, which is a database clustering system for horizontal scaling of MySQL. We would like to thank the Vitess team for their hard work.