A modern layer 7 load balancer from baidu

BFE

GitHub Travis Go Report Card GoDoc Snap Status CII Best Practices FOSSA Status CLA assistant Slack Widget

BFE is a modern layer 7 load balancer from baidu.

Advantages

  • Multiple protocols supported, including HTTP, HTTPS, SPDY, HTTP2, WebSocket, TLS, FastCGI, etc.
  • Content based routing, support user-defined routing rule in advanced domain-specific language.
  • Support multiple load balancing policies.
  • Flexible plugin framework to extend functionality. Based on the framework, developer can add new features rapidly.
  • Detailed built-in metrics available for service status monitor.

Getting Started

Running the tests

Documentation

Contributing

  • Please create an issue in issue list.
  • Contact Committers/Owners for further discussion if needed.
  • Following the golang coding standards.
  • See the CONTRIBUTING file for details.

Authors

Communication

  • BFE community on Slack: Sign up and join channels on topics that interest you.
  • BFE developer group on WeChat: Send a request mail with your WeChat ID and a contribution you've made to BFE(such as a PR/Issue). We will invite you right away.

License

BFE is under the Apache 2.0 license. See the LICENSE file for details.

Comments
  • Error occurs when return BfeHandlerFinish in ForwardFilter

    Error occurs when return BfeHandlerFinish in ForwardFilter

    Describe the bug If return bfe_module.BfeHandlerFinish in a ForwardFilter (a module handler added to bfe_module.HandleForward callback point), bfe server will panic after executing this filter due to nil pointer dereference of variable 'res'. 

    To Reproduce Add a handler to bfe_module.HandleForward callback point, and make it return bfe_module.BfeHandlerFinish. When a request invokes this handler, program panics.

    Expected behavior Normally return a response to client.

    Additional context image

    image

  • Update ci.yml

    Update ci.yml

    We have a dedicate GitHub actions for header check so this should be updated, and we don't recommend using @main so there is no unexpected behaviors when we have changes in our codebase.

    See https://github.com/apache/skywalking-eyes/pull/123

  • fix: clusterBasic default value bug

    fix: clusterBasic default value bug

    配置文件bug,文档上说免配置部分参数,实际上代码bug,未做到

    bug复现

    参考文档:https://github.com/baidu/bfe/blob/develop/docs/zh_cn/example/route.md

    其中Step 3. 配置集群的基础信息 (conf/server_data_conf/cluster_conf.data) 配置集群cluster_demo_static和cluster_demo_dynamic健康检查的参数,其他均使用默认值

    按照文档配置,报错

    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x715ac5]
    
    goroutine 1 [running]:
    github.com/baidu/bfe/bfe_route/bfe_cluster.(*BfeCluster).BasicInit(0xc00009e500, 0x0, 0xc00033d700, 0x0, 0x0)
            /bfe/bfe_route/bfe_cluster/bfe_cluster.go:65 +0x55
    github.com/baidu/bfe/bfe_route.(*ClusterTable).BasicInit(0xc000390220, 0xc000341ec0, 0xc000096490)
            /bfe/bfe_route/cluster_table.go:71 +0x28c
    github.com/baidu/bfe/bfe_route.(*ClusterTable).Init(0xc000390220, 0xc0000b5740, 0x27, 0x0, 0xc00038c540)
            /bfe/bfe_route/cluster_table.go:55 +0x9e
    github.com/baidu/bfe/bfe_route.(*ServerDataConf).clusterTableLoad(0xc000341640, 0xc0000b5740, 0x27, 0xc0000b5590, 0x23)
            /bfe/bfe_route/server_data_conf.go:100 +0x47
    
  • readrequest_test.go error

    readrequest_test.go error

    Describe the bug readrequest_test.go can't pass of two test cases, because of the double quotation marks misstion

    To Reproduce when run the make command, it will not pass, and report the error

    --- FAIL: TestReadRequest (0.00s)
        readrequest_test.go:344: #3: error "parse \"../../../../etc/passwd\": invalid URI for request", want error "parse ../../../../etc/passwd: invalid URI for request"
        readrequest_test.go:344: #4: error "parse \"\": empty url", want error "parse : empty url"
    FAIL
    

    Expected behavior Fix the bug by add the miss double quotation marks

    Screenshots image

    Additional context

  • test=develop mod_key_log Conditional log output

    test=develop mod_key_log Conditional log output

    mod_key_log Conditional log output

    The conditions are as follows: ses_vip_range("10.0.0.1", "10.0.0.10") ses_sip_range("10.0.0.1", "10.0.0.10") ses_tls_sni_in("example.com|example.org")

  • feat: support degrade mod

    feat: support degrade mod

    支持降级模块

    使用场景

    • 按比例降级接口
    • 直接自定义响应

    如何使用

    配置:

    {
    	"Version": "20190101000000",
    	"Config": {
    		"example_product": [{
    			"Name": "example_degrade",
    			"Cond": "req_path_prefix_in(\"/degrade\", false)",
    			"Action": {
                                    "Cmd": "RETURN",
                                    "HttpVersion": "HTTP/1.1",
                                    "StatusCode": 200,
                                    "ReasonPhrase": "OK",
                                    "Header": {
                                        "Content-Type": ["application/json; charset=utf-8"],
                                        "Pragma": ["no-cache"]
                                    },
                                    "StatusLine": "HTTP/1.1 200 ERROR",
                                    "Body": "{\"hello\":\"world\", \"name\":\"chenchen\"}"
                             },
    			"DegradeRate": 100,
    			"Enable": true
    		}]
    	}
    }
    
    
    • DegradeRate:命中规则接口的降级比例
    • Enable:是否开启降级,关闭后,规则不生效
    • Cmd:目前支持两种action:RETURN 和 CLOSE
    • HttpVersion:修改response响应HttpVersion
    • StatusCode:修改response响应StatusCode
    • ReasonPhrase:修改response响应ReasonPhrase
    • Header:修改或者增加response响应的header
    • StatusLine:修改response响应StatusLine,当设置StatusLine时,HttpVersion/StatusCode/ReasonPhrase将被忽略
    • Body:修改response响应的body体
  • bugfix: make exec failed

    bugfix: make exec failed

    Signed-off-by: Chen Chen [email protected]

    after execute make command, then output:

    make
    go get golang.org/x/tools/cmd/goyacc
    cd "bfe_basic/condition/parser" && go generate
    go test -race -cover ./...
    ../../../../pkg/mod/github.com/abbot/[email protected]/auth.go:7:2: missing go.sum entry for module providing package golang.org/x/net/context (imported by github.com/abbot/go-http-auth); to add:
    	go get github.com/abbot/[email protected]
    ../../../../pkg/mod/github.com/microcosm-cc/[email protected]/sanitize.go:41:2: missing go.sum entry for module providing package golang.org/x/net/html (imported by github.com/microcosm-cc/bluemonday); to add:
    	go get github.com/microcosm-cc/[email protected]
    bfe_http2/transport.go:19:2: missing go.sum entry for module providing package golang.org/x/net/http2 (imported by github.com/bfenetworks/bfe/bfe_http2); to add:
    	go get github.com/bfenetworks/bfe/bfe_http2
    ../../../../pkg/mod/github.com/miekg/[email protected]/udp.go:8:2: missing go.sum entry for module providing package golang.org/x/net/ipv4 (imported by github.com/miekg/dns); to add:
    	go get github.com/miekg/[email protected]
    ../../../../pkg/mod/github.com/miekg/[email protected]/udp.go:9:2: missing go.sum entry for module providing package golang.org/x/net/ipv6 (imported by github.com/miekg/dns); to add:
    	go get github.com/miekg/[email protected]
    bfe_websocket/server_tester.go:29:2: missing go.sum entry for module providing package golang.org/x/net/websocket (imported by github.com/bfenetworks/bfe/bfe_websocket); to add:
    	go get github.com/bfenetworks/bfe/bfe_websocket
    ../../../../pkg/mod/golang.org/x/[email protected]/chacha20poly1305/chacha20poly1305_amd64.go:13:2: missing go.sum entry for module providing package golang.org/x/sys/cpu (imported by golang.org/x/crypto/chacha20poly1305); to add:
    	go get golang.org/x/crypto/[email protected]
    bfe_util/socket_util.go:20:2: missing go.sum entry for module providing package golang.org/x/sys/unix (imported by github.com/bfenetworks/bfe/bfe_util); to add:
    	go get github.com/bfenetworks/bfe/bfe_util
    Makefile:75: recipe for target 'test-case' failed
    make: *** [test-case] Error 1
    
    

    expect output no error info. for example:

    go vet ./...
    go build -ldflags "-X main.version=1.4.0 -X main.commit=7c26f3049e1221de248501738aee717b84eda604 -extldflags=-static"
    # github.com/bfenetworks/bfe
    /tmp/go-link-383919656/000019.o: In function `pluginOpen':
    /usr/local/go/src/plugin/plugin_dlopen.go:19: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    /tmp/go-link-383919656/000004.o: In function `_cgo_26061493d47f_C2func_getaddrinfo':
    /tmp/go-build/cgo-gcc-prolog:58: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    mkdir -p /data00/home/chenchen.ccqy66/go/src/github.com/bfenetworks/bfe/output/bin
    mv bfe  /data00/home/chenchen.ccqy66/go/src/github.com/bfenetworks/bfe/output/bin
    cp -r conf /data00/home/chenchen.ccqy66/go/src/github.com/bfenetworks/bfe/output
    
  • make build failure on macos 11.4

    make build failure on macos 11.4

    problem details:

    ➜  bfe git:(develop) make build
    go build -ldflags "-X main.version=1.3.0 -X main.commit=fcc1340cb8a891ffee510a991a31fb8ea00b5566 -extldflags=-static"
    #github.com/golang-jwt/jwt
    ../../go/pkg/mod/github.com/golang-jwt/[email protected]+incompatible/ecdsa.go:135:4: r.FillBytes undefined (type *big.Int has no field or method FillBytes)
    ../../go/pkg/mod/github.com/golang-jwt/[email protected]+incompatible/ecdsa.go:136:4: s.FillBytes undefined (type *big.Int has no field or method FillBytes)
    #github.com/elastic/go-sysinfo/providers/darwin
    ../../go/pkg/mod/github.com/elastic/[email protected]/providers/darwin/machineid_darwin_amd64.go:53:18: could not determine kind of name for C.uuid_string_t
    make: *** [build] Error 2
    

    build env:

    ➜  bfe git:(develop) go version
    go version go1.14.1 darwin/amd64
    ➜  bfe git:(develop) uname -a
    Darwin promote.cache-dns.local 20.5.0 Darwin Kernel Version 20.5.0: Sat May  8 05:10:33 PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64
    
  • Adding deploy process in .travis.yml

    Adding deploy process in .travis.yml

    Hi Team,

    Os: Linux Architecture: ARM64/AArch64 I have successfully built the package on my local arm64 system and Travis-CI as well and packaged generated binaries as well into the ‘output’ folder. Currently, In releases we only have artifacts for AMD64 architecture. It will be very helpful to have a release with ARM64 artifacts. Travis logs: https://travis-ci.com/github/rahulgit-ps/bfe.

    Can we add the deploy process in travis to release arm64 artifacts, or Please share your opinion on the same?

  • 安装时遇到个问题

    安装时遇到个问题

    go get golang.org/x/tools/cmd/goyacc go: finding golang.org/x/tools latest cd "bfe_basic/condition/parser" && go generate go test -race -cover ./... ? github.com/baidu/bfe [no test files] ok github.com/baidu/bfe/bfe_balance (cached) coverage: 69.2% of statements ok github.com/baidu/bfe/bfe_balance/backend (cached) coverage: 61.1% of statements ok github.com/baidu/bfe/bfe_balance/bal_gslb (cached) coverage: 31.4% of statements ok github.com/baidu/bfe/bfe_balance/bal_slb (cached) coverage: 79.6% of statements ? github.com/baidu/bfe/bfe_basic [no test files] ok github.com/baidu/bfe/bfe_basic/action (cached) coverage: 80.7% of statements ok github.com/baidu/bfe/bfe_basic/condition (cached) coverage: 39.6% of statements ok github.com/baidu/bfe/bfe_basic/condition/parser (cached) coverage: 47.5% of statements ok github.com/baidu/bfe/bfe_bufio (cached) coverage: 89.3% of statements ok github.com/baidu/bfe/bfe_config/bfe_cluster_conf/cluster_conf (cached) coverage: 64.0% of statements ok github.com/baidu/bfe/bfe_config/bfe_cluster_conf/cluster_table_conf (cached) coverage: 36.8% of statements ok github.com/baidu/bfe/bfe_config/bfe_cluster_conf/gslb_conf (cached) coverage: 49.1% of statements ok github.com/baidu/bfe/bfe_config/bfe_conf (cached) coverage: 69.7% of statements ok github.com/baidu/bfe/bfe_config/bfe_route_conf/host_rule_conf (cached) coverage: 76.8% of statements ok github.com/baidu/bfe/bfe_config/bfe_route_conf/route_rule_conf (cached) coverage: 75.7% of statements --- FAIL: TestVipTableLoad_2 (0.00s) vip_table_load_test.go:42: it should be error in VipRuleConfLoad() FAIL coverage: 80.6% of statements FAIL github.com/baidu/bfe/bfe_config/bfe_route_conf/vip_rule_conf 0.027s ? github.com/baidu/bfe/bfe_config/bfe_tls_conf/server_cert_conf [no test files] ok github.com/baidu/bfe/bfe_config/bfe_tls_conf/session_ticket_key_conf (cached) coverage: 56.2% of statements ok github.com/baidu/bfe/bfe_config/bfe_tls_conf/tls_rule_conf (cached) coverage: 59.2% of statements ? github.com/baidu/bfe/bfe_debug [no test files] ok github.com/baidu/bfe/bfe_http (cached) coverage: 47.6% of statements ? github.com/baidu/bfe/bfe_http/httputil [no test files] ok github.com/baidu/bfe/bfe_http2 (cached) coverage: 79.5% of statements ok github.com/baidu/bfe/bfe_http2/hpack (cached) coverage: 85.6% of statements ? github.com/baidu/bfe/bfe_module [no test files] ? github.com/baidu/bfe/bfe_modules [no test files] ok github.com/baidu/bfe/bfe_modules/mod_access (cached) coverage: 6.4% of statements ok github.com/baidu/bfe/bfe_modules/mod_auth_basic (cached) coverage: 80.3% of statements ok github.com/baidu/bfe/bfe_modules/mod_block (cached) coverage: 83.1% of statements ok github.com/baidu/bfe/bfe_modules/mod_compress (cached) coverage: 79.3% of statements ok github.com/baidu/bfe/bfe_modules/mod_errors (cached) coverage: 11.4% of statements ok github.com/baidu/bfe/bfe_modules/mod_geo (cached) coverage: 78.8% of statements ok github.com/baidu/bfe/bfe_modules/mod_header (cached) coverage: 54.9% of statements ok github.com/baidu/bfe/bfe_modules/mod_http_code (cached) coverage: 64.3% of statements ? github.com/baidu/bfe/bfe_modules/mod_key_log [no test files] ? github.com/baidu/bfe/bfe_modules/mod_logid [no test files] ok github.com/baidu/bfe/bfe_modules/mod_redirect (cached) coverage: 81.2% of statements ok github.com/baidu/bfe/bfe_modules/mod_rewrite (cached) coverage: 58.6% of statements ok github.com/baidu/bfe/bfe_modules/mod_static (cached) coverage: 76.0% of statements ok github.com/baidu/bfe/bfe_modules/mod_trust_clientip (cached) coverage: 65.0% of statements ok github.com/baidu/bfe/bfe_net/textproto (cached) coverage: 71.0% of statements ok github.com/baidu/bfe/bfe_proxy (cached) coverage: 89.2% of statements ok github.com/baidu/bfe/bfe_route (cached) coverage: 11.9% of statements ? github.com/baidu/bfe/bfe_route/bfe_cluster [no test files] ok github.com/baidu/bfe/bfe_route/trie (cached) coverage: 96.4% of statements ok github.com/baidu/bfe/bfe_server (cached) coverage: 0.1% of statements ok github.com/baidu/bfe/bfe_spdy (cached) coverage: 77.9% of statements ok github.com/baidu/bfe/bfe_stream (cached) coverage: 90.8% of statements ok github.com/baidu/bfe/bfe_tls (cached) coverage: 77.8% of statements ok github.com/baidu/bfe/bfe_util (cached) coverage: 11.6% of statements ? github.com/baidu/bfe/bfe_util/access_log [no test files] ok github.com/baidu/bfe/bfe_util/bns (cached) coverage: 66.7% of statements ok github.com/baidu/bfe/bfe_util/byte_pool (cached) coverage: 100.0% of statements ok github.com/baidu/bfe/bfe_util/hash_set (cached) coverage: 90.6% of statements ok github.com/baidu/bfe/bfe_util/ipdict (cached) coverage: 87.6% of statements ok github.com/baidu/bfe/bfe_util/ipdict/txt_load (cached) coverage: 81.8% of statements ok github.com/baidu/bfe/bfe_util/net_util (cached) coverage: 37.4% of statements ok github.com/baidu/bfe/bfe_util/pipe (cached) coverage: 66.7% of statements ok github.com/baidu/bfe/bfe_util/signal_table (cached) coverage: 31.2% of statements ok github.com/baidu/bfe/bfe_websocket (cached) coverage: 86.0% of statements FAIL make: *** [test-case] Error 1

  • keepalive的生效问题和access.log的问题

    keepalive的生效问题和access.log的问题

    SESSION_LOG 2019-12-12 10:04:53 clientip: 10.32.16.5:21700 start_time: 2019-12-12 10:04:53.943085131 +0800 CST m=+9.321181909 end_time: 2019-12-12 10:04:53.968295592 +0800 CST m=+9.346392302 overhead: 25.210393ms read_total: 0 write_total: 0 keepalive_num: 1 error: CLIENT_CLOSE,EOF bfe.conf KeepAliveEnabled 已经设置为true 我用jmeter进行压力测试,64线程 access.log里面出现大量这样的SESSION_LOG日志,keepalive_num的数量仅为1,这代表keepalive不生效吗

  • release-v1.4.0在go1.13.8环境编译失败

    release-v1.4.0在go1.13.8环境编译失败

    image

    下载 release-v1.4.0在go1.13.8环境编译

    # make 
    build github.com/bfenetworks/bfe: cannot load io/fs: malformed module path "io/fs": missing dot in first path element
    go get golang.org/x/tools/cmd/goyacc
    cd "bfe_basic/condition/parser" && go generate
    go test -race -cover ./...
    build github.com/bfenetworks/bfe: cannot load io/fs: malformed module path "io/fs": missing dot in first path element
    Makefile:75: recipe for target 'test-case' failed
    make: *** [test-case] Error 1
    

    google发现 https://github.com/DefectDojo/godojo/issues/31

    Also, io/fs came into go around 1.16 so if your go version is less than 1.16, that's likely your problem.
    ``
    
  • bfe 容器版无法通过 web-monitor 热加载配置

    bfe 容器版无法通过 web-monitor 热加载配置

    bug描述 bfe docker 版本 bfenetworks/bfe:v-1.5.0 无法通过web-monitor 对配置进行热加载,提示:

    {
        "error": "reload is not allowed from [xxx.xxx.xxx.xxx:xxxx]"
    }
    

    复现 docker run --name bfe -p 8080:8080 -p 8443:8443 -p 8421:8421 -v /home/work/data/bfe/log:/bfe/log -v /home/work/data/bfe/conf:/bfe/conf -d bfenetworks/bfe:v-1.5.0

    推测 监控机制的热加载有安全要求(仅允许从同服务器访问):

    // source ip address allowed to do reload
    var RELOAD_SRC_ALLOWED = map[string]bool{
    	"127.0.0.1": true,
    	"::1":       true,
    }
    

    而从容器外访问无法满足同服务器的要求,另外容器中并未安装 curl 等工具,所以容器版bfe无法完成实现配置热加载。

  • Proposal: Beautify code and project struct

    Proposal: Beautify code and project struct

    Is your feature request related to a problem? Please describe. This project is write in go, but many code isn't following go styles. To be a great CNCF project, may be we should make our code more idiomatic. Following are some controversial codes:

    1. Package name not idiomatic
    package bfe_server
    

    In blog Package names of golang official

    The style of names typical of another language might not be idiomatic in a Go program. Here are two examples of names that might be good style in other languages but do not fit well in Go:

    • computeServiceClient
    • priority_queue
    1. Imports block not sorted and grouped
    import (
    	"net"
    	"sync"
    )
    
    import (
    	"github.com/bfenetworks/bfe/bfe_tls"
    )
    
    1. Some function name spells incorrectly
    func NewHttpsListener(listener net.Listener, config *bfe_tls.Config) *HttpsListener {
    }
    

    NewHttpsListener should be named to NewHTTPSListener 4. Package docs not standard

    // stat for request
    
    package bfe_basic
    

    Describe the solution you'd like

    • Rename code and project struct use Uber-Go-Guide
    • Import golang-ci-lint.

    Additional context Just some advice.

A distributed Layer 2 Direct Server Return (L2DSR) load balancer for Linux using XDP/eBPF

VC5 A distributed Layer 2 Direct Server Return (L2DSR) load balancer for Linux using XDP/eBPF This is very much a proof of concept at this stage - mos

Dec 22, 2022
gobetween - modern & minimalistic load balancer and reverse-proxy for the ☁️ Cloud era.
gobetween - modern & minimalistic load balancer and reverse-proxy for the ☁️ Cloud era.

gobetween - modern & minimalistic load balancer and reverse-proxy for the ☁️ Cloud era. Current status: Maintenance mode, accepting PRs. Currently in

Dec 25, 2022
Kiwi-balancer - A balancer is a gateway between the clients and the server

Task description Imagine a standard client-server relationship, only in our case

Feb 11, 2022
High-performance PHP application server, load-balancer and process manager written in Golang
High-performance PHP application server, load-balancer and process manager written in Golang

RoadRunner is an open-source (MIT licensed) high-performance PHP application server, load balancer, and process manager. It supports running as a serv

Jan 1, 2023
A load balancer supporting multiple LB strategies written in Go
A load balancer supporting multiple LB strategies written in Go

farely A load balancer supporting multiple LB strategies written in Go. Goal The goal of this project is purley educational, I started it as a brainst

Dec 21, 2022
KgLb - L4 Load Balancer
KgLb - L4 Load Balancer

KgLb KgLb is L4 a load balancer built on top of linux ip virtual server (ip_vs). It provides rich functionality such as discovery, health checks for r

Dec 16, 2022
Simple Reverse Proxy Load Balancer

lb - a reverse proxy load-balancing server, It implements the Weighted Round Robin Balancing algorithm

Mar 23, 2022
Basic Load Balancer
Basic Load Balancer

Load Balancer Work flow based on code snippet Trade-offs: 1. Using etcd as a global variable map. 2. Using etcd to store request references rather tha

Nov 1, 2021
Vippy - A Virtual IP/BGP/IPVS Load-Balancer for Equinix Metal

Vippy - A Virtual IP/BGP/IPVS Load-Balancer for Equinix Metal If I figure out how to make it work.. How it works! The Vippy LB PoC uses BGP/IPVS and E

Mar 10, 2022
A Load-balancer made from steel
A Load-balancer made from steel

slb The Steel Load Balancer A load-balancer forged in the fires of Sheffield Getting slb Prebuilt binaries for armv7 and amd64 exist in the releases p

Nov 13, 2022
Lightweight http response time based load balancer written in Go

HTTP Load Balancer Specifications http servers should always return time taken to proceed request in headers as EXECUTION_TIME in ms this load balance

Feb 22, 2022
High-performance PHP application server, load-balancer and process manager written in Golang
High-performance PHP application server, load-balancer and process manager written in Golang

RoadRunner is an open-source (MIT licensed) high-performance PHP application server, load balancer, and process manager. It supports running as a serv

Dec 9, 2021
A Service Load Balancer for Kubernetes.

PureLB - is a Service Load Balancer for Kubernetes PureLB is a load-balancer orchestrator for Kubernetes clusters. It uses standard Linux networking a

Dec 24, 2022
Consistelancer - Consistent hashing load balancer for Kubernetes

Setup minikube start kubectl apply -f k8s-env.yaml skaffold dev # test locks ku

Sep 28, 2022
Simple load-balancer for npchat servers, based on the xor distance metric between node & user id

npchat-helmsman Simple load-balancer for npchat servers, based on the xor distance metric between node & user id. Local Development Clone this reposit

Jan 15, 2022
GraphRPC is simply GraphQL as your RPC Contract Input & Output Layer.

GraphRPC About GraphRPC is simply GraphQL as your RPC Contract Input & Output Layer. No proto contract corruption on any update Programming language a

Oct 18, 2022
Build a layer-three local area network on the WAN

What is Zetamesh Zetamesh /zeta'meʃ/ is used to build a layer-three local area network on the WAN. Quick Start This section will give you some instruc

Jun 7, 2022
Test throughput at the application layer

bandwidth-trasher Simple TCP application layer throughput tester. It simulates an SSL session by encrypting an empty payload and sending this over the

Nov 17, 2021
An anonymous, encrypted Point-to-Point (Layer 3) tunnel between two peers.

NKN-Link An anonymous, encrypted Point-to-Point (Layer 3) tunnel between two peers. NKN-Link Table of Contents Preface Description Install Setup Run P

Dec 20, 2022