trading-system-gateway 是ETS对外暴漏服务的唯一入口,作为一个高可用的分布式网关,对外提供透穿grpc服务
一 、诞生的原因 - 核心需求
Ref ETS系统健壮性需求分析
1、剥离业务系统,从外围控制、保护业务系统的稳定鲁棒和性能鲁棒。
2、基于业务需求对请求分流,满足业务系统扩展性需求 (核心功能
一 、压测
描述:充分压测 高频报价下的订单计算,频繁opeart操作
目标:测出系统性能上限,作为容错阈值
重点参数: 可承受持仓单及pending单,Operator TPS。
二、实时监控及报警
描述:订单监控,异常监控,报价对比及监控 ,性能监控
三、容错策略 限流降级
描述:根据压测结果 作为系统自我保护阈值。
容错原则:以系统实时、准确的订单计算为原则。
限流:当持仓单接近系统上限时,限制部分组或全部组的开仓行为。
降级:当处理性能接近系统阈值是,对etc等外围服务降级。
四、极端自保策略 熔断
描述:分业务级熔断和服务级熔断,业务级熔断属于容错策略,服务级熔断属于最终自保策略。
- 当触发严重监控报警时或容错策略无效时,系统应当停止对外提供服务
- 如有必要取消部分小额持仓单calc计算
- 当跳闸时 应当有完备的重启策略再生策略, 或分流 或削减负荷
- 当因服务内部(协程泄漏,内存溢出等)或不可预知的破坏容错原则的问题发生时触发熔断。
五、响应机制
描述:容错触发后使上游服务感知并做对应的请求相应,用户体验。
六、弹性扩展
描述:根据性能需求 当系统达到瓶颈时 弹性扩展服务性能或增加服务并行数
- 单体性能扩展:基于容器及运维配合
- 分布式:分布式服务改造 流量分流
目前除了opeart TPS 其余都没有做。所以当前ET6完全不具备金融级产品的上线形态。
功能目标 - 需求细节
- 注册发现
- 透明代理
- LB实现之group分流
- 事件同步
- 全局入口流控
- 请求流控
- 超时控制
- 自适应系统过载保护
- 动态系统保护
- 优雅反馈
- 日志归档
- 监控及报警
- 服务治理
- 可视化
- 容器化
- 云原生(k8s
二、当前阶段 - v0.0.1
1、目录结构
- cmd 可执行文件 入口
- dao 数据持久
- dto 数据对象
- event 事件
- load_balance 负载均衡接口及实现
- middleware 中间件插件 流控、追踪等
- proxy 反向代理实现
- registry 注册发现
- router 可视化后端实现
- util 公共工具
2、运行逻辑
2.1、Init
// http header matadata [gorup] :[ BRD]
http body data []byte
- ETG启动时,会通过registy获取全部健康BackEnd元信息,并实时watch。
- 通过BackEnd元信息获取ServiceMeta.LbStrategy 构建groupLb缓存。
- 通过消息监听,获取并更新groupLb缓存。
2.2、调用逻辑
1 | graph TD |
三、开发笔记
- 透传
codec
grpc client 性能优化 http2 streaming/multiplexing
二进制分帧
很容易实现多流并行而不依赖建立多个 TCP 连接
- grpc调用原理
服务端: lis,err = net.listen() s := grpc.NewServer() grpc.RegisterService() s.Serve(lis) lis.Accepct() s.serveWG.Add(1) go s.handleRawConn()
- gateway功能点
编解码codec 数据处理UnaryProxyHandler 自定义负载 业务级分流 Balancefunc 数据一致性
四、展望未来 - v0.1.0
- metadata 优化 (更兼容,更简短
- 代码优化,(插拔性,易读性
- 上线 metrics
- metrics 整合sentinel (https://github.com/alibaba/sentinel-golang/issues/70)
- 紧密结合knative 保证ETG的绝对稳定