I think I may be stymied by the current version of Flatbuffers. I find it slightly odd that it doesn't support arrays in structs (though I've seen proposals to fix this). Also you can't set it to mark particular interfaces as private or internal so you can force encapsulation. However, I get by all this.
My biggest problem is that the gRPC template generator for Flatbuffers doesn't work with C#. It works with Java and I could probably generate those and then port them over, but I haven't got that kind of interest in messing with it.
Flatbuffers seems like a huge win in performance over everything else (except maybe Capn'Proto -- I'll have to see how it integrates with gRPC). However, I might switch over to protocol buffers for a while, at least to prototype with. I might also think about attaching the serialization layer to the rest of the system via a batch of interfaces which might make the serialization layer pluggable.
VR Worlds is a concept for building, essentially, an VR/AR (XR) Operating system, which allows any number of worlds to operate together and run in modern scalable containerized servers. Anyone can field their own worlds and so make their own rules rather than some giant top down architecture.
Showing posts with label Serialization Layer. Show all posts
Showing posts with label Serialization Layer. Show all posts
Wednesday, May 29, 2019
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:
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
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
Subscribe to:
Posts (Atom)
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...
-
After holidays and bad colds and work trips, I'm starting to make lots of progress with WasmTime and with WASI . I've started a n...
-
So, I've been progressing somewhat with Emissaries... But, I have been doing a little rethinking. First, if I go with Unity as the ...
-
Spent a lot of time over the weekend getting webassembly jammed into my brain and tooling up. I looked hard at mono-wasm (now built into ...