factors

command
v0.23.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 29, 2024 License: Apache-2.0 Imports: 14 Imported by: 0

README

Factors

This directory contains a Service Weaver application that computes the factors of a number. This application is interesting because it demonstrates routing.

This app has a Factorer component with a Factor(context.Context, int) ([]int, error) method. The Factorer component maintains a fixed-size LRU cache that maps integers to their factors. The Factor method is routed based on the provided integer. Repeated calls to the Factor method with the same integer will tend to route to the same component replica. This improves the cache hit rate of the Factorer component.

%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%
graph TD
    %% Nodes.
    github.com/ServiceWeaver/weaver/Main(weaver.Main)
    github.com/ServiceWeaver/weaver/examples/factors/Factorer(factors.Factorer)

    %% Edges.
    github.com/ServiceWeaver/weaver/Main --> github.com/ServiceWeaver/weaver/examples/factors/Factorer

Running Locally

To run this app locally, run go run .:

go run .

In a separate terminal, curl the service (which defaults to localhost:9000):

$ curl localhost:9000?x=100
[1 2 4 5 10 20 25 50 100]

To run the app across multiple processes, use weaver multi deploy:

weaver multi deploy weaver.toml

When a Factorer component receives an invocation of its Factor method, it logs its process id. If you repeatedly curl the service, you can inspect the pids to confirm that requests are being routed.

Running on GKE

To run the app on GKE, use weaver gke deploy:

$ weaver gke deploy weaver.toml

Documentation

Overview

Package main implements a service to compute the factors of an integer.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL