Merge pull request #17 from bastion-rs/move-to-vuepress
Documentation and moving to vuepress
This commit is contained in:
commit
41ce0e1be7
37
README.md
37
README.md
|
@ -1,3 +1,13 @@
|
|||
<!-- --- -->
|
||||
<!-- home: true -->
|
||||
<!-- title: Artillery -->
|
||||
<!-- description: Cluster management & Distributed data protocol -->
|
||||
<!-- actionText: Getting Started -->
|
||||
<!-- actionLink: /#/docs -->
|
||||
<!-- footer: Footer -->
|
||||
<!-- --- -->
|
||||
|
||||
|
||||
<div align="center">
|
||||
<img src="https://raw.githubusercontent.com/bastion-rs/artillery/master/img/artillery_cropped.png" width="512" height="512"><br>
|
||||
</div>
|
||||
|
@ -6,30 +16,3 @@
|
|||
|
||||
<h1 align="center">Artillery: Cluster management & Distributed data protocol</h1>
|
||||
|
||||
|
||||
It contains the modules below:
|
||||
* `artillery-ddata`: Used for distributed data replication
|
||||
* `artillery-core`: Contains:
|
||||
* `cluster`: Prepared self-healing cluster structures
|
||||
* `epidemic`: Infection style clustering
|
||||
* `service_discovery`: Service discovery types
|
||||
* `mdns`: MDNS based service discovery
|
||||
* `udp_anycast`: UDP Anycast based service discovery
|
||||
* `artillery-hierman`: Supervision hierarchy management layer (aka Bastion's core carrier protocol)
|
||||
|
||||
## Examples
|
||||
Below you can find examples to learn Artillery.
|
||||
You can also take a look at the [Core Examples](https://github.com/bastion-rs/artillery/tree/master/artillery-core/examples).
|
||||
|
||||
### Launching a local AP Cluster
|
||||
To spawn a local AP cluster at any size you can use the command below in the root directory of the project:
|
||||
```bash
|
||||
$ deployment-tests/cluster-mdns-ap-test.sh -s 50
|
||||
```
|
||||
|
||||
Argument `-s` defines the amount of nodes in the cluster.
|
||||
To shut down the cluster either use:
|
||||
```bash
|
||||
$ killall cball_mdns_sd_infection
|
||||
```
|
||||
or kill processes one by one to see that cluster is self-healing.
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
yarn global add vuepress
|
||||
yarn global add vuepress-theme-api
|
||||
|
||||
cd site/
|
||||
vuepress build .
|
||||
cd -
|
||||
|
||||
# Always get removed, sigh...
|
||||
touch docs/.nojekyll
|
||||
echo "artillery.bastion.rs" >> docs/CNAME
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>Artillery</title>
|
||||
<meta name="description" content="Cluster management & Distributed data protocol">
|
||||
<meta name="generator" content="VuePress 1.3.1">
|
||||
|
||||
|
||||
<link rel="preload" href="/assets/css/0.styles.40eef163.css" as="style"><link rel="preload" href="/assets/js/app.7413490f.js" as="script"><link rel="preload" href="/assets/js/5.b60eac8b.js" as="script"><link rel="prefetch" href="/assets/js/1.2f71ac0b.js"><link rel="prefetch" href="/assets/js/10.e2c4e6dd.js"><link rel="prefetch" href="/assets/js/3.294f849a.js"><link rel="prefetch" href="/assets/js/4.b92d7a52.js"><link rel="prefetch" href="/assets/js/6.d6285a75.js"><link rel="prefetch" href="/assets/js/7.9042a811.js"><link rel="prefetch" href="/assets/js/8.f2fbc9e9.js"><link rel="prefetch" href="/assets/js/9.7cb4df56.js">
|
||||
<link rel="stylesheet" href="/assets/css/0.styles.40eef163.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app" data-server-rendered="true"><div class="container notfound-page" data-v-6d9b2618><div class="content" data-v-6d9b2618><h1 data-v-6d9b2618>Not Found</h1> <p data-v-6d9b2618>The page you are looking for doesn't exist or misterionsly dissapear.</p> <a href="/" class="backto router-link-active" data-v-6d9b2618>Take me home.</a></div></div><div class="global-ui"></div></div>
|
||||
<script src="/assets/js/app.7413490f.js" defer></script><script src="/assets/js/5.b60eac8b.js" defer></script>
|
||||
</body>
|
||||
</html>
|
|
@ -1 +1 @@
|
|||
artillery.bastion.rs
|
||||
artillery.bastion.rs
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
<div align="center">
|
||||
<img src="https://raw.githubusercontent.com/bastion-rs/artillery/master/img/artillery_cropped.png" width="512" height="512"><br>
|
||||
</div>
|
||||
|
||||
-----------------
|
||||
|
||||
<h1 align="center">Artillery: Cluster management & Distributed data protocol</h1>
|
||||
|
||||
|
||||
# Module Structure
|
||||
|
||||
It contains the modules below:
|
||||
* `artillery-ddata`: Used for distributed data replication
|
||||
* `artillery-core`: Contains:
|
||||
* `cluster`: Prepared self-healing cluster structures
|
||||
* `epidemic`: Infection style clustering
|
||||
* `service_discovery`: Service discovery types
|
||||
* `mdns`: MDNS based service discovery
|
||||
* `udp_anycast`: UDP Anycast based service discovery
|
||||
* `artillery-hierman`: Supervision hierarchy management layer (aka Bastion's core carrier protocol)
|
||||
|
||||
## Examples
|
||||
Below you can find examples to learn Artillery.
|
||||
You can also take a look at the [Core Examples](https://github.com/bastion-rs/artillery/tree/master/artillery-core/examples).
|
||||
|
||||
### Launching a local AP Cluster
|
||||
To spawn a local AP cluster at any size you can use the command below in the root directory of the project:
|
||||
```bash
|
||||
$ deployment-tests/cluster-mdns-ap-test.sh -s 50
|
||||
```
|
||||
|
||||
Argument `-s` defines the amount of nodes in the cluster.
|
||||
To shut down the cluster either use:
|
||||
```bash
|
||||
$ killall cball_mdns_sd_infection
|
||||
```
|
||||
or kill processes one by one to see that cluster is self-healing.
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
|||
(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{194:function(n,w,o){}}]);
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
|||
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{196:function(t,e,n){},202:function(t,e,n){var i=n(1),s=n(203);i({target:"Array",stat:!0,forced:!n(135)((function(t){Array.from(t)}))},{from:s})},203:function(t,e,n){"use strict";var i=n(56),s=n(17),a=n(134),o=n(132),c=n(12),r=n(57),d=n(133);t.exports=function(t){var e,n,l,h,u,f,v=s(t),p="function"==typeof this?this:Array,C=arguments.length,g=C>1?arguments[1]:void 0,k=void 0!==g,_=d(v),m=0;if(k&&(g=i(g,C>2?arguments[2]:void 0,2)),null==_||p==Array&&o(_))for(n=new p(e=c(v.length));e>m;m++)f=k?g(v[m],m):v[m],r(n,m,f);else for(u=(h=_.call(v)).next,n=new p;!(l=u.call(h)).done;m++)f=k?a(h,g,[l.value,m],!0):l.value,r(n,m,f);return n.length=m,n}},204:function(t,e,n){"use strict";var i=n(196);n.n(i).a},217:function(t,e,n){"use strict";n.r(e);n(22),n(202),n(136),n(20),n(58),n(38),n(28);var i=n(23),s={data:function(){return{blocks:[]}},computed:{isEnchanceMode:function(){return!!this.$page.frontmatter.enhance},isBlockLayout:function(){return this.isEnchanceMode||!!this.blocks.length},pageClasses:function(){return{page__container:!0,"page--block-layout":this.isBlockLayout}},lastUpdated:function(){if(this.$page.lastUpdated)return new Date(this.$page.lastUpdated).toLocaleString(this.$lang)},lastUpdatedText:function(){return"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink:function(){if(!1!==this.$page.frontmatter.editLink){var t=this.$site.themeConfig,e=t.repo,n=t.editLinks,s=t.docsDir,a=void 0===s?"":s,o=t.docsBranch,c=void 0===o?"master":o,r=t.docsRepo,d=void 0===r?e:r,l=this.$page.path;if("/"===l.substr(-1)?l+="README.md":l+=".md",d&&n)return(Object(i.a)(d)?d:"https://github.com/".concat(d)).replace(/\/$/,"")+"/edit/".concat(c)+(a?"/"+a.replace(/\/$/,""):"")+l}},editLinkText:function(){return this.$site.themeConfig.editLinkText||"Edit this page"}},watch:{$route:function(t,e){t.path!==e.path&&(this.blocks.length=0,this.isEnchanceMode&&this.$nextTick(this.resolveLayout))}},methods:{resolveLayout:function(){var t=this.$el.children[0],e="";Array.from(t.children).forEach((function(t){!function(t){var e=t.tagName.toLowerCase();return"h1"===e||"h2"===e}(t)?e+=t.outerHTML:(e&&(e+='\n </div>\n <div class="content-block__examples">\n </div>\n </div>\n </div>\n '),e+='\n <div class="content-block">\n <div class="content-block__heading">\n '.concat(t.outerHTML,'\n </div>\n <div class="content-block__body">\n <div class="content-block__cont">\n '))})),e+='\n </div>\n <div class="content-block__examples">\n </div>\n </div>\n </div>\n ',t.innerHTML=e},addBlock:function(t){this.blocks.push(t)}},mounted:function(){this.isEnchanceMode&&this.$nextTick(this.resolveLayout)},created:function(){this.$on("addBlock",this.addBlock)}},a=(n(204),n(4)),o=Object(a.a)(s,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{class:t.pageClasses},[n("Content",{attrs:{custom:""}}),t._v(" "),n("div",{staticClass:"content__footer-container"},[n("div",{staticClass:"content__footer"},[t.editLink?n("div",{staticClass:"edit-link"},[n("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),n("svg",{attrs:{viewBox:"0 0 33 32",version:"1.1",xmlns:"http://www.w3.org/2000/svg",height:"16",width:"16"}},[n("g",{attrs:{id:"Page-1",stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"}},[n("g",{attrs:{id:"github",fill:"#000"}},[n("path",{attrs:{d:"M16.3,0 C7.3,0 -3.55271368e-15,7.3 -3.55271368e-15,16.3 C-3.55271368e-15,23.5 4.7,29.6 11.1,31.8 C11.9,31.9 12.2,31.4 12.2,31 L12.2,28.2 C7.7,29.2 6.7,26 6.7,26 C6,24.2 5,23.7 5,23.7 C3.5,22.7 5.1,22.7 5.1,22.7 C6.7,22.8 7.6,24.4 7.6,24.4 C9.1,26.9 11.4,26.2 12.3,25.8 C12.4,24.7 12.9,24 13.3,23.6 C9.7,23.2 5.9,21.8 5.9,15.5 C5.9,13.7 6.5,12.3 7.6,11.1 C7.4,10.7 6.9,9 7.8,6.8 C7.8,6.8 9.2,6.4 12.3,8.5 C13.6,8.1 15,8 16.4,8 C17.8,8 19.2,8.2 20.5,8.5 C23.6,6.4 25,6.8 25,6.8 C25.9,9 25.3,10.7 25.2,11.1 C26.2,12.2 26.9,13.7 26.9,15.5 C26.9,21.8 23.1,23.1 19.5,23.5 C20.1,24 20.6,25 20.6,26.5 L20.6,31 C20.6,31.4 20.9,31.9 21.7,31.8 C28.2,29.6 32.8,23.5 32.8,16.3 C32.6,7.3 25.3,0 16.3,0 L16.3,0 Z",id:"Shape"}})])])])]):t._e(),t._v(" "),t.lastUpdated?n("time",{staticClass:"last-updated"},[n("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),n("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])])],1)}),[],!1,null,null,null);e.default=o.exports}}]);
|
|
@ -0,0 +1 @@
|
|||
(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{208:function(t,e,s){},281:function(t,e,s){"use strict";var o=s(208);s.n(o).a},284:function(t,e,s){"use strict";s.r(e);var o=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links.","Please try your request again or contact support.","The page you are looking for doesn't exist or misterionsly dissapear."],n={methods:{getMsg:function(){return o[Math.floor(Math.random()*o.length)]}}},i=(s(281),s(4)),r=Object(i.a)(n,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"container notfound-page"},[e("div",{staticClass:"content"},[e("h1",[this._v("Not Found")]),this._v(" "),e("p",[this._v(this._s(this.getMsg()))]),this._v(" "),e("router-link",{staticClass:"backto",attrs:{to:"/"}},[this._v("Take me home.")])],1)])}),[],!1,null,"6d9b2618",null);e.default=r.exports}}]);
|
|
@ -0,0 +1 @@
|
|||
(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{285:function(t,r,e){"use strict";e.r(r);var s=e(4),i=Object(s.a)({},(function(){var t=this.$createElement,r=this._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[r("div",{attrs:{align:"center"}},[r("img",{attrs:{src:"https://raw.githubusercontent.com/bastion-rs/artillery/master/img/artillery_cropped.png",width:"512",height:"512"}}),r("br")]),this._v(" "),r("hr"),this._v(" "),r("h1",{attrs:{align:"center"}},[this._v("Artillery: Cluster management & Distributed data protocol")])])}),[],!1,null,null,null);r.default=i.exports}}]);
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
|||
(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{288:function(e,a,t){"use strict";t.r(a);var s=t(4),l=Object(s.a)({},(function(){var e=this,a=e.$createElement,t=e._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("Block",[t("h1",{attrs:{id:"local-examples"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#local-examples"}},[e._v("#")]),e._v(" Local Examples")])]),e._v(" "),t("Block",[t("h2",{attrs:{id:"cluster-examples"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cluster-examples"}},[e._v("#")]),e._v(" Cluster Examples")]),e._v(" "),t("p",[e._v("Below you can find examples to learn Artillery.\nYou can also take a look at the "),t("a",{attrs:{href:"https://github.com/bastion-rs/artillery/tree/master/artillery-core/examples",target:"_blank",rel:"noopener noreferrer"}},[e._v("Core Examples"),t("OutboundLink")],1),e._v(".")])]),e._v(" "),t("Block",[t("h2",{attrs:{id:"launching-a-local-ap-cluster"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#launching-a-local-ap-cluster"}},[e._v("#")]),e._v(" Launching a local AP Cluster")]),e._v(" "),t("p",[e._v("To spawn a local AP cluster at any size you can use the command below in the root directory of the project.")]),e._v(" "),t("Example",[t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("$ deployment-tests/cluster-mdns-ap-test.sh -s "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("50")]),e._v("\n")])])]),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("$ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("killall")]),e._v(" cball_mdns_sd_infection\n")])])])]),e._v(" "),t("p",[e._v("Argument "),t("code",[e._v("-s")]),e._v(" defines the amount of nodes in the cluster.\nTo shut down the cluster either use "),t("code",[e._v("killall")]),e._v(" or kill processes\none by one to see that cluster is self-healing.")])],1)],1)}),[],!1,null,null,null);a.default=l.exports}}]);
|
|
@ -0,0 +1 @@
|
|||
(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{287:function(e,t,a){"use strict";a.r(t);var r=a(4),i=Object(r.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("Block",[a("h1",{attrs:{id:"getting-started"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[e._v("#")]),e._v(" Getting Started")])]),e._v(" "),a("Block",[a("h2",{attrs:{id:"basics"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#basics"}},[e._v("#")]),e._v(" Basics")]),e._v(" "),a("p",[e._v("To use Artillery, you need to evaluate your requirements for distributed operation very carefully.\nEvery layer in artillery is usable modularly. Artillery uses \"Take it or leave it\" approach.\nIf you don't need it you don't include.")]),e._v(" "),a("p",[e._v("Artillery consists of various layers. Layers can have various consistency degree and capability model.\nArtillery layers are build on top each other. Most basic layer is "),a("code",[e._v("Core")]),e._v(".\nCore layer contains various prepared cluster configurations.\nCurrently it is supporting:")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("AP(Availability, Partition Tolerance")]),e._v(" Cluster mode")]),e._v(" "),a("li",[a("strong",[e._v("CP(Consistency, Partition Tolerance)")]),e._v(" Cluster mode (soon)")])]),e._v(" "),a("p",[e._v("In addition to cluster modes, it contains primitives to build your own cluster structures for your own designated environment.")]),e._v(" "),a("Example",[a("ul",[a("li",[a("code",[e._v("artillery-core")]),e._v(" "),a("ul",[a("li",[a("code",[e._v("cluster")]),e._v(": Prepared self-healing cluster structures")]),e._v(" "),a("li",[a("code",[e._v("epidemic")]),e._v(": Infection style clustering")]),e._v(" "),a("li",[a("code",[e._v("service_discovery")]),e._v(": Service discovery types\n"),a("ul",[a("li",[a("code",[e._v("mdns")]),e._v(": MDNS based service discovery")]),e._v(" "),a("li",[a("code",[e._v("udp_anycast")]),e._v(": UDP Anycast based service discovery\n(aka "),a("a",{attrs:{href:"https://bastion.rs",target:"_blank",rel:"noopener noreferrer"}},[e._v("Bastion"),a("OutboundLink")],1),e._v("'s core carrier protocol)")])])])])])])])],1),e._v(" "),a("Block",[a("h2",{attrs:{id:"distributed-data"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#distributed-data"}},[e._v("#")]),e._v(" Distributed Data")]),e._v(" "),a("p",[e._v("You might want to pass by the distributed configuration part and directly looking forward to have a distributed\ndata primitives. Like replicating your local map to some other instance's local map etc.")]),e._v(" "),a("p",[e._v("This is where "),a("code",[e._v("Ddata")]),e._v(" package kicks in. "),a("code",[e._v("Ddata")]),e._v(" supplies the most basic distributed data dissemination at the highest abstraction level.")]),e._v(" "),a("Example",[a("ul",[a("li",[a("code",[e._v("artillery-ddata")]),e._v(": Used for distributed data replication")])])])],1),e._v(" "),a("Block",[a("h2",{attrs:{id:"hierarchy-management"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#hierarchy-management"}},[e._v("#")]),e._v(" Hierarchy Management")]),e._v(" "),a("p",[e._v("This layer is specifically build for Bastion and it's distributed communication.\nIt contains a Hierarchy Management protocol. This protocol manages remote processes, links as well as their state.")]),e._v(" "),a("Example",[a("ul",[a("li",[a("code",[e._v("artillery-hierman")]),e._v(": Supervision hierarchy management layer")])])])],1)],1)}),[],!1,null,null,null);t.default=i.exports}}]);
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,14 @@
|
|||
module.exports = {
|
||||
title: 'Artillery',
|
||||
dest: '../docs',
|
||||
description: 'Cluster management & Distributed data protocol',
|
||||
theme: 'api',
|
||||
themeConfig: {
|
||||
editLinks: true,
|
||||
sidebarGroupOrder: [
|
||||
'getting-started',
|
||||
'building-blocks',
|
||||
'examples',
|
||||
],
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
<div align="center">
|
||||
<img src="https://raw.githubusercontent.com/bastion-rs/artillery/master/img/artillery_cropped.png" width="512" height="512"><br>
|
||||
</div>
|
||||
|
||||
-----------------
|
||||
|
||||
<h1 align="center">Artillery: Cluster management & Distributed data protocol</h1>
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
---
|
||||
title: 'Primitives'
|
||||
---
|
||||
|
||||
<Block>
|
||||
# Primitives
|
||||
</Block>
|
||||
|
||||
|
||||
<Block>
|
||||
|
||||
Artillery Core consists of various primitives. We will start with Service Discovery primitives and pave out way to Cluster primitives.
|
||||
|
||||
</Block>
|
||||
|
||||
|
||||
<Block>
|
||||
|
||||
## Service Discovery Primitives
|
||||
|
||||
For distributed operation we need to have a service discovery to find out who is operating/serving which services and service capabilities.
|
||||
|
||||
Our design consists of various service discovery techniques.
|
||||
|
||||
</Block>
|
||||
|
||||
|
||||
<Block>
|
||||
|
||||
## UDP Anycast
|
||||
|
||||
We have UDP anycast which allows the devices in the same network to nag each other continuously with a specific set of service requests to form a cluster initiation.
|
||||
|
||||
**NOTE:** Convergance of the UDP anycast might take longer time than the other zeroconf approaches.
|
||||
|
||||
<Example>
|
||||
|
||||
```rust
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Ord, PartialOrd, PartialEq)]
|
||||
struct ExampleSDReply {
|
||||
ip: String,
|
||||
port: u16,
|
||||
}
|
||||
|
||||
let epidemic_sd_config = ExampleSDReply {
|
||||
ip: "127.0.0.1".into(),
|
||||
port: 1337, // Cluster Formation Port of this instance
|
||||
};
|
||||
|
||||
let reply = ServiceDiscoveryReply {
|
||||
serialized_data: serde_json::to_string(&epidemic_sd_config).unwrap(),
|
||||
};
|
||||
|
||||
// Initialize receiver channels
|
||||
let (tx, discoveries) = channel();
|
||||
|
||||
// Register seeker endpoint
|
||||
sd.register_seeker(tx).unwrap();
|
||||
|
||||
// Sometimes you seek for nodes,
|
||||
// sometimes you need to be a listener to respond them.
|
||||
if let Some(_) = seeker {
|
||||
sd.seek_peers().unwrap();
|
||||
} else {
|
||||
sd.set_listen_for_peers(true).unwrap();
|
||||
}
|
||||
|
||||
for discovery in discoveries.iter() {
|
||||
let discovery: ExampleSDReply =
|
||||
serde_json::from_str(&discovery.serialized_data).unwrap();
|
||||
if discovery.port != epidemic_sd_config.port {
|
||||
debug!("Seed node address came");
|
||||
let seed_node = format!("{}:{}", discovery.ip, discovery.port);
|
||||
// We have received a discovery request.
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</Example>
|
||||
|
||||
</Block>
|
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
title: 'Local Examples'
|
||||
---
|
||||
|
||||
<Block>
|
||||
# Local Examples
|
||||
</Block>
|
||||
|
||||
<Block>
|
||||
|
||||
## Cluster Examples
|
||||
Below you can find examples to learn Artillery.
|
||||
You can also take a look at the [Core Examples](https://github.com/bastion-rs/artillery/tree/master/artillery-core/examples).
|
||||
|
||||
</Block>
|
||||
|
||||
<Block>
|
||||
|
||||
## Launching a local AP Cluster
|
||||
To spawn a local AP cluster at any size you can use the command below in the root directory of the project.
|
||||
|
||||
<Example>
|
||||
|
||||
```bash
|
||||
$ deployment-tests/cluster-mdns-ap-test.sh -s 50
|
||||
```
|
||||
|
||||
```bash
|
||||
$ killall cball_mdns_sd_infection
|
||||
```
|
||||
|
||||
</Example>
|
||||
|
||||
Argument `-s` defines the amount of nodes in the cluster.
|
||||
To shut down the cluster either use `killall` or kill processes
|
||||
one by one to see that cluster is self-healing.
|
||||
|
||||
</Block>
|
|
@ -0,0 +1,71 @@
|
|||
---
|
||||
title: 'Getting Started'
|
||||
---
|
||||
|
||||
<Block>
|
||||
# Getting Started
|
||||
</Block>
|
||||
|
||||
|
||||
<Block>
|
||||
|
||||
## Basics
|
||||
|
||||
To use Artillery, you need to evaluate your requirements for distributed operation very carefully.
|
||||
Every layer in artillery is usable modularly. Artillery uses "Take it or leave it" approach.
|
||||
If you don't need it you don't include.
|
||||
|
||||
Artillery consists of various layers. Layers can have various consistency degree and capability model.
|
||||
Artillery layers are build on top each other. Most basic layer is `Core`.
|
||||
Core layer contains various prepared cluster configurations.
|
||||
Currently it is supporting:
|
||||
* **AP(Availability, Partition Tolerance** Cluster mode
|
||||
* **CP(Consistency, Partition Tolerance)** Cluster mode (soon)
|
||||
|
||||
In addition to cluster modes, it contains primitives to build your own cluster structures for your own designated environment.
|
||||
|
||||
<Example>
|
||||
|
||||
* `artillery-core`
|
||||
* `cluster`: Prepared self-healing cluster structures
|
||||
* `epidemic`: Infection style clustering
|
||||
* `service_discovery`: Service discovery types
|
||||
* `mdns`: MDNS based service discovery
|
||||
* `udp_anycast`: UDP Anycast based service discovery
|
||||
(aka [Bastion](https://bastion.rs)'s core carrier protocol)
|
||||
|
||||
</Example>
|
||||
|
||||
</Block>
|
||||
|
||||
<Block>
|
||||
|
||||
## Distributed Data
|
||||
|
||||
You might want to pass by the distributed configuration part and directly looking forward to have a distributed
|
||||
data primitives. Like replicating your local map to some other instance's local map etc.
|
||||
|
||||
This is where `Ddata` package kicks in. `Ddata` supplies the most basic distributed data dissemination at the highest abstraction level.
|
||||
|
||||
<Example>
|
||||
|
||||
* `artillery-ddata`: Used for distributed data replication
|
||||
|
||||
</Example>
|
||||
|
||||
</Block>
|
||||
|
||||
|
||||
<Block>
|
||||
|
||||
## Hierarchy Management
|
||||
|
||||
This layer is specifically build for Bastion and it's distributed communication.
|
||||
It contains a Hierarchy Management protocol. This protocol manages remote processes, links as well as their state.
|
||||
|
||||
<Example>
|
||||
|
||||
* `artillery-hierman`: Supervision hierarchy management layer
|
||||
|
||||
</Example>
|
||||
</Block>
|
Loading…
Reference in New Issue