写点什么

国信证券开源自研的微服务开发框架 zebra-金马国际

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

      阅读完需:约 8 分钟

    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 年多。


    开源

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


    代码地址:


    文档地址:


    作者介绍:


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


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


    2019 年 12 月 14 日 12:2511676

    评论 1 条评论

    发布
    关注
    2019 年 12 月 23 日 20:00
    回复
    没有更多了
    • 2018 年 6 月 6 日

    • 今天,我和你聊聊什么是云原生,以及如何设计一种基于kubernetes的云原生部署架构。

      2021 年 9 月 7 日

    • weibomesh 同其他 service mesh 实现相比又有哪些独到之处呢?我们下面从面临的问题和解决的思路两方面来简要分析。

      2018 年 3 月 22 日

    • 6 月中旬,东方证券宣布开源其基于 grpc 框架开发的微服务框架 grpc-nebula。据了解,grpc-nebula 框架具有服务自动注册、服务发现、链路跟踪、服务治理等特性,为证券行业自身所特有的痛点提供了金马国际的解决方案。infoq 编辑采访了东方证券首席架构师樊建,了解了 grpc-nebula 框架开源背后的故事与考量。

    • 携程从.net技术栈的时代就已经开始微服务领域的探索,转入java技术栈之后,先是自研微服务框架,然后是高性能的dubbo。

    • skywalking 是一个应用性能监控系统,特别为微服务、云原生和基于容器(docker, kubernetes, mesos)体系结构而设计。除了应用指标监控以外,它还能对分布式调用链路进行追踪。类似功能的组件还有:zipkin、pinpoint、cat等。

      2021 年 2 月 26 日

    • 虽然说热门的消息队列产品在功能和特性方面各有优劣,但我们在选择的时候,要有一个最低标准,保证入选的产品至少是及格的。

      2019 年 7 月 25 日

    • 业界应用比较广泛的开源rpc框架主要分为两类:一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的。

      2018 年 9 月 22 日

    • 为数以亿计的用户提供优质的视频服务的爱奇艺技术产品团队,为了适应业务的快速迭代和创新,并支撑海量的用户请求,很多团队都对各自的业务系统自发地进行了微服务架构的改造。

    • 奇虎360企业安全从2011年到2015年,经历了几次服务端架构的变迁。从一开始的软件自研到最后的全部使用开源软件,360企业安全部真切体会到了开源软件带来的好处。另外,360也通过各种各样的方式来构建自己开放、透明、平等的金马国际的文化。infoq编辑采访了奇虎企业安全高级工程师温铭,听他分享了360内部的开源软件实践经验以及开源文化构建经验。同时,温铭还将在archsummit全球架构师峰会上分享题为《开源文化对360天擎架构演进的影响》的演讲,敬请关注。

    • 微服务(microservices)架构是当前互联网业界的一个技术热点,圈里有不少同行朋友当前有计划在各自公司开展微服务化体系建设,他们都有相同的疑问:一个微服务架构有哪些技术关注点(technical concerns)?需要哪些基础框架或组件来支持微服务架构?这些框架或组件该如何选型?笔者之前在两家大型互联网公司参与和主导过大型服务化体系和框架建设,同时在这块也投入了很多时间去学习和研究,有一些经验和学习心得,可以和大家一起分享。

    • 本篇文章整理自《剖析 | sofarpc 框架》系列文章,由sofa 团队和源码爱好者们共同出品。

    • 2016 年下半年开始,freewheel 开始将其业务系统从 rails 单体应用逐步迁移到微服务,同时技术栈从 rails 改为 golang,两年之后,整个迁移接近尾声,freewheel 业务系统技术团队对外分享了它们在微服务化过程中的经验。

    • 2018 年 9 月 12 日

    • 本文是国投瑞银基金近两年在平台架构选型、平台架构设计、平台及相关子系统的逐步完善背后的经验分享。

    • 11月19日,蚂蚁金服在北京举办主题为“巅峰洞见·聚焦金融新技术”发布会,重磅推出金融级分布式架构sofastack双模微服务平台。

    • 今天我们就给大家介绍下本次 sofa 中间件开源的几个微服务体系组件。

    • 本次分享介绍前隆科技在微服务方面的实践经验。

    发现更多内容

    react native 核心原理及跨端选型思路

    react native 核心原理及跨端选型思路

    网站地图