From ce41aee843cfaa20ba7934cb0de9e7fb275f7c21 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 19 Nov 2019 19:00:10 -0500 Subject: [PATCH] Big refactor/rewrite: dynamic proxies, kill/revive proxies, all internal state stored in redis --- .gitignore | 1 + README.md | 126 +------ config.go | 142 +------- config.json | 38 +-- cron.go | 54 +++ retry.go => errors.go | 62 +++- gc.go | 61 ---- grafana.png | Bin 0 -> 209443 bytes grafana/model.json | 778 ++++++++++++++++++++++++++++++++++++++++++ import_from_broker.py | 31 ++ influxdb.go | 111 ++++++ jenkins/Jenkinsfile | 1 + main.go | 629 ++++++++++++---------------------- models.go | 212 ++++++++++++ redis.go | 293 ++++++++++++++++ templates/stats.html | 53 +++ util.go | 93 +++++ 17 files changed, 1938 insertions(+), 747 deletions(-) create mode 100644 cron.go rename retry.go => errors.go (70%) delete mode 100644 gc.go create mode 100644 grafana.png create mode 100644 grafana/model.json create mode 100644 import_from_broker.py create mode 100644 influxdb.go create mode 100644 models.go create mode 100644 redis.go create mode 100644 templates/stats.html create mode 100644 util.go diff --git a/.gitignore b/.gitignore index fd594d2..ba48acc 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ *.iml .idea/ +architeuthis diff --git a/README.md b/README.md index d00eaef..a96ed18 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,9 @@ and error handling. Built for automated web scraping. * Seamless exponential backoff retries on timeout or error HTTP codes * Requires no additional configuration for integration into existing programs * Configurable per-host behavior -* Proxy routing (Requests can be forced to use a specific proxy with header param) +* Monitoring with InfluxDB + +![grafana](grafana.png) ### Typical use case ![user_case](use_case.png) @@ -19,19 +21,30 @@ and error handling. Built for automated web scraping. ### Usage ```bash -wget https://simon987.net/data/architeuthis/17_architeuthis.tar.gz -tar -xzf 17_architeuthis.tar.gz +wget https://simon987.net/data/architeuthis/16_architeuthis.tar.gz +tar -xzf 16_architeuthis.tar.gz vim config.json # Configure settings here ./architeuthis ``` +You can add proxies using the `/add_proxy` API: + +```bash +curl http://localhost:5050?url=&name= +``` + +Or automatically using Proxybroker: +```bash +python3 import_from_broker.py +``` + ### Example usage with wget ```bash export http_proxy="http://localhost:5050" # --no-check-certificates is necessary for https mitm # You don't need to specify user-agent if it's already in your config.json -wget -m -np -c --no-check-certificate -R index.html* http://ca.releases.ubuntu.com/ +wget -m -np -c --no-check-certificate -R index.html* http http://ca.releases.ubuntu.com/ ``` With `"every": "500ms"` and a single proxy, you should see @@ -49,89 +62,6 @@ level=trace msg=Sleeping wait=433.394361ms ... ``` -### Proxy routing - -To use routing, enable the `routing` parameter in the configuration file. - -**Explicitly choose proxy** - -You can force a request to go through a specific proxy by using the `X-Architeuthis-Proxy` header. -When specified and `routing` is -enabled in the config file, the request will use the proxy with the -matching name. - -Example: - -in `config.json`: -``` -... - routing: true, - "proxies": [ - { - "name": "p0", - "url": "" - }, - { - "name": "p1", - "url": "" - }, - ... - ], -``` - -This request will *always* be routed through the **p0** proxy: -```bash -curl https://google.ca/ -k -H "X-Architeuthis-Proxy: p0" -``` - -Invalid/blank values are silently ignored; the request will be routed -according to the usual load balancer rules. - -**Hashed routing** - -You can also use the `X-Architeuthis-Hash` header to specify an abitrary string. -The string will be hashed and uniformly routed to its corresponding proxy. Unless the number -proxy changes, requests with the same hash value will always be routed to the same proxy. - -Example: - -`X-Architeuthis-Hash: userOne` is guaranteed to always be routed to the same proxy. -`X-Architeuthis-Hash: userTwo` is also guaranteed to always be routed to the same proxy, -but **not necessarily a proxy different than userOne**. - - -**Unique string routing** - -You can use the `X-Architeuthis-Unique` header to specify a unique string that -will be dynamically associated to a single proxy. - -The first time such a request is received, the unique string is bound to a proxy and -will *always* be routed to this proxy. Any other non-empty value for this header will -be routed to another proxy and bound to it. - - This means that you cannot use more unique strings than proxies, -doing so will cause the request to drop and will show the message -`No blank proxies to route this request!`. - -Reloading the configuration or restarting the `architeuthis` instance will clear the -proxy binds. - -Example with configured proxies p0-p3: -``` -msg=Listening addr="localhost:5050" -msg="Bound unique param user1 to p3" -msg="Routing request" conns=0 proxy=p3 url="https://google.ca:443/" -msg="Bound unique param user2 to p2" -msg="Routing request" conns=0 proxy=p2 url="https://google.ca:443/" -msg="Bound unique param user3 to p1" -msg="Routing request" conns=0 proxy=p1 url="https://google.ca:443/" -msg="Bound unique param user4 to p0" -msg="Routing request" conns=0 proxy=p0 url="https://google.ca:443/" -msg="No blank proxies to route this request!" unique param=user5 -``` - -The `X-Architeuthis-*` header *will not* be sent to the remote host. - ### Hot config reload ```bash @@ -178,8 +108,6 @@ Actions | should_retry | Override default retry behavior for http errors (by default it retries on 403,408,429,444,499,>500) | force_retry | Always retry (Up to retries_hard times) | dont_retry | Immediately stop retrying -| multiply_every | Multiply the current limiter's 'every' value by `arg` | `1.5`(float) -| set_every | Set the current limiter's 'every' value to `arg` | `10s`(duration) In the event of a temporary network error, `should_retry` is ignored (it will always retry unless `dont_retry` is set) @@ -195,18 +123,6 @@ Note that having too many rules for one host might negatively impact performance "wait": "4s", "multiplier": 2.5, "retries": 3, - "retries_hard": 6, - "routing": true, - "proxies": [ - { - "name": "squid_P0", - "url": "http://user:pass@p0.exemple.com:8080" - }, - { - "name": "privoxy_P1", - "url": "http://p1.exemple.com:8080" - } - ], "hosts": [ { "host": "*", @@ -232,14 +148,6 @@ Note that having too many rules for one host might negatively impact performance "rules": [ {"condition": "status=403", "action": "dont_retry"} ] - }, - { - "host": ".www.instagram.com", - "every": "4500ms", - "burst": 3, - "rules": [ - {"condition": "body=*please try again in a few minutes*", "action": "multiply_every", "arg": "2"} - ] } ] } diff --git a/config.go b/config.go index ebd99d5..10e9865 100644 --- a/config.go +++ b/config.go @@ -7,7 +7,6 @@ import ( "github.com/pkg/errors" "github.com/ryanuber/go-glob" "github.com/sirupsen/logrus" - "golang.org/x/time/rate" "io/ioutil" "os" "reflect" @@ -17,40 +16,10 @@ import ( "time" ) -type HostConfig struct { - Host string `json:"host"` - EveryStr string `json:"every"` - Burst int `json:"burst"` - Headers map[string]string `json:"headers"` - RawRules []*RawHostRule `json:"rules"` - Every time.Duration - Rules []*HostRule -} - -type RawHostRule struct { - Condition string `json:"condition"` - Action string `json:"action"` - Arg string `json:"arg"` -} - -type HostRuleAction int - -const ( - DontRetry HostRuleAction = 0 - MultiplyEvery HostRuleAction = 1 - SetEvery HostRuleAction = 2 - ForceRetry HostRuleAction = 3 - ShouldRetry HostRuleAction = 4 -) - func (a HostRuleAction) String() string { switch a { case DontRetry: return "dont_retry" - case MultiplyEvery: - return "multiply_every" - case SetEvery: - return "set_every" case ForceRetry: return "force_retry" case ShouldRetry: @@ -59,63 +28,21 @@ func (a HostRuleAction) String() string { return "???" } -type HostRule struct { - Matches func(r *RequestCtx) bool - Action HostRuleAction - Arg float64 -} - -type ProxyConfig struct { - Name string `json:"name"` - Url string `json:"url"` -} - -var config struct { - Addr string `json:"addr"` - TimeoutStr string `json:"timeout"` - WaitStr string `json:"wait"` - Multiplier float64 `json:"multiplier"` - Retries int `json:"retries"` - RetriesHard int `json:"retries_hard"` - Hosts []*HostConfig `json:"hosts"` - Proxies []ProxyConfig `json:"proxies"` - Wait int64 - Timeout time.Duration - DefaultConfig *HostConfig - Routing bool -} - func parseRule(raw *RawHostRule) (*HostRule, error) { rule := &HostRule{} - var err error switch raw.Action { case "should_retry": rule.Action = ShouldRetry case "dont_retry": rule.Action = DontRetry - case "multiply_every": - rule.Action = MultiplyEvery - rule.Arg, err = strconv.ParseFloat(raw.Arg, 64) - case "set_every": - rule.Action = SetEvery - var duration time.Duration - duration, err = time.ParseDuration(raw.Arg) - if err != nil { - return nil, err - } - rule.Arg = 1 / duration.Seconds() case "force_retry": rule.Action = ForceRetry default: return nil, errors.Errorf("Invalid argument for action: %s", raw.Action) } - if err != nil { - return nil, err - } - switch { case strings.Contains(raw.Condition, "!="): op1Str, op2Str := split(raw.Condition, "!=") @@ -125,12 +52,12 @@ func parseRule(raw *RawHostRule) (*HostRule, error) { } if isGlob(op2Str) { - rule.Matches = func(ctx *RequestCtx) bool { + rule.Matches = func(ctx *ResponseCtx) bool { return !glob.Glob(op2Str, op1Func(ctx)) } } else { op2Str = strings.Replace(op2Str, "\\*", "*", -1) - rule.Matches = func(ctx *RequestCtx) bool { + rule.Matches = func(ctx *ResponseCtx) bool { return op1Func(ctx) != op2Str } } @@ -142,12 +69,12 @@ func parseRule(raw *RawHostRule) (*HostRule, error) { } if isGlob(op2Str) { - rule.Matches = func(ctx *RequestCtx) bool { + rule.Matches = func(ctx *ResponseCtx) bool { return glob.Glob(op2Str, op1Func(ctx)) } } else { op2Str = strings.Replace(op2Str, "\\*", "*", -1) - rule.Matches = func(ctx *RequestCtx) bool { + rule.Matches = func(ctx *ResponseCtx) bool { return op1Func(ctx) == op2Str } } @@ -162,7 +89,7 @@ func parseRule(raw *RawHostRule) (*HostRule, error) { return nil, err } - rule.Matches = func(ctx *RequestCtx) bool { + rule.Matches = func(ctx *ResponseCtx) bool { op1Num, err := strconv.ParseFloat(op1Func(ctx), 64) handleRuleErr(err) return op1Num > op2Num @@ -178,7 +105,7 @@ func parseRule(raw *RawHostRule) (*HostRule, error) { return nil, err } - rule.Matches = func(ctx *RequestCtx) bool { + rule.Matches = func(ctx *ResponseCtx) bool { op1Num, err := strconv.ParseFloat(op1Func(ctx), 64) handleRuleErr(err) return op1Num < op2Num @@ -214,10 +141,10 @@ func parseOperand2(op1, op2 string) (float64, error) { return strconv.ParseFloat(op2, 64) } -func parseOperand1(op string) func(ctx *RequestCtx) string { +func parseOperand1(op string) func(ctx *ResponseCtx) string { switch { case op == "body": - return func(ctx *RequestCtx) string { + return func(ctx *ResponseCtx) string { if ctx.Response == nil { return "" @@ -235,19 +162,19 @@ func parseOperand1(op string) func(ctx *RequestCtx) string { return string(bodyBytes) } case op == "status": - return func(ctx *RequestCtx) string { + return func(ctx *ResponseCtx) string { if ctx.Response == nil { return "" } return strconv.Itoa(ctx.Response.StatusCode) } case op == "response_time": - return func(ctx *RequestCtx) string { - return strconv.FormatFloat(time.Now().Sub(ctx.RequestTime).Seconds(), 'f', 6, 64) + return func(ctx *ResponseCtx) string { + return strconv.FormatFloat(ctx.ResponseTime, 'f', 6, 64) } case strings.HasPrefix(op, "header:"): header := op[strings.Index(op, ":")+1:] - return func(ctx *RequestCtx) string { + return func(ctx *ResponseCtx) string { if ctx.Response == nil { return "" } @@ -356,49 +283,8 @@ func validateConfig() { } } -func applyConfig(proxy *Proxy) { - - //Reverse order - for i := len(config.Hosts) - 1; i >= 0; i-- { - - conf := config.Hosts[i] - - proxy.Limiters = append(proxy.Limiters, &ExpiringLimiter{ - HostGlob: conf.Host, - IsGlob: isGlob(conf.Host), - Limiter: rate.NewLimiter(rate.Every(conf.Every), conf.Burst), - LastRead: time.Now(), - CanDelete: false, - }) - } -} - -func (b *Balancer) reloadConfig() { - - b.proxyMutex.Lock() - err := loadConfig() - if err != nil { - panic(err) - } - - if b.proxies != nil { - b.proxies = b.proxies[:0] - } - - for _, proxyConf := range config.Proxies { - proxy, err := NewProxy(proxyConf.Name, proxyConf.Url) - handleErr(err) - b.proxies = append(b.proxies, proxy) - - applyConfig(proxy) - - logrus.WithFields(logrus.Fields{ - "name": proxy.Name, - "url": proxy.Url, - }).Info("Proxy") - } - b.proxyMutex.Unlock() - +func (a *Architeuthis) reloadConfig() { + _ = loadConfig() logrus.Info("Reloaded config") } diff --git a/config.json b/config.json index 68882ff..e0ced5b 100644 --- a/config.json +++ b/config.json @@ -1,47 +1,27 @@ { "addr": "localhost:5050", "timeout": "15s", - "wait": "4s", - "multiplier": 2.5, + "wait": "0.5s", + "multiplier": 1, "retries": 3, - "retries_hard": 6, - "routing": true, - "proxies": [ - { - "name": "p0", - "url": "" - }, - { - "name": "p1", - "url": "" - }, - { - "name": "p2", - "url": "" - }, - { - "name": "p3", - "url": "" - } - ], + "max_error": 0.4, + "redis_url": "localhost:6379", "hosts": [ { "host": "*", - "every": "125ms", - "burst": 25, + "every": "1ms", + "burst": 1, "headers": { - "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Cache-Control": "max-age=0", "Connection": "keep-alive", - "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0" + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0" }, "rules": [ - {"condition": "response_time>10s", "action": "dont_retry"} ] }, { "host": ".i.imgur.com", - "every": "100ms", + "every": "1s", "burst": 1, "headers": { "User-Agent": "curl/7.65.1" @@ -49,7 +29,7 @@ }, { "host": "*.reddit.com", - "every": "2s", + "every": "1s", "burst": 1 }, { diff --git a/cron.go b/cron.go new file mode 100644 index 0000000..5d716b3 --- /dev/null +++ b/cron.go @@ -0,0 +1,54 @@ +package main + +import ( + "github.com/robfig/cron" + "github.com/sirupsen/logrus" + "sync" + "time" +) + +func (a *Architeuthis) setupProxyReviver() { + + const gcInterval = time.Minute * 10 + + gcCron := cron.New() + gcSchedule := cron.Every(gcInterval) + gcCron.Schedule(gcSchedule, cron.FuncJob(a.reviveProxies)) + + go gcCron.Run() + + logrus.WithFields(logrus.Fields{ + "every": gcInterval, + }).Info("Started proxy revive cron") +} + +func (a *Architeuthis) testUrl(ch chan *Proxy, url string, wg sync.WaitGroup) { + + for p := range ch { + r, _ := p.HttpClient.Get(url) + + if r != nil && isHttpSuccessCode(r.StatusCode) { + a.setAlive(p.Name) + } + } + wg.Done() +} + +func (a *Architeuthis) reviveProxies() { + + wg := sync.WaitGroup{} + const checkers = 50 + wg.Add(checkers) + + ch := make(chan *Proxy, checkers) + + for i := 0; i < checkers; i++ { + go a.testUrl(ch, "https://google.com/", wg) + } + + for _, p := range a.GetDeadProxies() { + ch <- p + } + + wg.Wait() +} diff --git a/retry.go b/errors.go similarity index 70% rename from retry.go rename to errors.go index e68f9fa..585424c 100644 --- a/retry.go +++ b/errors.go @@ -13,6 +13,33 @@ import ( "time" ) +func shouldBlameProxy(rCtx *ResponseCtx) bool { + + if rCtx.Response != nil { + return shouldBlameProxyHttpCode(rCtx.Response.StatusCode) + } else { + //TODO: don't blame proxy for timeout? + return true + } +} + +func isProxyError(err error) bool { + + urlErr, ok := err.(*url.Error) + if ok { + opErr, ok := urlErr.Err.(*net.OpError) + if ok { + if opErr.Op == "proxyconnect" { + return true + } + if opErr.Op == "local error" { + return true + } + } + } + return false +} + func isPermanentError(err error) bool { var opErr *net.OpError @@ -27,6 +54,11 @@ func isPermanentError(err error) bool { } return false } + + if opErr.Err.Error() == "Internal Privoxy Error" { + return true + } + } else { _, ok := err.(net.Error) if ok { @@ -40,11 +72,6 @@ func isPermanentError(err error) bool { return false } - if opErr.Op == "proxyconnect" { - logrus.Error("Error connecting to the proxy!") - return true - } - if opErr.Timeout() { // Usually means that there is no route to host return true @@ -54,9 +81,6 @@ func isPermanentError(err error) bool { case *net.DNSError: return true case *os.SyscallError: - - logrus.Printf("os.SyscallError:%+v", t) - if errno, ok := t.Err.(syscall.Errno); ok { switch errno { case syscall.ECONNREFUSED: @@ -65,30 +89,28 @@ func isPermanentError(err error) bool { case syscall.ETIMEDOUT: log.Println("timeout") return false + case syscall.ECONNRESET: + log.Println("connection reset by peer") + return false } } } - //todo: handle the other error types fmt.Println("fixme: None of the above") return false } -func waitTime(retries int) time.Duration { - +func getWaitTime(retries int) time.Duration { return time.Duration(config.Wait * int64(math.Pow(config.Multiplier, float64(retries)))) } func (p *Proxy) waitRateLimit(limiter *rate.Limiter) { reservation := limiter.Reserve() - delay := reservation.Delay() + if delay > 0 { - logrus.WithFields(logrus.Fields{ - "wait": delay, - }).Trace("Sleeping") time.Sleep(delay) } } @@ -97,6 +119,16 @@ func isHttpSuccessCode(code int) bool { return code >= 200 && code < 300 } +func shouldBlameProxyHttpCode(code int) bool { + + switch { + case code >= 500: + return false + default: + return true + } +} + func shouldRetryHttpCode(code int) bool { switch { diff --git a/gc.go b/gc.go deleted file mode 100644 index 041a876..0000000 --- a/gc.go +++ /dev/null @@ -1,61 +0,0 @@ -package main - -import ( - "github.com/robfig/cron" - "github.com/sirupsen/logrus" - "time" -) - -func (b *Balancer) setupGarbageCollector() { - - const gcInterval = time.Minute * 5 - - gcCron := cron.New() - gcSchedule := cron.Every(gcInterval) - gcCron.Schedule(gcSchedule, cron.FuncJob(b.cleanAllExpiredLimits)) - - go gcCron.Run() - - logrus.WithFields(logrus.Fields{ - "every": gcInterval, - }).Info("Started task cleanup cron") -} - -func (b *Balancer) cleanAllExpiredLimits() { - before := 0 - after := 0 - - b.proxyMutex.RLock() - for _, p := range b.proxies { - before += len(p.Limiters) - cleanExpiredLimits(p) - after += len(p.Limiters) - } - b.proxyMutex.RUnlock() - - logrus.WithFields(logrus.Fields{ - "removed": before - after, - }).Info("Cleaned up limiters") -} - -func cleanExpiredLimits(proxy *Proxy) { - - const ttl = time.Hour - - var limits []*ExpiringLimiter - now := time.Now() - - for host, limiter := range proxy.Limiters { - if now.Sub(limiter.LastRead) > ttl && limiter.CanDelete { - logrus.WithFields(logrus.Fields{ - "proxy": proxy.Name, - "limiter": host, - "last_read": now.Sub(limiter.LastRead), - }).Trace("Pruning limiter") - } else { - limits = append(limits, limiter) - } - } - - proxy.Limiters = limits -} diff --git a/grafana.png b/grafana.png new file mode 100644 index 0000000000000000000000000000000000000000..94c9fab95f5dd68f4c110a30fb8507a46fe5a2fa GIT binary patch literal 209443 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

g?8Co0})-=Z^J$9d!EYnOY$1@^az^LH;FqAEMgN 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 literal 0 HcmV?d00001 diff --git a/grafana/model.json b/grafana/model.json new file mode 100644 index 0000000..a2ddcb6 --- /dev/null +++ b/grafana/model.json @@ -0,0 +1,778 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 1, + "links": [], + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 14, + "x": 0, + "y": 0 + }, + "id": 6, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "request.count" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "groupBy": [ + { + "params": [ + "1m" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "request", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "status" + ], + "type": "field" + }, + { + "params": [], + "type": "count" + } + ] + ], + "tags": [] + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Requests / minute", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 10, + "x": 14, + "y": 0 + }, + "id": 5, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "connected", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "good", + "color": "#73BF69" + }, + { + "alias": "bad", + "color": "#F2495C", + "lines": false, + "pointradius": 4, + "points": true + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "good", + "groupBy": [ + { + "params": [ + "1m" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "request", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "latency" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "ok", + "operator": "=", + "value": "true" + } + ] + }, + { + "alias": "bad", + "groupBy": [ + { + "params": [ + "1m" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "request", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "latency" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [ + { + "key": "ok", + "operator": "=", + "value": "false" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Latency", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 8, + "x": 0, + "y": 9 + }, + "id": 3, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "connected", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "request.sum", + "color": "#A352CC" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "groupBy": [ + { + "params": [ + "1m" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "request", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "size" + ], + "type": "field" + }, + { + "params": [], + "type": "sum" + }, + { + "params": [ + "/60" + ], + "type": "math" + } + ] + ], + "tags": [] + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Bandwidth", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 8, + "x": 8, + "y": 9 + }, + "id": 2, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "connected", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "count", + "color": "#5794F2" + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "alias": "count", + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "add_proxy", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "newCount" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [] + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Proxy count", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 8, + "x": 16, + "y": 9 + }, + "id": 4, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null as zero", + "options": { + "dataLinks": [] + }, + "percentage": false, + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "alias": "retry", + "color": "#FF9830" + }, + { + "alias": "rate", + "color": "#5794F2" + } + ], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "alias": "retry", + "groupBy": [ + { + "params": [ + "1m" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "sleep", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "duration" + ], + "type": "field" + }, + { + "params": [], + "type": "sum" + } + ] + ], + "tags": [ + { + "key": "context", + "operator": "=", + "value": "retry" + } + ] + }, + { + "alias": "rate", + "groupBy": [ + { + "params": [ + "1m" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "sleep", + "orderByTime": "ASC", + "policy": "default", + "refId": "B", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "duration" + ], + "type": "field" + }, + { + "params": [], + "type": "sum" + } + ] + ], + "tags": [ + { + "key": "context", + "operator": "=", + "value": "rate" + } + ] + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Sleep times", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": "5s", + "schemaVersion": 20, + "style": "dark", + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-3h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Architeuthis", + "uid": "I2xEOnbZk", + "version": 11 +} \ No newline at end of file diff --git a/import_from_broker.py b/import_from_broker.py new file mode 100644 index 0000000..aa04d11 --- /dev/null +++ b/import_from_broker.py @@ -0,0 +1,31 @@ +import asyncio + +import requests +from proxybroker import Broker, Checker + +ARCHITEUTHIS_URL = "http://localhost:5050" + + +def add_to_architeuthis(name, url): + r = requests.get(ARCHITEUTHIS_URL + "/add_proxy?name=%s&url=%s" % (name, url)) + print("ADD %s <%d>" % (name, r.status_code)) + + +async def add(proxies): + while True: + proxy = await proxies.get() + if proxy is None: + break + + url = "http://%s:%d" % (proxy.host, proxy.port) + name = "%s_%d" % (proxy.host, proxy.port) + + add_to_architeuthis(name, url) + + +proxies = asyncio.Queue() +broker = Broker(proxies) +tasks = asyncio.gather(broker.find(types=['HTTPS'], limit=300), add(proxies)) + +loop = asyncio.get_event_loop() +loop.run_until_complete(tasks) diff --git a/influxdb.go b/influxdb.go new file mode 100644 index 0000000..43fbe74 --- /dev/null +++ b/influxdb.go @@ -0,0 +1,111 @@ +package main + +import ( + influx "github.com/influxdata/influxdb1-client/v2" + "github.com/sirupsen/logrus" + "strconv" + "time" +) + +const InfluxDbBufferSize = 100 +const InfluxDbDatabase = "architeuthis" +const InfluxDBRetentionPolicy = "" + +func (a *Architeuthis) asyncWriter(metrics chan *influx.Point) { + + logrus.Trace("Started async influxdb writer") + + bp, _ := influx.NewBatchPoints(influx.BatchPointsConfig{ + Database: InfluxDbDatabase, + RetentionPolicy: InfluxDBRetentionPolicy, + }) + + for point := range metrics { + bp.AddPoint(point) + + if len(bp.Points()) >= InfluxDbBufferSize { + flushQueue(a.influxdb, &bp) + } + } + flushQueue(a.influxdb, &bp) +} + +func flushQueue(influxdb influx.Client, bp *influx.BatchPoints) { + + err := influxdb.Write(*bp) + + if err != nil { + logrus.WithError(err).Error("influxdb write") + return + } + + logrus.WithFields(logrus.Fields{ + "size": len((*bp).Points()), + }).Trace("Wrote points") + + *bp, _ = influx.NewBatchPoints(influx.BatchPointsConfig{ + Database: InfluxDbDatabase, + RetentionPolicy: InfluxDBRetentionPolicy, + }) +} + +func (a *Architeuthis) writeMetricProxyCount(newCount int) { + point, _ := influx.NewPoint( + "add_proxy", + nil, + map[string]interface{}{ + "newCount": newCount, + }, + time.Now(), + ) + a.points <- point +} + +func (a *Architeuthis) writeMetricRequest(ctx ResponseCtx) { + + var fields map[string]interface{} + + if ctx.Response != nil { + + size, _ := strconv.ParseInt(ctx.Response.Header.Get("Content-Length"), 10, 64) + + fields = map[string]interface{}{ + "status": ctx.Response.StatusCode, + "latency": ctx.ResponseTime, + "size": size, + } + } else { + fields = map[string]interface{}{} + } + + var ok string + if ctx.Error == nil { + ok = "true" + } else { + ok = "false" + } + + point, _ := influx.NewPoint( + "request", + map[string]string{ + "ok": ok, + }, + fields, + time.Now(), + ) + a.points <- point +} + +func (a *Architeuthis) writeMetricSleep(duration time.Duration, tag string) { + point, _ := influx.NewPoint( + "sleep", + map[string]string{ + "context": tag, + }, + map[string]interface{}{ + "duration": duration.Seconds(), + }, + time.Now(), + ) + a.points <- point +} diff --git a/jenkins/Jenkinsfile b/jenkins/Jenkinsfile index 8f85688..8db8173 100644 --- a/jenkins/Jenkinsfile +++ b/jenkins/Jenkinsfile @@ -6,6 +6,7 @@ remote.identityFile = '/var/lib/jenkins/.ssh/id_rsa' remote.knownHosts = '/var/lib/jenkins/.ssh/known_hosts' remote.allowAnyHosts = true logLevel = 'FINER' +remote.port = 2299 pipeline { agent none diff --git a/main.go b/main.go index dce170e..e8a9df1 100644 --- a/main.go +++ b/main.go @@ -2,473 +2,292 @@ package main import ( "fmt" - "github.com/dchest/siphash" "github.com/elazarl/goproxy" + "github.com/go-redis/redis" + influx "github.com/influxdata/influxdb1-client/v2" "github.com/pkg/errors" - "github.com/ryanuber/go-glob" "github.com/sirupsen/logrus" - "golang.org/x/time/rate" - "math" - "math/rand" + "html/template" "net/http" - "net/url" - "sort" "strings" - "sync" - "sync/atomic" "time" ) -type Balancer struct { - server *goproxy.ProxyHttpServer - proxies []*Proxy - proxyMutex *sync.RWMutex -} +func New() *Architeuthis { -type ExpiringLimiter struct { - HostGlob string - IsGlob bool - CanDelete bool - Limiter *rate.Limiter - LastRead time.Time -} + a := new(Architeuthis) -type Proxy struct { - Name string - Url *url.URL - Limiters []*ExpiringLimiter - HttpClient *http.Client - Connections *int32 - UniqueParam string -} + a.redis = redis.NewClient(&redis.Options{ + Addr: config.RedisUrl, + Password: "", + DB: 0, + }) -type RequestCtx struct { - RequestTime time.Time - Response *http.Response -} + a.setupProxyReviver() -type ByConnectionCount []*Proxy + var err error + const InfluxDBUrl = "http://localhost:8086" + a.influxdb, err = influx.NewHTTPClient(influx.HTTPConfig{ + Addr: InfluxDBUrl, + }) -func (a ByConnectionCount) Len() int { - return len(a) -} - -func (a ByConnectionCount) Swap(i, j int) { - a[i], a[j] = a[j], a[i] -} - -func (a ByConnectionCount) Less(i, j int) bool { - return *a[i].Connections < *a[j].Connections -} - -func (p *Proxy) getLimiter(host string) *rate.Limiter { - - for _, limiter := range p.Limiters { - if limiter.IsGlob { - if glob.Glob(limiter.HostGlob, host) { - limiter.LastRead = time.Now() - return limiter.Limiter - } - } else if limiter.HostGlob == host { - limiter.LastRead = time.Now() - return limiter.Limiter - } + _, err = http.Post(InfluxDBUrl+"/query", "application/x-www-form-urlencoded", strings.NewReader("q=CREATE DATABASE \"architeuthis\"")) + if err != nil { + panic(err) } - newExpiringLimiter := p.makeNewLimiter(host) - return newExpiringLimiter.Limiter -} + a.points = make(chan *influx.Point, InfluxDbBufferSize) -func (p *Proxy) makeNewLimiter(host string) *ExpiringLimiter { + go a.asyncWriter(a.points) - newExpiringLimiter := &ExpiringLimiter{ - CanDelete: false, - HostGlob: host, - IsGlob: false, - LastRead: time.Now(), - Limiter: rate.NewLimiter(rate.Every(config.DefaultConfig.Every), config.DefaultConfig.Burst), - } + a.server = goproxy.NewProxyHttpServer() + a.server.OnRequest().HandleConnect(goproxy.AlwaysMitm) - p.Limiters = append([]*ExpiringLimiter{newExpiringLimiter}, p.Limiters...) - - logrus.WithFields(logrus.Fields{ - "host": host, - "every": config.DefaultConfig.Every, - }).Trace("New limiter") - - return newExpiringLimiter -} - -func simplifyHost(host string) string { - - col := strings.LastIndex(host, ":") - if col > 0 { - host = host[:col] - } - - return "." + host -} - -func (b *Balancer) chooseProxy(r *http.Request) (*Proxy, error) { - - if len(b.proxies) == 0 { - return b.proxies[0], nil - } - - if config.Routing { - routingProxyParam := r.Header.Get("X-Architeuthis-Proxy") - r.Header.Del("X-Architeuthis-Proxy") - - if routingProxyParam != "" { - p := b.getProxyByNameOrNil(routingProxyParam) - if p != nil { - return p, nil - } - } - - routingHashParam := r.Header.Get("X-Architeuthis-Hash") - r.Header.Del("X-Architeuthis-Hash") - - if routingHashParam != "" { - hash := siphash.Hash(1, 2, []byte(routingHashParam)) - if hash == 0 { - hash = 1 - } - - pIdx := int(float64(hash) / (float64(math.MaxUint64) / float64(len(b.proxies)))) - - logrus.WithFields(logrus.Fields{ - "hash": routingHashParam, - }).Trace("Using hash") - - return b.proxies[pIdx], nil - } - - routingUniqueParam := r.Header.Get("X-Architeuthis-Unique") - r.Header.Del("X-Architeuthis-Unique") - - if routingUniqueParam != "" { - - var blankProxy *Proxy - - for _, p := range b.proxies { - if p.UniqueParam == "" { - blankProxy = p - } else if p.UniqueParam == routingUniqueParam { - return p, nil - } - } - if blankProxy != nil { - blankProxy.UniqueParam = routingUniqueParam - logrus.Infof("Bound unique param %s to %s", routingUniqueParam, blankProxy.Name) - return blankProxy, nil - } else { - logrus.WithField("unique param", routingUniqueParam).Error("No blank proxies to route this request!") - return nil, errors.Errorf("No blank proxies to route this request! unique param: %s", routingUniqueParam) - } - } - } - - sort.Sort(ByConnectionCount(b.proxies)) - - proxyWithLeastConns := b.proxies[0] - proxiesWithSameConnCount := b.getProxiesWithSameConnCountAs(proxyWithLeastConns) - - if len(proxiesWithSameConnCount) > 1 { - return proxiesWithSameConnCount[rand.Intn(len(proxiesWithSameConnCount))], nil - } else { - return proxyWithLeastConns, nil - } -} - -func (b *Balancer) getProxyByNameOrNil(routingParam string) *Proxy { - if routingParam != "" { - for _, p := range b.proxies { - if p.Name == routingParam { - return p - } - } - } - - return nil -} - -func (b *Balancer) getProxiesWithSameConnCountAs(p0 *Proxy) []*Proxy { - - proxiesWithSameConnCount := make([]*Proxy, 0) - for _, p := range b.proxies { - if *p.Connections != *p0.Connections { - break - } - proxiesWithSameConnCount = append(proxiesWithSameConnCount, p) - } - return proxiesWithSameConnCount -} - -func New() *Balancer { - - balancer := new(Balancer) - - balancer.proxyMutex = &sync.RWMutex{} - balancer.server = goproxy.NewProxyHttpServer() - - balancer.server.OnRequest().HandleConnect(goproxy.AlwaysMitm) - - balancer.server.OnRequest().DoFunc( + a.server.OnRequest().DoFunc( func(r *http.Request, ctx *goproxy.ProxyCtx) (*http.Request, *http.Response) { - balancer.proxyMutex.RLock() - defer balancer.proxyMutex.RUnlock() - p, err := balancer.chooseProxy(r) - - if err != nil { - return nil, goproxy.NewResponse(r, "text/plain", 500, err.Error()) - } - - logrus.WithFields(logrus.Fields{ - "proxy": p.Name, - "conns": *p.Connections, - "url": r.URL, - }).Trace("Routing request") - - resp, err := p.processRequest(r) + resp, err := a.processRequest(r) if err != nil { logrus.WithError(err).Trace("Could not complete request") - return nil, goproxy.NewResponse(r, "text/plain", 500, err.Error()) + return nil, goproxy.NewResponse(r, "text/plain", http.StatusInternalServerError, err.Error()) } return nil, resp }) - balancer.server.NonproxyHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + mux := http.NewServeMux() + a.server.NonproxyHandler = mux - if r.URL.Path == "/reload" { - balancer.reloadConfig() - _, _ = fmt.Fprint(w, "Reloaded\n") - } else { - w.Header().Set("Content-Type", "application/json") - _, _ = fmt.Fprint(w, "{\"name\":\"Architeuthis\",\"version\":1.0}") - } + mux.HandleFunc("/reload", func(w http.ResponseWriter, r *http.Request) { + a.reloadConfig() + _, _ = fmt.Fprint(w, "Reloaded\n") }) - return balancer + + templ, _ := template.ParseFiles("templates/stats.html") + + mux.HandleFunc("/stats", func(w http.ResponseWriter, r *http.Request) { + err = templ.Execute(w, a.getStats()) + }) + + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = fmt.Fprint(w, "{\"name\":\"Architeuthis\",\"version\":2.0}") + }) + + mux.HandleFunc("/add_proxy", func(w http.ResponseWriter, r *http.Request) { + name := r.URL.Query().Get("name") + url := r.URL.Query().Get("url") + + if name == "" || url == "" { + w.WriteHeader(http.StatusBadRequest) + return + } + + err := a.AddProxy(name, url) + if err != nil { + logrus.WithError(err).WithFields(logrus.Fields{ + "name": name, + "url": url, + }).Error("Could not add proxy") + + w.WriteHeader(http.StatusInternalServerError) + return + } + w.WriteHeader(http.StatusNoContent) + }) + + return a } -func getConfsMatchingRequest(r *http.Request) []*HostConfig { +func (a *Architeuthis) processRequest(r *http.Request) (*http.Response, error) { - sHost := simplifyHost(r.Host) + sHost := normalizeHost(r.Host) + configs := getConfigsMatchingHost(sHost) - configs := make([]*HostConfig, 0) + options := parseOptions(&r.Header) + proxyReq := applyHeaders(cloneRequest(r), configs) - for _, conf := range config.Hosts { - if glob.Glob(conf.Host, sHost) { - configs = append(configs, conf) - } + requestCtx := RequestCtx{ + Request: proxyReq, + Retries: 0, + RequestTime: time.Now(), + options: options, + configs: configs, } - return configs + for { + responseCtx := a.processRequestWithCtx(&requestCtx) + + a.writeMetricRequest(responseCtx) + + if requestCtx.p != nil { + a.UpdateProxy(requestCtx.p) + } + + if responseCtx.Error == nil { + return responseCtx.Response, nil + } + + if !responseCtx.ShouldRetry { + return nil, responseCtx.Error + } + } } -func applyHeaders(r *http.Request, configs []*HostConfig) *http.Request { - - for _, conf := range configs { - for k, v := range conf.Headers { - r.Header.Set(k, v) - } +func (lim *RedisLimiter) waitRateLimit() (time.Duration, error) { + result, err := lim.Limiter.Allow(lim.Key) + if err != nil { + return 0, err } - return r + if result.RetryAfter > 0 { + time.Sleep(result.RetryAfter) + } + return result.RetryAfter, nil } -func computeRules(ctx *RequestCtx, configs []*HostConfig) (dontRetry, forceRetry bool, - limitMultiplier, newLimit float64, shouldRetry bool) { - dontRetry = false - forceRetry = false - shouldRetry = false - limitMultiplier = 1 +func (a *Architeuthis) processRequestWithCtx(rCtx *RequestCtx) ResponseCtx { - for _, conf := range configs { - for _, rule := range conf.Rules { - if rule.Matches(ctx) { - switch rule.Action { - case DontRetry: - dontRetry = true - case MultiplyEvery: - limitMultiplier = rule.Arg - case SetEvery: - newLimit = rule.Arg - case ForceRetry: - forceRetry = true - case ShouldRetry: - shouldRetry = true - } - } - } + if !rCtx.LastErrorWasProxyError && rCtx.Retries > config.Retries { + return ResponseCtx{Error: errors.Errorf("Giving up after %d retries", rCtx.Retries)} } + name, err := a.ChooseProxy(rCtx) + if err != nil { + return ResponseCtx{Error: err} + } + + logrus.WithFields(logrus.Fields{ + "proxy": name, + "host": rCtx.Request.Host, + }).Info("Routing request") + + p, err := a.GetProxy(name) + if err != nil { + return ResponseCtx{Error: err} + } + + rCtx.p = p + response, err := a.processRequestWithProxy(rCtx) + + responseCtx := ResponseCtx{ + Response: response, + ResponseTime: time.Now().Sub(rCtx.RequestTime).Seconds(), + Error: err, + } + + p.incrReqTime = responseCtx.ResponseTime + + if response != nil && isHttpSuccessCode(response.StatusCode) { + p.incrGood += 1 + return responseCtx + } + + rCtx.LastFailedProxy = p.Name + + if isProxyError(err) { + a.handleFatalProxyError(p) + rCtx.LastErrorWasProxyError = true + responseCtx.ShouldRetry = true + return responseCtx + } + + if err != nil { + if isPermanentError(err) { + a.handleProxyError(p, &responseCtx) + return responseCtx + } + + a.waitAfterFail(rCtx) + a.handleProxyError(p, &responseCtx) + responseCtx.ShouldRetry = true + } + + dontRetry, forceRetry, shouldRetry := computeRules(rCtx, responseCtx) + + if forceRetry { + responseCtx.ShouldRetry = true + return responseCtx + + } else if dontRetry { + responseCtx.Error = errors.Errorf("Applied dont_retry rule") + return responseCtx + } + + if response == nil { + return responseCtx + } + + // Handle HTTP errors + responseCtx.Error = errors.Errorf("HTTP error: %d", response.StatusCode) + + if shouldRetry || shouldRetryHttpCode(response.StatusCode) { + responseCtx.ShouldRetry = true + } + + return responseCtx +} + +func (a *Architeuthis) waitAfterFail(rCtx *RequestCtx) { + wait := getWaitTime(rCtx.Retries) + time.Sleep(wait) + + a.writeMetricSleep(wait, "retry") + + rCtx.Retries += 1 +} + +func isRemoteProxy(p *Proxy) bool { + return p.HttpClient.Transport != nil +} + +func (a *Architeuthis) handleProxyError(p *Proxy, rCtx *ResponseCtx) { + + if isRemoteProxy(p) && shouldBlameProxy(rCtx) { + p.incrBad += 1 + p.BadRequestCount += 1 + } +} + +func (a *Architeuthis) handleFatalProxyError(p *Proxy) { + a.setDead(p.Name) +} + +func (a *Architeuthis) processRequestWithProxy(rCtx *RequestCtx) (r *http.Response, e error) { + + a.incConns(rCtx.p.Name) + + limiter := a.getLimiter(rCtx) + duration, err := limiter.waitRateLimit() + if err != nil { + return nil, err + } + + if duration > 0 { + a.writeMetricSleep(duration, "rate") + } + + r, e = rCtx.p.HttpClient.Do(rCtx.Request) + return } -func (p *Proxy) processRequest(r *http.Request) (*http.Response, error) { +func (a *Architeuthis) Run() { - atomic.AddInt32(p.Connections, 1) - defer func() { - atomic.AddInt32(p.Connections, -1) - }() - retries := 0 - additionalRetries := 0 - - configs := getConfsMatchingRequest(r) - sHost := simplifyHost(r.Host) - limiter := p.getLimiter(sHost) - - proxyReq := applyHeaders(cloneRequest(r), configs) - - for { - p.waitRateLimit(limiter) - - if retries >= config.Retries+additionalRetries || retries > config.RetriesHard { - return nil, errors.Errorf("giving up after %d retries", retries) - } - - ctx := &RequestCtx{ - RequestTime: time.Now(), - } - var err error - ctx.Response, err = p.HttpClient.Do(proxyReq) - - if err != nil { - if isPermanentError(err) { - return nil, err - } - - dontRetry, forceRetry, limitMultiplier, newLimit, _ := computeRules(ctx, configs) - if forceRetry { - additionalRetries += 1 - } else if dontRetry { - return nil, errors.Errorf("Applied dont_retry rule for (%s)", err) - } - p.applyLimiterRules(newLimit, limiter, limitMultiplier) - - wait := waitTime(retries) - logrus.WithError(err).WithFields(logrus.Fields{ - "wait": wait, - }).Trace("Temporary error during request") - time.Sleep(wait) - - retries += 1 - continue - } - - // Compute rules - dontRetry, forceRetry, limitMultiplier, newLimit, shouldRetry := computeRules(ctx, configs) - - if forceRetry { - additionalRetries += 1 - } else if dontRetry { - return nil, errors.Errorf("Applied dont_retry rule") - } - p.applyLimiterRules(newLimit, limiter, limitMultiplier) - - if isHttpSuccessCode(ctx.Response.StatusCode) { - return ctx.Response, nil - - } else if forceRetry || shouldRetry || shouldRetryHttpCode(ctx.Response.StatusCode) { - - wait := waitTime(retries) - - logrus.WithFields(logrus.Fields{ - "wait": wait, - "status": ctx.Response.StatusCode, - }).Trace("HTTP error during request") - - time.Sleep(wait) - retries += 1 - continue - } else { - return nil, errors.Errorf("HTTP error: %d", ctx.Response.StatusCode) - } - } -} - -func (p *Proxy) applyLimiterRules(newLimit float64, limiter *rate.Limiter, limitMultiplier float64) { - if newLimit != 0 { - limiter.SetLimit(rate.Limit(newLimit)) - } else if limitMultiplier != 1 { - limiter.SetLimit(limiter.Limit() * rate.Limit(1/limitMultiplier)) - } -} - -func (b *Balancer) Run() { - - //b.Verbose = true logrus.WithFields(logrus.Fields{ "addr": config.Addr, }).Info("Listening") - err := http.ListenAndServe(config.Addr, b.server) + err := http.ListenAndServe(config.Addr, a.server) logrus.Fatal(err) } -func cloneRequest(r *http.Request) *http.Request { - - proxyReq := &http.Request{ - Method: r.Method, - URL: r.URL, - Proto: "HTTP/1.1", - ProtoMajor: 1, - ProtoMinor: 1, - Header: r.Header, - Body: r.Body, - Host: r.URL.Host, - } - - return proxyReq -} - -func NewProxy(name, stringUrl string) (*Proxy, error) { - - var parsedUrl *url.URL - var err error - if stringUrl != "" { - parsedUrl, err = url.Parse(stringUrl) - if err != nil { - return nil, err - } - } else { - parsedUrl = nil - } - - var httpClient *http.Client - if parsedUrl == nil { - httpClient = &http.Client{} - } else { - httpClient = &http.Client{ - Transport: &http.Transport{ - Proxy: http.ProxyURL(parsedUrl), - }, - } - } - - httpClient.Timeout = config.Timeout - - p := &Proxy{ - Name: name, - Url: parsedUrl, - HttpClient: httpClient, - } - - conns := int32(0) - p.Connections = &conns - return p, nil -} - func main() { logrus.SetLevel(logrus.TraceLevel) balancer := New() balancer.reloadConfig() - balancer.setupGarbageCollector() balancer.Run() } diff --git a/models.go b/models.go new file mode 100644 index 0000000..71843c6 --- /dev/null +++ b/models.go @@ -0,0 +1,212 @@ +package main + +import ( + "github.com/elazarl/goproxy" + redisPackage "github.com/go-redis/redis" + "github.com/go-redis/redis_rate" + influx "github.com/influxdata/influxdb1-client/v2" + "math" + "net/http" + "net/url" + "time" +) + +type Architeuthis struct { + server *goproxy.ProxyHttpServer + redis *redisPackage.Client + influxdb influx.Client + points chan *influx.Point +} + +// Request/Response +type RequestCtx struct { + Request *http.Request + + Retries int + + LastFailedProxy string + p *Proxy + LastErrorWasProxyError bool + + RequestTime time.Time + options RequestOptions + configs []*HostConfig +} + +type ResponseCtx struct { + Response *http.Response + ResponseTime float64 + Error error + ShouldRetry bool +} + +type RequestOptions struct { + DoCloudflareBypass bool +} + +// Proxy +type Proxy struct { + Name string + Url *url.URL + + HttpClient *http.Client + + GoodRequestCount int64 + incrGood int64 + + BadRequestCount int64 + incrBad int64 + + TotalRequestTime float64 + incrReqTime float64 + + Connections int64 + + KillOnError bool +} + +func (p *Proxy) AvgLatency() float64 { + return p.TotalRequestTime / float64(p.GoodRequestCount+p.BadRequestCount) +} + +func (p *Proxy) Score() float64 { + + if p.GoodRequestCount+p.BadRequestCount == 0 { + return 1000 + } + + var errorMod float64 + var latencyMod float64 + + if p.BadRequestCount == 0 { + errorMod = 1 + } else { + errorMod = math.Min(float64(p.GoodRequestCount)/float64(p.BadRequestCount), 1) + } + + avgLatency := p.AvgLatency() + + switch { + case avgLatency < 3: + latencyMod = 1 + case avgLatency < 4: + latencyMod = 0.8 + case avgLatency < 5: + latencyMod = 0.7 + case avgLatency < 9: + latencyMod = 0.6 + case avgLatency < 10: + latencyMod = 0.5 + case avgLatency < 15: + latencyMod = 0.3 + case avgLatency < 20: + latencyMod = 0.1 + default: + latencyMod = 0 + } + + return 600*errorMod + 400*latencyMod - 200*(math.Max(float64(p.Connections-1), 0)) +} + +func (p *Proxy) getStats() proxyStat { + return proxyStat{ + Name: p.Name, + Url: p.Url.String(), + GoodRequestCount: p.GoodRequestCount, + BadRequestCount: p.BadRequestCount, + AvgLatency: p.AvgLatency(), + Connections: p.Connections, + Score: int64(p.Score()), + } +} + +type proxyStat struct { + Name string + Url string + + GoodRequestCount int64 + BadRequestCount int64 + AvgLatency float64 + Connections int64 + Score int64 +} + +type statsData struct { + TotalGood int + TotalBad int + Connections int + AvgLatency float64 + AvgScore float64 + + Proxies []proxyStat +} + +type CheckMethod string + +const ( + CheckIp CheckMethod = "check_ip" + HttpOk CheckMethod = "http_ok" +) + +type ProxyJudge struct { + url *url.URL + method CheckMethod +} + +type RedisLimiter struct { + Key string + Limiter *redis_rate.Limiter +} + +// Config +type HostConfig struct { + Host string `json:"host"` + EveryStr string `json:"every"` + Burst int `json:"burst"` + Headers map[string]string `json:"headers"` + RawRules []*RawHostRule `json:"rules"` + IsGlob bool + Every time.Duration + Rules []*HostRule +} + +type RawHostRule struct { + Condition string `json:"condition"` + Action string `json:"action"` + Arg string `json:"arg"` +} + +type HostRuleAction int + +const ( + DontRetry HostRuleAction = 0 + ForceRetry HostRuleAction = 1 + ShouldRetry HostRuleAction = 2 +) + +type HostRule struct { + Matches func(r *ResponseCtx) bool + Action HostRuleAction + Arg float64 +} + +type ProxyConfig struct { + Name string `json:"name"` + Url string `json:"url"` +} + +var config struct { + Addr string `json:"addr"` + TimeoutStr string `json:"timeout"` + WaitStr string `json:"wait"` + Multiplier float64 `json:"multiplier"` + Retries int `json:"retries"` + MaxErrorRatio float64 `json:"max_error"` + Hosts []*HostConfig `json:"hosts"` + Proxies []ProxyConfig `json:"proxies"` + RedisUrl string `json:"redis_url"` + Wait int64 + Timeout time.Duration + DefaultConfig *HostConfig + Routing bool +} diff --git a/redis.go b/redis.go new file mode 100644 index 0000000..30de073 --- /dev/null +++ b/redis.go @@ -0,0 +1,293 @@ +package main + +import ( + "errors" + "github.com/go-redis/redis" + "github.com/go-redis/redis_rate" + "github.com/sirupsen/logrus" + "math" + "math/rand" + "net/http" + "net/url" + "strconv" +) + +const KeyProxyList = "proxies" +const KeyDeadProxyList = "deadProxies" +const PrefixProxy = "proxy:" + +const KeyConnectionCount = "conn" +const KeyRequestTime = "reqtime" +const KeyBadRequestCount = "bad" +const KeyGoodRequestCount = "good" +const KeyRevived = "revived" +const KeyUrl = "url" + +func (a *Architeuthis) getLimiter(rCtx *RequestCtx) *RedisLimiter { + + var hostConfig *HostConfig + if len(rCtx.configs) == 0 { + hostConfig = config.DefaultConfig + } else { + hostConfig = rCtx.configs[len(rCtx.configs)-1] + } + + return &RedisLimiter{ + Key: hostConfig.Host + ":" + rCtx.p.Name, + Limiter: redis_rate.NewLimiter(a.redis, &redis_rate.Limit{ + Rate: 1, + Period: hostConfig.Every, + Burst: hostConfig.Burst, + }), + } +} + +func (a *Architeuthis) UpdateProxy(p *Proxy) { + + key := PrefixProxy + p.Name + pipe := a.redis.Pipeline() + + if p.incrBad != 0 { + pipe.HIncrBy(key, KeyBadRequestCount, p.incrBad) + p.BadRequestCount += p.incrBad + } else { + pipe.HIncrBy(key, KeyGoodRequestCount, p.incrGood) + p.GoodRequestCount += p.incrGood + + if p.KillOnError { + pipe.HSet(key, KeyRevived, 0) + } + } + + pipe.HIncrByFloat(key, KeyRequestTime, p.incrReqTime) + p.TotalRequestTime += p.incrReqTime + + pipe.HIncrBy(key, KeyConnectionCount, -1) + + pipe.ZAddXX(KeyProxyList, &redis.Z{ + Score: p.Score(), + Member: p.Name, + }) + + _, _ = pipe.Exec() + + newBadRatio := float64(p.BadRequestCount) / float64(p.GoodRequestCount) + + if p.incrBad > 0 && (p.KillOnError || (newBadRatio > config.MaxErrorRatio && p.BadRequestCount >= 5)) { + a.setDead(p.Name) + } +} + +func (a *Architeuthis) AddProxy(name, stringUrl string) error { + + _, err := url.Parse(stringUrl) + if err != nil { + return err + } + + pipe := a.redis.Pipeline() + + pipe.HMSet(PrefixProxy+name, map[string]interface{}{ + KeyUrl: stringUrl, + KeyRequestTime: 0, + KeyGoodRequestCount: 0, + KeyBadRequestCount: 0, + KeyConnectionCount: 0, + KeyRevived: 0, + }) + + zadd := pipe.ZAdd(KeyProxyList, &redis.Z{ + Score: 1000, + Member: name, + }) + + zcard := pipe.ZCard(KeyProxyList) + + _, _ = pipe.Exec() + + if zadd.Val() != 0 { + logrus.WithFields(logrus.Fields{ + KeyUrl: stringUrl, + }).Info("Add proxy") + + a.writeMetricProxyCount(int(zcard.Val())) + } + + return nil +} + +func (a *Architeuthis) incConns(name string) int64 { + res, _ := a.redis.HIncrBy(PrefixProxy+name, KeyConnectionCount, 1).Result() + return res +} + +func (a *Architeuthis) setDead(name string) { + + pipe := a.redis.Pipeline() + + pipe.ZRem(KeyProxyList, name) + pipe.SAdd(KeyDeadProxyList, name) + count := pipe.ZCard(KeyProxyList) + + _, _ = pipe.Exec() + + logrus.WithFields(logrus.Fields{ + "proxy": name, + }).Trace("dead") + + a.writeMetricProxyCount(int(count.Val())) +} + +func (a *Architeuthis) setAlive(name string) { + + pipe := a.redis.Pipeline() + + pipe.SRem(KeyDeadProxyList, name) + pipe.HMSet(KeyProxyList+name, map[string]interface{}{ + KeyRevived: 1, + KeyRequestTime: 0, + KeyGoodRequestCount: 0, + KeyBadRequestCount: 0, + KeyConnectionCount: 0, + }) + pipe.ZAdd(KeyProxyList, &redis.Z{ + Score: 1000, + Member: name, + }) + count := pipe.ZCard(KeyProxyList) + + _, _ = pipe.Exec() + + logrus.WithFields(logrus.Fields{ + "proxy": name, + }).Trace("revive") + + a.writeMetricProxyCount(int(count.Val())) +} + +func (a *Architeuthis) GetDeadProxies() []*Proxy { + + result, err := a.redis.SMembers(KeyDeadProxyList).Result() + if err != nil { + return nil + } + + return a.getProxies(result) +} + +func (a *Architeuthis) GetAliveProxies() []*Proxy { + + result, err := a.redis.ZRange(KeyProxyList, 0, math.MaxInt64).Result() + if err != nil { + return nil + } + + return a.getProxies(result) +} + +func (a *Architeuthis) getProxies(names []string) []*Proxy { + + var proxies []*Proxy + + for _, name := range names { + p, _ := a.GetProxy(name) + if p != nil { + proxies = append(proxies, p) + } + } + + return proxies +} + +func (a *Architeuthis) getStats() statsData { + + data := statsData{} + + var totalTime float64 = 0 + var totalScore int64 = 0 + + for _, p := range a.GetAliveProxies() { + stat := p.getStats() + data.Proxies = append(data.Proxies, stat) + + data.TotalBad += int(p.BadRequestCount) + data.TotalGood += int(p.GoodRequestCount) + data.Connections += int(p.Connections) + + totalTime += p.TotalRequestTime + totalScore += stat.Score + } + + data.AvgLatency = totalTime / float64(data.TotalGood+data.TotalBad) + data.AvgScore = float64(totalScore) / float64(len(data.Proxies)) + + return data +} + +func (a *Architeuthis) GetProxy(name string) (*Proxy, error) { + + result, err := a.redis.HGetAll(PrefixProxy + name).Result() + if err != nil { + return nil, err + } + + var parsedUrl *url.URL + var httpClient *http.Client + + if result[KeyUrl] == "" { + parsedUrl = nil + httpClient = &http.Client{ + Timeout: config.Timeout, + } + } else { + parsedUrl, err = url.Parse(result[KeyUrl]) + if err != nil { + return nil, err + } + + httpClient = &http.Client{ + Transport: &http.Transport{ + Proxy: http.ProxyURL(parsedUrl), + }, + Timeout: config.Timeout, + } + } + + conns, _ := strconv.ParseInt(result[KeyConnectionCount], 10, 64) + good, _ := strconv.ParseInt(result[KeyGoodRequestCount], 10, 64) + bad, _ := strconv.ParseInt(result[KeyBadRequestCount], 10, 64) + reqtime, _ := strconv.ParseFloat(result[KeyRequestTime], 64) + + return &Proxy{ + Name: name, + Url: parsedUrl, + HttpClient: httpClient, + Connections: conns, + GoodRequestCount: good, + BadRequestCount: bad, + TotalRequestTime: reqtime, + }, nil +} + +func (a *Architeuthis) ChooseProxy(rCtx *RequestCtx) (string, error) { + results, err := a.redis.ZRevRangeWithScores(KeyProxyList, 0, 12).Result() + if err != nil { + return "", err + } + + if len(results) == 0 { + return "", errors.New("no proxies available") + } + + if len(results) == 1 { + return results[0].Member.(string), nil + } + + for { + idx := rand.Intn(len(results)) + + if results[idx].Member != rCtx.LastFailedProxy { + return results[idx].Member.(string), nil + } + } +} diff --git a/templates/stats.html b/templates/stats.html new file mode 100644 index 0000000..a4beb01 --- /dev/null +++ b/templates/stats.html @@ -0,0 +1,53 @@ + + + + + Architeuthis - Stats + + + + + + + + + + + + + + + + + + + {{ range .Proxies}} + + + + + + + + + + {{end}} + + + + + + + + + + + +
ProxyUrlConnsGoodBadLatencyScore
{{ .Name}}{{ .Url}}{{ .Connections}}{{ .GoodRequestCount}}{{ .BadRequestCount}}{{ printf "%.2f" .AvgLatency}}{{ .Score}}
Total{{ .Connections}}{{ .TotalGood}}{{ .TotalBad}}{{ printf "%.2f" .AvgLatency}}{{ printf "%.2f" .AvgScore}}
+ + + \ No newline at end of file diff --git a/util.go b/util.go new file mode 100644 index 0000000..d6bee4f --- /dev/null +++ b/util.go @@ -0,0 +1,93 @@ +package main + +import ( + "github.com/ryanuber/go-glob" + "net/http" + "strings" +) + +func normalizeHost(host string) string { + + col := strings.LastIndex(host, ":") + if col > 0 { + host = host[:col] + } + + return "." + host +} + +func parseOptions(header *http.Header) RequestOptions { + + opts := RequestOptions{} + + cfParam := header.Get("X-Architeuthis-CF-Bypass") + if cfParam != "" { + header.Del("X-Architeuthis-CF-Bypass") + opts.DoCloudflareBypass = true + } + + return opts +} + +func getConfigsMatchingHost(sHost string) []*HostConfig { + + configs := make([]*HostConfig, 0) + + for _, conf := range config.Hosts { + if glob.Glob(conf.Host, sHost) { + configs = append(configs, conf) + } + } + + return configs +} + +func applyHeaders(r *http.Request, configs []*HostConfig) *http.Request { + + for _, conf := range configs { + for k, v := range conf.Headers { + r.Header.Set(k, v) + } + } + + return r +} + +func computeRules(requestCtx *RequestCtx, responseCtx ResponseCtx) (dontRetry, forceRetry bool, shouldRetry bool) { + dontRetry = false + forceRetry = false + shouldRetry = false + + for _, conf := range requestCtx.configs { + for _, rule := range conf.Rules { + if rule.Matches(&responseCtx) { + switch rule.Action { + case DontRetry: + dontRetry = true + case ForceRetry: + forceRetry = true + case ShouldRetry: + shouldRetry = true + } + } + } + } + + return +} + +func cloneRequest(r *http.Request) *http.Request { + + proxyReq := &http.Request{ + Method: r.Method, + URL: r.URL, + Proto: "HTTP/1.1", + ProtoMajor: 1, + ProtoMinor: 1, + Header: r.Header, + Body: r.Body, + Host: r.URL.Host, + } + + return proxyReq +}