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 ¶
There is no documentation for this package.