途牛订单的服务化演进

大家好,我是刘超,来自途牛订单中心部门。今天主要给大家分享下,途牛的订单系统服务化演进,与大家碰撞交流思维。

今天将从几个方面来进行分享:

  1. 背景
  2. 业务拆分
  3. 基础设施
  4. 集成开发
  5. 服务监控

首先说下,途牛最近几年的发展速度很快。

2013年以前大概只有屈指可数的几种业务类型,到今天已经发展到60多种业务类型的订单,我选了几个类型的订单量的数据做了个图表。


可以看到无论从业务类型还是业务量来说,都是飞速发展的,而像所有的公司的发展一样,我们也是从一个系统发展到今天成百上千个系统。

一个系统无论视同开发还是运行时的资源,都无法满足业务的需求,服务化是我们架构演进的方向,不是为了服务化而去做服务化,是由业务发展的复杂度和发展的业务量驱动的架构进化,是为了满足更快速的支撑更大规模的更复杂业务规则的扩展性要求设计,所以,我们做第一步,垂直拆分。

以上图形大致的描述旅游订单的概念模型,所以,随着业务的发展我们首先就把我们订单系统拆分成了会员、产品、资源、促销等等系统。

各系统通过WebService或者Rest等方式集成,以前最流行的SOA实施方式,看起来解决了业务发展过程中存在的一些问题。

业务类型较少的情况下解决了部分运行时资源紧张和故障隔离问题,代码拆分出来,项目构建影响小。就是松耦合,独立演进等等。

在只有一只手可以数的清楚的业务类型下,这种可以说基本上解决了我们一些问题,但是,我们的业务发展太速度了,每一种类型的订单,基本上都离不开这些领域的数据的交互,但是业务规则变化多样。

如果按照原来的思路,继续不断的增加一些类型判断如if...else...也能满足我们的要求,但是到最后可能就是 四五十个if else,而且相互影响,每个规则都相似又不同,所以其实大家发现了,其实这个时候订单的组装业务的规则已经成了现在的主要矛盾。

设计的问题,加一层就能解决很多问题,这个时候其实我们就需要吧我们的一些公共的服务(订单域)抽象出来,变化的规则通过具体的服务组装和编排去解决。

这个其实远了,我想说的就是,业务拆分,SOA能解决一部分问题,但是也有缺点,没有统一的管理,调用链不知谁依赖了谁,可靠性,可用性等的监控得不到保障,所以,这时候我们进入了 服务化的第二阶段 服务治理。

通过合理的管理和监控,保证所有的调用有据可循,有序有章法。

这个时候需要 服务治理的基础设施,我们研发的服务治理框架就是来解决这个问题:

基本上所有的分布式调用框架的思路都大同小异,注册中心:服务注册、审核、变更、发现。

  •   服务提供者:暴露服务接口的服务提供方。
  •   服务消费者:调用远程服务接口的服务消费方。
  •   监控中心:统计服务的调用次数、时间、结果等。

服务消费者通用组件:根据配置下载指定服务的可用服务地址列表,并缓存在本地。响应服务地址列表变更通知,更新本地可用服务地址列表。提供到注册中心长连接的重连机制。

服务提供者通用组件:启动时根据注解自动扫描提供的服务详情,上传提供的服务地址列表到注册中心,内建了还有并发控制等功能,序列化是通用的jsong,http请求,主要是方便各系统的集成,还是由于业务的不断发展,需要不断拆分,对于一些系统故障,或者流量异常怎么办?

通过设计合理的调用日志,出入参,发起方落地房,调用序列号,时长等,将日志发送到ELK平台,实施监控一些异常信息,在异常信息中也去封装调用序列号,能够对部分小范围的单点的故障现场起到快速定位的作用。

发现所依赖的服务挂了,如何处理,有可能会吧把整个容器拖挂,我们在框架中集成了 Hystrix 组件,当挂住的线程超过了一定的数量则会快速返回,从而达到降级的效果。

看起来这些服务治理的问题都搞定了,接下来该怎么走。

如果你的业务复杂度不再增长了,但是业务量增长了,或许我们就要针对单一功能的容量和性能等可靠性要求进行设计,可能这时候进行弹性资源分配,或者分库分表等设计就要入场了。

做服务化的好处就是职责更明确,不重复造轮子,另外一个方面也是提高了标准化,让专业的人做专业的事情,所以我们订单系统到目前为止 就时做公共的底层平台,成为能力中心,尽量做到最小力度的服务,在不同层次上抽象服务。

服务化到最后就成了微服务,现在很流行,也可能使我们未来的发展方向,但是,都是优点吗?不一定,现在存在的问题 :开发 调用接口困难,接口稳定 异步,沟通成本大。

有些比如异步的调试,跟踪也很烦,那么可以解决吗?

没有人解决不了的问题,我们也在努力的推行一些好的实践,稳定接口和mock测试桩,自动化测试用例,持续集成。看起来我们的沟通成本增加,开发联调复杂度增加,但个人感觉其实我们已经支撑了更加复杂和更大量的业务。

牺牲一小部分去换取更大规模的业务,这是值得的,所以总结下:

我们服务化的过程就是 拆分-》治理-》拆分,其实是一个不断迭代的过程,是随着业务发展和业务认知深度的发展而不断的拆分和治理的迭代。


Q&A

1.
Q:服务化之后问题定位一般多长时间,主要花在哪里?
A:基本上是比较快的,通过接口调用日志,进行调用链分析,异常日志中也包含了每次调用的序列号,所以基本上较快能解决问题,大概十分钟左右,我们的监控集成了一些APM ,还有一些异常告警。

2.
Q:如何保证这一系列的原子性操作?比如下单来说,要调用好几个服务,如果一个服务出现异常,就会造成数据不一致。

A:OK,这个问题不错。会区分关键性业务和非关键性业务,其实还是流程驱动,连续的调用链中可能存在一些非主流程的东西,这个时候我们可能直接保存下异常数据,主流程的话会直接回滚。

本文来自中生代技术群的分享

本期分享者简介:

刘超,途牛订单中心研发经理,曾就职于亚信联创、华为等公司。专注于电信行业呼叫中心和CRM系统研发,2013年加入途牛一直负责途牛订单中心建设和订单系统研发工作。

时间: 2024-08-02 04:49:39

途牛订单的服务化演进的相关文章

华为架构师8年经验谈:从单体架构到微服务的服务化演进之路

本次分享的大纲如下: 传统应用开发面临的挑战 服务化实践 服务化不是银弹 服务化架构的演进方向   一 .传统应用开发面临的挑战 挑战1-- 研发成本高   主要体现在如下几个方面:   代码重复率高   在实际项目分工时,开发都是各自负责几个功能,即便开发之间存在功能重叠,往往也会选择自己实现,而不是类库共享,主要原因如下:   从技术架构角度看,传统垂直架构的特点是本地API接口调用,不存在业务的拆分和互相调用,使用到什么功能就本地开发,非常方便,不需要过度依赖于其它功能模块: 从考核角度来

2016,我们一起追过的架构。中生代邀您一起构建2017!

01属性派 任何系统必有其自身的架构属性. An architecture-a system's attributes-and what an architect produces-a setof documents-definitely are not the same thing. An architectural description (AD) is a set of artifacts that documents anarchitecture in a way its stakeho

途牛网式竞争法则:巨头阴影下的生存术

中介交易 SEO诊断 淘宝客 云主机 技术大厅 钛媒体注:途牛旅行网今年5月赴美上市后,股价在两个月内从发行价的9美元涨到了18美元,市值翻番.纵观途牛的发展过程,你会发现它始终活在在线旅游三座大山的压力下,但却一直围绕休闲旅游这个核心,并把巨头不善于做的跟团游做到极致.这种极致,某种程度上帮助途牛在激烈竞争中存活壮大,也同样制约了其业务的横向创新使它成为一家相对较小的公司.<商业价值>记者刘泓君通过多方采访,梳理出途牛网在巨头阴影下的生存路径,总结为四个法则: 如今看来,滑动鼠标就可以在网上

女娲:阿里云分布式一致性协同服务架构详解

他的演讲内容主要分为四个方面:分布式协同服务背景.女娲服务架构以及技术演进.典型女娲服务应用场景分享.全球化架构下的女娲进化,下面是本次分享内容整理.点击查看回顾视频 分布式协同服务背景 分布式协同服务 在大规模云计算场景中,为保障数据分布式一致性,数量众多的计算节点往往依赖分布式协同服务来同步对共享资源的互斥访问,或者依赖分布式协同服务的消息通知功能来协调各自之间动作,使众多节点作为一个整体完成一项工作. 作为云计算分布式系统的核心,在设计分布式协同服务之初需要考虑互斥性.消息通知和扩展性三个

与微服务一脉相承,Serverless适用何种场景?会带来哪些冲击?

Serverless 架构用来描述那些显著或完全依赖于第三方应用或服务("在云端")的应用程序.这些程序经常是移动端 APP 或者是最近几年比较火热的单页 Web 应用.这些应用可以完全基于云的服务进行构建,比如 AWS 的 S3 和 DynamoDB 或者是阿里云的 OSS 和 TableStore. 不过,问题在于总是有一些独立的服务器逻辑代码需要运行,传统的部署方法是使用云服务器来进行进程的托管.好在 FaaS (Functions as a Service) 的出现改变了这种情

微服务架构如何实现网站服务垂直化拆分

3月10日,2017阿里云网站行业热点问题和解决方案线下研讨会在上海举行.阿里云产品专家银时为大家带来<微服务架构如何实现网站服务垂直化拆分>精彩演讲.主要从服务化的缘起.微服务架构的形成,以及在大规模的服务化过程中所面临的一些挑战以及解决方案,跟大家分享整个微服务.   以下内容根据现场分享和讲师PPT整理而成.   关于讲师:   倪超,阿里花名银时,阿里巴巴企业互联网架构平台产品专家.国家认证系统分析师.IT畅销书作者,著有<从Paxos到ZooKeeper>一书,2015年

Velocity China 2016:阿里巴巴Aliware EDAS微服务解决之道

原文:http://mp.weixin.qq.com/s/F6_E8RxwLrWIe5nslOfuSQ 如今的阿里巴巴平台上,业务生态百花齐放,新的创新业务不断涌现,而这都得益于阿里底层的微服务架构高可扩展.而谁能想到,早在10年以前,偌大的淘宝网站点都是运行在单一的部署包内,往往对其中一个模块的改动都会牵一发而动全身. 自从2007年以来,在这近10年时间里,阿里巴巴技术团队一直在微服务的道路上摸索前进着,其间伴随着互联网和移动互联网的盛行,海量的用户一次又一次的洗礼了各个机构的IT系统,而在

看来微服务就是一把双刃剑

本文讲的是看来微服务就是一把双刃剑[编者的话]我一直坚持认为微服务很好,但是如果我们为了使用微服务而使用的话将会伤其自身,从单块系统到微服务的是需要逐步演进的过程,如果前期没有调研,没有一个整体规划,后期在做的时候会发现,需要做的事情只会越来越多,尤其是对于快速发展的创业型公司来说. [3 天烧脑式 Docker 训练营 | 上海站]随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛.本次培训我们理论结合实践,从Docker应该场景.持续部署与交付.如何提升测试效率.存储.网络.

小程故事多 | 看来微服务就是一把双刃剑

微服务是银弹吗?自2014年"微服务"一词真是越来越火,不谈Microservices彷佛就out了,那么我们先来看微服务具有哪些特点: 组件以服务的形式提供 围绕业务功能进行组织 强化终端与弱化管道 产品而不是项目 独立布署 单一职责 去中心化 DevOps与组织架构 我要讲的故事开始了 A公司的技术架构体系目前还是以集群扩展体系为主,我们可以看下图所示,在这种体系结构中,可以看到应用都是单块结构,但是单块结构的应用具有扩展性,通过布署在多个Tomcat上实现应用的集群,所有的应用都