fleettracker

package
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: May 20, 2016 License: Apache-2.0 Imports: 16 Imported by: 10

Documentation

Overview

Package fleettracker provides an implementation of a service that receives live usage metrics of Lever services and automatically adjusts the number of instances for the service. In other words, it provides auto-scaling capabilities to Lever.

Package fleettracker is a generated protocol buffer package.

It is generated from these files:

fleettracker.proto

It has these top-level messages:

RPCEvent
HandleReply

Index

Constants

View Source
const FleetTrackerService = "fleettracker"

FleetTrackerService is the name of the fleettracker internal service.

View Source
const PackageName = "fleettracker"

PackageName is the name of this package.

Variables

View Source
var (
	// InstanceIDFlag is the instance ID of the fleettracker. Note: This is a
	// different instance ID than leverutil.InstanceIDFlag because they serve
	// different things.
	InstanceIDFlag = config.DeclareString(
		PackageName, "instanceID", leverutil.RandomID())
	// TTLFlag is the time after a service expires in fleettracker. If no RPC
	// event comes up during this span of time for a Lever service, fleettracker
	// stops keeping track of its stats (it is assumed all its instances
	// have expired anyway).
	TTLFlag = config.DeclareDuration(PackageName, "ttl", 20*time.Minute)
)
View Source
var (
	// TickNumEventsFlag is the number of events that the load tracker aims to
	// put in a tick length. Yet, due to {Min,Max}TickPeriodFlag, the number of
	// events may vary.
	TickNumEventsFlag = config.DeclareInt(PackageName, "tickNumEvents", 16)
	// MinTickPeriodFlag is the minimum time between load tracker ticks.
	MinTickPeriodFlag = config.DeclareDuration(
		PackageName, "minTickPeriod", 250*time.Millisecond)
	// MaxTickPeriodFlag is the maximum time between load tracker
	// ticks. Note: The period may still be longer than this if no events at all
	// come up for a while.
	MaxTickPeriodFlag = config.DeclareDuration(
		PackageName, "maxTickPeriod", 15*time.Second)
	// StatsExpPeriodFlag is the amount of time stats are taken into
	// consideration. This value is used for the computation of alpha in EWMA.
	StatsExpPeriodFlag = config.DeclareDuration(
		PackageName, "statsExpPeriod", 15*time.Second)
	// ScaleDownAfterFlag is the amount of time to delay scaling down (just
	// in case resource requirements pop back up).
	ScaleDownAfterFlag = config.DeclareDuration(
		PackageName, "scaleDownAfter", 45*time.Second)
	// ChangesExpectedAfterFlag is the maxium amount of time a change in number
	// of instances is expected to be reflected in Consul. (Otherwise
	// it is assumed there have been other changes outside of this
	// library's control).
	ChangesExpectedAfterFlag = config.DeclareDuration(
		PackageName, "changesExpectedAfter", 45*time.Second)
	// MaxDeltaFlag represents the maximum number of instances that may be
	// added at a time (per tick).
	MaxDeltaFlag = config.DeclareInt(PackageName, "maxDelta", 10)
)

Functions

func OnRPC

func OnRPC(grpcPool *scale.GRPCPool, rpcEvent *RPCEvent) error

OnRPC calls the OnRPC method in the right shard of the fleettracker service.

func RegisterFleetTrackerServer

func RegisterFleetTrackerServer(s *grpc.Server, srv FleetTrackerServer)

Types

type FleetTracker

type FleetTracker struct {
	// contains filtered or unexported fields
}

FleetTracker ensures that each Lever service has the right number of instances in its fleet. It spins up or kills instances as necessary.

func NewFleetTracker

func NewFleetTracker(
	grpcServer *grpc.Server, grpcPool *scale.GRPCPool, docker *dockerapi.Client,
	grpcAddr string) (tracker *FleetTracker, err error)

NewFleetTracker returns a new FleetTracker.

func (*FleetTracker) Close

func (tracker *FleetTracker) Close()

Close stops the fleettracker instance.

func (*FleetTracker) HandleOnRPC

func (tracker *FleetTracker) HandleOnRPC(
	ctx context.Context, rpcEvent *RPCEvent) (*HandleReply, error)

HandleOnRPC implements the FleetTrackerServer interface.

func (*FleetTracker) OnRPC

func (tracker *FleetTracker) OnRPC(rpcEvent *RPCEvent) error

OnRPC should be called on each RPC that we want to track.

type FleetTrackerClient

type FleetTrackerClient interface {
	HandleOnRPC(ctx context.Context, in *RPCEvent, opts ...grpc.CallOption) (*HandleReply, error)
}

func NewFleetTrackerClient

func NewFleetTrackerClient(cc *grpc.ClientConn) FleetTrackerClient

type FleetTrackerServer

type FleetTrackerServer interface {
	HandleOnRPC(context.Context, *RPCEvent) (*HandleReply, error)
}

type HandleReply

type HandleReply struct {
}

func (*HandleReply) Descriptor

func (*HandleReply) Descriptor() ([]byte, []int)

func (*HandleReply) ProtoMessage

func (*HandleReply) ProtoMessage()

func (*HandleReply) Reset

func (m *HandleReply) Reset()

func (*HandleReply) String

func (m *HandleReply) String() string

type LoadTracker

type LoadTracker struct {
	// contains filtered or unexported fields
}

LoadTracker keeps track of the total load of a Lever service.

func NewLoadTracker

func NewLoadTracker(
	servingID string, maxInstanceLoad float64, minInstances int,
	sessionID string) *LoadTracker

NewLoadTracker creates a new LoadTracker.

func (*LoadTracker) Close

func (tracker *LoadTracker) Close()

Close clears any internal resources.

func (*LoadTracker) OnRPC

func (tracker *LoadTracker) OnRPC(rpcNanos uint64) (deltaInstances int)

OnRPC should be called on each RPC to register its stats.

func (*LoadTracker) Recalculate

func (tracker *LoadTracker) Recalculate() (deltaInstances int)

Recalculate reevaluates the number of instances necessary without registering an RPC event.

type RPCEvent

type RPCEvent struct {
	// The sessionID of the resource.
	SessionID   string `protobuf:"bytes,1,opt,name=sessionID" json:"sessionID,omitempty"`
	Environment string `protobuf:"bytes,2,opt,name=environment" json:"environment,omitempty"`
	Service     string `protobuf:"bytes,3,opt,name=service" json:"service,omitempty"`
	ServingID   string `protobuf:"bytes,4,opt,name=servingID" json:"servingID,omitempty"`
	CodeVersion int64  `protobuf:"varint,5,opt,name=codeVersion" json:"codeVersion,omitempty"`
	IsAdmin     bool   `protobuf:"varint,6,opt,name=isAdmin" json:"isAdmin,omitempty"`
	RpcNanos    uint64 `protobuf:"varint,7,opt,name=rpcNanos" json:"rpcNanos,omitempty"`
}

func (*RPCEvent) Descriptor

func (*RPCEvent) Descriptor() ([]byte, []int)

func (*RPCEvent) ProtoMessage

func (*RPCEvent) ProtoMessage()

func (*RPCEvent) Reset

func (m *RPCEvent) Reset()

func (*RPCEvent) String

func (m *RPCEvent) String() string

Jump to

Keyboard shortcuts

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