models

package
v0.0.0-...-764d95b Latest Latest
Warning

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

Go to latest
Published: Nov 23, 2018 License: MIT Imports: 15 Imported by: 2

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	Threshold float64
)

Functions

func ValidateOperation

func ValidateOperation(str string) error

Types

type Cluster

type Cluster struct {
	LoadBalancer    LoadBalancer              `json:"load_balancer"`
	Vendors         []VendorStruct            `json:"vendors"`
	Hypervisors     []HypervisorStruct        `json:"hypervisors"`
	VirtualMachines map[string]VirtualMachine `json:"virtual_machines"`
}

func (*Cluster) Initialize

func (cluster *Cluster) Initialize(config *Config) []string

Initialize はconfigに基いてLBやVMの設定を行います。

func (Cluster) ServerStatuses

func (cluster Cluster) ServerStatuses(bt []string, config *Config) []apache.ServerStatus

ServerStatuses は稼働中のサーバ配列btを受け取り、btの負荷状況を返します。

type Config

type Config struct {
	// DevelopLogLevel はデバッグ用標準出力のレベルを指定します。
	// 必要ないと判断したら消してください。
	// DevelopLogLevel==0: デフォルト 標準出力なし
	// DevelopLogLevel>=1: 起動停止操作等を出力
	// DevelopLogLevel>=2: 各サーバの重み情報を出力
	// DevelopLogLevel>=3: 各サーバの負荷状況を全て出力
	// DevelopLogLevel>=4: 詳細に
	DevelopLogLevel       int             `json:"develop_log_level"`
	Timeout               time.Duration   `json:"timeout"`                 // 負荷取得がタイムアウトしたと判断するまでの時間
	Sleep                 time.Duration   `json:"sleep"`                   // サーバの起動処理発行後、稼働し始めるまでの時間
	Wait                  time.Duration   `json:"wait"`                    // 起動処理発行後、停止処理を実行しない時間
	RestorationTime       time.Duration   `json:"restoration_time"`        // タイムアウトなどして重さを下げた後、復元するまでの時間
	IsWeightChange        bool            `json:"is_weight_change"`        // 重さを変更するか
	UseHetero             bool            `json:"use_hetero"`              // ヘテロな環境を使用するか
	IsAdjustServerNum     bool            `json:"is_adjust_server_num"`    // オートスケールを行うか(現状未使用)
	UseWeb                bool            `json:"use_web"`                 // mouryou-webに情報を送るか
	UseOperatingRatio     bool            `json:"use_operating_ratio"`     // 稼働率ベースの負荷判定アルゴリズムを使うか
	UseThroughput         bool            `json:"use_throughput"`          // スループットベースの負荷判定アルゴリズムを使うか
	InfluxDBAddr          string          `json:"influxdb_addr"`           // InfluxDBのアドレス
	InfluxDBPort          string          `json:"influxdb_port"`           // InfluxDBのポート
	InfluxDBUser          string          `json:"influxdb_user"`           // InfluxDBのユーザ
	InfluxDBPasswd        string          `json:"influxdb_passwd"`         // InfluxDBのパスワード
	InfluxDBConnection    client.Client   `json:"influxdb_connection"`     // InfluxDBへのコネクション
	InfluxDBServerDB      string          `json:"influxdb_serverdb"`       // InfluxDBで利用するDB名
	OriginMachineNames    []string        `json:"origin_machine_names"`    // オリジンサーバの名称
	AlwaysRunningMachines []string        `json:"always_running_machines"` // 常に稼働するサーバの名称
	StartMachineIDs       []int           `json:"start_machine_ids"`       // はじめから稼働するサーバのID
	WebSocket             WebSocketStruct `json:"web_socket"`              // models.WebSocketの構造体
	Cluster               Cluster         `json:"cluster"`                 // models.Clusterの構造体
}

func (*Config) ContainMachineName

func (*Config) ContainMachineName(names []string, name string) bool

ContainMachineName はnameがnamesに含まれているかどうか検証します。

func (*Config) IsStartMachineID

func (c *Config) IsStartMachineID(i int) bool

IsStartMachineID は受け取ったVMのIDが開始時から稼動状態とするサーバに 指定されているかどうか検証します。

func (*Config) LoadSetting

func (c *Config) LoadSetting(path string)

LoadConfig は設定ファイル(~/.mouryou.json)を読み込みます。 設定されていない値があるとここで処理を終了します。

type HypervisorStruct

type HypervisorStruct struct {
	Name            string           `json:"name"`
	Host            string           `json:"host"`
	VirtualMachines []VirtualMachine `json:"virtual_machines"`
}

func (*HypervisorStruct) Initialize

func (hypervisor *HypervisorStruct) Initialize()

type LoadBalancer

type LoadBalancer struct {
	Name                               string           `json:"name"`
	VirtualIP                          string           `json:"virtual_ip"`
	LoadBalancingAlgorithm             string           `json:"load_balancing_algorithm"`
	OperatingRatioAlgorithm            string           `json:"operating_ratio_algorithm"`
	OperatingRatioThresholdOut         float64          `json:"operating_ratio_threshold_out"`
	OperatingRatioThresholdIn          float64          `json:"operating_ratio_threshold_in"`
	OperatingRatioMargin               float64          `json:"operating_ratio_margin"`
	OperatingRatioScaleOutInterval     int              `json:"operating_ratio_scale_out_interval"`
	OperatingRatioScaleInInterval      int              `json:"operating_ratio_scale_in_interval"`
	OperatingRatioDynamicThresholdDiff float64          `json:"operating_ratio_dynamic_threshold_diff"`
	OperatingRatioDynamicThreshold     map[string][]int `json:"operating_ratio_dynamic_threshold"`
	ThroughputAlgorithm                string           `json:"throughput_algorithm"`
	ThroughputMovingAverageInterval    int64            `json:"throughput_moving_average_interval"`
	ThroughputScaleOutThreshold        int              `json:"throughput_scale_out_threshold"`
	ThroughputScaleInThreshold         int              `json:"throughput_scale_in_threshold"`
	ThroughputScaleInRatio             float64          `json:"throughput_scale_in_ratio"`
	ThroughputScaleOutRatio            float64          `json:"throughput_scale_out_ratio"`
	ThroughputScaleOutTime             int              `json:"throughput_scale_out_time"`
	ThroughputScaleInTime              int              `json:"throughput_scale_in_time"`
	UseThroughputDynamicThreshold      bool             `json:"use_throughput_dynamic_threshold"`
	ThroughputDynamicThreshold         map[string][]int `json:"throughput_dynamic_threshold"`
}

LoadBalancer はロードバランサの設定情報を格納します。

func (LoadBalancer) Active

func (balancer LoadBalancer) Active(name string) error

Active

func (LoadBalancer) Add

func (balancer LoadBalancer) Add(name string) error

Add

func (LoadBalancer) ChangeThresholdOutInOperatingRatioAlgorithm

func (lb LoadBalancer) ChangeThresholdOutInOperatingRatioAlgorithm(working, booting, n int) (float64, int)

ChangeThresholdOutInOperatingRatioAlgorithm は起動台数に応じて閾値を切り替えます。

func (LoadBalancer) ChangeThresholdOutInThroughputAlgorithm

func (lb LoadBalancer) ChangeThresholdOutInThroughputAlgorithm(working, booting, n int) (float64, int)

ChangeThresholdOutInThroughputAlgorithm は起動台数に応じて閾値を切り替えます。 変更がない場合0.0を返します.

func (LoadBalancer) ChangeWeight

func (balancer LoadBalancer) ChangeWeight(name string, weight int) error

ChangeWeight

func (LoadBalancer) Inactive

func (balancer LoadBalancer) Inactive(name string) error

Inactive

func (LoadBalancer) Initialize

func (lb LoadBalancer) Initialize(c *Config)

Initialize はロードバランサの初期設定を行います。

func (LoadBalancer) Remove

func (balancer LoadBalancer) Remove(name string) error

Remove

func (LoadBalancer) ThHighInOperatingRatioAlgorithm

func (balancer LoadBalancer) ThHighInOperatingRatioAlgorithm(c *Config, w, n int) float64

ThHighInOperatingRatioAlgorithm は稼働率ベースのアルゴリズムで使われる高負荷判定(スケールアウト)の閾値です。

func (LoadBalancer) ThLowInOperatingRatioAlgorithm

func (balancer LoadBalancer) ThLowInOperatingRatioAlgorithm(c *Config, w, n int) float64

ThLowInOperatingRatioAlgorithm は稼働率ベースのアルゴリズムで使われる低負荷判定(スケールイン)の閾値です。

type ThroughputWithTime

type ThroughputWithTime struct {
	Throughput      float64
	MeasurementTime time.Time
}

type VendorStruct

type VendorStruct struct {
	Name            string                    `json:"name"`
	VirtualMachines map[string]VirtualMachine `json:"virtual_machines"`
}

func (*VendorStruct) Initialize

func (vendor *VendorStruct) Initialize()

Initialize はVMに所属しているvendorの情報を追加します。

type VirtualMachine

type VirtualMachine struct {
	ID                   int               `json:"id"`
	Name                 string            `json:"name"`
	Host                 string            `json:"host"`
	Operation            string            `json:"operation"`
	ThroughputUpperLimit float64           `json:"throughput_upper_limit"` // スループットの平均値
	LoadStatus           int               `json:"load_status"`            // 現在の負荷状況(スループット基準) 0:普通 1:過負荷 2:低負荷
	BasicWeight          int               `json:"basic_weight"`           // 基準の重さ
	Weight               int               `json:"weight"`                 // 現在の重さ
	Hypervisor           *HypervisorStruct `json:"-"`                      // ハイパーバイザ
	Vendor               *VendorStruct     `json:"-"`                      // ベンダー
}

func (VirtualMachine) Bootup

func (machine VirtualMachine) Bootup(sleep time.Duration) string

Bootup はVMの起動処理を行う. 現在は実際に起動停止は行わないため起動にかかる時間分sleepして擬似的な起動処理としている.

func (VirtualMachine) ServerStatus

func (machine VirtualMachine) ServerStatus() apache.ServerStatus

ServerState はapache.Scoreboardから負荷状況を受け取り返却します。

func (VirtualMachine) Shutdown

func (machine VirtualMachine) Shutdown(sleep time.Duration) string

Bootup はVMの起動処理を行います。 現在は実際に起動停止は行わないため停止にかかる時間分sleepします。

type WebSocketStruct

type WebSocketStruct struct {
	Origin string `json:"origin"`
	URL    string `json:"url"`
}

func (WebSocketStruct) Dial

func (ws WebSocketStruct) Dial() (*websocket.Conn, error)

Jump to

Keyboard shortcuts

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