84 lines
1.7 KiB
Go
84 lines
1.7 KiB
Go
// Package balance ...
|
|
//
|
|
// Description : 接口定义
|
|
//
|
|
// Author : go_developer@163.com<张德满>
|
|
//
|
|
// Date : 2021-04-01 2:43 下午
|
|
package balance
|
|
|
|
import (
|
|
"github.com/go-developer/gopkg/easylock"
|
|
)
|
|
|
|
// SeverNode 服务器节点的数据结构
|
|
//
|
|
// Author : go_developer@163.com<张德满>
|
|
//
|
|
// Date : 2:46 下午 2021/4/1
|
|
type SeverNode struct {
|
|
ID string `json:"id"` // 机器编号
|
|
Host string `json:"host"` // ip
|
|
Port int `json:"port"` // 端口
|
|
Weight float64 `json:"weight"` // 权重
|
|
Status int `json:"status"` // 状态
|
|
}
|
|
|
|
// Server server 的具体配置
|
|
//
|
|
// Author : go_developer@163.com<张德满>
|
|
//
|
|
// Date : 2:59 下午 2021/4/1
|
|
type Server struct {
|
|
lock easylock.EasyLock
|
|
NodeList []*SeverNode
|
|
Balance IBalance
|
|
}
|
|
|
|
// Add 添加一个Server
|
|
//
|
|
// Author : go_developer@163.com<张德满>
|
|
//
|
|
// Date : 3:00 下午 2021/4/1
|
|
func (s *Server) Add(node *SeverNode) {
|
|
_ = s.lock.Lock()
|
|
defer s.lock.Unlock()
|
|
s.NodeList = append(s.NodeList, node)
|
|
}
|
|
|
|
// Remove 移除一个server
|
|
//
|
|
// Author : go_developer@163.com<张德满>
|
|
//
|
|
// Date : 5:09 下午 2021/4/1
|
|
func (s *Server) Remove(nodeID string) {
|
|
_ = s.lock.Lock()
|
|
defer s.lock.Unlock()
|
|
for nodeIndex, item := range s.NodeList {
|
|
if item.ID == nodeID {
|
|
s.NodeList = append(s.NodeList[0:nodeIndex], s.NodeList[nodeIndex:]...)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
// Get 按照指定策略获取一台机器
|
|
//
|
|
// Author : go_developer@163.com<张德满>
|
|
//
|
|
// Date : 5:17 下午 2021/4/1
|
|
func (s *Server) Get() string {
|
|
return ""
|
|
}
|
|
|
|
// IBalance 负载均衡的接口定义
|
|
//
|
|
// Author : go_developer@163.com<张德满>
|
|
//
|
|
// Date : 2:44 下午 2021/4/1
|
|
type IBalance interface {
|
|
Get() string
|
|
Add(node string)
|
|
Remove(node string)
|
|
}
|