gatesvr

command
v0.0.0-...-fa9b265 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 11, 2017 License: GPL-2.0 Imports: 16 Imported by: 0

README

前言

GateSvr服务层的入口服务。它是整个服务层向外层系统提供的唯一的访问接口。所有的服务请求都将由GateSvr中转并分配给更底层的合适的服务来执行具体的操作。当操作完成后,响应也将由GateSvr发送给请求方。

缩略语及名词解释

  • etcd

    一个开源的基于Raft算法的分布式一致性解决方案。它受zookeeper的理念影响,提供和zookeeper类型的功能和数据模型。用go语言实现。

  • 服务体系

    服务层的服务的拓扑关系。同时还包含了服务层RESTful接口和服务之间的对应关系。详见《Iceberg服务发现系统说明.md》

  • 一致性哈希(consistent hash)

    提供分布式集群环境下的负载均衡和横向扩展能力的一种基础手段。

  • goroutine

    协程,Go语言中的基本并发单位。

  • panic

    Go语言中的异常,未被处理的panic会导致进程崩溃。

概述

GateSvr对外提供的接口工作在HTTP协议上,后端服务工作的TCP协议上。GateSvr在运行过程中会动态的发现所有的后端服务和它们之间的拓扑结构。GateSvr在接收到http请求后按照服务体系的拓扑结构将请求分发到合适的后端服务的TCP端口。当后端服务完成请求后,GateSvr读取响应然后转换成http的响应发送给用户。

GateSvr并不需求了解服务层提供的接口的具体细节。即不用解析json。接口的细节对它完全透明。一个典型的GateSvr操作流程如下:

+-------+                  +---------+        +-----------+      +-------+           +-------+
|  PHP  |                  | GateSvr |        | SmsPusher |      | MySQL |           | SmsSP |
+---+---+                  +----+----+        +-----+-----+      +---+---+           +---+---+
    |                           |                   |                |                   |
   +-+                          |                   |                |                   |
   |-|      1.请求发送短信      |                   |                |                   |
   |-| ----------------------> +-+                  |                |                   |
   |-|                         |-|  2.转发请求      |                |                   |
   |-|                         |-----------------> +-+ 3.向合作的SP  |                   |
   |-|                         |-|                 |-| 请求发送短信  |                   |
   |-|                         |-|                 |-| -------------------------------> +-+
   |-|                         |-|                 |-|               |                  |-|
   |-|                         |-|                 |-| 4.确认发送请求|                  |-|
   |-|                         |-| 5.确认发送请求  |-| <------------------------------- |-|
   |-|                         |-| <-----------------|               |                  +-+
   |-|   2.得到发送请求的响应  |-|                 +-+               |                   |
   |-| <---------------------- |-|                  |                |                   |
   |-|                         +-+                  |                |                   |
   |-|                          |                  +-+  7.查询短信   |                   |
   |-|                          |                  |-|   发送报告    |                   |
   |-|                          |                  |-| -------------------------------> +-+
   +-+                          |                  +-+               |                  |-|
    |                           |                   |                |                  |-|
    |                           |                   |  8.得到短信    |                  |-|
    |                           |                   |    发送报告    |                  |-|
    |                           |                  +-+ <------------------------------- |-|
    |                           |                  |-|               |                  |-|
    |                           |                  |-| 9.写入短信    |                  |-|
    |                           |                  |-|   发送日志    |                  |-|
    |                           |                  |-| -----------> +-+                 +-+
    |                           |                  +-+              |-|                  |
    |                           |                   |               |-|                  |
    |                           |                   |               |-|                  |
    |                           |                   |               +-+                  |
    |                           |                   |                |                   |
    +                           +                   +                +                   +

设计目标

为服务层所有的服务提供统一的代理。让外层系统不用关心服务层的实现细节,布署方式。让服务层的用户只和GateSvr交互就可以得到所有的服务。

Features
  • 负载均衡
  • 服务降级
  • 动态的服务发现
  • 支持后端服务集群的横向扩展
  • 灰度发布(待后期版本实现)

依赖

硬件平台

  • X86 服务器

软件平台

  • CentOS 6.2
  • etcd 2.2.1 参见 缩略语及名词解释 中的说明

软件结构

语言

Golang 1.5

模块说明

服务发现

该模块是所有服务公用的模块,参见《iceberg服务框架设计说明.md》

一致性哈希

该模块是所有服务公用的模块,参见《iceberg服务框架设计说明.md》

http service

利用go自带的net/http包的http server在3201端口上提供http服务;对http请求的处理是一个同步的过程,每当接收到一个请求,就会创建一个goroutine专门来处理这个请求的转发和响应的读取。

关键的数据结构

接口描述

供外部调用的接口

参见 gatesvr目录下的README.md文档

调用的外部接口

服务层中其他服务提供的服务接口,详细情况参见《Iceberg服务发现系统说明.md》

附件

bechmark测试

  • 测试机器 mac book pro 2核 8G内存 使用WRK测试工具进行http压测
无日志打印,后端服务不做任何事情,直接响应
➜  wrk-master ./wrk -t2 -c100 -d30s http://localhost:3201/services/icetest/02
Running 30s test @ http://localhost:3201/services/icetest/02
  2 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     4.09ms    3.62ms 154.54ms   95.29%
    Req/Sec    13.08k     2.26k   16.14k    90.33%
  782834 requests in 30.09s, 91.83MB read
Requests/sec:  26018.25
Transfer/sec:      3.05MB
无日志打印,后端服务执行数据插入操作
➜  wrk-master ./wrk -t2 -c100 -d30s http://localhost:3201/services/icetest/01
Running 30s test @ http://localhost:3201/services/icetest/01
  2 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    23.09ms   21.33ms 259.02ms   71.81%
    Req/Sec     1.80k   489.95     3.12k    77.26%
  107306 requests in 30.04s, 13.00MB read
Requests/sec:   3572.57
Transfer/sec:    443.08KB

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL