(转) 学习淘淘商城第一课

http://blog.csdn.net/u012453843/article/details/62238059mysql

  当今中国,互联网技术迅速崛起,国家也在一直倡导互联网+的概念,因此在能够预见的将来,互联网工程师确定会愈来愈吃香,工资水平也愈来愈高。想在互联网行业能有一席之地,就要掌握相关技术。nginx

        首先,咱们一块儿来了解一下电商行业技术特色:redis

1.技术新sql

2.技术范围广数据库

3.分布式tomcat

4.高并发、集群、负载均衡、高并发安全

5.海量数据服务器

6.业务复杂网络

7.系统安全session

        正是因为以上特色才让咱们的互联网工程师这么吃香。

        咱们要学习的淘淘网上商城是一个综合性的B2C平台,相似京东商城、天猫商城。会员能够在商城浏览商品、下订单,以及参加各类活动。管理员、运营能够在平台后台管理系统中管理商品、订单、会员等。客服能够在后台管理系统中处理用户的询问及投诉。

         提到电商,咱们就一块儿了解下,当前的电商模式有哪些:

B2B: 商家到商家。表明公司有阿里巴巴、慧聪网、铭万网。

B2C: 商家到客户。表明公司是京东。

C2C: 用户到用户。表明公司是淘宝。

B2B2C:商家到商家到用户。表明公司是天猫。

O2O: 线上到线下。表明公司有百度外卖、美团、饿了么。

           下面说下B2C电商系统架构,B2C电商系统功能列表以下图所示。

         传统项目的架构图以下所示,这种架构在并发量小的状况下是没有什么问题的,可是当并发量大的时候,这种架构瞬间就会崩溃。

         先来讲下当并发达到1000时的场景,咱们知道,对于一个tomcat来说,理论上能处理500的并发量,但实际它能应付的并发量有个三四百就不错了,那么当有1000人同时访问系统时,怎么解决问题呢?答案是加tomcat数量(搭建tomcat集群)并使用nginx反向代理来作负载均衡处理,以下图所示,一个tomcat处理400并发,3个tomcat即可以处理1000的并发。须要注意的是sessioin共享的问题,原理是tomcat之间每隔一段时间便会广播本身的session信息,别的tomcat看到本身有些信息跟人家不一致就向人家同步,同理该tomcat也会跟别的tomcat进行同步数据,从而达到数据一致的目的。

         那么当并发量达到10000时怎么办呢?理论上说,能够部署25个tomcat来解决并发问题,可是实际上这时tomcat的集群处理并发的能力便很低了,缘由是什么呢?上面咱们说了,不一样的tomcat之间要保持数据同步,配置了session复制,会定时广播session,并且每一个tomcat都既是广播者又是接收者,当tomcat较多时,网络带宽都被用来进行广播了,留给集群来处理并发的带宽就不多了,效率很低下,由此能够看到,咱们不能经过增长tomcat数量来解决高并发的问题。

       上面既然说了经过增长tomcat数量来解决高并发不可行,那么应该怎么解决呢?要解决这个问题,须要按照功能点把系统拆分,拆分红独立的功能。单独为某一个节点添加服务器。须要系统之间配合才能完成整个业务逻辑,这就叫作分布式。其中很核心的一点就是,这种架构把全部的session都放到单点登陆系统中了,这样就解决了单纯增长tomcat数量而引发的session广播风暴的问题,咱们把一个完整的系统拆分红多个模块这样作的缘由是,高并发处理可能仅仅涉及一小块,好比下图的前台系统,其它模块的并发量就小不少了,复制整个tomcat的作法显然浪费了不少资源,咱们把项目模块化,这样咱们即可以集中处理高并发的模块(采用集群来处理,因为这时已经没有广播风暴的问题了,所以理论上讲,能够处理很是高的并发量),那些并发量低的模块可能一个tomcat即可以搞定,哪一个模块并发量高了即可以配置集群来解决。项目的运行须要各个模块协调合做。

         概念:

         分布式架构:多个子系统相互协做才能完成业务流程。系统之间须要通讯。

         集群: 同一个工程部署到多台服务器上。

         分布式架构的优势:

1.把模块拆分,使用接口通讯,下降模块之间的耦合度。

2.把项目拆分红若干个子项目,不一样的团队负责不一样的子项目。

3.增长功能时只须要再增长一个子项目,调用其它系统的接口就能够。

4.能够灵活的进行分布式部署。

        有优势就有缺点,缺点以下:

1.系统之间交互须要使用远程通讯,接口开发增长工做量。

2.各个模块有一些通用的业务逻辑没法共用。

        为了解决上面分布式架构的缺点,咱们引入了soa架构,SOA:Service Oriented Architecture面向服务的架构。也就是把工程拆分红服务层、表现层两个工程。服务层中包含业务逻辑,只须要对外提供服务便可。表现层只须要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。SOA架构以下图所示,咱们把接口和业务逻辑作成一个个的服务。好比订单系统须要查询商品服务,前台系统也须要查询商品服务,因为咱们把商品服务独立出来了,作到了代码复用,它们调用便可。表现层只是用来展现数据而已。

        咱们淘淘商城的技术架构以下图所示,能够看到表现层与服务层之间加了一个服务中间件Dubbo,这样作的目的是加快表现层与服务层之间的交互速度,服务层与数据库之间加redis,能够大大提升重复性查询的效率,持久层是一个MySQL集群,由MyCat数据库中间件来管理,MyCat至关于这么多mysql数据库的一个抽象,咱们操做数据库直接面向的将是MyCat而不是具体的某个mysql,是由MyCat来替咱们完成相关操做的。Solr服务是专门用来处理查询的,主要是经过创建索引库来实现的。消息队列则是专门处理各个模块之间的消息的。