PhxQueue is a high-availability, high-throughput and highly reliable distributed queue based on the Paxos protocol. It guarantees At-Least-Once Delivery. It is widely used in WeChat for WeChat Pay, WeChat Media Platform, and many other important businesses.
Authors: Junjie Liang, Tao He, Haochuan Cui, Qing Huang and Jiatao Xu
Build [Protocol Buffers](https://github.com/google/protobuf/releases) and [glog](https://github.com/google/glog/releases) with `./configure CXXFLAGS=-fPIC --prefix=$DEP_PREFIX`. Then create symlinks:
```sh
rm -r $PHXQUEUE_DIR/third_party/protobuf/
rm -r $PHXQUEUE_DIR/third_party/glog/
ln -s $DEP_PREFIX $PHXQUEUE_DIR/third_party/protobuf
ln -s $DEP_PREFIX $PHXQUEUE_DIR/third_party/glog
```
LevelDB
Build [LevelDB](https://github.com/google/leveldb/releases) in `$PHXQUEUE_DIR/third_party/leveldb/` and `ln -s out-static lib`.
PhxPaxos and PhxRPC
Build [PhxPaxos](https://github.com/Tencent/phxpaxos/releases) in `$PHXQUEUE_DIR/third_party/phxpaxos/`. Build [PhxRPC](https://github.com/Tencent/phxrpc/releases) in `$PHXQUEUE_DIR/third_party/phxrpc/`.
libco
Git clone [libco](https://github.com/Tencent/libco) to `$PHXQUEUE_DIR/third_party/colib/`.
While testing PhxQueue, a lot of logs and data is generated. Run log/clear_log.sh to clear logs and data/clear_data.sh to delete data.
Make sure that you are running these commands against PhxQueue that does not hold any important data.
Commands listed here will result in permanent data loss.
Scheduler gathers global load information from Consumer for disaster recovery and load balancing. If no Scheduler is deployed, Consumer will be assigned according to weight configured.
If you want to deploy Scheduler, you will need to deploy Lock first.
Set use_dynamic_scale = 0 in topicconfig.conf to disable Scheduler.
Deploy these configs to 3 Scheduler nodes and start each node:
For each node, there is a log file where you can trace current node status
and errors. For example, you can access log file for Store node with ID 0 like shown bellow:
PhxQueue
简体中文README
PhxQueue is a high-availability, high-throughput and highly reliable distributed queue based on the Paxos protocol. It guarantees At-Least-Once Delivery. It is widely used in WeChat for WeChat Pay, WeChat Media Platform, and many other important businesses.
Authors: Junjie Liang, Tao He, Haochuan Cui, Qing Huang and Jiatao Xu
Contact us: phxteam@tencent.com
Features
Guaranteed delivery with strict real-time reconciliation
Server-side batch enqueue
Strictly ordered dequeue
Multiple consumer groups
Dequeue speed limits
Dequeue replays
Consumer load balancing
All modules are scalable
Multi-region deployment for Store or Lock nodes
Building automatically
Now that all modules are built, you can continue to quickstart.
Building manually
Download PhxQueue source
Download the phxqueue.tar.gz and un-tar it to
$PHXQUEUE_DIR.Install dependencies
$DEP_PREFIXdiectory for dependency installation:Compile PhxQueue
PhxQueue distribution
PhxQueue is structured like this:
the output files are located in
bin/andlib/, while the sample configure files are located inetc/.Quickstart
The built PhxQueue is ready to run simple demos.
Preparing the setup
PhxQueue accesses multiple files at the same time. Make sure to set high enough (> 4000) open file limit with
ulimit -Snorulimit -n.Starting the Store nodes
Start 3 Store nodes (add
-dif run as daemon) as shown bellow:You can follow the status of the nodes and check for any errors in these log files as shown bellow:
NOTICE: To run properly, at least 2 Store nodes need to be started, otherwise error log will occur below:
Starting the Consumer nodes
Start 3 Consumer nodes:
You can follow the status of the nodes and check for any errors in these log files as shown bellow:
Sending test requests
Now that both Store and Consumer nodes have been deployed, you can use the benchmark tool to send some test requests:
You will get the output from test Producer:
Now let’s see the output of Consumer (only 1 of 3 Consumer nodes):
Running benchmarks
Watch the Consumer log files:
This is an example of the output you can expect from the Consumer log:
Clearing data and logs created during testing
While testing PhxQueue, a lot of logs and data is generated. Run
log/clear_log.shto clear logs anddata/clear_data.shto delete data. Make sure that you are running these commands against PhxQueue that does not hold any important data. Commands listed here will result in permanent data loss.Quickstart with Docker
Quickstart with Docker
Deploy distributed PhxQueue
Normally, each node should be deployed on separate machine. You need to configure
etc/*.confconfiguration files for each node.Files located in directory
etc/:Deloy and modify these files on all target machines.
Deploying Store nodes
Store is the storage module for queues, using the Paxos protocol for replica synchronization.
Deploy these configs to 3 Store nodes and start each node:
Deploying Consumer nodes
Consumer pulls and consumes data from Store.
Deploy these configs to 3 Consumer nodes and start each node:
Deploying Lock nodes (Optional)
Lock is a distributed lock module. You can deploy Lock independently, providing a common distributed lock service.
Set
skip_lock = 1intopicconfig.confto disable distributed Lock.Deploy these configs to 3 Lock nodes and start each node:
Deploying Scheduler nodes (Optional)
Scheduler gathers global load information from Consumer for disaster recovery and load balancing. If no Scheduler is deployed, Consumer will be assigned according to weight configured.
If you want to deploy Scheduler, you will need to deploy Lock first.
Set
use_dynamic_scale = 0intopicconfig.confto disable Scheduler.Deploy these configs to 3 Scheduler nodes and start each node:
Viewing logs
For each node, there is a log file where you can trace current node status and errors. For example, you can access log file for Store node with ID 0 like shown bellow:
Contribution
Please follow Google C++ Style Guide in PRs.