golang JSON webservice - nginx load balance

func main() {
    http.HandleFunc("/api", apiHandler)
    http.HandleFunc("/query/main", mainHandler)
    http.HandleFunc("/query/show", showHandler)
    http.HandleFunc("/", mainHandler)
    http.ListenAndServe(":8081", nil)
}

API 和网页 按不同的url处理

用go-curl调用底层service

func callCurl(postData string) (result string, err error) {
    easy := curl.EasyInit()
    defer easy.Cleanup()
    easy.Setopt(curl.OPT_URL, "http://localhost:8540")
    easy.Setopt(curl.OPT_POST, true)
    easy.Setopt(curl.OPT_VERBOSE, true)
    easy.Setopt(curl.OPT_HTTPHEADER, []string{"Content-Type: application/json"})
    easy.Setopt(curl.OPT_POSTFIELDSIZE, len(postData))
    easy.Setopt(curl.OPT_READFUNCTION, func(ptr []byte, _ interface{}) int {
        return copy(ptr, postData)
    })
    easy.Setopt(curl.OPT_WRITEFUNCTION, func(buf []byte, _ interface{}) bool {
        result = string(buf)
        return true
    })
    if err := easy.Perform(); err != nil {
        return "", err
    }
    return result, nil
}

json.Marshal/Unmarshal 把json字符串转 go struct

https://gobyexample.com/json

http.Template 来写 web页面

https://golang.google.cn/doc/articles/wiki/

格式化一下 json到网页:

https://github.com/tidwall/pretty

opt := &pretty.Options{Width: 80, Prefix: "<br>", Indent: "&nbsp;&nbsp;&nbsp;&nbsp;", SortKeys: false}
result = string(pretty.PrettyOptions([]byte(result), opt)

防止 html escape

http://blog.xiayf.cn/2013/11/01/unescape-html-in-golang-html_template/

用 template.HTML类 封装。

用nginx做load balance:

First configure /etc/nginx/nginx.conf:

worker_processes  5;
worker_rlimit_nofile 8192;
events {
  worker_connections  4096;
}
http {
    upstream myapp1 {
        server server1:8081;
        server server2:8081;
    }
    server {
        listen 8080;
        location / {
            proxy_pass http://myapp1;
        }
    }
}

Start nginx via `nginx`

Try it in browser via nginx URL: `http://nginx-server:8080`

原文地址:https://www.cnblogs.com/brayden/p/8427372.html

时间: 2024-09-30 19:39:37

golang JSON webservice - nginx load balance的相关文章

简易nginx load balance示例

更多:http://www.webyang.net/Html/web/article_137.html nginx是以反向代理的形式配置运行,对请求的实际处理需要转发到后端服务器执行.后端服务器可能有一台或多台,如何选择一台合适的后端服务器来处理当前请求便是nginx负载均衡. nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后端服务器做负载均衡. 如果只有一台服

Load Balance Tomcat with Nginx and Store Sessions in Redis--reference

An awkward title, but that’s exactly what we’re going to do. For some time, I was looking for a way to push code to production systems with zero downtime and zero impact to any active users. Surprisingly, the solution took very little time to impleme

LB(Load balance)负载均衡集群--{LVS-[NAT+DR]单实例实验+LVS+keeplived实验} 菜鸟入门级

LB(Load balance)负载均衡集群 LVS-[NAT+DR]单实例实验 LVS+keeplived实验 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. 逻辑可分为: 1调度层 (Director):它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的. 2[服务器池(server pool)/集群层(Real server)]:是一组真正执行客

LB(load balance)负载均衡集群之LVS

LB(load balance)负载均衡集群 原理:当用户的请求过来,会直接发送到分发器上(Director Server),然后它把用户的请求根据预先设置好的算法,智能均衡的分发到后端真是的服务器上(real server).如果不同的机器,可能请求的数据不一样,为了避免这样的情况发生,使用共享存储,保证所有的用户请求的数据是一样的. 常用的负载均衡开源软件有: lvs,keepalived,haproxy,nginx,apache,heartbeat 商业的硬件负载设备: F5,Netsca

Using load balance for thrift servers

Software load balance .Nginx(http://nginx.org) 1.Install nginx download source code from http://nginx.org/en/download.html ./auto/configure make & make install 2.Install tcp module patch developed by Yao Weibin http://yaoweibin.github.io/nginx_tcp_pr

Oracle RAC 服务器端连接负载均衡(Load Balance)

Oracle RAC服务器端的负载均衡是根据RAC中各节点的连接负荷数情况,将新的连接请求分配到负荷最小的节点上去.当数据库处于运行时,RAC中各节点的PMON进程每3秒会将各自节点的连接负荷数更新到service_register.而对于节点中任意监听器故障或监听器意外失败时,PMON进程会每1秒钟检查当前节点上的监听是否重启,以获得最新的负载信息来及时调整负载均衡.本文主要演示suse 10 + oracle 10g rac下的服务器端的负载均衡. 有关客户端的负载均衡可参考      Or

Oracle RAC 客户端连接负载均衡(Load Balance)

实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连接的负载均衡,一个是基于服务器端监听器(Listener)收集到的信息来将新的连接请求分配到连接数较少实例上的实现方式.本文主要讨论的是基于客户端连接的负载均衡,并给出演示. 与负载均衡配置之前的监听配置请参考              ORACLE RAC 监听配置 (listener.ora t

js+json+webservice(List&lt;&gt;作为参数)

client端: function Save(){ var data_temp = convert_To_Json(checkbox_selected()); //alert(data_temp); $.ajax({ type: "post", contentType: "application/json", url: WebServiceUrl + "/CreateOrder_CreateSO", data: '{"list"

Vertica7 Native Connection Load Balance

原文链接:Vertica7 Native Connection Load Balance 在Vertica7以前的版本中,Vertica是通过Linux的Virtual IP来实现连接的负载均衡的,但是在Vertica7x中,Vertica本身提供了连接的负载均衡功能,这个功能用起来也是非常方便的,下面就来看看怎么使用这个功能. 1. 首先安装N个Vertica7的节点,然后用数据库管理员的身份运行下面的命令来让Vertica使用这个功能 SELECT SET_LOAD_BALANCE_POLI