learn-tech/专栏/互联网消费金融高并发领域设计/02打造互联网消金高并发架构八大中间件运用.md
2024-10-16 06:37:41 +08:00

397 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
02 打造互联网消金高并发架构八大中间件运用
大规模线上化的业务对互联网消费金融架构的要求
互联网金融业务的快速发展,对架构设计在系统稳定性、交付能力、管理效率、技术栈规划方面提出了更高的要求。
大规模线上化业务的挑战:
1. 系统稳定性
业务高速发展,流量和数据量大增;
在系统稳定性、可用性、扩展性、安全性和成本等面临挑战;
2. 交付能力
快速上线、快速交付能力Time To Market交付时间面临挑战
管理结构BU化千人研发人员并行开发系统交付的质量面临挑战
3. 管理效率
分布式的系统,复杂度高,调用链长,超出个人的处理能力,工具化势在必行;
多数据中心的部署,大量机器和应用服务面临治理的挑战;
4. 技术栈规划
编程语言: JavaNodeJsPythonGO等
数据库OracleMySQLPostgreSQLMongoDB等
中间件RedisRocketMQApollo等
打造互联网消费金融八大核心中间件
打造八大核心中间支持未来在消费金融线上化交易业务未来10倍、100倍快速增长。
1服务框架Dubbo阿里开源的一个高性能的优秀服务框架
2服务框架Spring Cloud由美国Pivotal公司出品由Spring官方背书由Netflix、Alibaba等众多知名互联网企业技术输出
3 路由网关Gateway分布式集群路由负载均衡协议适配支撑峰值交易
4配置中心Apollo配置集中化配置与代码分离快速响应能力
5数据访问层DAL支持数据库横向扩展分库分表故障转移
6消息队列MQ业务解耦组织解耦流量削峰填谷
7缓存服务Redis高性能高吞吐秒杀利器
8作业调度Job定时作业批量处理支撑每日大规模作业。
打造互联网金融服务框架
服务框架的选型目前主流的有两类一是由阿里背书的Dubbo体系二是由Spring背书的Spring Cloud下面就两类框架分别进行介绍。
服务框架Dubbo介绍
对于互联网消费金融架构来说Dubbo适用于系统技术相对简单业务调用链短系统对并发量和吞吐量要求很高对生态的要求不高服务治理等外围系统不需要非常强大的业务场景。对迭代迅速、小短快控制流程不需要很严格的互联网金融公司。
服务框架Dubbo架构图
服务框架Dubbo简单介绍
背景中国Alibaba公司出品由Alibaba官方背书捐献给了Apache开源组
定位本土化、高性能、轻量级、封闭式的开源RPC调用和SOA框架
技术基于Spring低版本/Spring Boot高版本服务注册发现依赖zookeeper负载均衡RPC、REST3.x版本支持调用
协议Apache License 2.0
服务框架Dubbo发展历程
诞生2009年初开源推出1.0版10年多发展历史
成熟2012年10月23日推出2.5.3版成熟稳定版后停止维护和升级当当网接手维护推出DubboX版
恢复2017年9月7日恢复维护2018年1月8日合并DubboX发布2.6.0版;
近况阿里巴巴中间件部门计划推出3.0版
服务框架Dubbo的未来规划
Streaming支持Streaming为内核取代同时兼容RPC
Reactor支持“反应式编程”模式Reactive Programming去掉一切阻塞
Spring Cloud支持Dubbo接入Spring Cloud使两者达到互通Spring Cloud Alibaba产品组已经着手支持
Service Mesh支持Service Mesh由Dubbo-Mesh进行IPC路由、负载均衡和熔断机制将由
服务框架Dubbo组件体系
服务注册发现中心Apache ZookeeperAlibaba Nacos
服务调用方式:
RPCNetty、Mina、Grizzly、Hessian、RMI、Thrift等
RESTDubboX
服务调用序列化:
FastJson、FST、Hessian2、Kryo、ProtoStuff、JDK
服务负载均衡:
ConsistentHash、LeastActiveLoadBalance、RoundRobin、Random
服务框架Spring Cloud介绍
对于中大型互联网消费金融公司来说Spring Cloud是个不错的选择但同时开发的预支也较大适用于系统较为复杂业务调用链较长对生态的要求很高微服务配套包括服务治理、监控、路由、网关、灰度发布等需要面面俱到的互联网金融公司。要求公司基础设施强大架构团队、DevOps、运维等力量雄厚自动化部署能力较强。同时具备迭代周期较长流程控制较为严格较为正规化。
服务框架Spring Cloud架构图
服务框架Spring Cloud简单介绍
背景由美国Pivotal公司出品由Spring官方背书由众多知名互联网企业技术输出NetflixAlibaba等
定位:国际化、全生态、全开放、全插件式的开源微服务架构解决方案和体系,拥抱全球知名云厂商;
技术基于Spring/Spring Boot服务注册发现负载均衡熔断降级RPC、REST调用API网关等
协议Apache License 2.0
服务框架Spirng Cloud发展历程
诞生2015年7月开源推出Angle版将近4年多发展历史每年定期推出打迭代版本
成熟相继陆续推出了Brixton版、Camden版等
飞跃Finchley版于2018年6月19日发布属于划时代版本支持Spring Boot2.xSpring5.xWebFlux
近况社区活跃各大互联网公司技术推出众多组件如Alibaba Nacos
服务框架Spirng Cloud现状和未来
WebFlux已发布支持Spring WebFlux异步响应式框架采用Reactor或RxJava未来将逐步取代Spring WebMVC
Spring Cloud GW已发布支持响应式的服务网关使用Spring WebFlux网关吞吐量得到卓越提升
Kubernetes支持已发布支持Kubernetes的组件Spring Cloud官方推出直接集成Kubernetes的组件朝着专业化DevOps踏出更坚实一步
Serverless支持已发布支持Spring Cloud Function面向函数式编程支持跨Serverless Providers的统一编程模型实现Faas函数即服务进一步简化Pass平台即服务
Spring Cloud LB孵化中支持异步响应的负载均衡Spring Cloud Loadbalancer使用Spring WebFlux大幅度降低负载均衡时候的性能损耗
Service Mesh规划中支持Service Mesh拭目以待。
服务框架Spirng Cloud技术组件体系
服务注册发现中心Netflix Eureka、HashiCorp Consul、Alibaba Nacos、CoreOS Etcd孵化中
服务负载均衡Netflix Ribbon、支持异步WebFlux
服务调用方式REST&RPCFeignClientRestTemplate
服务调用序列化Json
服务API网关Netflix Zuul同步、Spring Cloud Gateway异步
断路器Hystrix、Alibaba Sentinel
分布式配置Spring Cloud Config、Apollo
调用链Sleuth、Zipkin、Pinpoint、Skywalking等
消息驱动Spring Cloud Stream
消息总线Spring Cloud Bus
容器化支持Spring Cloud Kubernetes。
建设路由网关Gateway
对于互联网消费金融的架构来说,建设路由网关是一项很重要的工作。有了路由网关,能为我们的平台带来很多好处,除了常用的网关的路由功能外,我们还能在金融系统的升级、微服务线上化的过程中,根据需要把流量在新老系统之间切换,也为灰度发布、蓝绿发布、同城双活、异地多活的建设打下基础。
路由网关Gateway的主要特性
智能路由
业务隔离
熔断限流
动态更新
灰度发布
监控告警
路由网关Gateway架构设计
互联网消费金融网关架构图:
基于OpenResty打造高性能网关
OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
打造互联网消费金融配置中心Apollo
Apollo配置中心的主要特点
简单易用
多环境多集群配置
配置修改实时生效
版本发布管理
支持灰度发布
支持权限/审核/审计管理
开放API管理
消费金融Apollo配置中心实践
在互联网消费金融领域打造分布式的配置中心不但能够为服务架构Dubbo或Spring Cloud提供统一的配置化管理而且在业务服务的架构上也能提供很多便利它让我们可以将一些配置项存储于配置中心减少主要业务数据库的压力的同时又能动态更新配置项。下面我总结了一些在业务方面的配置化实践
1消费金融涉及众多业务功能大量的开关功能是免不了的我们可以业务开关放在Apollo进行统一管理。如自动审批开关、新功能验证开关、风控规则启用开关等
2还有消费金融业务配置项管理如利率范围根据国家政策经常变动可以用Apollo配置管理起来又如审批的节点管理根据贷款类型有抵押、无抵押类型不一样审批的节点也不一样可以用Apollo管理
3同城双活、蓝绿发布的流量管理、Ip路由管理等等。
打造互联网消费金融数据访问层DAL
数据访问层DAL的主要特性
支持多数据源Oracle、MySQL等
统一的API封装
简单、安全
统一数据源
支持分库分表策略
Read/Write
Mod N
Range
Hash
代码生成技术,比如统一加时间戳等等
统一的监控和统计
数据访问层DAL架构设计
互联网消费金融数据访问层DAL实践
在互联网消费金融领域业务复杂建设好DAL数据访问层能为我们带来很多便利
金融业务表众多开发团队大在DAL层为每张表统一封装好时间戳这样做能为以后的大数据平台增量同步数据提供便利
金融行业涉及到的账务数据数据量大对每日并行报批查询服务都有不小挑战建设统一的分库分表组件应对未来数据量10倍100倍的增长
对一些监控的需要如关键表的SQL执行次数用户行为留存历史操作记录等都可以在DAL层统一设计实现。
打造互联网消费金融消息队列MQ
消息队列MQ的主要特性
1消息特性
高吞吐
低延时
可靠
有序(统一分片内)
多生产者
多消费者
2存储特性
支持MySQL等数据存储
Kafka支持持久化
3跨平台支持
JAVA
.NET
消息队列MQ架构设计
互联网消费金融消息队列MQ架构实践
1服务之间的解耦消费金融的业务链路特别长的场景可以用MQ来解耦比如一笔进件经历贷前校验到风控平台风险规则风险探测准入核额再到贷中审批流程调用链比较长业务环节也比较多可以通过消息队列MQ进行系统&模块间的解耦;
2异步的处理提升系统性能在一些耗时环节设计成异步的交互方式通过MQ进行异步的结果通知可以大大减少系统的同步响应处理提升系统的吞吐量。例如用户进行还款时在进行跨行转账支付时可能会耗时比较长而且要等待他行的返回结果与支付服务的交互时可以通过异步MQ的方式进交互异步的返回交易的结果成功或者失败。
互联网消费金融消息队列MQ技术选型
目前MQ中间件开源技术众多比较流行的有KafkaRocketMQRabbitMQActiveMQ。
Kafka介绍
消息存储:内存、磁盘、数据库。支持大量堆积。
单节点吞吐量:十万级。
分布式集群架构支持较好。天然的Leader-Slave无状态集群每台服务器既是Master也是Slave。
社区活跃度:高
适用场景:大数据日志采集
RocketMQ介绍
消息存储:磁盘。支持大量堆积。
单节点吞吐量:十万级。
分布式集群架构:支持较好。常用 多对Master-Slave 模式开源版本需手动切换Slave变成Master。
社区活跃度:高
适用场景:较大型公司使用,需要有专业人员研究源码,主要是有阿里背书,大公司用的比较广泛。
RabbitMQ介绍
消息存储:内存、磁盘。支持少量堆积。
单节点吞吐量:万级。
分布式集群架构:支持不太好。支持简单集群,’复制’模式,对高级集群模式支持不好。
社区活跃度:高
适用场景:中小型公司,比较稳定成熟。
ActiveMQ介绍
消息存储:内存、磁盘、数据库。支持少量堆积。
单节点吞吐量:万级。
分布式集群架构:支持不好。支持简单集群模式,比如’主-备’,对高级集群模式支持不好。
社区活跃度:低
适用场景:中小型公司,比较稳定成熟。
打造互联网消费金融缓存服务Redis
缓存服务Redis的主要特性
高性能高吞吐读的速度是110000次/s,写的速度是81000次/s
丰富的数据类型: Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作;
原子性Redis的所有操作都是原子性的同时Redis还支持对几个操作全并后的原子性执行
缓存服务Redis的架构设计
我们在上一章举了一个贷款进度查询的例子首先进行查询缓存如缓存没有再去查数据库大大降低了数据库的压力。下面我将这个图扩展一下重点示例Redis的集群结构
Redis哨兵的作用
Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其中三个特性:
监控Monitoring Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒Notification 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移Automatic failover 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。
特点:
1、保证高可用
2、监控各个节点
3、自动故障迁移
互联网消费金融缓存服务Redis实践
在互联网消费金融业务领域里Redis有很多实践场景
1. 实现接口幂等性在金融领域很多业务行为对幂等性要求很高比如支付重复扣款重复下单等。在调用接口之前先调用获取token的接口生成对应的令牌(token)并存放在redis当中在调用接口的时候将第一步得到的token放入请求头中。解析请求头如果能获取到该令牌就放行执行既定的业务逻辑并从redis中删除该token。如果获取不到该令牌就返回错误信息;
2. 热点数据缓存比如常用的金融业务配置项客户经理的状态等热点信息可以存放在redis快速访问减少数据库压力增强系统性能
3. 分布式Session保存消费金融领域涉及到的系统众多特别是后台服务比如给业务经理用的系统可能就有审批系统、报表系统、查询信息系统等可以将各个进行统一Session会话保存到redis减少每次系统重新登录提升用户体验
4. 分布式锁这是一个比较常用的场景主要使用setnx命令功能来编写分布式的锁跟幂等性的实现原理类似比如用户在发起还款时请求开始到结束会经过很多系统还款金额校验、卡余额校验还款发起服务等需要对关键资源点进行加锁防止并发场景带来故障
5. 对互联网消费金融门户网站/APP首页排行榜信息进行缓存比如商品信息贷款品种、贷款金额排行榜等。
打造互联网消费金融作业调度Job
互联网消费金融作业调度Job的架构挑战
场景复杂:在互联网消费金融业务,涉及到很多跑批作业,而且作业间互相依赖,有分支,有汇总的场景特别多,比如:每日夜间批扣,财务分录,利率计算&减免等等;
数据量大互联网消费金融业务的线上交易量的增长无疑会大大增加作业Job的数据量。而且批量作业的数据跟交易量是10倍级别的增长比如一笔贷款分12期还一年12个月这样就是112的关系。
监控的难度增加。
互联网消费金融作业调度Job的架构设计
作业调度Job分布式设计
支持集群部署,提升调度系统可用性,同时提升任务处理能力。构建作业注册中心,实现的全局作业注册控制中心。用于注册,控制和协调分布式作业执行。
作业调度Job分片设计
前面的章节也介绍过分片设计的好处能够并行处理海量数据支持动态横向扩展提升系统的处理能力。将任务拆分为n个任务项后各个服务器分别执行各自分配到的任务项。一旦有新的服务器加入集群或现有服务器下线将在保留本次任务执行不变的情况下下次任务开始前触发任务重分片。
作业调度Job监控设计
互联网消费金融作业Job的监控涉及到的方面
1作业的进度监控
2作业状态监控是否正常或异常
3异常分类与报警
4消息通知。
互联网消费金融作业调度Job的架构选型
QuartzJava事实上的定时任务标准。但Quartz关注点在于定时任务而非数据并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用但缺少分布式并行调度的功能
TBSchedule阿里早期开源的分布式任务调度系统。代码略陈旧使用timer而非线程池执行任务调度。众所周知timer在处理异常状况时是有缺陷的。而且TBSchedule作业类型较为单一只能是获取/处理数据一种模式。还有就是文档缺失比较严重
elastic-job当当开发的弹性分布式任务调度系统功能丰富强大采用zookeeper实现分布式协调实现任务高可用以及分片目前是版本2.15,并且可以支持云开发
Saturn是唯品会自主研发的分布式的定时任务的调度平台基于当当的elastic-job 版本1开发并且可以很好的部署到docker容器上。
xxl-job: 是大众点评员工徐雪里于2015年发布的分布式任务调度平台是一个轻量级分布式任务调度框架其核心设计目标是开发迅速、学习简单、轻量级、易扩展。