- 秒杀系统设计的 5 个要点:前端三板斧+后端两条路 06-04
- 使用shedlock将spring schedule 06-04
- 浅析Linux服务器网络开发模型 06-04
- MySQL DBA常见面试题(一) 06-04
- 用PHP保存远程视频到本机电脑的小插件 06-05
- 如何教你的孩子编程 06-04
- Redis 5.0 RC1释出,新增串流资料型态为最 06-04
- 聊聊nginx与tomcat的5xx 06-03
- 使用基础mybatis代替原始jdbc 06-03
- 2018年6月全球数据库排名,Oracle强势反弹! 06-04
秒杀系统设计的 5 个要点:前端三板斧+后端两条路
发布者: PHPYuan | 发布时间:2018-06-04高并发,cache,锁机制基于缓存架构redis,Memcached的先进先出队列。稍微大一点的秒杀,肯定是分布式的集群的,并发来自于多个节点的JVM,synchronized所有在JVM上加锁是不行了数据库压力秒杀超卖问题如何防止用户来刷, 黑名单?IP限制?利用memcached的带原子性特性的操作做并发控制
秒杀简单设计方案
比如有10件商品要秒杀,可以放到缓存中,读写时不要加锁。 当并发量大的时候,可能有25个人秒杀成功,这样后面的就可以直接抛秒杀结束的静态页面。进去的25个人中有15个人是不可能获得商品的。所以可以根据进入的先后顺序只能前10个人购买成功。后面15个人就抛商品已秒杀完。
假设我们的秒杀场景
比如某商品10件物品待秒. 假设有100台web服务器(假设web服务器是Nginx + Tomcat),n台app服务器,n个数据库
第一步 如果Java层做过滤, 可以在每台web服务器的业务处理模块里做个计数器AtomicInteger(10)=待秒商品总数,decreaseAndGet()>=0的继续做后续处理, <0的直接返回秒杀结束页面,这样经过第一步的处理只剩下100台*10个=1000个请求。
第二步, memcached 里以商品id作为key的value放个10, 每个web
使用shedlock将spring schedule上锁
发布者: PHPYuan | 发布时间:2018-06-04序
本文讲述如何使用shedlock给spring schedule上锁,保证集群内部调度任务不会重复执行,避免资源浪费。
maven
<dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-spring</artifactId><version>0.16.1</version></dependency><dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-provider-jdbc-template</artifactId><version>0.16.1</version></dependency>shedlock提供了mongo、redis、zookeeper、jdbc等的锁实现,这里使用jdbc。
shedlock配置
@Configuration@EnableSchedulingpublic class ShedlockConfig {浅析Linux服务器网络开发模型
发布者: PHPYuan | 发布时间:2018-06-04为什么Nginx的性能要比Apache高得多?
这主要是因为Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(FreeBSD)网络I/O模型,而Apache则使用的是传统的select模型。曾在一篇博客上看到有这么个实例:
假设你在大学中读书,要等待一个朋友来访,而这个朋友只知道你在A号楼,但是不知道你具体住在哪里,于是你们约好了在A号楼门口见面.如果你使用的阻塞IO 模型来处理这个问题,那么你就只能一直守候在A号楼门口等待朋友的到来,在这段时间里你不能做别的事情,不难知道,这种方式的效率是低下的.现在时代变化了,开始使用多路复用IO模型来处理这个问题.你告诉你的朋友来了A号楼找楼管大妈,让她告诉你该怎么走.这里的楼管大妈扮演的就是多路复用IO的角色。
解释select和epoll模型的工作方式:
select版大妈做的是如下的事情:比如同学甲的朋友来了,select版大妈比较笨,她带着朋友挨个房间进行查询谁是同学甲,你等的朋友来了。如果每到来一个朋友楼管大妈都要全楼的查询同学,那么处理的效率必然就低下了,过不久楼底就有不少的人了。
epoll版大妈就比较先进了,她记下了同学甲的信息,比如说他的房间号,那么等同学甲的朋友到来时,只需要告诉该朋友同学甲在哪个房间即可,不用自己亲自带着人满大楼的找
MySQL DBA常见面试题(一)
发布者: PHPYuan | 发布时间:2018-06-041、MySQL主从复制的原理。
2、Seconds_Behind_Master的原理。
3、主从延迟的原因有哪些?
4、MySQL常见存储引擎及各自特点。
5、innodb_flush_log_at_trx_commit参数0、1和2分别代表什么?
6、Mysql中varchar和char的区别
7、varchar(50)中的50代表的含义、int(20)中20的含义。
8、MySQL binlog的几种日志录入格式的涵义、适用场景和在复制中的优劣。
9、重做日志和二进制日志的区别(至少三点)
10、Explain执行计划中要关注哪些要素?
用PHP保存远程视频到本机电脑的小插件
发布者: PHPYuan | 发布时间:2018-06-05有时候,我们看到一些视频,为了保存在自己的电脑上,我们很难直接下载到视频,都要借助一些工具,今天就用PHP来写了一个这样的小插件,主要是我要看的这个网站它的广告太多了,每个视频,每次打开先是55秒广告,然后再是15秒广告,所以,后来就用这个小工具下载到电脑上看,免除了等待时间。
如何教你的孩子编程
发布者: PHPYuan | 发布时间:2018-06-04如何教你的孩子编程?无论您的孩子的将来职业道路如何,在这个技术驱动的世界,学习编程是他们需要保持领先的关键技能。编程教您的孩子分析问题,解决问题,提升创造力和沟通的技巧。除了孩子们学习的技能之外,编程可以非常有趣,并且可以让小孩子集中注意力。
大多数成功的天才都在非常年轻的时候就开始磨练自己的技能。当你的孩子在年轻时开始学习编程时,很难想象当他们年龄大些的时候他们会开发出令人惊讶的应用程序和工具。
在教你的孩子编程时,你必须尽可能地让它变得有趣和令人兴奋,因为在7-10岁的时候,他们有点太年轻,无法理解“if - then(如果 - 当时)”的意思。如今优秀的应用程序和游戏可用来吸引他们的好奇心,并通过探索和游戏向他们传授基本知识。换句话说,教孩子们的最好方式就是通过玩耍。
大多数学校已经开始考虑将编程课程纳入他们的课程。然而,作为一个家长,你不能把一切都交给老师,你必须尽自己的本分。
以下是给父母教育孩子编程的技巧,应用和方法:
聊聊nginx与tomcat的5xx
发布者: PHPYuan | 发布时间:2018-06-03序
本文主要讲述一下nginx与tomcat的502、504、503错误及其常见的产生原因。
502
定义
502 Bad Gateway : 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
常见原因
后端服务挂了的情况,直接502后端服务在重启实例
将后端服务关掉,然后向nginx发送请求后端接口,日志如下:
access.log127.0.0.1 - - [22/Dec/2017:20:44:38 +0800] "GET /timeout/long-write HTTP/1.1" 502 537 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"error.log2017/12/22 20:45:12 [error] 1481#0: *3 kevent() reported that connect() failed (61: Connection refused) while connecting to upstream, client: 127.0.0使用基础mybatis代替原始jdbc
发布者: PHPYuan | 发布时间:2018-06-03mybatis依赖包
在上一篇其实已经说过,使用mybatis并不是就不用jdbc了,实际上不论使用哪个持久层框架,底层都还是要经过jdbc。使用java和数据库打交道(起码关系型数据库),jdbc是必不可少的,区别只在与需不需要自己手动实现。
因此,在我以mysql为数据库做例子时,即便是使用mybatis,依然需要依赖mysql的java驱动包。除此之外,就是还需要mybatis相应的jar包,那么使用maven的依赖配置就是如下这样:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version></dependency><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version></dependency>mybatis数据源配置mybatis.xml
2018年6月全球数据库排名,Oracle强势反弹!
发布者: PHPYuan | 发布时间:2018-06-04DB-Engines发布了2018年6月份的数据库排名,排名前三不用想,还是Oracle、MySQL和微软的SQL Server。
