APP下载
报价宝  ›  科技  › 

淘宝服务端高并发分散式架构演进之路

报价宝 来源:baojiabao.com 发布时间:2019-11-13 17:53:00 11月12日更新
报价宝综合消息淘宝服务端高并发分散式架构演进之路

本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。

在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:

以淘宝作为例子。在网站最初时,应用数量与使用者数都较少,可以把Tomcat和数据库部署在同一台服务器上。浏览器往发起请求时,首先经过DNS服务器(域名系统)把域名转换为实际IP地址10.102.4.1,浏览器转而访问该IP对应的Tomcat。

Tomcat和数据库分别独占服务器资源,显著提高两者各自效能。

在Tomcat同服务器上或同JVM中增加本地快取,并在外部增加分散式快取,快取热门商品资讯或热门商品的html页面等。通过快取能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。其中涉及的技术包括:使用memcached作为本地快取,使用Redis作为分散式快取,还会涉及快取一致性、快取穿透/击穿、快取雪崩、热点资料集中失效等问题。

在多台服务器上分别部署Tomcat,使用反向代理软件(Nginx)把请求均匀分发到每个Tomcat中。此处假设Tomcat最多支援100个并发,Nginx最多支援50000个并发,那么理论上Nginx把请求分发到500个Tomcat上,就能抗住50000个并发。其中涉及的技术包括:Nginx、HAProxy,两者都是工作在网络第七层的反向代理软件,主要支援http协议,还会涉及session共享、档案上传下载的问题。

把数据库划分为读库和写库,读库可以有多个,通过同步机制把写库的资料同步到读库,对于需要查询最新写入资料场景,可通过在快取中多写一份,通过快取获得最新资料。其中涉及的技术包括:Mycat,它是数据库中介软件,可通过它来组织数据库的分离读写和分库分表,客户端通过它来访问下层数据库,还会涉及资料同步,资料一致性的问题。

把不同业务的资料储存到不同的数据库中,使业务之间的资源竞争降低,对于访问量大的业务,可以部署更多的服务器来支撑。这样同时导致跨业务的表无法直接做关联分析,需要通过其他途径来解决,但这不是本文讨论的重点,有兴趣的可以自行搜寻解决方案。

比如针对评论资料,可按照商品ID进行hash,路由到对应的表中储存;针对支付记录,可按照小时建立表,每个小时表继续拆分为小表,使用使用者ID或记录编号来路由资料。只要实时操作的表资料量足够小,请求能够足够均匀的分发到多台服务器上的小表,那数据库就能通过水平扩充套件的方式来提高效能。其中前面提到的Mycat也支援在大表拆分为小表情况下的访问控制。

这种做法显著的增加了数据库运维的难度,对DBA的要求较高。数据库设计到这种结构时,已经可以称为分散式数据库,但是这只是一个逻辑的数据库整体,数据库里不同的组成部分是由不同的元件单独来实现的,如分库分表的管理和请求分发,由Mycat实现,SQL的解析由单机的数据库实现,读写分离可能由闸道器和讯息伫列来实现,查询结果的汇总可能由数据库界面层来实现等等,这种架构其实是MPP(大规模并行处理)架构的一类实现。

目前开源和商用都已经有不少MPP数据库,开源中比较流行的有Greenplum、TiDB、Postgresql XC、HAWQ等,商用的如南大通用的GBase、睿帆科技的雪球DB、华为的LibrA等等,不同的MPP数据库的侧重点也不一样,如TiDB更侧重于分散式OLTP场景,Greenplum更侧重于分散式OLAP场景,这些MPP数据库基本都提供了类似Postgresql、Oracle、MySQL那样的SQL标准支援能力,能把一个查询解析为分散式的执行计划分发到每台机器上并行执行,最终由数据库本身汇总资料进行返回,也提供了诸如许可权管理、分库分表、事务、资料副本等能力,并且大多能够支援100个节点以上的丛集,大大降低了数据库运维的成本,并且使数据库也能够实现水平扩充套件。

由于瓶颈在Nginx,因此无法通过两层的Nginx来实现多个Nginx的负载均衡。图中的LVS和F5是工作在网络第四层的负载均衡解决方案,其中LVS是软件,执行在操作系统核心态,可对TCP请求或更高层级的网络协议进行转发,因此支援的协议更丰富,并且效能也远高于Nginx,可假设单机的LVS可支援几十万个并发的请求转发;F5是一种负载均衡硬件,与LVS提供的能力类似,效能比LVS更高,但价格昂贵。由于LVS是单机版的软件,若LVS所在服务器宕机则会导致整个后端系统都无法访问,因此需要有备用节点。可使用keepalived软件模拟出虚拟IP,然后把虚拟IP系结到多台LVS服务器上,浏览器访问虚拟IP时,会被路由器重定向到真实的LVS服务器,当主LVS服务器宕机时,keepalived软件会自动更新路由器中的路由表,把虚拟IP重定向到另外一台正常的LVS服务器,从而达到LVS服务器高可用的效果。

此处需要注意的是,上图中从Nginx层到Tomcat层这样画并不代表全部Nginx都转发请求到全部的Tomcat,在实际使用时,可能会是几个Nginx下面接一部分的Tomcat,这些Nginx之间通过keepalived实现高可用,其他的Nginx接另外的Tomcat,这样可接入的Tomcat数量就能成倍的增加。

在DNS服务器中可配置一个域名对应多个IP地址,每个IP地址对应到不同的机房里的虚拟IP。当用户访问时,DNS服务器会使用轮询策略或其他策略,来选择某个IP供使用者访问。此方式能实现机房间的负载均衡,至此,系统可做到机房级别的水平扩充套件,千万级到亿级的并发量都可通过增加机房来解决,系统入口处的请求并发量不再是问题。

当数据库中的资料多到一定规模时,数据库就不适用于复杂的查询了,往往只能满足普通查询的场景。对于统计报表场景,在资料量大时不一定能跑出结果,而且在跑复杂查询时会导致其他查询变慢,对于全文检索、可变资料结构等场景,数据库天生不适用。因此需要针对特定的场景,引入合适的解决方案。如对于海量档案储存,可通过分散式档案系统HDFS解决,对于key value型别的资料,可通过HBase和Redis等方案解决,对于全文检索场景,可通过搜索引擎如ElasticSearch解决,对于多维分析场景,可通过Kylin或Druid等方案解决。

当然,引入更多元件同时会提高系统的复杂度,不同的元件储存的资料需要同步,需要考虑一致性的问题,需要有更多的运维手段来管理这些元件等。

按照业务板块来划分应用程序码,使单个应用的职责更清晰,相互之间可以做到独立升级迭代。这时候应用之间可能会涉及到一些公共配置,可以通过分散式配置中心Zookeeper来解决。

如使用者管理、订单、支付、鉴权等功能在多个应用中都存在,那么可以把这些功能的程式码单独抽取出来形成一个单独的服务来管理,这样的服务就是所谓的微服务,应用和服务之间通过HTTP、TCP或RPC请求等多种方式来访问公共服务,每个单独的服务都可以由单独的团队来管理。此外,可以通过Dubbo、SpringCloud等框架实现服务治理、限流、熔断、降级等功能,提高服务的稳定性和可用性。

通过ESB统一进行访问协议转换,应用统一通过ESB来访问后端服务,服务与服务之间也通过ESB来相互呼叫,以此降低系统的耦合程度。这种单个应用拆分为多个应用,公共服务单独抽取出来来管理,并使用企业讯息总线来解除服务之间耦合问题的架构,就是所谓的SOA(面向服务)架构,这种架构与微服务架构容易混淆,因为表现形式十分相似。个人理解,微服务架构更多是指把系统里的公共服务抽取出来单独运维管理的思想,而SOA架构则是指一种拆分服务并使服务界面访问变得统一的架构思想,SOA架构中包含了微服务的思想。

目前最流行的容器化技术是Docker,最流行的容器管理服务是Kubernetes(K8S),应用/服务可以打包为Docker映象,通过K8S来动态分发和部署映象。Docker映象可理解为一个能执行你的应用/服务的最小的操作系统,里面放着应用/服务的执行程式码,执行环境根据实际的需要设定好。把整个“操作系统”打包为一个映象后,就可以分发到需要部署相关服务的机器上,直接启动Docker映象就可以把服务起起来,使服务的部署和运维变得简单。

在大促的之前,可以在现有的机器丛集上划分出服务器来启动Docker映象,增强服务的效能,大促过后就可以关闭映象,对机器上的其他服务不造成影响(在3.14节之前,服务执行在新增机器上需要修改系统配置来适配服务,这会导致机器上其他服务需要的执行环境被破坏)。

系统可部署到公有云上,利用公有云的海量机器资源,解决动态硬件资源的问题,在大促的时间段里,在云平台中临时申请更多的资源,结合Docker和K8S来快速部署服务,在大促结束后释放资源,真正做到按需付费,资源利用率大大提高,同时大大降低了运维成本。

所谓的云平台,就是把海量机器资源,通过统一的资源管理,抽象为一个资源整体,在之上可按需动态申请硬件资源(如CPU、内存、网络等),并且之上提供通用的操作系统,提供常用的技术元件(如Hadoop技术栈,MPP数据库等)供使用者使用,甚至提供开发好的应用,使用者不需要关系应用内部使用了什么技术,就能够解决需求(如音视讯转码服务、邮件服务、个人部落格等)。在云平台中会涉及如下几个概念:

原文连结:

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 报价宝 手机价格 汽车价格 耳机价格 降噪耳机价格