SOFAStack™(Scalable Open Financial Architecture Stack)包含构建金融级云原生架构所需的各个组件,也是在金融场景里锤炼出来的最佳实践。提供项目管理、微服务应用开发、部署发布、监控运维、容灾高可用等全栈式解决方案,并兼容 Dubbo、Spring Cloud 等微服务运行环境,助力客户各类应用轻松转型分布式架构。

SOFAStack 的名称来自蚂蚁内部发展十多年的金融级分布式中间件 SOFA(Service Oriented Fabric Architecture),代表着从支付宝创立之初就开始在关键金融交易系统锤炼出来的分布式架构实践。


sofastack_数据


项目官网:https://www.sofastack.tech


特性包括:

  • 开放:技术栈全面开源共建、保存社区中立、兼容社区 兼容开源生态,组件可插拔, SOFAStack 组件与其它开源组件可相互集成或替换。
  • 金融级:包含构建金融级云原生架构所需的各个组件,让用户更加专注于业务开发,满足用户场景的现状和未来需求,经历过大规模场景的锤炼,特别是严苛的金融场景。
  • 云原生:基于 SOFAStack 可快速搭建云原生微服务体系,快速开发更具可靠性和扩展性、更加易于维护的云原生应用。

SOFAStack 包含了构建微服务体系的众多组件,包括研发框架、RPC 框架,服务注册中心,分布式链路追踪,Metrics监控度量、分布式事务框架、服务治理平台等,结合社区优秀的开源产品,可以快速搭建一套完善的微服务体系。

随着业务规模和系统复杂性的增长,传统的微服务管理运维也变得越来越快,开发人员和运维人员面临诸多挑战。Service Mesh 和 Serverless 等新兴概念的出现可以解决此类问题。SOFAStack 为满足大规模部署下的性能要求以及应对落地实践中的实际情况,也开源了类似 SOFAMesh 和 SOFAMosn 等项目。

SOFAMesh 介绍


SOFAMesh 是基于 Istio 改进和扩展而来的 Service Mesh 大规模落地实践方案。在继承 Istio 强大功能和丰富特性的基础上,为满足大规模部署下的性能要求以及应对落地实践中的实际情况,有如下改进:

  • 采用 Golang 编写的 MOSN 取代 Envoy
  • 合并 Mixer 到数据平面以解决性能瓶颈
  • 增强 Pilot 以实现更灵活的服务发现机制
  • 增加对 SOFA RPC、Dubbo 的支持

SOFA Mesh 项目 fork 了 Istio 项目,对 Pilot 的能力进行增强,目前在进行中的增强主要集中在下面三个方面:- 支持 Zookeeper 作为注册中心,并在此基础上支持 SOFA、DUBBO 等使用 Zookeeper 作为注册中心的微服务框架。- 支持通用协议框架,使用一个通用协议,在 Kubernetes DNS 的基础上同时支持多种协议。- 新增 register agent,支持 SOFA、DUBBO 和 HSF 的容器模型,即支持单个应用注册多个服务实例。

下图展示了SOFAMesh 和 Istio 在架构上的不同:

sofastack_数据_02

主要组件

MOSN

在 SOFAMesh 中,数据面我们采用 Golang 语言编写了名为 MOSN(Modular Open Smart Network)的模块来替代 Envoy 与 Istio 集成以实现 Sidecar 的功能,同时 MOSN 完全兼容 Envoy 的 API。

sofastack_运维_03

SOFA Pilot

SOFAMesh 中大幅扩展和增强 Istio 中的 Pilot 模块:

sofastack_微服务_04

  1. 增加 SOFA Registry 的 Adapter,提供超大规模服务注册和发现的解决方案
  2. 增加数据同步模块,以实现多个服务注册中心之间的数据交换
  3. 增加 Open Service Registry API,提供标准化的服务注册功能

MOSN 和 Pilot 配合,将可以提供让传统侵入式框架(如 Spring Cloud、Dubbo、SOFARPC 等)和 Service Mesh 产品可以相互通讯的功能。

SOFAMosn 


github地址:

​https://github.com/alipay/sofa-mosn​

SOFAMosn 的核心设计思路

首先,将 SOFAMosn 作为代理处理的数据流划分为4层,在入方向数据依次经过网络 IO 层,二进制协议处理层,协议流程处理层,转发路由处理层;出向与入向过程基本相反。

sofastack_数据_05


了解了分层的基本思路,具体介绍一下各层的具体职能:

  • IO 层提供了 IO 读写的封装以及可扩展的 IO 事件订阅机制
  • PROTOCOL 层提供了根据不同协议对数据进行序列化/反序列化的处理能力
  • STREAMING 层提供向上的协议一致性,负责 STREAM 生命周期,管理 Client / Server 模式的请求流行为,对 Client 端stream 提供池化机制等
  • Proxy 层提供路由选择,负载均衡等的能力,让前后端 stream 流转起来。大家可以从这张图清晰的看到单向请求流转的过程。

sofastack_运维_06

了解了分层设计和转发流程,我们再看下线程模型。从线程模型,可以看到每个链接的 IO 协程是成对出现的,读协程负责读取,事件机制及 Codec 逻辑,数据上升到 steam 层,具体的 stream 事件由独立的常驻 worker 协程池负责处理。

SOFAMosn 支持 X-PROTOCOL,一种更轻量级的方式支持自定义 RPC 协议,对于无需解包的相对简单的场景,将 RPC 数据作为 TCP 或者 HTTP/2.0 的payload 进行转发,同时支持所有无需解包的路由负载策略。

同时我们计划在 X-PROTOCOL 中加入编解码扩展点,支持需要解包的场景。在平滑升级的支持上,除了经典的传递 listener fd+ 协议层等待方式,SOFAMosn 支持对存量链接进行协议无关的迁移。同时为了部署升级,SOFAMosn 支持指定 / 更新前后端通信协议。

除了能力支持,SOFAMosn 在网络层,协议处理层,基于 TCP 的私有协议层都提供了可扩展的能力,使得自定义业务可以优雅集成。在蚂蚁落地的过程中我们内部的 SOFAMosn 依赖于开源版本,通过可扩展的方式来实现蚂蚁内部的自有业务,在工程落地上提供了可行的方案。


关注公众号 soft张三丰 

sofastack_运维_07