版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
金融行业微服务架构解析
目录引言 3一、什么是微服务 31.1. 微服务架构定义 31.2. 微服务的感性认识 41.3. 微服务架构带来的问题 61.4. 微服务架构适用场景 71.5. 微服务架构在互联网金融方面的应用 8二、主流微服务框架 9三、微服务架构关键技术 103.1.微服务平台技术图谱 113.2.关键技术架构与设计 12
引言对于微服务,每个人都有自己的理解,与互联网企业的大量落地相比,微服务在传统金融行业还没有普及,这首先是传统金融行业线上系统需求更新和版本迭代没有互联网公司那么频繁;其次是技术能力约束了新技术的落地;再者传统金融行业对系统可用性和稳定性的要求非常高。如何理解微服务架构?微服务能够给金融行业带来什么?金融行业微服务架构如何选型?这些都需要我们对微服务架构进行深入的剖析。一、什么是微服务微服务架构定义微服务的定义源于2014年3月MartinFowler所写的一篇文章“Microservices”,微服务的四个特性定义抽象为“小、独、轻、松”。微服务的感性认识转型之前:紧耦合组件慢的部署周期,等待集成测试转型之后:松耦合组件自动化部署,无需等待独立组件微服务优势可伸缩性:服务的承载能力在设计之初并不能完全符合后来业务发展的要求,随着业务量增大,服务要通过服务器集群方式进行扩展,各个微服务的扩展数量也是按需求扩展,承载量大的微服务扩展节点多,承载量小的微服务扩展节点少,从而实现资源有效配置。降低风险:准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件。a)从负载均衡列表中移除掉“金丝雀”服务器。b)升级“金丝雀”应用(排掉原有流量并进行部署)。c)对应用进行自动化测试。d)将“金丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)。e)如果“金丝雀”在线使用测试成功,升级剩余的其他服务器。(否则就回滚)弹性系统:在理想的设计中,一旦某一非核心微服务启动失败,其他微服务仍然可用,用户在没有使用到异常模块所提供的服务时,对这一异常完全无感知,大大增强了用户体验。敏捷:开发成本降低,响应速度加快。各个开发团队的人员不必耗费大量时间了解整个服务端架构,主要通过了解某个微服务的金融业务需求和技术体系即可参与开发,从而降低了学习成本以及改动代码带来的风险,代码审查流程的简化也相应地加快了开发响应速度。灵活:不要求所有的微服务都使用同一种技术和平台来实现。微服务架构带来的问题依赖服务变更很难跟踪,其他团队的服务接口文档过期怎么办?依赖的服务没有准备好,如何验证我开发的功能。部分模块重复构建,跨团队、跨系统、跨语言会有很多的重复建设。微服务放大了分布式架构的系列问题,如分布式事务怎么处理?依赖服务不稳定怎么办?运维复杂度陡增,如:部署物数量多、监控进程多导致整体运维复杂度提升。这些解决方案折腾到最后就会明白,原来我们要有一个微服务应用平台才能整体性的解决这些问题。微服务架构适用场景微服务架构并不是万能的,有它适合采用的系统,这些系统包括:对于业务流程较为复杂,且业务会逐渐变得更加复杂的系统,单体应用将十分庞大,后期难以修改和维护,应考虑使用微服务架构。为了满足业务需求,项目中引入了众多的技术栈,中间件,单体应用会给开发者带来很大的困扰,应考虑将应用拆分成多个独立部署的采用最优技术栈实施的微服务。高并发的,有高可用和弹性伸缩需求的系统,往往是那些面向庞大数量互联网用户的平台类、交易类系统,应考虑利用微服务架构便于横向扩展和弹性伸缩的特性。单体应用版本发布成本高,而单个微服务的变更和发布都很容易,那些有高频率版本发布需求的系统,应使用微服务架构。没有数据实时强一致要求,可接受数据最终一致的系统,可使用微服务架构。在银行系统中:OA、HR、绩效等管理类系统并不需要微服务架构;信贷、CRM等管理类应用如果体积庞大(几十万行代码以上),要使用微服务改造;中间业务、核心账务、网银由于系统压力大,可以采用微服务架构。微服务架构在互联网金融方面的应用第三方支付包括以支付宝、财付通、盛付通为代表的互联网支付企业,也包括快钱、汇付天下为代表的金融型支付企业。P2P小额信贷是一种个人对个人的直接信贷模式。大数据金融是指集合海量非结构化数据,通过对其进行实时分析,可以为互联网金融机构提供客户全方位信息。众筹融资指用团购+预购的形式,向网友募集项目资金的模式。众筹利用互联网传播的特性,让小企业、艺术家或个人对公众展示他们的创意,争取大家的关注和支持,进而获得所需要的资金援助。所谓信息化金融机构,是指通过采用信息技术,对传统运营流程进行改造活重构,实现经营、管理全面电子化的银行、证券和保险等金融机构。互联网金融门户是指利用互联网进行金融产品的销售以及为金融产品销售提供第三方服务的平台。它的核心就是“搜索+比价”的模式。二、主流微服务框架业界开源微服务框架方案比较综合来看,SpringCloud是首选。为什么选择SpringCloud?不只是解决微服务的某一个问题,而是一个解决微服务架构实施的综合性解决框架;整合了诸多被广泛实践和证明过的框架作为实施的基础部件,又在该体系基础上创建了一些非常优秀的边缘组件;大量的兼容性测试,保证了更好的稳定性;极高的社区活跃度;SpringCloud之于其他微服务框架就好比是:品牌机VS
DIY电脑三、微服务架构关键技术3.1.微服务平台技术图谱微服务技术桟:APIDoc:SwaggerUIAPIMock:SwaggerMockAPIAOP基础框架:Springframework微服务容器:SpringBoot服务发布:SpringWebMVC服务注册中心:SpringCloud-Eureka服务路由:SpringCloud–Ribbon服务调用:SpringCloud–Feign服务熔断器:SpringCloud–Hystrix安全认证:SpringCloud-Security服务配置中心:Apollo,SpringCloud–Config服务监控:SpringBootAdmin3.2.关键技术架构与设计我们从这9个方面来解析微服务关键技术架构与设计。1、前端UI框架兼容性Vue是流行的前端框架,其对浏览器的兼容性较好,主流的操作系统和浏览器都支持。vue响应式双向数据绑定实现自动同步vue.js采用数据劫持结合发布者-订阅者的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时,发布消息给订阅者,触发相应的监听回调。具体的来讲,Vue.js通过Directives指令去对DOM做封装,当数据发生变化,会通知指令去修改对应的DOM,数据驱动DOM的变化。vue.js还会对操作做一些监听(DOMListener),当我们修改视图的时候,vue.js监听到这些变化,从而改变数据。这样就形成了数据的双向绑定。2、微服务容器微服务运行的容器环境我们来看一下微服务运行容器,要做可靠高效的微服务架构应用,实际上我们需要做的事情还是非常多的。如果没有一个统一的微服务容器,这些能力在每个微服务组件中都需要建设一遍,而且会五花八门,也很难集成到一起。微服务容器:负载均衡微服务容器的基础服务能力之一就是支持负载均衡。
通常所说的负载均衡都指的是服务端负载均衡,其中分为硬件负载均衡和软件负载均衡。硬件负载均衡主要通过在服务器节点之间安装专门用于负载均衡的设备,比如F5等;而软件负载均衡则是通过在服务器上安装一些具有负载均衡功能或模块的软件来完成请求分发工作,比如Nigix等。硬件负载均衡的设备或是软件负载均衡的软件模块都会维护一个下挂可用的服务端清单,通过心跳检测来剔除故障的服务端节点以保证清单中都是可以正常访问的服务端节点。当客户端发送请求到负载均衡设备时,该设备按照某种算法(比如线性轮询、按权重负载、按流量负载等)从维护的可用服务端清单中取出一台服务端的地址,然后进行转发。客户端负载均衡和服务器负载均衡最大的不同点在于上面所提到的服务清单所存储的位置。在客户端负载均衡中,所有客户端节点都维护着自己要访问的服务端清单,而这些服务端的清单来自于服务注册中心,建议使用SpringCloudNetflix的Ribbon组件。微服务容器:服务熔断、容错、升降级、限流微服务容器的基础服务能力之二就是服务熔断、容错、升降级、限流,在系统出现异常时提供故障恢复能力。3、注册中心服务注册与发现接下来我们聊一下注册发现,以前的单块应用之间互相调用时配置个IP就行了,但在微服务架构下,服务提供者会有很多,手工配置IP地址又变成了一个不可行的事情。那么服务自动注册发现的方案就解决了这个问题。我们的服务注册发现能力是依赖SpringCloudEureka组件实现的。服务在启动的时候,会将自己要发布的服务注册到服务注册中心,运行时,如果需要调用其他微服务的接口,那么就要先到注册中心获取服务提供者的地址,拿到地址后,通过微服务容器内部的简单负载均衡器进行路由。一般情况,系统内微服务的调用都通过这种客户端负载均衡的模式进行,否则就需要有很多的负载均衡进程。跨业务系统的服务调用,也可以采用这种去中心化的路由方式。当然采用SOA的模式,由中心化的服务网管来管理系统间的调用也是另一种选择,要结合企业的IT现状和需求来决定。4、配置中心集中配置管理微服务分布式环境下,一个系统拆分为很多个微服务,一定要告别投产或运维手工修改配置的方式。需要采用集中配置管理的方式来提升运维的效率。配置文件主要有运行前的静态配置和运行期的动态配置两种。静态配置通常是在编译部署包之前设置好。动态配置则是系统运行过程中需要调整的系统变量或者业务参数。要想做到集中的配置管理,那么需要注意以下几点:
配置与介质分离,这个就需要通过制定规范的方式来控制。千万别把配置放在Jar包里。配置的方式要统一,格式、读写方式、变更热更新的模式尽量统一,要采用统一的配置框架运行时需要有个配置中心来统一管理业务系统中的配置信息,这个就需要平台来提供配置中心服务和配置管理门户。配置修改同步交互配置修改后通过推送或者定时拉取的方式更新并缓存到应用程序所在的微服务容器中供应用程序使用。高可用运行架构设计配置中心有两种部署模式
高可用模式,见上图,支撑大规模微服务访问时根据负载情况可以对“配置查询同步服务”进行横向扩展ALL-IN-ONE模式,配置变更服务、配置查询服务合并为一个进程。适合支撑少量系统的场景使用。配置中心可以支持高可用模式部署,满足金融行业的要求。5、监控中心基于Skywalking定制实现SkyWalking主要就是通过收集各种格式的数据进行存储,然后展示。所以我们需要关注的是SkyWalkingCollecter、SkyWalkingUI和存储设备。APM探针JavaAgent是JDK1.5以后引入的,也可以叫做Java代理。JavaAgent是运行在main方法之前的拦截器,它内定的方法名叫premain,也就是说先执行premain方法然后再执行main方法。使用agent技术构建一个独立于应用程序的代理程序(即为Agent),用来协助监测、运行甚至替换其他JVM上的程序。使用它可以实现虚拟机级别的AOP功能。APM全链路运行监控调用链跟踪分析:把同一TraceID的Span收集起来,按时间排序就是timeline。把ParentID串起来就是调用栈。实时分析:对单条日志直接分析,不做汇总,重组。得到当前QPS,延迟。离线分析:按TraceID汇总,通过Span的ID和ParentID还原调用关系,分析链路形态。6、日志中心日志中心架构日志分析是运维工程师解决系统故障,发现问题的主要手段。日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。通常,日志被分散的储存在不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志,即繁琐又效率低下。为此,我们使用集中化的日志管理,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,这时实时日志分析ELK平台能够完美的解决上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。
规范日志与流水,问题追根溯源作为一个微服务应用平台除了提供支撑开发和运行的技术组件和框架之外,还应该提供一些运维友好的经验总结,我们推荐的日志与流水实现如下:先来看日志,平台应提供的日志主要有三种,系统日志,引擎日志还有跟踪日志。有了这些日志,在出问题的时候能够帮助我们获取一些关键信息进行问题定位。要想做到出了问题能够追根溯源,那么右边的这些流水号的设计也是非常重要的,日志与各种流水号配合,能够让我们快速定位问题发生的具体时间地点以及相关信息,能够快速还原业务交易全链路。对这些日志与流水的细节处理,对于系统运维问题定位有非常大的帮助,没有这些有用的日志内容,ELK日志收集套件搭建的再漂亮,收一堆垃圾日志也是没用的。通常开源框架只是提供个框架有开发人员自由发挥,而设计一个平台则一定要考虑直接提供统一规范的基础能力。7、API
Gateway基于SpringCloudNetflix的Zuul组件定制实现异步非阻塞模式启动的线程很少,基本上一个CPUcore上只需启一个处理线程,它使用的线程资源就很少,上下文切换(ContextSwitch)开销也少。非阻塞模式可以接受的连接数大大增加,可以简单理解为请求来了只需要进队列,这个队列的容量可以设得很大,只要不超时,队列中的请求都会被依次处理。
APIGateway逻辑架构
API网关就像整个系统的门面一样,所有的外部访问都经过它实现调度、过滤、请求路由、负载均衡、校验等等。APIGateway功能
API网关上还可以实现更多更复杂的功能。
8、IAM(Identity
and
Access
Management)IAM架构IAM为企业提供统一的账号管理视角,对所有基于账号的管理、认证、授权、审计进行集中的统一管理,提高了账号管理的安全,帮助系统管理员提高了工作效率,降低了管理负担,同时改善了普通用户在不同资源中登录认证的重复繁琐过程,为日常工作提供了更高的安全性。
统一用户中心
IAM可以为企业所有的资源使用人员如普通用户、系统管理人员、驻场代维人员、合作伙伴、临时工作人员等定义主账号,按照公司的组织方式对人员进行管理。通过一对一的主账号管理模式,可以在该平台实现对所有资源使用人员进行集中定义、集中维护等生命周期管理。统一认证与鉴权安全认证方面,我们基于SpringSecurity结合Auth2再加上JWT(Jsonwebtoken)做安全令牌,实现统一的安全认证与鉴权,使得微服务之间能够按需隔离和安全互通。认证鉴权一定是个公共的服务,而不是多个系统各自建设。9、微服务管理服务管理机制服务提供者:服务注册在服务注册时,需要确认下eureka.client.register-with-eureka=true参数是否正确,默认为true,若设置为false将不会启动注册操作。服务同步由于服务注册中心之间因互相注册为服务,当服务提供者发送注册请求到一个服务注册中心,它会将该请求转发给集群中相连的其他注册中心,从而实现注册中心之间的服务同步。服务续约eureka.instance.lease-renewal-interval-in-seconds参数用于定义服务续约任务的调用间隔时间默认30秒。eureka.instance.lease-exptra
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安岳县去年中考数学试卷
- 大学老师出数学试卷
- 空调室内机施工方案
- 石粉路施工方案
- 火车票务代理合同
- 种植蜀桧柏施工方案
- 庐江县楼顶漏水施工方案
- 中学生物理兴趣小组活动故事解读
- 2024年初中语文说课稿集合15篇
- 大数据在金融行业中的应用及风险控制
- 药理学实验方案
- 传染病学 日本血吸虫病
- GB/T 3098.2-2015紧固件机械性能螺母
- GB/T 20319-2017风力发电机组验收规范
- 班作业公示记录单
- 托福阅读练习及详细解析ArtisansandIndustrialization
- FZ/T 93074-2011熔喷法非织造布生产联合机
- 《思想政治教育问题研究开题报告(含提纲)3000字》
- 气瓶安全风险分析+评价记录
- 中建二局“大商务”管理实施方案20200713(终稿)
- 国家开放大学电大本科《国际私法》案例题题库及答案(a试卷号:1020)
评论
0/150
提交评论