bastion-rs / artillery Goto Github PK
View Code? Open in Web Editor NEWFire-forged cluster management & Distributed data protocol
Home Page: https://artillery.bastion-rs.com
License: Apache License 2.0
Fire-forged cluster management & Distributed data protocol
Home Page: https://artillery.bastion-rs.com
License: Apache License 2.0
Quickwit is relying on artillery-core. A painful bug on the SWIM algorithm was recently merged, but the crates has not been published since then..
Would it be possible to have the artillery core crate published?
@Kerollmops mentioned that it is better. So let it be.
I am building an application using artillery-core by referring to the sample here.
https://github.com/bastion-rs/artillery/blob/master/artillery-core/examples/cball_infection.rs
I have successfully brought up a three-node cluster, but when I start the third node, I get frequent SuspectedDown
.
Even with a two-node cluster, there is no problem in the beginning, but after a few minutes, the SuspectedDown
may occur.
What can I do to solve this problem?
Is your feature request related to a problem? Please describe.
Right now, the peer knows only how many peers are alive and dead. But, there is no way to get details of the peer. So, we should support a way to send a message to the peer.
My use-case:
My peer listening on two ports. One is by the epidemic and another one is grpc server. All my application logic is on the grpc server. So, I need a way to communicate with my peers to get the information that I want.
How this feature helps me?
As soon I get an alive event, I'll ask for the required details which I want. Then the receiver peer will respond to my question.
Describe the solution you'd like
I need cluster.send_payload method which takes destination peer id and payload as a parameter and sends the payload to the destination peer.
Include chaotic fail points with various randomizations to test out the current cluster configurations.
After discovering this project, I then found the CRAQ paper and began reading it. In that paper, I noticed this paragraph:
Building a fault-tolerant coordination service for distributed applications is notoriously error prone. An
earlier version of CRAQ contained a very simple, centrally controlled coordination service that maintained
membership management. We subsequently opted to leverage ZooKeeper however, to provide CRAQ
with a robust, distributed, high-performance method for tracking group membership and an easy way to
store chain metadata. Through the use of Zookeper, CRAQ nodes are guaranteed to receive a
notification when nodes are added to or removed from a group. Similarly, a node can be notified when
metadata in which it has expressed interest changes.
I've noticed in other implementations of CRAQ, I've seen them replace ZooKeeper with protocols like RAFT. Effectively using Raft for the coordination service and CRAQ for k/v storage.
How does Artillery maintain chain metadata for the cluster? Or is it only using epidemic protocals to distribute metadata?
Everything compiles but that doesn't mean that sporadic failures won't occur. Failpoints should run with the run-pass test harness.
Self-explanatory; We want to run checks.sh against the codebase as part of GitHub Actions.
Using docsify I have initialized the documentation under the docs. But it is not visible under bastion.rs.
Most probably artillery.bastion.rs would be the best domain to land to the documentation.
Currently, it is not visible. Let's make it visible :)
Currently, artillery-core detect time out responses by comparing two times based on SystemTime, see code
But using SystemTime to detect time out could lead to weird behavior as it is not monotonic. Would be nice to use Instant
instead.
We need some internal management for message types.
Lifecycle Commands (exposed)
Stop
(stops polling exec
or stops the children group's elements or supervised elements)Kill
(stops polling exec
or cancels the children group's elements or supervised elements)Start
(start polling exec
or start the children group's elements or supervised elements)Notifications
Dead
(when exec
successfully finished its executiong or Stop
/Kill
was received or one the elements of the children group stopped)Faulted
(when exec
panics or returns an error or one elements of the children group faulted)Direct Communication (exposed)
Tell
(a message)Ask
(a message with a channel to answer with another message)Remote Communication (exposed)
Deploy
(makes a supervisor supervise a new children group or supervisor)Prune
(TODO)SuperviseWith
(changes the supervision strategy of a supervisor)Need to write a vector clock impl over the state passes to resolve conflicts.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.