These are chat archives for akkadotnet/akka.net

6th
Apr 2018
Jessie Wadman
@JessieWadman
Apr 06 2018 12:40

I'm curious to know what indexing patterns people are using for persistent, remembered, sharded entities, when you need to lookup/address them by something other than the entity ID. Since shards can migrate between nodes, there's always a chance that a shard is currently "offline", so broadcasting/aggregating cant' always be consistent (i.e. while a shard is starting up on a node and loading all entities, those entities won't respond to the broadcast). Consider you have an entity called Contact, with it's ContactID, and you want to find all contacts with a specific phone number. You could of course map the index in a SQL table or something, and do the lookup there. But I'd like to avoid a database roundtrip if possible. Currently I'm using a secondary sharded entity whose entity ID is the "indexed" field, that does nothing other than rewrap the message with the now-known actual EntityID and forward it to its counterpart. It works well, but if you index 4-5 fields, for 100K entities, then you suddenly have 500K-600K entities that a cluster needs to fetch from the event journal on startup (instead of just the 100K), which slows down the startup significantly (lots of DB roundtrips). I've experimented with a cluster singleton that keeps track of indexes, and whenever entities are recovered/altered, they notify the singleton. It works great when the cluster is up and running, and it's fast, but when booting up, lookups return false negatives because the shard hasn't loaded yet and the entities haven't registered. So, I'm curious to know what solutions other people have found for this type of scenario. Are all the cool kids using doing this outside of Akka with SQL tables or similar?

I also considered using singleton with the broadcast/aggregate pattern against the entities, and hook into the cluster node and sharding lifecycle messages to keep track of when "partitions" are online or offline, and buffer broadcasting whenever one of the shards is offline, but that hits pretty hard against "availability" metric.

Onur Gumus
@OnurGumus
Apr 06 2018 18:23
image.png
Hey guys, I am playing with intellitrace support of akka messages
How do you like it?
Aaron Stannard
@Aaronontheweb
Apr 06 2018 19:29
@nathvi DotNetty powers the Azure IoT hub
and it's a port of Netty, which is itself very highly battle tested
DotNetty could afford to be more robust in the QA department though
Bartosz Sypytkowski
@Horusiath
Apr 06 2018 22:35
@JessieWadman at this moment there's no build in support for sharded entities querying mechanics. It's possible to build one either using event journals with live queries, or distributed data.