1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
//! A message broadcasting library based on the Plumtree/HyParView algorithms. //! //! # Properties //! //! ## Pros //! //! - Nearly optimal message transmitting count //! - Usually messages are broadcasted via a spanning tree //! - Only the nodes interested in the same messages belong to the same cluster //! - Scalable //! - Theoretically, it can handle ten-thousand of nodes or more //! - High fault tolerance //! - Spanning trees are automatically repaired if there are crashed nodes //! - Dynamic membership //! - Nodes can be added to (removed from) a cluster at any time //! //! ## Cons //! //! - No strong guarantee about connectivity of the nodes in a cluster //! - No strong guarantee about delivery count of a message //! - No guarantee about messages delivery order //! //! If some of the above guarantees are mandatory for your application, //! it is need to be provided by upper layers. //! //! # References //! //! - [HyParView: a membership protocol for reliable gossip-based broadcast][HyParView] //! - [Plumtree: Epidemic Broadcast Trees][Plumtree] //! //! [HyParView]: http://asc.di.fct.unl.pt/~jleitao/pdf/dsn07-leitao.pdf //! [Plumtree]: http://www.gsd.inesc-id.pt/~ler/reports/srds07.pdf #![warn(missing_docs)] extern crate atomic_immut; #[macro_use] extern crate bytecodec; extern crate fibers; extern crate fibers_rpc; extern crate futures; extern crate hyparview; extern crate plumtree; extern crate prometrics; extern crate rand; #[macro_use] extern crate slog; #[macro_use] extern crate trackable; pub use clock::Clock; pub use error::{Error, ErrorKind}; pub use hyparview_misc::{HyparviewNode, HyparviewNodeOptions}; pub use message::{Message, MessageId, MessagePayload}; pub use node::{Node, NodeBuilder}; pub use node_id::{LocalNodeId, NodeId}; pub use plumtree_misc::{PlumtreeNode, PlumtreeNodeOptions, PlumtreeSystem}; pub use service::{Service, ServiceBuilder, ServiceHandle}; mod clock; mod codec; mod error; mod hyparview_misc; mod message; mod node; mod node_id; mod plumtree_misc; mod rpc; mod service; pub mod metrics; /// This crate specific `Result` type. pub type Result<T> = std::result::Result<T, Error>;