BT

闫金明:分布式微服务的系统模型演进
录制于:

| 受访者 闫金明 作者 InfoQ 发布于 2017年3月15日 |
18:38

个人简介 闫金明,十余年金融行业从业经验,参与过保险、基金、证券、互联网金融等相关业务核心系统设计研发工作。多年核心交易系统、支付系统设计经验,对大并发、高可用交易场景拥有丰富的架构经验。曾在恒生电子、宜信等知名金融企业担任架构师职位,专注业务架构,对复杂业务需求有着敏锐的洞察力,先后为多家超千亿规模的金融管理机构提供技术咨询服务。

   

2. 请您先介绍一下自己和公司?

闫金明:我目前在付钱拉担任首席架构师这个角色,我们付钱拉目前主要做金融云平台,最开始对外提供聚合支付服务,现在对外提供大数据征信、余额增值、理财超市等金融创新产品,这个过程中我偏向业务架构中一些设计工作。

   

3. 您在进入付钱拉之前在金融领域工作了十余年,和其他领域相比IT领域在金融当中的特殊性和难点有哪些?

闫金明:这方面我以前也经常思考,因为我毕竟做了十余年,最大的感受是金融系统的外部依赖非常多,除了银行领域以外,像我们做的支付它首先依赖于三方,依赖于商户,依赖于银行,还依赖于短信平台等等,各方面的依赖比较多,这其中如果我们处理不好依赖可能会带来很多问题,这也是我们的工作重心。

   

4. 你们是从什么时候开始有微服务的想法?出现什么情况让你们意识到需要转向微服务?

闫金明:其实我觉得作为软件开发人员还是比较懒惰的,系统没有问题的话我们会觉得天下太平,但是系统一旦遇到性能瓶颈就感觉系统应该要重构了,我们的系统经过交易量攀升以后发现数据库压力不行了,应用响应速度越来越慢了,这种情况下我们准备对系统进行扩容,想到了做微服务。

   

6. 关于API架构的形成,付钱拉对外要对接很多第三方的接口,第一版的API架构你们花了多长时间去完善它?

闫金明:第一版刚才我们提到它是all-In-One模式的,那时候是一个比较通用的模型,基于MVC的,那套架构我们做起来很快,主要是为了将我们的想法快速实现,试探市场的反应,花了一个多月把整个架构做好了,从上线到稳定可能要经历一段时间的积累。

   

7. 您说的“稳定”是从第一版出来之后不断的修复BUG不段的提升?

闫金明:BUG是一个方面,主要是业务需求不定,因为创业初期我们对市场的理解有一些偏差,所以需求也是逐渐的完善过程中,这时候也需要我们的系统有一个相应的适配期。

   

8. 关于架构历史这块,您提到在系统模型演进过程中,要从集中式、分布式到分布式微服务化,在这个过程中你们首先做到的是应用分离和模块化,目前有多少模块?

闫金明:我们的架构可以叫微服务,模块大概有20多一点,应该是24个左右,相对数量我感觉还是比较多的,也给我们运营带来很大的压力。

   

9. 这几个模块是按照什么划分的,是按照业务吗?你们微服务的粒度是怎么样的?

闫金明:这就不得不说我们的业务积累过程,从最早非常简单的all-in-one模型发展到现在的微服务,我们做了很多业务,很多产品,包括一些创新的金融服务,有了业务积累以后我们才考虑说可以做微服务,因为我们对系统处理流程和核心逻辑认识的非常清楚了。

   

10. 你们在划分的时候,微服务是把大的东西拆分成不同的微服务,您认为到底微服务要做到多微或者粒度大小够用就可以了?

闫金明:我感觉不是从维度或者够用不够用的角度来看,还是需要按照业务需求,或者业务模型来划分的,它跟业务绑定比较紧,有什么样的业务就要做什么样的划分。

   

12. 高效SEDA(Staged Event-Driven Architecture)这个概念是很早之前提出来的,从讨论热度来说并不是很受关注,为什么你们选择了它?

闫金明:这是一个偶然现象,我演讲中提到了我们基于很多的需求,有很多的想法需要实现,我们才尝试了解很多的架构,最终发现都不是那么满足,但是了解到Matthew Welsh博士那篇论文以后觉得SEDA这个想法还是很新颖的,能够把我们的业务切割的很好,跟我们的业务很好的匹配,所以才决定尝试一下,于是写了一个简单的实例,写完以后觉得不错应该能实现,所以我们又花了很长一段时间尝试,最后也成功了,还是比较欣慰的。

   

13. 你们现在也会读这种行业的论文吗?这个框架在业界内有没有使用?

闫金明:具体哪家公司使用这个架构我不是特别清楚,目前我了解的只有两个开源框架内部应用到了SEDA,一个是Mule开源框架,它是一个企业级的ESB总线,另外一个是Apache的一个开源框架Camel,它里面也提到了SEDA架构。Spring内部也与seda架构有关,但是具体的我没有去了解过。

   

14. 你们内部也会关注很多学术界的研究,是吗?

闫金明:没有做到这样,主要是一个偶然的机会才了解到它,并不是专门研究学术问题,因为我们毕竟是创业公司没有这么大的精力。

   

15. 你们在SEDA里是怎么做到提高性能、快速交互、自动化的,尤其弹性伸缩怎么做到的?

闫金明:提升性能这块主要是它的任务处理链,它能充分利用系统的闲置资源,性能提高还是很大的,弹性伸缩是依赖于我们有中央控制器同时配合监控可以对系统进行自动处理,这块我们做的不是特别好。如果做弹性伸缩需要考虑很多限制性问题,比如硬件服务器的资源限制,数据库连接限制,还有三方并发请求限制,我们没有特别好的方案来实施,但是实现了一个简单的模型,根据流量能动态的增加节点或者减少节点。

   

16. 你提到了三种类型的架构,目前付钱拉是含有集中式、分布式和微服务式三种批处理的任务吗?你们应用服务划分的时候怎么应用到架构模型当中?

闫金明:目前SEDA架构是应用到支付核心系统里面,还有一个控制器模式的微服务架构应用到创新性金融产品,因为它的交易量不是那么大,对性能要求没有那么高,还有一些其他的小的系统应用的是分布式的处理方式,因为那时候考虑还不完善,我们觉得没有必要应用SEDA架构或者控制器模式的微服务。我们要进行微服务改造还要有很多的经验积累,对于新的初创型的小项目,我们还不敢去做。

   

17. 你们选择Nginx+Netty做http的请求分发,为什么做了这样的技术选型?服务编排也是自己的研发的?为什么没有选择容器流派的方案?

闫金明:关于容器这块,我在分享中并没有提到,因为我们目前在整个系统中并没有对容器做真正的应用,还处于调研阶段,使用Nginx+Netty是出于它对高并发和稳定性的支持。容器这块我们正在研究,可能未来会应用到微服务当中去。

   

18. 除了Nginx+Netty有没有其他的备选方案?

闫金明:我们也是经过对比以后才选择了它,业内有很多公司都在用,相对其他的框架来说它更值得我们信赖。

   

19. 您提到接下来会考虑微服务和容器进行结合,现在有没有一些自己初步的看法?

闫金明:容器我之前简单的了解过,因为平时工作比较多,它还是比较适合微服务的,尤其自动发布,自动部署等等,目前我们实际上投入了很多运营人员在做这件事情,采用微服务可以帮我们减员增效,实现快速发布,就冲这一点也值得我们对它进行应用。

   

20. 监控在每一个IT系统当中都存在,您演讲中提到它的价值被忽视了,为什么有这种看法?你认为哪些点大家做的不够好?

闫金明:我们做的很多业务的监控重点在关注服务器的资源,比如CPU、内存、网络等等各个方面,但是对业务的监控还是非常少的,这样就造成我们被动的接受一些错误响应,这方面有待加强,我们是真正遇到一些教训以后才觉得这方面应该做好它。

   

21. 您认为对物理资源监控并不是足够的,业务监控要重于物理监控?

闫金明:倒不是重于,他们两个至少应该是并行的,目前我们对业务监控方面还有很多需要总结的地方,像某项业务、某些三方出现问题以后我们会弹出告警,但是这种告警信息往往是非常多的,怎么对它进行筛选、合理处理,是需要我们努力的方向。

   

22. 如果架构系统做的够好,可能物理资源出现一些问题、瓶颈可能对业务并不会造成影响?

闫金明:目前支付的话对我们的各种依赖的要求非常高,物理资源出现问题,像前一段时间出现大面积IDC机房网络被断的情况对我们影响非常大,对硬件的监控也在我们的考虑范围内,对业务的监控对我们来说是新的挑战也会不断完善。

   

23. 付钱拉有自己的IDC吗?

闫金明:我们有一部分在云上,比如官网是放在云上,但是交易核心有自己的IDC机房。

   

24. 付钱拉创立的时候就是这样思考的吗?把一部分放在云上,把核心的东西放在IDC机房?

闫金明:云那时候没有那么火,所以我们开始也把交易核心放在里面,现在出于客户信息安全的考虑,更多的投放在IDC机房里,把一些不太重要的,比如官网放在云上,这也是传统金融行业对云的一个看法,不太重要的放在云上面,交易核心放在自己的IDC机房里。

   

25. 如果在金融交易遇到峰值时,比如说一些大事件的时候到峰值的时候,弹性扩容是在你们自己的IDC当中进行的吗?

闫金明:是的,所以受制于硬件资源限制,弹性扩容也不能随意的扩。

   

26. 付钱拉的IDC是在北京吗?

闫金明:对,我们有一个同城备份的机房。

   

27. 之前跟付钱拉的冯忠旗老师有过接触,他提到你们要求应用的可应用率要达到五个9,是从这五个9倒逼架构做应用吗?

闫金明:这是从架构设计上考虑的,我们的重试的成本非常高,用户一旦支付失败,如果让他重新支付,这时候很多客户就放弃支付了,导致支付成功率下降,所以在架构设计上就努力保证每一次交易不会因为系统的原因导致定单交易失败,只有做到这样才能做到五个9,我们想了很多的方案,比如重路由、通过监控控制流量切换等等各个方面的处理。

   

28. 所以你们对架构进行升级或者引入新的模块的时候会进行流量压测?

闫金明:这是每个系统都应该做的一件事,所以我们日常,包括比如有重大功能上线的时候都会对系统重新做一套压测的。

   

29. 具体而言在金融行业要做到五个9,需要在哪些方面做的比其他行业好?

闫金明:举一个例子,前一段时间我们IDC机房出问题,网络的事,由于联通切流量,我们实际上开通了三个互联网链路,我们会不断地对网络请求进行监控,一旦发现丢包比较严重的时候,可以自动切换到另外一条链路上去,这实际上是为了保证5个9做的一方面努力,软件方面刚才谈到对于监控这块做了很多的工作去尽量满足这个需求。

   

30. 事先的时候要做好plan b,设计的时候还要做好监控的足够强壮?

闫金明:对。

    InfoQ:今天的采访就到这里,谢谢闫老师!

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

不再错过InfoQ编辑特稿

“当你不知道某件事情的时候,你很难意识到。”想要改变?看看InfoQ编辑们的推荐内容吧。

BT