并发问题

主流公司的架构包含如下几层:

(1)客户端层:调用方是浏览器或者手机APP

(2)反向代理层:系统入口,反向代理

(3)站点应用层:实现核心应用逻辑,返回html或者json

(4)服务层:如果实现了服务化,就有这一层

(5)数据-缓存层:缓存加速访问存储

(6)数据-数据库层:数据库固化数据存储

对应的架构图如下:

高并发的架构该如何设计,一张图让你彻底明白,俗语讲的你肯定懂

粗略架构图

特此说明:实际中会比这个复杂很多,这里根本没有考虑高可用,想了解高可用的同学可以去看一下nginx+keepalived实现高可用。

反向代理层

本公司是使用nginx做的负载均衡,从图中可以看到dns解析得到接入层的ip,在这里我们可以配置多个ip,通过轮询的方式实现负载均衡,请请求均衡到各个nginx。这个方案会出现一些问题,就是DNS生效比较慢,而且他也无法感知到nginx是否还存活。理论上来,如果瓶颈出现在nginx层,我们就可以增加nginx来解决。

高并发的架构该如何设计,一张图让你彻底明白,俗语讲的你肯定懂

web-server层的介绍

高并发的架构该如何设计,一张图让你彻底明白,俗语讲的你肯定懂

web-server层是挂在nginx下面,使用nginx来均衡请求到下面的各个tomcat中。当然上面的架构也存在不足,京东目前的方案是每个nginx下面只能挂一个tomcat。防止发生雪崩,击垮整个应用。如果瓶颈出现在这里,很好解决,只需要加tomat,修改nginx配置,然后reload。这样就可以做到高并发。

服务层介绍

高并发的架构该如何设计,一张图让你彻底明白,俗语讲的你肯定懂

大型应用一般都已经服务化了,京东目前使用的是jsf(在dubbo基础之上进行修改而来),这样可以更好的水平扩展。在这里我们需要在配置中心里使用自动发现功能,目前jsf已经支持。web-server层与service层建立连接,进行调用!

数据层介绍

数据里达到一定级别之后,查询、更新等操作都会受到影响,此时数据库的瓶颈已经到来。怎么解决呢?目前主如的方案是分库分表,将数据异构到es(不知道es的自己去了解)系统中,方便数据查询。

分表又可以分为二种维度:1垂直维度2水平维度。

垂直维度

比如一张表有100个字段,我们可以将该表拆到二个张,每张表50个字段。这就是垂直拆分。

水平维度

比如一张表有100条记录,我们可以将该表拆成二张表,每张表放50条数据。这就是水平拆分。

因为一个数据库的文件还是放在一台服务器上,随着数据量的增长,这个也成为瓶颈。这时我们需要分库啦,在极致情况下可能会出现单库单表,一个数据库只放一张表。

分库分表带来哪些问题:

  1. 查询的问题,比如一个用户下了50个订单,分别在订单表1,表2,表3中,这时,怎么一次查询出来呢?

  2. 数据库的事务,现在有多个数据库了,事务如何保证?

以上这些问题,留给大家自己思考?我会在留言区给出答案

缓存层介绍

缓存系统是采用redis集群来做了,这里我不深入讲解了,想了解的可以看redis集群的教程。京东使用的是jimdb,其实跟redis是一样。

转自:http://www.360doc.com/content/17/1015/00/30466290_695002481.shtml

阅读更多

扫码向博主提问

zkkzpp258

非学,无以致疑;非问,无以广识
去开通我的Chat快问
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页