import (
    //"fmt"
    "math/rand"
    "net"
    "stathat.com/c/consistent"
    "time"
)

// BackendSvr Type
type BackendSvr struct {
    svrStr    string
    isUp      bool // is Up or Down
    failTimes int
}

var (
    pConsisthash *consistent.Consistent
    pBackendSvrs map[string]*BackendSvr
)

func initBackendSvrs(svrs []string) { //遍历后端服务  并且添加到一致性哈希表中  另初始化pBackendSvrs  key为后端服务地址  value是BackendSvr结构体
    pConsisthash = consistent.New()
    pBackendSvrs = make(map[string]*BackendSvr)
    for _, svr := range svrs {
        pConsisthash.Add(svr)
        pBackendSvrs[svr] = &BackendSvr{
            svrStr:    svr,
            isUp:      true,
            failTimes: 0,
        }
    }
    go checkBackendSvrs()
}
//通过连接 获取后端服务地址 ,通过服务地址到哈希表中找对应的BackendSvr
func getBackendSvr(conn net.Conn) (*BackendSvr, bool) {
    remoteAddr := conn.RemoteAddr().String()
    svr, _ := pConsisthash.Get(remoteAddr)

    bksvr, ok := pBackendSvrs[svr]
    return bksvr, ok
}
func checkBackendSvrs() {  //判断后端服务器健康状态以及是否可以使用  是否达到设置失败次数
    // scheduler every 10 seconds
    rand.Seed(time.Now().UnixNano())
    t := time.Tick(time.Duration(10)*time.Second + time.Duration(rand.Intn(100))*time.Millisecond*100) //10s +随机毫秒数 后  执行下面代码

    for _ = range t {
        for _, v := range pBackendSvrs {
            if v.failTimes >= pConfig.FailOver && v.isUp == true {
                v.isUp = false
                pConsisthash.Remove(v.svrStr)
            }
        }

    }
}

balance.go 源码阅读的更多相关文章

  1. 【原】FMDB源码阅读(一)

    [原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...

  2. fw: 专访许鹏:谈C程序员修养及大型项目源码阅读与学习

      C家最近也有一篇关于如何阅读大型c项目源代码的文章,学习..融合.. -------------------- ref:http://www.csdn.net/article/2014-06-05 ...

  3. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  4. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

  5. 【原】AFNetworking源码阅读(六)

    [原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...

  6. 【原】AFNetworking源码阅读(五)

    [原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...

  7. 【原】AFNetworking源码阅读(四)

    [原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...

  8. 【原】AFNetworking源码阅读(三)

    [原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...

  9. 【原】AFNetworking源码阅读(二)

    [原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...

随机推荐

  1. LeetCode(49)-Valid Parentheses

    题目: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the ...

  2. Configure the MySQL account associate to the domain user via MySQL Windows Authentication Plugin

    在此记录如何将之前一次做第三发软件在配置的过程. 将AD user通过代理映射到mysql 用户. 在Mysql官网有这样一段话: The server-side Windows authentica ...

  3. Thinkphp3.2简单解决多文件上传只上传一张的问题

    html简单页面: index.html代码: <form action="{:U('index/upload')}" method="post" enc ...

  4. Activiti初学问题,求解

    <userTask id="writeReportTask" name="Write monthly financial report" > < ...

  5. 什么是shell? bash和shell有什么关系?

    什么是shell? bash和shell有什么关系? 博客分类: Linux   什么是Shell?      shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序 ...

  6. OSGI介绍

    OSGI介绍 OSGI简介 OSGI (Open Service Gateway Initiative)联盟成立于1999 年,它是一个非盈利的国际组织,旨在建立一个开放的服务规范,为通过网络向设备提 ...

  7. Visual Studio 2017 15.7 下的.NET Core

    Visual Studio 2017 15.7版本发布,对.NET Core项目的主要相关改变如下, 同时对Xamarin.Android和iOS项目的支持上也做了较大改进. 一. .NET Core ...

  8. laravel 5.5 安装

    PHP要求 PHP> = 7.0.0 OpenSSL PHP扩展 PDO PHP扩展 Mbstring PHP扩展 Tokenizer PHP扩展 XML PHP扩展 通过Composer创建项 ...

  9. DDGScreenShot —图片加各种滤镜高逼格操作

    写在前面 图片加各种滤镜操作,当然苹果给开发者提供了相关的api和封装, 大部分开发者感觉这是这是晦涩难懂的,接下来就让我们来了解一下, 其实也没有那么深不可测. 代码如下(每一步已经解释的很详细) ...

  10. 微信小程序UI组件、开发框架、实用库...

    UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wema ...