Go 语言 udpproxy 调试工具

开源程序kevin 回复了问题 • 3 人关注 • 1 个回复 • 977 次浏览 • 2016-12-09 19:45 • 来自相关话题

Go 语言 Redis 服务端 API 框架

开源程序Akagi201 发表了文章 • 5 个评论 • 788 次浏览 • 2016-12-09 16:50 • 来自相关话题

RedFace


Repo: https://github.com/Akagi201/redface


Build Status Coverage Status Go Report Card GoDoc


RedFace means redis interface.


It can be used as a redis server-side api in golang.


Features



  • [x] Suport tcp protocol.

  • [x] Support unix socket protocol.

  • [x] Support net/http like interface.

  • [x] Add benchmarks.

  • [ ] Support pipelining.

  • [ ] Support telnet commands.

  • [ ] Support redis lua script.

  • [ ] Support TLS.

  • [ ] Support net/context.


Install



  • go get github.com/Akagi201/redface


Import



  • import "github.com/Akagi201/redface/resp"

  • import "github.com/Akagi201/redface/server"


Benchmarks


redis-benchmark


Redis: Single-threaded, no disk persistence.


❯ redis-server --port 6379  --appendonly no

❯ redis-benchmark -p 6379 -t set,get -n 1000000 -q -P 512 -c 512
SET: 767459.75 requests per second
GET: 941619.56 requests per second

RedFace: Single-threaded, no disk persistence.


GOMAXPROCS=1 go run example/clone/main.go

❯ redis-benchmark -p 6389 -t set,get -n 1000000 -q -P 512 -c 512
SET: 68861.04 requests per second
GET: 65261.37 requests per second

RedFace: Multi-threaded, no disk persistence.


GOMAXPROCS=0 go run example/clone/main.go

❯ redis-benchmark -p 6389 -t set,get -n 1000000 -q -P 512 -c 512
SET: 30049.88 requests per second
GET: 30422.88 requests per second

Hardward info


❯ system_profiler SPHardwareDataType
Hardware:

Hardware Overview:

Model Name: MacBook Pro
Model Identifier: MacBookPro11,3
Processor Name: Intel Core i7
Processor Speed: 2.3 GHz
Number of Processors: 1
Total Number of Cores: 4
L2 Cache (per Core): 256 KB
L3 Cache: 6 MB
Memory: 16 GB
Boot ROM Version: MBP112.0138.B17
SMC Version (system): 2.19f12
Serial Number (system): C02MG6L8FD57
Hardware UUID: EB84A5CF-F1BA-5604-B1A6-534E30EA95C1

Go 语言 WebSocket 调试工具

开源程序Akagi201 发表了文章 • 1 个评论 • 793 次浏览 • 2016-12-09 16:49 • 来自相关话题

wsutil

Repo: https://github.com/Akagi201/wsutil

WebSocket util... 查看全部

wsutil


Repo: https://github.com/Akagi201/wsutil


WebSocket utils to help debug WebSocket applications


Tools



  • client WebSocket client.

  • dump WebSocket client with echo test.

  • proxy simple single WebSocket proxy.


Run



  • ./client --ws=ws://echo.websocket.org/

  • ./client --ws=ws://localhost:8327

  • ./proxy --upstream=ws://localhost:8328

  • ./dump --listen=0.0.0.0:8328 --echo

Go 语言 http/https 文件服务器

开源程序Akagi201 发表了文章 • 0 个评论 • 833 次浏览 • 2016-12-09 16:49 • 来自相关话题

serve

Repo: https://github.com/Akagi201/serve

Simple http serve... 查看全部

serve


Repo: https://github.com/Akagi201/serve


Simple http server for localhost development


Features



  • [x] Use gohttp as http framework.

  • [x] Static http file server.

  • [x] Support https.

  • [ ] Support http2.

  • [ ] Support WebSocket.

  • [ ] Support browser-sync like features.


Build



  • docker: docker build -t serve .

  • go build -o serve


Install



  • go get github.com/Akagi201/serve


Run



  • ./serve -h

  • openssl genrsa -out server.key 2048

  • openssl req -new -x509 -key server.key -out server.crt -days 365

  • sudo ./serve --http=0.0.0.0:8888 --domains=akagi201.org

Go 语言 udpproxy 调试工具

开源程序Akagi201 发表了文章 • 0 个评论 • 475 次浏览 • 2016-12-09 16:47 • 来自相关话题

udpproxy


Repo: https://github.com/Akagi201/udpproxy


A simple UDP Proxy Server in Golang.


Features



  • [x] one source, multi target based on copy.


Build



  • docker: docker build -t udpproxy .

  • go build main.go -o udpproxy


Run



  • --source: data source, default source is :2203.

  • --target: data target, e.g. ip:port.

  • --quiet: whether to print logging info or not.

  • --buffer: default is 10240.

最简 Go 语言 类 koa web 框架

开源程序Akagi201 发表了文章 • 0 个评论 • 705 次浏览 • 2016-12-09 13:19 • 来自相关话题

light


Repo: https://github.com/Akagi201/light


Build Status Coverage Status Go Report Card GoDoc


light


Light is a minimal web framework in Go.


Features



  • [x] Use pat as http router

  • [x] Use alice to manage middlewares.


Install



  • go get github.com/Akagi201/light


Import



  • import "github.com/Akagi201/light"

Go 语言 httpdump server 调试工具

开源程序Akagi201 发表了文章 • 0 个评论 • 573 次浏览 • 2016-12-09 13:17 • 来自相关话题

httpdump


Repo: https://github.com/Akagi201/httpdump


Simple Golang HTTP Server which dumps the incoming client headers and body


Build



  • docker: docker build -t httpdump .

  • go build main.go -o httpdump


Run



  • --host: default host is 0.0.0.0.

  • --port: default port is 2222.

Go 语言 udp server 调试工具

开源程序Akagi201 发表了文章 • 0 个评论 • 523 次浏览 • 2016-12-09 13:16 • 来自相关话题

udpdump

Repo: https://github.com/Akagi201/udpdump

Simple Gola... 查看全部

udpdump


Repo: https://github.com/Akagi201/udpdump


Simple Golang UDP Server which dumps the incoming client sending message.


Build



  • docker: docker build -t udpdump .

  • go build main.go -o udpdump


Run



  • --host: default host is 127.0.0.1

  • --port: default port is 2202

  • --file: If set, the received data will be dumped to the file.

  • --buffer: default is 10240

Go 语言 Web tail -f 工具, 基于 WebSocket

开源程序Akagi201 发表了文章 • 0 个评论 • 971 次浏览 • 2016-12-09 13:14 • 来自相关话题

WebTail

Repo: https://github.com/Akagi201/webtail

Realtime ta... 查看全部

WebTail


Repo: https://github.com/Akagi201/webtail


Realtime tail -f logs on the web


Features



  • [x] Use websocket to receive realtime log.

  • [x] Support go-bindata.

  • [ ] Support multi-files to display.


Build



  • ./gobin.sh

  • go build


Run



  • ./webtail --log=/tmp/xxx.log

Go 语言 http/https 文件服务器

回复

开源程序Akagi201 发起了问题 • 1 人关注 • 0 个回复 • 1383 次浏览 • 2016-12-09 13:13 • 来自相关话题

Go 语言 WebSocket 调试工具

回复

开源程序Akagi201 发起了问题 • 2 人关注 • 0 个回复 • 1093 次浏览 • 2016-12-09 13:11 • 来自相关话题

Go 语言 Redis 服务端 API 框架

回复

开源程序Akagi201 发起了问题 • 1 人关注 • 0 个回复 • 960 次浏览 • 2016-12-09 13:10 • 来自相关话题

Go 语言 TLV 包以及 Wireshark 解析插件

开源程序Akagi201 发表了文章 • 0 个评论 • 702 次浏览 • 2016-12-09 13:09 • 来自相关话题

TLV


Repo: https://github.com/Akagi201/tlv


GoDoc


TLV is the representative of type-length-value.


It might be found in a binary file format or a network protocol.


Brief


One TLV Object:


 1 Byte   4 Bytes  $Length Bytes
+-------+---------+-------------+
| Type | Length | Value |
+-------+---------+-------------+

Serial TLV Objects:


 1 Byte   4 Bytes  $Length Bytes 1 Byte   4 Bytes  $Length Bytes
+-------+---------+-------------+-------+---------+-------------+
| Type | Length | Value | Type | Length | Value | ...
+-------+---------+-------------+-------+---------+-------------+

Embedded TLV Objects:


 1 Byte   4 Bytes          $Length Bytes
1 Byte 4 Bytes $Length Bytes
+-------+---------+-------+---------+-------------+
| Type | Length | Type | Length | Value |
+-------+---------+-------+---------+-------------+

Wireshark Plugin



  • Put wssdl and tlv.lua to ~/.config/wireshark/plugins

  • The UDP port 8327 will be decoded as tlv protocol.

golang实现的自带并发控制,服务降级的本地kv缓存

开源程序simplejia 发表了文章 • 0 个评论 • 875 次浏览 • 2016-12-09 12:52 • 来自相关话题

lc (local cache)--http://github.com/simplejia/lc


实现初衷



  • 纯用redis做缓存,相比lc,redis有网络调用开销,反复调用多次,延时急剧增大,当网络偶尔出现故障时,我们的数据接口也就拿不到数据,但lc里的数据就算是超过了设置的过期时间,我们一样能拿到过期的数据做备用

  • 使用mysql,当缓存失效,有数据穿透的风险,lc自带并发控制,有且只允许同一时间同一个key的唯一一个client穿透到数据库,其它直接返回lc缓存数据


特性



  • 本地缓存

  • 支持Get,Set,Mget,Delete操作

  • 当缓存失效时,返回失效标志同时,还返回旧的数据,如:v, ok := lc.Get(key),当key已经过了失效时间了,并且key还没有被lru淘汰掉,v是之前存的值,ok返回false

  • 实现代码没有用到锁

  • 使用到lru,淘汰长期不用的key

  • 结合lm使用更简单快捷


demo


lc_test.go


package lc

import (
"testing"
"time"
)

func init() {
Init(65536) // 使用lc之前必须要初始化
}

func TestGetValid(t *testing.T) {
key := "k"
value := "v"
Set(key, value, time.Second)
time.Sleep(time.Millisecond * 10) // 给异步处理留点时间
v, ok := Get(key)
if !ok || v != value {
t.Fatal("")
}
}



同时再帖下我实现的另一个组件,搭配lc使用更方便。


lm (lc+redis+[mysql|http] glue)--http://github.com/simplejia/lm


实现初衷



写redis+mysql代码时(还可能加上lc),示意代码如下:


func orig(key string) (value string) {
value = redis.Get(key)
if value != "" {
return
}
value = mysql.Get(key)
redis.Set(key, value)
return
}
// 如果再加上lc的话
func orig(key string) (value string) {
value = lc.Get(key)
if value != "" {
return
}
value = redis.Get(key)
if value != "" {
lc.Set(key, value)
return
}
value = mysql.Get(key)
redis.Set(key, value)
lc.Set(key, value)
return
}

有了lm,再写上面的代码时,一切变的那么简单
lm_test.go


func tGlue(key, value string) (err error) {
lmStru := &LmStru{
Input: key,
Output: &value,
Proc: func(p, r interface{}) error {
_r := r.(*string)
*_r = "test value"
return nil
},
Key: func(p interface{}) string {
return fmt.Sprintf("tGlue:%v", p)
},
Mc: &McStru{
Expire: time.Minute,
Pool: pool,
},
Lc: &LcStru{
Expire: time.Millisecond * 500,
Safety: false,
},
}
err = Glue(lmStru)
if err != nil {
return
}
return
}

功能



  • 自动添加缓存代码,支持lc, redis,减轻你的心智负担,让你的代码更加简单可靠,少了大段的冗余代码,复杂的事全交给lm自动帮你做了

  • 支持Glue[Lc|Mc]及相应批量操作Glues[Lc|Mc],详见lm_test.go示例代码



注意



  • lm.LcStru.Safety,当置为true时,对lc在并发状态下返回的nil值不接受,因为lc.Get在并发状态下,同一个key返回的value有可能是nil,并且ok状态为true,Safety置为true后,对以上情况不接受,会继续调用下一层逻辑


案例分享



  • 一天一个用户只容许投一次票
    func f(uid string) (err error) {
    lmStru := &lm.LmStru{
    Input: uid,
    Output: &struct{}{},
    Proc: func(p, r interface{}) error {
    // 略掉这部分逻辑: 可以把投票入库
    // ...
    return nil
    },
    Key: func(p interface{}) string {
    return fmt.Sprintf("pkg:f:%v", p)
    },
    Mc: &lm.McStru{
    Expire: time.Hour * 24,
    Pool: pool,
    },
    }
    err = lm.GlueMc(lmStru)
    if err != nil {
    return
    }
    return
    }

Poseidon - A search engine which can holds 100 trillion lines of log data.

开源程序viktor1992 发表了文章 • 2 个评论 • 891 次浏览 • 2016-12-09 10:03 • 来自相关话题

波塞冬:Poseidon

波塞冬,是希腊神话中的海神,在这里是寓意着海量数据的主宰者。

Poseidon 系统是一个日志搜索平台,可以在数百万亿条、数百PB大小的日志数据中快速分析和检索特定字符串。 360公司是一个安全公司,... 查看全部

波塞冬:Poseidon


波塞冬,是希腊神话中的海神,在这里是寓意着海量数据的主宰者。


Poseidon 系统是一个日志搜索平台,可以在数百万亿条、数百PB大小的日志数据中快速分析和检索特定字符串。 360公司是一个安全公司,在追踪 APT(高级持续威胁)事件时,经常需要在海量的历史日志数据中检索某些信息, 例如某个恶意样本在某个时间段内的活动情况。在 Poseidon 系统出现之前,都是写 Map/Reduce 计算任务在 Hadoop 集群中做计算, 一次任务所需的计算时间从数小时到数天不等,大大制约了 APT 事件的追踪效率。 Poseidon 系统就是为了解决这个需求,能在几秒钟内从数百万亿条规模的数据集中找出我们需要的数据,大大提高工作效率; 同时,这些数据不需要额外存储,仍然存放在Hadoop集群中,节省了大量存储和计算资源。该系统可以应用于任何结构化或非结构化海量(从万亿到千万亿规模)数据的查询检索需求。


所用技术


倒排索引:构建日志搜索引擎的核心技术
Hadoop:用于存放原始数据和索引数据,并用来运行Map/Reduce程序来构建索引
Java:构建索引时是用Java开发的Map/Reduce程序
Golang:核心搜索引擎/proxy查询代理/meta/是用Golang开发的
Redis/Memcached:用于存储 Meta 元数据信息


https://github.com/Qihoo360/poseidon