Saturday, May 25, 2019

Next Steps After Emissary Builder - Microservice Stubs

So, have been proceeding with next steps after the Emissary Builder is prototyped.   I've decided that the server/browser communication will proceed with C# .NET Core MicroServices running GRPC utilizing the Flatbuffers serialization layer.  I've been working on figure out how to do this and how to build using these parts.   I'm assuming that the microservices will be ASP.NET Core, but I'm not entirely sure yet. 

So now, I'm starting to break down the functionality so I can start to get a handle on the MicroService boundaries, and how to create the authentication and eventually build all of the Flatbuffers contracts and RPC calls. 

I will need to start working on the emissaries themselves.  I'm thinking of doing that in TypeScript or possibly in Rust or Go in Webassembly (really, WASI).   I really am not sure about the state of C# webassembly, blazor notwithstanding.

I have to restructure my 3DOM library, which is where all my current active code is.  It needs to be strategically split into pieces, but I'm not sure where the edges are yet.  I'm trying to avoid monoliths.

Here's my brainstorm of the various services I know offhand I might need.  I'm sure there are many more, however, these are the main published services.   Each World, Avatar, and Entity can create its own layer of custom gRPC calls to handle the provisioning and operation of each emissary and they must remain dynamic.

I think--Stage 1 Hello World--will consist of all 4 servers working with their Ping servers.   Though that's not really how the use-case goes. 

Ultimately the completed startup is more like this:

  • Browser asks Avatar server where Avatar's Kudo Server is
  • Browser logs into Avatar and Aspect
  • Avatar's Emissary is Marshaled
  • Browser connects to world that Avatar wants to materialize in
  • Browser asks world's Kudo server to grant permission (based on Visa or open permission)
  • World's Emissary is Marshaled
  • World then emits the inventory for the scene
  • Entities from everywhere begin to Marshal their Emissaries
  • World causes the Avatar to materialize in the designated position in the Scene


But, we have to get there incrementally.  Server skeletons first, then ping.   Enough of a microservice that we can get this running in a Kubernetes Cluster, or at least in Docker on one machine. 

Boy, that was ramble...

Tentative Services

Kudo Server

  • Ping
  • Locate Worlds
  • Locate Avatar Service
  • Locate Entity Service
  • Vouch Self
  • Vouch Service
  • Vouch CA
  • Validate Login Ticket
  • Sign [Developer]
  • Login from Server [Server]
  • Login from Avatar [Avatar]
  • Banking Transactions

Kudos:

  • Vouch for Kudo
  • Generate Kudo
  • Transfer Kudo
  • Revoke Kudo
  • Manipulate Values in Kudo

Standard Kudos:

  • Deed
  • Lease
  • Visa
  • Access Grant
  • Ban
  • World Level
  • World Coin

Avatar Server

  • Ping
  • Locate Kudo Route
  • Vouch Self
  • Marshal Avatar (As Primary Avatar)
  • Marshal Entity (Avatar as Entity)
  • Transform Aspect
  • Manage Active Inventory
  • Transfer Entities Into/From

World Server

  • Ping
  • Locate Kudo Route
  • Vouch Self
  • Log Avatar In
  • Marshal World
  • Unveil Scene Inventory/State
  • Marshal Entity (World as Entity)
  • Transfer Entities Into/From

Entity Server

  • Ping
  • Locate Kudo Route
  • Vouch Self
  • Marshal Entity
  • Transfer Entity
  • Transfer Entities Into/From
  • Instantiate Entity Into

No comments:

Post a Comment

Random Thoughts, Some Progress

 Lots of work at work, so not as much time for projects. Smattering of thoughts:   Godot doesn't really seem ready for prime-time with c...