写点什么

国信证券开源自研的微服务开发框架 Zebra

  • 2019 年 12 月 14 日
  • 本文字数:2405 字

    阅读完需:约 8 分钟

国信证券开源自研的微服务开发框架 Zebra

Zebra 为国信证券自主研发的一个高性能微服务开发框架,应用于国信证券金太阳 App 各个业务的后端,已稳定运行 2 年多。


发展历程如下:


  • 2017.10 - 2018.04:完成首版本的设计与开发。

  • 2018.04 - 至今:应用于国信证券金太阳 App 后端;同时持续优化框架。

  • 2019.12:发布第一个开源版本。

  • 2019.12 - 后续:计划在国信证券内部推广使用,并持续将代码贡献到开源社区中。


背景

随着国信证券业务的发展及用户数的增长,对技术的要求日益提高。原有系统的基础架构已不能很好地支撑业务的诉求,制约了业务的快速创新和敏捷交付。


新基础架构的推出迫在眉睫,需满足下面几个基本诉求:


  • 架构本身方面:高性能、稳定,券商 App 最主要业务为股票交易,对于后台的性能和稳定性要求十分苛刻。

  • 开发方面:框架轻快,支持 DevOps,快速打包,独立部署。

  • 运维方面:支持高效运维,多维度立体化的监控,支持灰度发布等。


微服务架构可以较好满足上述需求。


2015 年为微服务的元年,到 2017 已有两年多,在互联网有较多的应用,相关的基础组件也较为成熟,新架构采用微服务可谓水到渠成。


系统介绍

自研微服务框架原因

在微服务框架选型阶段调研了当时业界使用较多的两个框架:Spring Cloud 和 Dubbo。


各自存在的不足之处如下:


1.Spring Cloud


  • 使用基于 HTTP 的 RESTful 通信协议,性能比 RPC 低。

  • 接口协议约定比较自由且松散。

  • 各种管理 UI 分散且较为简陋,运维不方便。


2.Dubbo


  • 17 年 Dubbo 处于停滞状态,下半年才重启维护。

  • 其定位为 RPC 框架,为微服务生态体系中的一个重要组件,不是一套完整的微服务解决方案,只提供少量的服务治理功能。

  • 仅支持 Java 语言。


两个框架都不能很好满足国信证券的需求,所以最终决策自研微服务框架。当然也不是从零开始另造轮子,而是借鉴已有的微服务框架设计思想,引入已有的开源软件,在其上面构筑出符合国信证券需求的微服务框架。


架构

架构图


组件说明

组件说明
配置中心微服务配置统一管理、版本支持、配置分离,保证服务无状态。
服务中心展示服务状态,服务依赖关系,服务 API 管理,监控展示。
注册中心服务自动注册、自动发现、负载均衡、异常保护、异常通报下发、服务降级。
监控中心基于 Prometheus 协议,实现应用监控、异常上报、功能主动监控。
Zebra 微服务基于 SpringBoot,极大地简化开发工作
微服务通信协议采用高性能的 gPRC
使用阿里巴巴的 Sentinel 做流量控制
API 网关通过服务中心界面配置路由,对外暴露 HTTP 端口,路由后自动转换为内部 gRPC 调用。


关键组件

通信协议采用 gRPC

由于性能的原因,通信协议一开始就确定使用 RPC,而非 HTTP + RESTful。


在对比了谷歌 gRPC、阿里 Dubbo 和腾讯 TARS 之后,最终确定使用 gPRC 作为底层 RPC 框架。


gRPC 由 Google 开发。使用最新的网络传输协议 HTTP2,通过使用流的单个 TCP 连接来实现低延迟和多路复用请求。与 REST over HTTP / 1.1 相比,gRPC 非常快速和灵活。


选用 gRPC,因为 gRPC 有以下几个优势:


  • 多语言支持,涵盖了国信金太阳使用的开发语言;

  • 社区活跃,生命力强;

  • 支持 IOS、Android,支持 SSL 和自定义鉴权(支持国密),可以简单实现客户端到后台的多路复用、RPC 调用;

  • 配套有相应的开源组件可以使用,最终可以做到全面自主掌控;

  • 只有通信层依赖于 gRPC,所以容易替换;

  • TARS 与管理平台过于耦合,gRPC 只是负责通信,不与管理平台耦合,这样容易做到已有架构到 gRPC 架构的平滑迁移;

  • gRPC 通信组件为 Netty,Netty 是现在最流行的通信组件,而 TARS 是腾讯自己写的,腾讯如果不维护就将无法维护;

  • gRPC 使用 PB 协议,此协议在互联网上广泛使用,生命力强;

  • 支持流 stream,在流的基础上实现了 Server Push,方便做变更通知,不再需要客户端做费力的 Long Pull;


注册中心采用 Etcd

注册中心选型对比了 Etcd 和 Zookeeper。


Etcd 为 Zookeeper 的后起之秀,灵感来源于 Zookeeper,在实现上做了较多的改进。


  • 接口轻量化,基于 HTTP,不依赖专有客户端。

  • 使用更加简单的 Raft 来实现一致性。

  • 开发及运维相对 Zookeeper 更加简单。


从技术的发展趋势来看,容器化是大势所趋,当微服务发展到一定程度时,基本都会上 Kubernetes,Kubernetes 也使用 Etcd 作为其核心组件,采用 Etcd 也可以减少后期维护成本。


最终选型了 Etcd 做为服务注册中心。


集中管理界面

通过服务中心将各个管理界面统一集成,方便运维操作。



不仅仅是微服务框架

Zebra 不仅仅是一个微服务框架,更是集成了开发常使用的 Java 第三方软件,方便业务开发者的开发。


无论是传统的单体开发还是现代的微服务开发,开发者往往会使用到各种第三方软件(比如 Mybatis、MQ 等),而各种软件都必须开发者做各种大同小异的集成工作或者公共代码的开发。为此 Zebra 微服务框架提供了常用的第三方软件的集成,以便


  • 减少开发者的重复工作,提高开发效率。

  • 适配 Zebra 配置中心,让其可以通过 Zebra 配置中心进行统一的配置,方便运维管理。


已集成的第三方组件如下:


  • MyBatis

  • MQ(基于 RocketMQ)

  • 本地、Redis 缓存

  • 分库分表(基于 Sharding-JDBC)

  • 读写分离(基于 Sharding-JDBC)

  • 分布式锁(基于 Redis)


后续会根据业务和社区的需求,不断集成各种第三方软件,如 Elastic-Job(计划 2020 年提供)等。


应用效果

Zebra 已应用于国信证券金太阳的交易、理财、资讯、业务办理和首页等业务,上线的微服务数量 30+ 个,稳定运行 2 年多。


开源

当前代码已开源,欢迎大家使用和贡献代码 :-)


代码地址:https://gitee.com/gszebra/zebra


文档地址:https://www.kancloud.cn/gszebra/zebra_doc/content


作者介绍:


邓启翔 ,国信证券 Zebra 微服务技术负责人,具有多年网络框架和分布式系统架构设计及研发经验,对微服务有深刻理解。曾就职于平安、汇添富基金,资深架构师。


陈培新, 国信证券软件工程师,2019 年加入国信证券参与 Zebra 微服务研发。2012 至 2019 年就职于华为,先后参与电信领域 OSS 系统、编排中台的设计与研发工作。Java 资深工程师,目前专注于微服务领域的设计与开发。


2019 年 12 月 14 日 12:2511676

评论 1 条评论

发布
用户头像
关注
2019 年 12 月 23 日 20:00
回复
没有更多了
发现更多内容

OCR性能优化:从神经网络到橡皮泥

华为云开发者社区

神经网络 机器学习 OCR 橡皮泥 CNN网络

网格策略交易软件,量化马丁倍投交易机器人

13823153121

实测Tengine开源的Dubbo功能

捉虫大师

dubbo 网关 tengine

网络攻防学习笔记 Day27

穿过生命散发芬芳

5月日更 网络攻防

可视化突破海绵城市发展困境,智慧城市从“一张图”开始

一只数据鲸鱼

数据可视化 智慧城市 智慧水务 三维可视化 海绵城市

☕️【Java 技术之旅】带你看透Lambda表达式的底层

浩宇天尚

Java Lambda 底层原理 5月日更 行为参数化

视频门禁的优点及应用场景

anyRTC开发者

音视频 WebRTC RTC sdk

聊聊微服务治理的落地问题 | Geek大咖说第二期

百度Geek说

微服务 自动化

阿里云联合中国信通院发布《云计算开放应用架构》标准,加速云原生应用规模化落地进程

阿里巴巴云原生

容器 开发者 运维 云原生 k8s

最佳入门系列 | 何为服务网关?

架构精进之路

微服务 5月日更

集成学习中的随机森林

华为云开发者社区

机器学习 决策树 随机森林 集成学习 Bagging

为什么你的Docker容器刚启动就停了?

运维研习社

Docker Linux 5月日更

电子产品PCB电路板散热的方法

不脱发的程序猿

嵌入式 PCB 电路板散热 电子电路 电路板

【大咖直播】Elastic 可观测性实战工作坊

腾讯云大数据

elastic

Flink的批数据SQL

五分钟学大数据

flink 5月日更

合作伙伴眼中的HarmonyOS 专访方太智能厨电专家俞贵涛

科技汇

GitHub开源14.5万行阿波罗11号源代码

不脱发的程序猿

GitHub 开源 阿波罗11号

《复仇者联盟》AI换脸平台

不脱发的程序猿

人工智能 开源 AI 复仇者联盟

【多线程与高并发】从一则招聘信息进入多线程的世界

牧小农

Java 多线程与高并发

终于看到阿里大牛能把springboot讲的如此出神入化

Java 程序员 架构 计算机

索信达控股:金融机构如何打造最适合自己的个性化推荐系统?

索信达控股

大数据 金融科技 金融 个性化推荐 营销数字化

BI系统里的数据赋能与业务决策

薄荷点点

数据产品经理 决策 BI 数据驱动 风险识别

Flume自定义拦截器

大数据技术指南

大数据 5月日更

哈工大与华为终端有限公司签署首个HarmonyOS高校协同育人合作协议

科技汇

NUCLEO-L432KC实现UART1、UART2双串口数据通信(STM32L432KC)

不脱发的程序猿

嵌入式 stm32 单片机 NUCLEO-L432KC 串口通信

突击 22 天面进腾讯,给到 32K*14 薪!全靠这份阿里面试参考指南了

Java 程序员 架构 面试 计算机

MySQL 数据库救火:磁盘爆满了,怎么办?

华为云开发者社区

数据库 磁盘 MySQL 数据库 日志文件 磁盘爆满

VSCode 无鼠标操作快捷键对比Atom

追风的少年

Logo设计软件 Tech Support

凌天一击

请警惕 ES 的三大坑

悟空聊架构

elasticsearch 架构 分布式 微服务 ES

阿里面试官梳理2021年最全999道Java岗必备面试题答案

Crud的程序员

Java 程序员 架构

React Native 核心原理及跨端选型思路

React Native 核心原理及跨端选型思路

国信证券开源自研的微服务开发框架 Zebra-InfoQ