Skip to content

Under the hood

Let's review the processes and protocols involved in each step of deploying and executing a serverless function with Taubyte. This overview will help clarify the interactions between different components and the significance of each protocol in the overall architecture.

Project Creation

The creation of a project is predominantly a client-side operation, facilitated by either the Web Console or the tau-cli. This process involves direct communication with GitHub to establish the necessary repositories. Only towards the end does the auth protocol come into play, tasked with registering these repositories. This registration process includes storing critical secrets such as the deployment key, essential for cloning code during CI/CD processes, and the webhook secret, used to authenticate events coming from GitHub.

The sequence diagram below illustrates these interactions in detail:

sequenceDiagram
    participant Client as Web Console/tau-cli
    participant GitHub
    participant Auth as auth

    Note over Client,GitHub: Project creation initiated on client side
    Client->>GitHub: Create repositories
    Note over GitHub: Repositories and necessary metadata created

    GitHub-->>Client: Confirm repository creation
    Note over Client,Auth: Only at the end does auth play a role

    Client->>Auth: Register repositories
    Note over Client,Auth: Includes storing deployment key and webhook secret

    Auth-->>Client: Confirm registration and storage of secrets

Pushing Changes to GitHub

When changes are pushed to GitHub, a sequence of events is triggered, initiating a process that involves multiple protocols to manage and execute CI/CD jobs. The patrick protocol plays a pivotal role in verifying the legitimacy of events and creating jobs, while the monkey protocol is responsible for the execution of these jobs. Subsequently, the tns stores and replicates the compiled configuration, and the hoarder protocol ensures the replication of updated assets.

The sequence diagram below visualizes this workflow:

sequenceDiagram
    participant GitHub as GitHub
    participant Patrick as Patrick
    participant Monkey as Monkey
    participant TNS as TNS Protocol
    participant Hoarder as Hoarder

    Note over GitHub,Patrick: git push

    GitHub->>Patrick: Github Web Hook
    Patrick->>Patrick: Verify events are legit
    Patrick->>Patrick: Create jobs for events

    Patrick-->>Monkey: Broadcast jobs
    Note over Monkey: Bid for the job(s)

    Monkey->>Monkey: Job Execution
    Note over TNS: Assuming successful job execution

    Monkey->>TNS: Publish configuration

    Monkey->>Monkey: File chunked, structured in DAG

    Monkey->>TNS: Update Asset CIDs

    Monkey-->>Hoarder: Notify of new CID
    Hoarder->>Hoarder: Replicate

    Note over Monkey,Hoarder: Replicated by at least one node

It's important to note that because we are using Dreamland, a simulated environment, there's no direct way for GitHub to communicate with your nodes. This limitation is addressed by using the fixture called push-all, which emulates the git events that would typically trigger the CI/CD process in a production environment.

Hitting the Endpoint

The process for handling a request at an endpoint varies depending on the network's configuration. In a simple setup without gateways and HTTPS, the request's host name is resolved by the seer protocol before the request itself is processed by a substrate node. However, in networks with gateways or HTTPS requests, additional steps, like retreiving x509 certificate from auth, are involved.

The diagrams below detail these processes for different configurations:

  • Without Gateway and HTTPS:

    sequenceDiagram
        participant Client
        participant Seer as Seer
        participant Substrate
        participant TNS as TNS
        participant Peers as Other Peers
    
        Client->>Seer: Resolve Host
        Seer-->>Client: Nearest Substrate IP
        Client->>Substrate: HTTP request
    
        Substrate->>TNS: Lookup function
        TNS-->>Substrate: Returns config
    
        Substrate->>Peers: Request WebAssembly module
        Peers-->>Substrate: Download WebAssembly module
    
        Substrate->>Substrate: Execute handler
        Substrate-->>Client: Relay response

  • With Gateway:

    sequenceDiagram
        participant Client
        participant Seer as Seer DNS
        participant Gateway
        participant Substrate
    
        Client->>Seer: DNS query for endpoint
        Seer-->>Client: Resolve to nearest Gateway IP
        Client->>Gateway: HTTP request
    
        Gateway->>Substrate: Establish p2p connection to Substrates
        Gateway->>Substrate: Tunnel HTTP to best Substrate
        Note over Gateway,Substrate: Handling by Substrate is similar to before

  • With HTTPS:

    sequenceDiagram
        participant Client
        participant Gateway_Substrate as Gateway/Substrate
        participant Auth as Auth Protocol
    
        Client->>Gateway_Substrate: HTTPS request
        Gateway_Substrate->>Auth: Request certificate
        Auth-->>Gateway_Substrate: Return certificate
        Gateway_Substrate-->>Client: Return certificate to Client
    
        Note over Gateway_Substrate,Client: Secure connection established

    Note: Taubyte supports the Automatic Certificate Management Environment (ACME) protocol for auto-generating certificates using Let’s Encrypt.

These diagrams demonstrate the seamless and autonomous nature of the Taubyte platform, which requires no manual configuration and ensures a smooth deployment and execution process for serverless functions.