Live data from Hacker News

Stream Processing for Go

blog.wallaroolabs.com

11–20 of 35 posts

Re: Stream Processing for Go

#11
post #9

Does Wallaroo have Apache Kafka support?

Yes. TCP and Kafka are the currently supported Source and Sink types. We are in the process of improving the Kafka support. Additionally, we are in the design phase for providing APIS in Go and Python to make it easier for Wallaroo users to provide their own sources and sinks.

[deleted]

Re: Stream Processing for Go

#12
Wow, Pony! Pony is one of my favorite young languages. It fits a similar niche that Go fits (not saying that either language can't be used for other purposes), in that they both are great for building cli tools with good concurrency primitives.

Pony, however, uses the Actor model like Erlang (although the programming model is a bit different). In my opinion this is a superior model for concurrency than goroutines. I highly recommend checking it out if you have any interest in cli tools or erlang/elixir.

Re: Stream Processing for Go

#15
post #12

Wow, Pony! Pony is one of my favorite young languages. It fits a similar niche that Go fits (not saying that either language can't be used for other purposes), in that they both are great for building cli tools with good concurrency primitives. Pony, however, uses the Actor model like Erlang (although the programming model is a bit different). In my opinion this is a superior model for concurrency than goroutines. I…

Yes, pony stacks up nicely among the growing list of compiled languages, based on features:

https://docs.google.com/spreadsheets/d/1BAiJR026ih1U8HoRw__n...

Re: Stream Processing for Go

#16
post #12

Wow, Pony! Pony is one of my favorite young languages. It fits a similar niche that Go fits (not saying that either language can't be used for other purposes), in that they both are great for building cli tools with good concurrency primitives. Pony, however, uses the Actor model like Erlang (although the programming model is a bit different). In my opinion this is a superior model for concurrency than goroutines. I…

In my view and experience, the actor model and the CSP model of Go and others (which is also very similar to Flow-Based Programming (FBP) if using buffered channels), can actually fit together very nicely, with each of them sitting at different abstraction levels:

- The actor model for high-level coordination and communication

- CSP and/or FBP at the low-level, for high performance processing.

The reason for this is mainly that CSP/FBP inherently supports blocking channels between processes when processes are busy (or channels are full for FBP), thus providing implicit backpressure. This can simplify low-level programming a lot, since you don't need to worry about over-filled mailboxes or overbooked CPUs. OTOH, for communication e.g. across a cluster, this becomes problematic since you can't rely on the same level of integrity of the network connections ... meaning that the very communication-intensive nature of CSP/FBP might be less of a good fit.

Thus in my view, the actor model would fit better for communicating between services which are internally implemented e.g. with CSP/FBP.

I wrote a post about this, some time ago:

http://bionics.it/posts/flowbased-vs-erlang-message-passing

It will be interesting to see whether Pony manages to fill more than just the coordination role. Given its much higher raw-crunching performance, perhaps that is the case. I'm a little worried about the lack of implicit back-pressure (due to the actor model), but let's see.

Perhaps because of its high-performance, back-pressure won't be too costly to implement anyway? One can hope. Would be nice with a language that can encompass both programming paradigms, and be suited for the full spectrum between low-level crunching and high-level coordination and communication.

Re: Stream Processing for Go

#17
post #16
post #12

Wow, Pony! Pony is one of my favorite young languages. It fits a similar niche that Go fits (not saying that either language can't be used for other purposes), in that they both are great for building cli tools with good concurrency primitives. Pony, however, uses the Actor model like Erlang (although the programming model is a bit different). In my opinion this is a superior model for concurrency than goroutines. I…

In my view and experience, the actor model and the CSP model of Go and others (which is also very similar to Flow-Based Programming (FBP) if using buffered channels), can actually fit together very nicely, with each of them sitting at different abstraction levels: - The actor model for high-level coordination and communication - CSP and/or FBP at the low-level, for high performance processing. The reason for this is…

the actor model in Erlang and (recently!) in Pony implements something even better: explicit backpressure by deprioritizing senders to busy mailboxes. The model can do this because it includes the scheduler in its scope, which doesn't happen in CSP.

Re: Stream Processing for Go

#18
post #16

Earlier quoted context omitted.

In my view and experience, the actor model and the CSP model of Go and others (which is also very similar to Flow-Based Programming (FBP) if using buffered channels), can actually fit together very nicely, with each of them sitting at different abstraction levels: - The actor model for high-level coordination and communication - CSP and/or FBP at the low-level, for high performance processing. The reason for this is…

the actor model in Erlang and (recently!) in Pony implements something even better: explicit backpressure by deprioritizing senders to busy mailboxes. The model can do this because it includes the scheduler in its scope, which doesn't happen in CSP.

Interesting. thanks for the info!

Re: Stream Processing for Go

#19
post #16
post #12

Wow, Pony! Pony is one of my favorite young languages. It fits a similar niche that Go fits (not saying that either language can't be used for other purposes), in that they both are great for building cli tools with good concurrency primitives. Pony, however, uses the Actor model like Erlang (although the programming model is a bit different). In my opinion this is a superior model for concurrency than goroutines. I…

In my view and experience, the actor model and the CSP model of Go and others (which is also very similar to Flow-Based Programming (FBP) if using buffered channels), can actually fit together very nicely, with each of them sitting at different abstraction levels: - The actor model for high-level coordination and communication - CSP and/or FBP at the low-level, for high performance processing. The reason for this is…

Well, and I was so busy writing this down that I didn't realize that is exactly a very good motivation for what was just done here: integrating Wallaroo with Go - Congrats! :D

Re: Stream Processing for Go

#20
post #16

Earlier quoted context omitted.

In my view and experience, the actor model and the CSP model of Go and others (which is also very similar to Flow-Based Programming (FBP) if using buffered channels), can actually fit together very nicely, with each of them sitting at different abstraction levels: - The actor model for high-level coordination and communication - CSP and/or FBP at the low-level, for high performance processing. The reason for this is…

the actor model in Erlang and (recently!) in Pony implements something even better: explicit backpressure by deprioritizing senders to busy mailboxes. The model can do this because it includes the scheduler in its scope, which doesn't happen in CSP.

This was never meant to be a complete solution to back pressure in Erlang and has recently been remove for the next major release: https://github.com/erlang/otp/commit/2e601a2efc19d64ed0628a5...

I’ve heard speculation that it really only helped scheduler efficiency and this didn’t apply all that well on SMP schedulers and has finally been removed since non-SMP builds are no longer supported.

As for Pony, their actor model doesn’t support selectively receiving messages so their queue handling may have some different trades to make there, as well as interaction with primitives like promises (which are used where Erlang would prefer a ref tagged receive clause). Spooneybarger has done work on backpressure in Pony so maybe he or other Wallaroo labs people can elaborate.

Post reply on HN