文档章节

高并发思路

caiyongji
 caiyongji
发布于 2017/05/30 11:26
字数 1108
阅读 2
收藏 0
点赞 0
评论 0

服务器性能、数据库性能、网络连接甚至编程语言都会影响并发数。但总结起来,高并发无非就是拆拆拆分分分

乐观锁

乐观锁是数据库优化的典范。即,通过对数据条目的“版本控制”,来约束数据,防止脏读写操作。在实际操作中并不独占资源。在设计思路上是通过引入“版本”概念来放弃资源约束。
举例:
数据库中设置CREATE TABLE tbl ( id varchar(32) , /** 乐观锁字段 **/ optimistic_lock numeric(12) )
java中使用spring @version 关键字,

@Version
@Column(name = "optimistic_lock", columnDefinition = "INTEGER")
private long optimisticLock;

读写分离

数据库中的读写分离知识数据库集群的一种典型。并不一定需要按读写分离数据库,也可以根据特定的业务逻辑来进行分开操作。
我们以读写分离举例:
通常设计两个数据库master和slave数据服务器,在spring中配置两个datasource

<!-- 定义数据源,使用自己实现的数据源 -->
<bean id="dataSource" class="cn.itcast.usermanage.spring.DynamicDataSource">
<!-- 设置多个数据源 -->
<property name="targetDataSources">
<map key-type="java.lang.String">
<!-- 这个key需要和程序中的key一致 -->
<entry key="master" value-ref="masterDataSource"/>
<entry key="slave" value-ref="slave01DataSource"/>
</map>
</property>
<!-- 设置默认的数据源,这里默认走写库 -->
<property name="defaultTargetDataSource" ref="masterDataSource"/>
</bean>

 

并在dao层调用时进行读写分别调用。
为保证master/slave服务器的数据一致性,两个服务器间会有同步。

分离resource存储

我们以图片分离存储为例,在web场景中,页面加载的图片是非常消耗资源的,通常我们会放在其他的服务器上来进行存储,针对图片资源进行优化加速。这就像是java编程理念中的“解耦”。
同理,js文件、css文件、zip文件等皆可通过这种方式进行分离,再配合CDN加速技术,实现访问速度和并发能力的提升。

CDN加速

CDN加速就是在靠近用户的物理位置上架设服务器,根据就近原则使用户访问物理上最近的服务器来节省网络传输时间。
通常这种CDN加速的服务器分散到全国设置世界各地,并适当采用的缓存、专线等技术。
为保证数据的一致性,服务器间进行同步。

动态转静态

我们把一次HTTP请求的时间分成几段:request--> calculate--> response,那么静态资源简化甚至省略了calculate步骤,实现请求-->响应的简单模型。
我们可以将“幂等”的请求进行静态化处理。我们举例来理解这件事:
比如用户想快速的查询自己近一个月的交易总额,按照传统模式我们需要服务器在用户查询后进行累加计算来统计用户这一个月的交易数据。那么我们可以在每天凌晨运行一次spring batch 来统计所有用户的交易总额信息,并存储在用户对应的表里,当用户查询时,直接获取。

缓存

缓存可以理解为动态转静态的一个实例。也可以理解为将硬盘上的数据存入内存方便读取。通常设计为key-value形式。
以常用的memcache举例:

MemCachedClient mc = new MemCachedClient();
String key = "cacheKey1";
Object value = SomeClass.getObject();
mc.set(key, value);

 

服务器镜像

与CDN加速的设计类似,根据不同地域、网络服务商等网络条件假设多个服务器的“镜像”来实现网络传输环节的优化。
以此我们可以引出“负载均衡”。

负载均衡

负载均衡的设计理念是根据资源请求消耗情况来自动调节平衡。
比如我们在多个端口配置启动tomcat:

<Connector port="11009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"><Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

<Connector port="12009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2"><Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

 

其他

  1. 分库、分表
  2. 合理的Synchronized
  3. 基本的SQL优化,比如尽量避免全表扫描

我个人理解的高并发就是,把传统的“单元操作”进行拆分,分的越细致越好。

© 著作权归作者所有

共有 人打赏支持
caiyongji
粉丝 5
博文 21
码字总数 24848
作品 0
大连
高级程序员
怎么防止多用户同一时间抢购同一商品,防止高并发同时下单同一商品,大牛们献出你们所积累的知识吧?请教

最近在做抢购系统,但头疼的是,在多用户高并发的情况下经常会库存出现问题。排查到,在同一时间内多用户同时下单导致查询和插入不同步了,而查询中跟插入又有时间差而在高并发的情况下导致库...

键盘浪人
2014/12/25
11.7K
10
求海量数据存储解决方案

问题: 1、10亿条记录以上。 2、高并发访问,一台服务器会出现瓶颈。 3、必须满足高并发下的高效查询速度。 求思路

方旭
2011/12/12
1K
21
《实战Java高并发程序设计》问答录,看这些问题解决你所有java并行难题

为大家解答关于 Java 的并行程序设计基础、思路、方法和实战 方面的问题。如: 现在的服务器 CPU 可能多达 10 个以上的内核,并发编程市场需求量激增,如何才能将多核 CPU 的性能发挥到极致呢...

吴小编
2016/01/22
308
0
海量分布式事务的处理策略

最近很好奇,在分布式事务的情况下,如何解决高并发的问题? 今天面试,一个人问我,如何解决高并发的分布式事务处理,我按照我之前干活的经验,认为用消息队列做写入缓冲,用二端提交和串联...

Brin想写程序
2015/04/17
7.7K
28
高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)

问题分析 问题一:要求日志最好入库;但是,直接入库mysql确实扛不住,批量入库没有问题,done。【批量入库和直接入库性能差异】 问题二:批量入库就需要有高并发的消息队列,决定采用redis...

nsns
05/18
0
0
面试题:如何设计一个高并发的系统

技术开放题 如何设计一个高并发的系统?例如同一时刻有几万并发请求。 现在一个网页响应速度明显变慢了,假如我把这个任务交给你,你怎么处理这个问题 ? 2. 解决思路 2.1 高并发系统 使用R...

初雪之音
07/01
0
0
高并发业务接口开发思路(实战)

高并发业务除了需要有支撑高并发的服务器架构,还需要根据业务需求和架构体系。 . 设计出合理的开发方案,这里根据一个实践过业务场景分析开发思路,罗列出高并发接口需要注意的点,以及设计...

SFLYQ
2017/06/13
0
0
OSC 第 101 期高手问答 —— Java 高并发程序设计

OSCHINA 本期高手问答(12月02日- 12月08日)我们请来了《实战Java高并发程序设计》的作者 @葛一鸣 为大家解答关于 Java 的并行程序设计基础、思路、方法和实战 方面的问题。如: 现在的服务...

叶秀兰
2015/12/01
12.1K
84
多线程环境下会员编号重复问题。

在高并发的环境中,多个线程同时读取表中的某字段,以其结果的自增数为下一个保存结果。 结果由于数据 “读取-处理-保存”发生在不同的时间片上,导致产生脏读数据。 问题原因: 多线程环境下...

玄影镜心
2016/02/24
103
0
Web系统大规模并发:电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

天下杰论
2016/01/14
226
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

与女儿谈商业模式 (5):糖果连锁店?

分类:与女儿谈商业模式 2007-08-02 15:27阅读(8394)评论(32)   与女儿谈商业模式(5):糖果连锁店?   陈志武 /文   谈过星巴克、沃尔玛、戴尔以及微软的故事后,给陈笛印象最深的莫...

祖冲之
2分钟前
0
0
Linux平台下RMAN异机恢复总结

潇湘隐者 Linux平台下RMAN异机恢复总结 2017-05-29 16:30 by 潇湘隐者, ... 阅读, ... 评论, 收藏, 编辑 下面总结、整理一下RMAN异机恢复这方面的知识点,这篇笔记在个人笔记里面躺了几年了,...

rootliu
9分钟前
0
0
Spring配置xml启动报错 Connot find 'beans'

1.我们先看一下spring的原始配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSc......

江湖鱼大虾
11分钟前
0
0
www.w3.org被qiang导致logback报错:Connect reset

web项目部署到tomcat后,web项目中的logback不能运行,报错信息如下: Reported exception: ch.qos.logback.core.joran.spi.JoranException: I/O error occurred while parsing xml file......

浮躁的码农
34分钟前
0
0
JDeveloper中文乱码解决

全局设置字体; 全局设置环境编码; 项目设置编译器环境编码。

wffger
今天
2
0
MySQL主从介绍 , 准备工作,配置主,配置从, 测试主从同步

MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的 MySQL主从是基于binlog的,主上须开启bin...

TaoXu
今天
2
0
线性代数学习总结

亭子happy
今天
1
0
Java8:Lambda表达式增强版Comparator和排序

1、概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式——特别是怎样使用它来编写Comparator和对集合(Collection)进行排序。 这篇文章是...

孟飞阳
今天
0
0
从架构到组件,深挖istio如何连接、管理和保护微服务2.0?

近几年我一直从事于微服务系统的设计以及实现方面的工作,属于微服务架构一线实践者。之前做过一些单体系统的微服务改造,在微服务拆分、治理等方面都有一定的经验。 本人比较特殊一点的经历...

xiaomin0322
今天
1
0
基于vue的h5文件切片上传(获取文件md5,实现秒传、进度条实现)

template <button @click="file"></button><label ref="upload" style="position: relative;"> <input type="file" @change="selectFile" style="position: abs......

hkaikai
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部