Mark,

I'm very interested in this and would love to see this progress.  I was
just taking a look at v8ken yesterday.  It would be great to see some
action happening on NodeKen.

Cool stuff.


On Mon, Aug 12, 2013 at 5:19 PM, Mark Miller <erig...@gmail.com> wrote:

> [+cutsem, +btulloh]
>
> Hi Tristan, you may be interested in a recent paper on Dr. SES by Tom Van
> Cutsem, Bill Tulloh, and myself: <
> http://research.google.com/pubs/pub40673.html>. In it we explain our
> plans and hopes for Dr. SES, (Distributed Resilient Secure EcmaScript). I
> say hopes because part of this depends on another project, NodeKen, that we
> hope to be the successor to v8Ken <https://github.com/supergillis/v8-ken>,
> but which is not currently in active development. (Tom, is this true?) For
> NodeKen and Dr. SES, we expect we would proceed with one Node process per
> actor, at least at first, since performance is not currently a priority for
> this work.
>
>
>
> On Mon, Aug 12, 2013 at 6:39 AM, Tristan Slominski <
> tristan.slomin...@gmail.com> wrote:
>
>> I've been working on this type of problem from different angles for a few
>> years now.
>>
>> On top of Node.js it is relatively easy to build an actor framework,
>> especially if you are familiar with actor patterns and how actors should
>> communicate.
>>
>> I don't understand what problems you hope to solve with the actor model
>> that don't fit a single event loop pattern? Actors are concurrent, any
>> actor solution ought to be implementable on single event loop, perhaps not
>> as efficiently as would be possible otherwise in Node.js. Do you have
>> specific examples of synchronous operations that cannot be made
>> asynchronous? This also refers to your other comment. What is the reasoning
>> behind actors running in isolated event loops? Concurrency can be
>> accomplished on one event loop. Are you looking for parallelism?
>>
>> What is the purpose of work-stealing scheduler? Is that where you need to
>> start? Perhaps a design with a simple scheduler that can later be upgraded
>> independently would be easier to do initially?
>>
>> I would say that one of your missing criteria is Object Capability (
>> http://en.wikipedia.org/wiki/Object-capability_model). This is missing
>> in Akka for sure, I think it is also missing in Erlang but I'm not as sure
>> about that one. A good place to start is to make actor addresses
>> unforgeable and force explicit actor address passing in messages (no
>> implicit "sender" in messages). This enables you to reason (in mathematical
>> proof sense) about security of your actor configuration. If you find
>> yourself getting actors by name (from a string), you've lost object
>> capability. This is not to be confused with externally known "receptionist"
>> actors, there's a somewhat crowbar separation there.
>>
>> As far as how to break up actors so that they perform reasonably on
>> Node.js, (and perhaps this is what you mean by running them in multiple
>> event loops) actors that end up working together, tend to form what's
>> commonly referred to in literature as actor configurations. You can think
>> of configurations as somewhat analogous to linux control groups, that is,
>> they can be sponsored with a fixed amount of resources (technically, every
>> single actor can be sponsored, but it seems configurations are a better
>> "batch size"). You could run a lot of configurations on the same event
>> loop, but then, you could start multiple processes with actor
>> configurations of their own. This is how you could start to abstract
>> computation in a way that would be meaningful and bound to hardware
>> resources that you have. This is also how you could start moving toward
>> running untrusted code and actor isolation.
>>
>> Once you figure out how to comfortably scale on one machine, perhaps
>> using multiple Node.js processes each running multiple actor
>> configurations, then you'll have to solve the problem of actors being able
>> to talk to actors on other machines. The
>> centralized/single-point-of-failure way of doing that is relatively
>> straightforward. I'm more interested in how to do it in a decentralized
>> way. I have a project that is getting near ready to be tested that is an
>> attempt at solving that (sort of Node.js userspace ZMQ-like point-to-point
>> with Kademlia DHT discovery mechanism).
>>
>> I'm happy to talk at length about this stuff and perhaps collaborate.
>> Ping me if you'd like.
>>
>> Cheers,
>>
>> Tristan Slominski
>> Github: https://github.com/tristanls
>> Twitter: @tristanls
>>
>>
>> On Sunday, August 11, 2013 5:38:31 PM UTC-5, Kevin Swiber wrote:
>>>
>>> I'm contemplating an experiment to bring an Erlang-like "process" model
>>> to Node.js.
>>>
>>> I'm curious if anyone has been down this path before or if there's prior
>>> art I haven't stumbled upon yet.
>>>
>>> Background: I've been working with Node for a couple of years now.  The
>>> default answer to multi-threading Node is "don't do it."  This experiment
>>> challenges that advice.  There are many benefits to multi-threading, though
>>> they admittedly bring features not promised by Node core.  I'm fine with
>>> that.
>>>
>>> Inspiration: Erlang implements an Actor model for concurrency.  A
>>> process running in Erlang's VM runs on a thread underneath the covers.  The
>>> VM implements a work-stealing task scheduler to manage the load
>>> effectively.  From here on out, I'll refer to the "Erlang process" style
>>> pattern as an Actor.  (Note: I'm no expert in Erlang.  Some of this might
>>> be wrong. :)
>>>
>>> The Node event loop is powerful, but unfortunately, not all operations
>>> are asynchronous in nature.  For problems whose solution does not fit the
>>> single event loop pattern, I'd like to see an alternative emerge.
>>>
>>> Current thinking on design:
>>> * Actors should have access to all Node's capabilities.
>>> * Actors should run in isolated event loops.
>>> * Actors should communicate via message passing.
>>> * No shared state.
>>> * Actors should take advantage of a V8 Isolate.
>>> * A work-stealing task scheduler should be implemented under the covers.
>>> * Actors can spawn other actors.
>>>
>>> The scheduler seems like one of the hardest pieces to implement (IMHO).
>>>  For that, it might be worth investigating Intel's Threading Building
>>> Blocks[1] or the Cilk project[2].
>>>
>>> Ideally, this could all be accomplished via modules without rewriting
>>> any part of Node core.
>>>
>>> So... what am I missing?  Is there a giant hurdle that makes this nearly
>>> impossible?  Distributed systems made of actors using arbitrary
>>> computational complexity and having the ability to take advantage of the
>>> Node ecosystem seems very compelling to me.
>>>
>>> [1] 
>>> http://**threadingbuildingblocks.org/<http://threadingbuildingblocks.org/>
>>> [2] 
>>> http://supertech.csail.**mit.edu/cilk/<http://supertech.csail.mit.edu/cilk/>
>>>
>>> Cheers,
>>>
>>> --
>>> Kevin Swiber
>>> Projects: https://github.com/kevinswiber
>>> Twitter: @kevinswiber
>>>
>>  --
>> --
>> Job Board: http://jobs.nodejs.org/
>> Posting guidelines:
>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> You received this message because you are subscribed to the Google
>> Groups "nodejs" group.
>> To post to this group, send email to nodejs@googlegroups.com
>> To unsubscribe from this group, send email to
>> nodejs+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/nodejs?hl=en?hl=en
>>
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "nodejs" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to nodejs+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>
>
>
>
> --
> Text by me above is hereby placed in the public domain
>
>   Cheers,
>   --MarkM
>
> --
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to nodejs@googlegroups.com
> To unsubscribe from this group, send email to
> nodejs+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>
> ---
> You received this message because you are subscribed to the Google Groups
> "nodejs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to nodejs+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>



-- 
Kevin Swiber
Projects: https://github.com/kevinswiber
Twitter: @kevinswiber

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to nodejs@googlegroups.com
To unsubscribe from this group, send email to
nodejs+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nodejs+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to