阿里巴巴的业务线整个技术栈主要分成四层
最下面是我们的阿里云计算和大数据分析平台,他主要提供了标准化的虚拟机和基础的计算资源。
往上一层就是阿里的中间件平台,可以看到,里面有非常多的组件,分布式服务框架、分布式数据库、分布式消息系统、应用容器、服务管理与服务治理、开发测试工具等。如果将一个系统比作人体,那么阿里的中间件平台就是这人体的血液,他链接了身体的各个组织,将养料输送到所有的组织中。
再向上一层,是我们的能力开放共享层,也是我们这个BU的名称-共享业务事业部的来源。在图中,就是我们的电商平台,他主要为前端提供一些可以共享的能力开放服务,如商品、用户、交易、评价等关键的业务接口都是由共享业务事业部提供给外部的应用使用的。金融平台目前在小微金融,而物流平台,目前在菜鸟物流。这些共享业务平台一起,为我们的上层业务提供了非常丰富的可复用接口,极大的降低了用户的使用成本和开发成本。还是用上面的人体的例子的话,共享层就像是人体的骨骼和肌肉,它们是一个机体强健的最重要的保证。
再往上,我们目前有非常多的业务出口,图中左上是我们的移动端出口,而右边则是我们的web端出口,在这里大家就能看到那些耳熟能详的名字了:比如天猫、淘宝、聚划算。这些丰富多样的业务的下层其实都依托了相同的共享服务平台,然而,他们会针对自己的业务需求与业务特点进行一些自己的业务创新。
当然,这些都只是阿里技术体系的一个部分,真实的系统要远远的比这个还要复杂。在体系中的每一个部分的我们,其实都在为了阿里的共同目标:让天下没有难做的生意而一起努力着。
举个例子
上面说的东西可能还是有点抽象,下面我就举一个实际的例子,来给大家展示一下阿里的技术体系是怎么运转的:
下面我以我们最常用的“查询商品详情”为例子,进行一下介绍,需要注意的是,这只是个示意,实际的实现很可能和我的介绍有一定出入,不过主要流程是没问题的:)
当你在浏览器上请求查询淘宝上的某件商品的时候,你会输入一个url ,这个链接中其实是带有了商品id的,而之前,你已经已经登陆过我们的网站了,那么你的一些用户信息就已经会存在于cookies里面了。
请求从浏览器上发出后,会先走到最上层的Content Delivery Network(CDN) 上面,CDN主要用于处理一些静态数据,他会自动的提前将静态图片和文字放在距离大家最近的机房,比如,如果大家在教育网内,那么教育网到主干网的出口带宽可能就比较小,如果我们每次请求都要传送大量的图片和文字信息,自然就会占用很多带宽,你也就会觉得慢了。而如果我们能将这些图片和文字提前的放在教育网内的某个集群上,那么大家请求这些代码就不再需要从教育网外下载,自然延迟就降低了,大家就会感觉到网站访问很快。
然而,CDN内的数据一般来说都会与主站有一定的延迟,当CDN内的缓存数据没有命中的情况下,流量就会通过广域网来到我们的主站机房内。同时,有一些动态的数据也是无法被CDN缓存的,例如大家登陆后的“你好,沈询”,沈询这两个字,就是从数据库内取出的,会随着每个不同的用户而变化,这类动态数据也会被路由到主站机房内,走到我们的Web应用层。
Web应用层就是我们前端的业务应用了,就像刚才说的,主要处理的是动态请求和一些cdn中没有命中的静态请求。我们这里假设CDN没有命中,用户直接提交了请求到我们的web应用层。Web层通过解析url发现用户需要查询商品详情。在他内部的流程实现是先要判断用户是否登陆,如果用户登录,那么就根据商品id查询商品的详情信息。
需要注意咯。这里,就与大家自己做的web项目有一些不同了。
我们首先先要去获取用户信息,看看用户是否登陆了。 这个方法类似:queryUserByUserID(long userID) 这个方法。然而,这个方法在Web应用侧只是一个方法签名,真正的方法实现则是通过High Speed FrameWork(HSF)代理到了用户中心去执行的。 HSF 诨名叫“好舒服”框架~目前已经在阿里云上,换了个新名字:EDAS。这就是我们的远程服务框架了,他是面向服务的软件架构的重要载体哦。
查询用户的方法到了用户中心后,他会先查询最左面的“内存缓存服务器” 查找用户信息,如果命中缓存,那么这个信息就直接再通过hsf返回到了Web应用层。这样应用层就知道,这个用户是否是一个登陆的用户啦。
我们假设用户登录验证完成,下面的流程会走到查询商品的方法上,这个方法类似:queryItemByItemID(long itemID)。同样的,他也会通过HSF,实现则是另外一个独立的商品中心团队的应用“商品中心”负责的。我们以这种方式,将大的业务应用进行了解耦,交托给了不同的团队进行代码编写,从而能够让系统更敏捷的响应用户的需要。
商品中心在了解到web应用层想调用自己的queryItemByItemID的方法后,也会先通过“内存缓存服务器”查询一下商品的缓存里面是否有对应的商品数据。如果发现没有商品数据,那么他会通过DRDS(TDDL)分布式数据库来查询下面的商品库,DRDS(TDDL)是阿里又一个非常重要的核心中间件,能够帮助业务应用扩展自己的应用系统,实现了数据库的高可用和可水平扩展能力。在内部应用非常广泛,目前也在阿里云上提供服务。
在DRDS上查到商品的详情数据后,会将这个数据更新到内存缓存中,这样下次再有其他人取这个数据,就可以在缓存中取出了。
数据在更新了缓存以后,会拼装为一个数据对象,通过HSF(EDAS)将数据返回到WEB应用层。WEB应用层在获得了商品信息后,就可以生成前端的前端的展现页面了。并且,我们还需要在展现页面去获得图片信息,这个信息在数据对象里面是一个url地址,我们根据url地址从左下的小文件存储服务OSS里面,获得真实的图片信息。
将这些信息全部拼装在一起,就可以生成这个页面并返回给用户了。
这就是阿里主站的核心流程的做法。
共享业务的介绍
从上面可以看到,上面的图里面所有橙色的部分都是阿里的中间件范畴,而共享业务的业务范围则涵盖的更多,商品、用户、交易、评价、购物车、类目属性 这些应用其实是被阿里内类似天猫和淘宝这样的应用所“共享”的业务,这类业务一般来说都会放在共享业务体系内。
除了共享的业务系统外,阿里的中间件平台目前也是在共享业务体系内的一员,因为他们也是被应用所共享的。
在去年的双11的8万比交易每秒中,中间件和共享业务平台本身都经受了巨大的考验,我们的技术平台经历过所有的双11的考验,而基本上没有出现过重大的问题。我想,这本身就已经很说明问题咯。
而在目前,我们希望能够更进一步,正在挑战全自动应对双11的突发流量的挑战,很带感有木有~
同时,我们的软件已经来到了阿里云上,我们希望企业级分布式应用服务(EDAS)、分布式消息服务(ONS)以及分布式数据库服务(DRDS)能够帮助中国的互联网企业在技术上少走弯路。
那么 想不想试试?
阿里中间件性能挑战赛
报名地址
作者介绍:
视频地址
-------------------------
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。