随笔分类 - 并发&性能
并发和性能方面的优化,及原理阐释
摘要:本文所说的session是单机版本的session, 事实上在当前的互联网实践中已经不太存在这种定义了。我们主要讨论的是其安全共享的实现,只从理论上来讨论,不必太过在意实用性问题。 1. session 的意义简说 大概就是一个会话的的定义,客户端有cookie记录,服务端session定义。用于确
阅读全文
摘要:上篇我们讲了Dubbo中有一个非常本质和重要的功能,那就是服务的自动注册与发现,而这个功能是通过注册中心来实现的。上篇中使用zookeeper实现了注册中心的功能,同时了提了dubbo中有其他许多的注册中心的实现。 今天我们就来看看另一个注册中心的实现吧: redis 。 1. dubbo在 Red
阅读全文
摘要:java中的所说的线程池,一般都是围绕着 ThreadPoolExecutor 来展开的。其他的实现基本都是基于它,或者模仿它的。所以只要理解 ThreadPoolExecutor, 就相当于完全理解了线程池的精髓。 其实要理解一个东西,一般地,我们最好是要抱着自己的疑问或者理解去的。否则,往往收获
阅读全文
摘要:在某些时候,我们可能想基于字符串做一些事情,比如:针对同一用户的并发同步操作,使用锁字符串的方式实现比较合理。因为只有在相同字符串的情况下,并发操作才是不被允许的。而如果我们不分青红皂白直接全部加锁,那么整体性能就下降得厉害了。 1. 为什么选择string做锁? 因为string的多样性,看起来s
阅读全文
摘要:面试过程中,各面试官一般都会教科书式的问你几个多线程的问题,但又不知从何问起。于是就来一句,你了解多线程吗?拜托,这个好伤自尊的! 相信老司机们对于java的多线程问题处理,稳如老狗了。你问我了解不?都懒得理你。 不过,既然是面对的是面试官,那你还得一一说来。 今天我们就从多个角度来领略下多线程技术
阅读全文
摘要:一般地,像kafka之类的消息中间件,作为一个可以保持历史消息的组件,其消费模型一般是主动拉取方式。这是为了给消费者足够的自由,回滚或者前进。 然而,也正是由于将消费消息的权力交给了消费者,所以,消费者往往需要承担更多的责任。比如:需要自行保存消费偏移量,以便后续可以知道从哪里继续。而当这一点处理不
阅读全文
摘要:假设场景: 1. 针对一个高并发的应用,你是否会选择打印访问日志? 2. 针对分布式的应用,你是否会选择将所有日志打印到日志中心? 解决方案: 1. 如果如果你选择为了性能,不打印日志,那无可厚非。但是你得考虑清楚,出问题的时候是否能够做到快速排查? 2. 你觉得日志分布在各台机器上很方便,那不用日
阅读全文
摘要:首先,咱们都有一共识,即可以使用缓存来提升系统的访问速度! 现如今,分布式缓存这么强大,所以,大部分时候,我们可能都不会去关注本地缓存了! 而在一起高并发的场景,如果我们一味使用nosql式的缓存,如 redis, 那么也是好的吧! 但是有个问题我们得考虑下: redis 这样的缓存是快,但是它总有
阅读全文
摘要:开发某个项目过程中,就需求,搭建了一套测试环境。很快完成! 后来代码中加入了许多新功能,会涉及到反复重启,然后就发现了启动特别慢。这给原本功能就不多的应用增添了许多的负担。 我决定改变这一切!找到启动缓慢的根源,加快启动速度! 思路展开: 1. 启动慢,先看日志,有没有什么异常? 2. 看下是不是g
阅读全文
摘要:zk用处如此之多,以至于每个地方都要你理解zk原理! 请按如下操作姿势打开: 1. 打开zk的git仓库地址: https://github.com/apache/zookeeper , 确认过眼神,它就是你要找有人! 2. 下载源码到本地,下载 ant 工具到本地,(如果还没下载的话: http:
阅读全文
摘要:问: 为什么300的并发能把支持最大连接数4000数据库压死? 买了一台数据库,最大连接数的参数是 4000,看起来很棒!但是 cpu 和内存并不咋好!是 2c4g的超低配制。 但是想着反正业务量也不大,不如先扛着,等业务量上来再进行升配! 没过多久,进行一次小量的营销活动。粗略计算想了下,大约3-
阅读全文
摘要:随着线上环境的复杂多变,以及业务需求动荡,我们有足够的理由需要一个配置中心来处理配置的变更问题! 但对于项目初期,往往只需要能够做到数据支持动态配置,就能够满足需求了。 本文给出一个配置组件的实现方案,希望对有这方面需求的同学有点参考! (本实例虽然只是从数据库取值,但是其实稍微做下扩展,就可以是一
阅读全文
摘要:由于某几个业务表数据量太大,数据由业务写,数据部门读。 写压力不大,读却很容易导致长时间等待问题(读由单独系统进行读),导致连接被占用,从而容易并发稍稍增长导致全库卡死! 于是,就拆库呗。 业务系统拆分就不要做了(微服务化),没那工夫。 直接原系统拆两个数据源出来,对某几个高压力表的写就单独用这个数
阅读全文
摘要:最近用阿里云新搞了个项目,上线了,一切看起来都很美好,很安全。 由于其中一台机器作用特殊,于是禁止了该机器所有出外网的权限,毕竟为了安全嘛,而且经过考量确实是不需要出外网的。 直到后来从阿里云监控上看时,才发现了异常。阿里云最近提示有了新的监控升级,功能更强大,我果断选择了升级,升级后发现果然比之前
阅读全文
摘要:IP防刷,也就是在短时间内有大量相同ip的请求,可能是恶意的,也可能是超出业务范围的。总之,我们需要杜绝短时间内大量请求的问题,怎么处理? 其实这个问题,真的是太常见和太简单了,但是真正来做的时候,可能就不一定很简单了哦。 我这里给一个解决方案,以供参考! 主要思路或者需要考虑的问题为: 1. 因为
阅读全文
摘要:都说hello world 很简单,应该能承受很大的请求压力,那么到底有多大?你知道吗?如果知道,那咱们就不继续了。如果不知道,我们来看一下! 1. 准备工作,快速建立一个基于springmvc的helloworld 1.1. 在pom.xml引入spring必须的包级日志组件 1.2. 添加一个
阅读全文
摘要:Executors是一个线程池的工厂类,提供各种有用的线程池的创建,使用得当,将会使我们并发编程变得简单!今天就来聊聊这个工厂类的艺术吧! Executors只是Executor框架的主要成员组件之一,为java的异步任务调度执行提供了重要的入口! 在说Executors之前,还需要说一下另一个Ex
阅读全文
摘要:懒加载是一种加载方式,加载单例对象一般有两种方式,一是在启动时就立即创建好,另一种则是在需要用到的时候再去加载即懒加载。懒加载一般会针对单例场景,且一般是针对在加载消耗较大费时,且不一定会用到的场景。 好了,相信啥意思大家都明白!那么具体如何实现呢?其实挺有意思的! 方案1. 直接用懒加载实例进行判
阅读全文
摘要:项目中常常使用mybatis配合spring进行数据库操作,但是我们知道,数据的操作是要求做到线程安全的,而且按照原来的jdbc的使用方式,每次操作完成之后都要将连接关闭,但是实际使用中我们并没有这么干。 更让人疑惑的点是,spring中默认使用单例形式来加载bean,而往往我们也不会改变这种默认,
阅读全文
摘要:synchronized 和 volatile,是最基础的两个锁! volatile是轻量级锁,它在多核处理器开发中保证了共享变量的可见性。即当一个线程修改一个共享变量时,其他线程能够读到这个修改的值。它比syncronized使用和成本更低。 要说volatile的实现原理,就要先看一下cpu基本
阅读全文