{"id":3740,"date":"2018-03-05T10:42:33","date_gmt":"2018-03-05T09:42:33","guid":{"rendered":"https:\/\/www.devco.net\/?p=3740"},"modified":"2018-03-05T10:47:15","modified_gmt":"2018-03-05T09:47:15","slug":"choria-progress-update","status":"publish","type":"post","link":"https:\/\/www.devco.net\/archives\/2018\/03\/05\/choria-progress-update.php","title":{"rendered":"Choria Progress Update"},"content":{"rendered":"
It’s been a while since I posted about Choria and where things are. There are major changes in the pipeline so it’s well overdue a update.<\/p>\n
The features mentioned here will become current in the next release cycle – about 2 weeks from now.<\/p>\n
On the next release it can manage:<\/p>\n
To show what I am on about, imagine this is all that is required to configure a cluster of 3 production ready brokers capable of hosting 50k or more Choria managed nodes on modestly specced machines:<\/p>\n
\r\nplugin.choria.broker_network = true\r\nplugin.choria.network.peers = nats:\/\/choria1.example.net:4223, nats:\/\/choria2.example.net:4223, nats:\/\/choria3.example.net:4223\r\nplugin.choria.stats_address = ::\r\n<\/pre>\nOf course there is Puppet code to do this for you in choria::broker<\/em>.<\/p>\nThat’s it, start the choria-broker<\/em> daemon and you’re done – and ready to monitor it using Prometheus. Like before it’s all TLS and all that kinds of good stuff.<\/p>\nFederation Brokers<\/H2>
\nWe had good success with the Ruby Federation Brokers but they also had issues particularly around deployment as we had to deploy many instances of them and they tended to be quite big Ruby processes.<\/p>\n
The same choria-broker<\/em> that hosts the Network Broker will now also host a new Golang based Federation Broker network. Configuration is about the same as before you don’t need to learn new things, you just have to move to the configuration in choria::broker<\/em> and retire the old ones.<\/p>\n<\/center><\/p>\nUnlike the past where you had to run 2 or 3 of the Federation Brokers per node you now do not run any additional processes, you just enable the feature in the singular choria-broker<\/em>, you only get 1 process. Internally each run 10 instances of the Federation Broker, its much more performant and scalable.<\/p>\nMonitoring is done via Prometheus.<\/p>\n
Data Adapters<\/H2>
\nPreviously we had all kinds of fairly bad schemes to manage registration in MCollective. The MCollective daemon would make requests<\/em> to a registration<\/em> agent, you’d designate one or more nodes as running this agent and so build either a file store, mongodb store etc.<\/p>\nThis was fine at small size but soon enough the concurrency in large networks would overwhelm what could realistically be expected from the Agent mechanism to manage.<\/p>\n
I’ve often wanted to revisit that but did not know what approach to take. In the years since then the Stream Processing world has exploded with tools like Kafka, NATS Streaming and offerings from GPC, AWS and Azure etc.<\/p>\n
Data Adapters are hosted in the Choria Broker and provide stateless, horizontally and vertically scalable Adapters that can take data from Choria and translate and publish them into other systems.<\/p>\n
<\/center><\/p>\nToday I support NATS Streaming and the code is at first-iteration quality, problems I hope to solve with this:<\/p>\n
\n- Very large global scale node metadata ingest<\/li>\n
- IoT data ingest – the upcoming Choria Server is embeddable into any Go project and it can exfil data into Stream Processors using this framework<\/li>\n
- Asynchronous RPC – replies to requests streaming into Kafka for later processing, more suitable for web apps etc<\/li>\n
- Adhoc asynchronous data rewrites – we have had feature requests where person one can make a request but not see replies, they go into Elastic Search<\/li>\n<\/ul>\n
Plugins<\/H2>
\nAfter 18 months of trying to get Puppet Inc to let me continue development on the old code base I have finally given up. The plugins are now hosted in their own GitHub Organisation<\/a>.<\/p>\nI’ve released a number of plugins that were never released under Choria.<\/p>\n
I’ve updated all their docs to be Choria specific rather than out dated install docs.<\/p>\n
I’ve added Action Policy rules allowing read only actions by default – eg. puppet status<\/em> will work for anyone, puppet runonce<\/em> will give access denied.<\/p>\nI’ve started adding Playbooks the first ones are mcollective_agent_puppet::enable<\/em>, mcollective_agent_puppet::disable<\/em> and mcollective_agent_puppet::disable_and_wait<\/em>.<\/p>\nEmbeddable Choria<\/H2>
\nThe new Choria Server is embeddable into any Go project. This is not a new area of research for me – this was actually the problem I tried to solve when I first wrote the current gen MCollective, but i never got so far really.<\/p>\n