并发问题

转载 2018年04月16日 17:25:50

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

(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

Python并发管理

-
  • 1970年01月01日 08:00

并发问题详述(sql)

  • 2009年09月14日 12:37
  • 27KB
  • 下载

数据并发问题

  • 2008年02月04日 23:41
  • 765KB
  • 下载

处理并发问题

多个事务并发运行时的并发问题 第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖 脏读:一个事务读到另一个事务未提交的数据 虚读:一个事务读到另一个事务已提交的新插入的数据 不可重...
  • u014034934
  • u014034934
  • 2017-03-03 13:18:36
  • 1953

Redis的并发竞争问题如何解决

Redis的并发竞争问题,主要是发生在并发写竞争。 考虑到redis没有像db中的sql语句,update val = val + 10 where ...,无法使用这种方式进行对数据的更新。 ...
  • Happy_wu
  • Happy_wu
  • 2017-12-06 23:51:17
  • 2102

事务特性和并发带来的问题

1、什么是事务 事务是并发控制的单位,一系列操作组成的工作单元,该工作单元内的操作是不可分割的,也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做,所有操作必须成功完成,否则...
  • lyt_7cs1dn9
  • lyt_7cs1dn9
  • 2016-12-19 13:02:38
  • 2044

Java并发问题总结

1. Java内存模型 所有变量都存储在主内存中。这里的主内存只是虚拟机内存的一部分,可以和物理主内存类比。每条线程都有自己的工作内存。工作内存可以和处理器高速缓存类比。工作内存中保存了主内存中变量的...
  • zhufenghao
  • zhufenghao
  • 2017-04-14 00:05:44
  • 1093

大数据并发问题

在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节: 使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的...
  • u014421556
  • u014421556
  • 2016-03-23 16:42:10
  • 4971

并发引发的问题

并发危险解决多线程代码中的 11 个常见的问题并发现象无处不在。服务器端程序长久以来都必须负责处理基本并发编程模型,而随着多核处理器的日益普及,客户端程序也将需要执行一些任务。随着并发操作的不断增加,...
  • johe2003
  • johe2003
  • 2009-04-22 22:16:00
  • 3481

HashMap的并发问题

先上一段代码 public class CurrMap { /** 线程池 */ private static final Executor EXECUTOR = Executo...
  • ilaotu
  • ilaotu
  • 2014-01-15 00:57:45
  • 4776
收藏助手
不良信息举报
您举报文章:并发问题
举报原因:
原因补充:

(最多只允许输入30个字)