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 ¶
const FleetTrackerService = "fleettracker"
FleetTrackerService is the name of the fleettracker internal service.
const PackageName = "fleettracker"
PackageName is the name of this package.
Variables ¶
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) )
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 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) ProtoMessage ¶
func (*RPCEvent) ProtoMessage()