Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Align Go implementation with .NET #406

Closed
rogeralsing opened this issue Nov 1, 2020 · 11 comments
Closed

Align Go implementation with .NET #406

rogeralsing opened this issue Nov 1, 2020 · 11 comments
Labels

Comments

@rogeralsing
Copy link
Collaborator

rogeralsing commented Nov 1, 2020

There are some major changes that have been added to the dotnet version of Proto.Actor that needs to be ported over to Go also:

ActorSystem

ActorSystem, instead of the current global allocation of actors, we introduced the Akka-like ActorSystem to Proto.Actor dotnet.
This helps with configuration and testing. e.g. it makes it possible to run multiple remote and cluster instances in a single test.
This is a fairly major rewrite that needs to be completed before any other updates can be ported over.

ActorSystem Configuration

Minor update where it is possible to configure DeadLetter logging to throttle after x messages in y time.

IIdentityLookup

IIdentityLookup, allows for pluggable cluster actor identity lookups.
e.g. dotnet now has a MongoIdentityLookup, which becomes the source of truth for actor placements.

Cluster vs Remote configuration

Wit the introduction of IIdentityLookup, the "Known kinds" of remote has been split into two, RemoteKinds and ClusterKinds.
The functionality is still the same, but the backing implementations can differ.
e.g. cluster actors are initialized with cluster information.

ClusterInit

Related to the above, each cluster actor is initialized with a ClusterInit message upon start, this message contains the Identity, Kind and Cluster instance information.

Cluster Actor Placement strategies

We are also working on adding more strategies for Cluster actor placement. e.g. a "Local affinity strategy", where the actors are spawned at the first node that request them (if possible).

This works extremely well with scenarios such as ingesting data from partitioned Kafka topics. where the actors related to messages on a given topic then becomes local.

@rogeralsing rogeralsing pinned this issue Nov 1, 2020
@rogeralsing
Copy link
Collaborator Author

My own time is very much constrained by client work right now. this covers the maintenance of the dotnet version also.

Any takers on helping out with backporting the above changes to Go?
I can provide all the details on how each feature should work and guide the way here

@lbdl
Copy link

lbdl commented Nov 1, 2020

I'd be keen to help out

@rogeralsing
Copy link
Collaborator Author

rogeralsing commented Nov 1, 2020

Let's do this 🚀

Some thoughts on the things that are needed here.
Very non formal, and just from the top of my head, feel free to add thoughts on how to improve the project quality here:

Maintenance tasks

Issues and Pull Requests

Check issue and PR statuses, are there tasks that can be closed? tasks that are blocked or need more information?
Reaching out to the involved parties and getting the bigger picture under control.

This is more of a management and social task.

Coding tasks

Aligning code across platforms

This requires a deeper understanding of the project and the different platforms it runs on.
The dotnet version is the source of truth for now, anything going on there should eventually be ported over to Go.

This will require a fair amount of discussions among the involved parties to make it sit right and be idiomatic in the Go world, so we don't just port line by line from dotnet.

Bugfixing and bug management

This will require a decent familiarity with the project, but many bugs can likely be tracked down by adding testcases for bug reports and take it from there.

Documentation

All changes will need to be included in the Proto.Actor website, the website now uses shared documentation for the platforms, with the ability to add language specific code examples on the pages.

Porting the Proto.Actor Bootcamp to Go

This community contributed bootcamp would be great to get ported to Go also:

https://github.com/AsynkronIT/protoactor-bootcamp

@lbdl
Copy link

lbdl commented Nov 1, 2020

perhaps a reasonable place to start might actually be the bootcamp? not sure... I'll see what I can get working in terms of the bootcamp perhaps?

@Ghvstcode
Copy link
Contributor

Hey, I was just thinking!
Would it be possible to create Issue/PR templates to keep the issues organized and detailed

@umitkavala
Copy link
Contributor

I'd like to help . I'm comfortable with C# and newbie at Go.

@rogeralsing
Copy link
Collaborator Author

Created this Slack channel so we can all sync up on everything
https://join.slack.com/t/asynkron/shared_invite/zt-inio6nmu-Ipil0lUdEDlhOlM__S7UFg

@rogeralsing
Copy link
Collaborator Author

This is likely helpful to newcomers in the actor model world:
https://github.com/AsynkronIT/protoactor-dotnet/blob/dev/Terminology.md

@rogeralsing
Copy link
Collaborator Author

Ongoing effort here #478

@Menniti
Copy link

Menniti commented Oct 8, 2021

Hey @rogeralsing I would like to help
The project is very interesting, very powerful. Let me know what you are looking for, I will do my best to cover

Thanks

@rogeralsing
Copy link
Collaborator Author

Moste of these tasks have been completed. closing in favor for smaller ones

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants