浏览代码

添加服务占用回收策略

Tao Zhang 5 年之前
父节点
当前提交
5a366028c4
共有 3 个文件被更改,包括 0 次插入209 次删除
  1. 0 31
      server/db.go.bak
  2. 0 91
      server/online.go.bak
  3. 0 87
      server/snycmap.go.bak

+ 0 - 31
server/db.go.bak

@@ -1,31 +0,0 @@
-/**
-服务支持-存储
-*/
-package main
-
-import "github.com/nedscode/memdb"
-
-type ServiceMeta struct {
-	Name        string
-	Addr        string
-	Workers     string
-	BalanceType int32
-	Load        float64
-	Ip          string
-	Port        int32
-	Id          string
-	Used        bool
-}
-
-var mdb *memdb.Store
-
-func InitDb() {
-	// Create the DB schema
-	mdb = memdb.NewStore().
-		PrimaryKey("addr").
-		CreateIndex("ip"). //ip索引
-		CreateIndex("load", "name"). //按负载找利用率最低的
-		CreateIndex("id").
-		CreateIndex("name").
-		CreateIndex("name", "used") //找未使用过的
-}

+ 0 - 91
server/online.go.bak

@@ -1,91 +0,0 @@
-/**
-心跳检测,服务端实现,用于记录心跳
-*/
-package main
-
-import (
-	"container/list"
-	"fmt"
-	"time"
-)
-
-const (
-	BALANCE_RANDOM = iota //随机
-	BALANCE_LOAD          //按服务器压力分配
-	BALANCE_SEQ           //顺序执行 ,根据服务支持的执行单元数
-
-)
-
-//在线服务
-var (
-	onlineService = NewSyncMap() //找到相应的服务节点
-	serverLoad    = NewSyncMap() //服务节点的负载情况,主要是cpu内存占用
-	servicesLoad  = NewSyncMap() //服务使用情况,这里是一张登记表
-	balanceTable  = NewSyncMap() //指定服务的负载均衡策略
-)
-
-//追加服务
-func AddService(serviceName string, address string, workers int32, balance int32) {
-	now := time.Now().Unix()
-	//address := fmt.Sprint("%s%d", ip, port)
-	if !balanceTable.Has(serviceName) {
-		balanceTable.Put(serviceName, balance)
-	}
-	if onlineService.Has(serviceName) {
-		services := NewSyncMap()
-		services.Put(address, now)
-		onlineService.Put(serviceName, services)
-	} else {
-		services := onlineService.Get(serviceName).(SyncMap)
-		services.Put(address, now)
-	}
-	//TODO 追加多个服务执行单元
-	var serviceList *list.List
-	if servicesLoad.Has(serviceName) {
-		serviceList = servicesLoad.Get(serviceName).(*list.List)
-	} else {
-		serviceList = list.New()
-		servicesLoad.Put(serviceName, serviceList)
-	}
-	for i := 0; i < int(workers); i++ {
-		serviceId := fmt.Sprintf("%s_%d", address, i)
-		serviceList.PushBack(serviceId)
-	}
-}
-
-//更新服务有效期
-func UpdateServiceTtl(serviceName string, serviceId string) {
-	if onlineService.Has(serviceName) {
-		services := onlineService.Get(serviceName).(SyncMap)
-		if services.Has(serviceId) {
-			services.Put(serviceId, time.Now().Unix())
-		}
-	}
-}
-
-//注销服务
-func DestoryService(serviceName string, address string) {
-	if onlineService.Has(serviceName) {
-		services := onlineService.Get(serviceName).(SyncMap)
-		if services.Has(address) {
-			services.Remove(address)
-			//TODO 顺带需要清理负载均衡产生的垃圾数据,特别是资源占用表
-		}
-	}
-}
-
-//发现服务
-func Discover(serviceName string) (string, string) {
-	//获取服务的负载策略
-	balance := balanceTable.GetWithDefault(serviceName, 0)
-	//获取可用服务节点
-	services := onlineService.Get(serviceName).(SyncMap)
-	switch balance {
-	case BALANCE_RANDOM:
-		return services.GetRandomKey().(string), ""
-	case BALANCE_LOAD:
-
-	case BALANCE_SEQ:
-	}
-	return "", ""
-}

+ 0 - 87
server/snycmap.go.bak

@@ -1,87 +0,0 @@
-/**
-支持同步的,带锁的Map
-*/
-package main
-
-import (
-	"math/rand"
-	"sync"
-)
-
-type SyncMap struct {
-	dict map[string]interface{}
-	l    *sync.RWMutex
-}
-
-//创建新的同步map
-func NewSyncMap() *SyncMap {
-	return &SyncMap{
-		dict: map[string]interface{}{},
-		l:    new(sync.RWMutex),
-	}
-}
-
-//
-func (sm *SyncMap) Put(key string, value interface{}) {
-	sm.l.Lock()
-	defer sm.l.Unlock()
-	sm.dict[key] = value
-
-}
-
-//
-func (sm *SyncMap) Get(key string) interface{} {
-	sm.l.RLock()
-	defer sm.l.RUnlock()
-	return sm.dict[key]
-}
-
-//支持默认值
-func (sm *SyncMap) GetWithDefault(key string, defaultValue interface{}) interface{} {
-	sm.l.RLock()
-	defer sm.l.RUnlock()
-	if v, ok := sm.dict[key]; ok {
-		return v
-	} else {
-		return defaultValue
-	}
-}
-
-//
-func (sm *SyncMap) GetRandomKey() interface{} {
-	sm.l.RLock()
-	defer sm.l.RUnlock()
-	var arr = make([]interface{}, 0, 0)
-	for k, _ := range sm.dict {
-		arr = append(arr, k)
-	}
-	index := rand.Intn(len(arr))
-	return arr[index]
-}
-
-//
-func (sm *SyncMap) Has(key string) bool {
-	sm.l.RLock()
-	defer sm.l.RUnlock()
-	if _, ok := sm.dict[key]; ok {
-		return true
-	} else {
-		return false
-	}
-}
-
-//
-func (sm *SyncMap) Remove(key string) {
-	sm.l.Lock()
-	defer sm.l.Unlock()
-	delete(sm.dict, key)
-}
-
-//遍历
-func (sm *SyncMap) Each(fn func(key string, value interface{})) {
-	sm.l.RLock()
-	defer sm.l.RUnlock()
-	for k, v := range sm.dict {
-		fn(k, v)
-	}
-}