随着互联网金融的兴起,互联网企业依托互联网,特别是移动互联网为公众提供越来越多方便快捷、稳定高效的金融类服务,对传统的银行业务带来了很大冲击。作为应对,传统银行也在业务上不断创新,带来对IT基础设施和应用架构方面进行转型升级的要求。例如为了支撑电商促销活动对银行带来的高峰期海量支付请求,某银行很早就对支付渠道相关业务应用进行微服务架构改造,由此带来了容器技术的研究和运用。此银行的多年实践证明,采用容器技术平台很好地支撑了新的业务模式和业务容量。
为此,我写了一篇关于:《金融企业容器平台建设-需求和设计实践经验分享》 ,希望给大家带来参考与借鉴。
6月8日线上我参与了一场关于:金融行业容器云平台建设需求与设计实践经验在线答疑的交流活动,和多位行业专家一起交流,我整理总结了下几个重要的难点问题也是对大家有参考意义的问题给大家。希望能对大家有帮助,如果有不同意见或者不足,可以一起交流!
bryan 软件架构设计师 , 金融研发
回复:按照经典分层,云计算分为IaaS、PaaS和SaaS,每层关注的侧重点各不相同:
1)PaaS层主要侧重于为应用运行提供各种基础运行环境,其中包括负载均衡、高可用等功能,实现这个目标有很多种方法,比如docker、garden等多种容器技术,现在由于docker技术的发展和成熟,一般容器都默认为docker;
2)SaaS层主要侧重于将服务直接提供给消费者,比如在线版的google doc等,实现这个目标有很多种方法,也并未必须依赖PaaS,其中业界使用较多的就是用微服务实现,spring boot 和dubbo就是实现微服务的底层框架。
通过以上概念可以才看出,spring boot 和dubbo是微服务的实现框架,属于SaaS层的范畴;容器技术主要是PaaS的落地实现技术,为上层应用提供基础运行环境,属于PaaS层的范畴。由于SaaS可依赖于PaaS提供的容器运行环境,因此二者均可以与容器技术结合在一起。
如果面临技术选型问题,只是对比二者的优缺点即可,二者在某银行的生产环境上均有使用,dubbo用在与高并发交易中,spring boot用在了大数据的相关业务场景中。
caikai 系统架构师 , KYLERC
回复:微服务框架大家知道的比较多的有:Spring Cloud、Dubbo、Service Mesh/istio。这里只列影响面比较大的,事实上还有不少公司有自己特有的微服务框架,例如motan,但相对小众,暂不讨论。
微服务是一种应用的架构模式,和包括容器在内的运行环境并没有必然关系。就像分布式架构的系统,可以运行在各种虚拟化平台上一样,没有谁不合适谁更合适的区别。
从这个角度说,无论哪种微服务框架,它们都是能在容器平台上运行的,没有什么本质的区别。
以上几种微服务框架各有利弊:Spring Cloud优点是社区比较大,人气高,使用人数多,缺点是只支持java,且对代码有侵入性;Dubbo是阿里主导的框架,优点是起步早,成熟,比Spring Cloud通信效率高,缺点是相比Spring Cloud人气低,主要用户在国内,阿里曾一度停止技术支持,最近应该是又恢复了支持,但已经被Spring Cloud抢走了不少用户;Service Mesh/istio的优点是技术先进,微服务间的网络通信问题完全不用关心,支持多种开发语言,没有代码侵入性,正在越来越受到关注,缺点是还不够成熟,但google和IBM主导,发展很快,可能成为下一个主导的微服务框架。
顺便提一提,以上的这些微服务框架,是很适合无状态服务的,对于有状态的服务,需要服务自身进行数据持久化和恢复的工作。如果想从框架层面需求这方面的支持,可以研究一下微软的service fabric。service fabric从框架层面不仅提供了注入注册发现、服务网关、断路器、跟踪器等服务,还提供了帮助和加速微服务开发的SDK,基于SDK实现平台框架负责的有状态服务的管理,功能强大。微软公有云Azure的部分核心,以及某些关键的服务,例如Cosmos DB等都是基于service fabric开发而来,全球每日处理的交易量非常之大,因此性能和稳定性也得到了足够的证明。之所以service fabric大家可能了解的少一些,主要是以前service fabric是微软的封闭技术,但在今年初,微软跟随开源的潮流也把service fabric完全开源了,大家可以关注一下。事实上微软已经是开源领域的重要玩家了,连续几年在github上的贡献都是最多的。
caikai 系统架构师 , KYLERC
回复:网络拓扑规划时,建议把不同租户的容器运行在各自不同的虚拟网络VLAN中,并为不同的VLAN设置必须的防火墙规则、关闭相关的路由来保证不同租户的业务在网络上隔离。
建议容器平台为不同的租户分配各自专属的、不同的资源池,租户只能在属于自己的宿主机上运行自己的容器应用。这虽然导致了资源利用率的降低,但在根本上回避了容器运行依赖共享宿主机内核、隔离性天生不如虚拟机的局限,这和主要基于虚拟机的IaaS平台对多租户隔离的做法不同。
wykkx 系统架构师 , 某基金公司
回复:本质上都通过vlan进行划分的
caikai 系统架构师 , KYLERC
回复:大体上来说,容器网络的改造,取决于您的运行场景对网络的需求。网络选择有几类:
shendb 技术经理 , 太保
回复:就谈几个必须要考虑的点供参考。
1、对生产网络压力的评估及安全控制。容器在规模化使用后在镜像分发等场景下会有较大的网络带宽消耗这个是需要考虑到的。
2、网络安全策略回顾。如master与slave间的网络安全策略,是一个大的平台还是各区域分别建设再进行整个,这个和安全控制策略有较大关系。
3、负载均衡策略。是用集中式的还是分布的,是作为基础网络服务能力提供还是作为平台服务能力提供。dns也面临类似情况。
网络方面问题往往容易被忽略,处理不好将给容器平台带来非常大的风险。
聂奎甲 项目经理 , 长春长信华天
回复:1.评估应用上云的必要性,可行性和风险,综合决定是否上云及哪些部分上云。
2.选择非核心,无状态,前端应用先做试点,等迁移成功稳定后再逐步推广.
caikai 系统架构师 , KYLERC
回复:如果应用不做任何改造迁移到容器,或者说把容器当虚机用,基本和传统区别不大。但如果应用做了微服务化改造,需要面对很多可能的新问题,这里只大致罗列:
wykkx 系统架构师 , 某基金公司
回复:这个问题很难用一两句话说清楚。应用上云不是一个动作,而是一整套工程,可以参考我已经发布在twt微信里的应用如何上云: http://www.talkwithtrend.com/Article/218497
**我们使用的是Ubuntu 16.04 server+ harborv1.4+rancher server+docker17,我们想了解下如何做好?
paas平台的资源管理,防火墙。容器弹性伸缩等问题,以及实ip带来的管理和跟踪问题,此外还想了解镜像和版本如何做好管理?**
聂奎甲 项目经理 , 长春长信华天
回复:目前Kubernetes支持CPU、Memory伸缩策略,但CPU和Memory很多场景并不适合。CPU和Memory的使用情况有时并不能真实反映实际业务的运行情况,而且用他们来扩展、收缩容器也显得武断,很可能导致没有完成的业务请求的容器被回收。
caikai 系统架构师 , KYLERC
回复:资源管理可以选择事先划分好宿主机、存储等资源给paas平台使用,这样做比较简单,没有多少和底层资源池或IAAS对接的要求;如果要求资源动态申请,就需要paas和iaas的对接了,rancher应该是有这样的功能
网络如何管理是比较复杂的,也直接影响到防火墙、IP的管理。在这次交流的其它问题里有专门关于网络的,建议参考
弹性伸缩,目前比较简单的能做到的是基于资源使用情况的弹性,但这样的弹性往往不充分,或者不准确。如果要做到基于业务的弹性,那么理想的情况需要应用配合改造吐出业务状态信息才行,要么提供接口,要么通过日志等。个人觉得目前比较实用、代价比较低的弹性是基于时间表的弹性,因为大多数需要弹性的场景,其实是可预测的,要么有比较固定的时间段,要么就是在某个活动开始前的一段时间。
聂奎甲 项目经理 , 长春长信华天
回复:一个应用开发到上线到你的平台首先有一个过程,容器化。如果是一个新的程序,非常好,直接可以按容器的方式来做。写编排文件就可以直接了。如果是老应用,要先有容器化的过程。这个过程大致可以分为拆分、改造、合并三个阶段。
caikai 系统架构师 , KYLERC
回复:基本上有几个方面都会涉及:
1.应用改造:涉及适合场景的梳理,以及应用状态持久化,或更进一步的微服务架构拆分改造
2.架构优化和运维:这个涉及的复杂问题很多,要应对服务效率降低(例如用服务网关聚合一组API,亲和性调度、断路器、异步调用等)、高可用性要求(例如服务限流、服务降级、弹性扩容、负载均衡、故障恢复、滚动升级和回滚)、分布式系统数据一致性(包括强一致性和最终一致性的分别处理)、分布式系统安全性(统一身份验证、传输加密、API鉴权、API限速、租户隔离)、监控系统改造(日志收集、集中告警灯)
3.流程改造:CI/CD流水线工具、全生命周期管理的流程、推行类似SRE等的DevOps理念
4.团队组织:提倡按照业务服务边界而不是技术职能的团队组织和KPI设置等。
caikai 系统架构师 , KYLERC
回复:回答前,先假设问题中的“网络扁平化”,是指容器网络和容器平台之外的网络融为一体,不仅可以直接路由互通,还可以完全利用到外部网络已有的各类网络服务能力、SDN能力。
要实现以上目的,在设计容器网络时,需要考虑整个容器网络具备和容器平台以外,例如IaaS的VM有相同的网络层级、IP地址规划、子网划分规则,IP地址分配、根据容器的生灭动态配置防火墙策略、路由策略等。具体的做法变化比较多样,基本上都需要修改已有容器平台的容器网络接口实现,即CNI或CNM的实现。
文章中举了一个例子,对接了IAAS的Neutron+SDN进行统一网络管理,工作原理是:
caikai 系统架构师 , KYLERC
回复:这部分对接通常要涉及的几个方面:
bryan 软件架构设计师 , 金融研发
回复:补充一点,由于IaaS平台主要为PaaS提供操作系统资源,这些资源包含存储、网络、计算资源等,在设计的时候要考虑资源的抽象化和统一化,将多种不同的硬件资源都可以抽象成统一的接口和概念,尽量提供统一的接口,对PaaS屏蔽异构资源的差异性,视作从资源池动态调度资源即可。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞10
添加新评论3 条评论
2018-08-30 17:17
2018-08-29 16:39
2018-06-12 20:58