|
@@ -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 "", ""
|
|
|
|
-}
|
|
|