高并发解决之道(零)
今天,小凡给大家带来"高并发解决之道"系列之一,蛤蛤蛤,小伙伴们先来点个赞,赞,赞!
嗯,首先一提到高并发,很多小伙伴在实际的工作中可能涉及的不是很多,以至于面试高逼格的互联网大厂,在与面试官对撸的过程中被问到高并发相关的梗,往往一脸懵逼,被面试官虐的体无完肤,遍体鳞伤....
你幼小脆弱的内心,激起了你的疯狂扫盲欲望,然后开始选购市面上的各种高逼格书籍《并发编程》、《高并发》、《分布式服务》...嗯,别以为你买了这些高逼格的书籍就可以变身成为面试狂魔...你咋不上天呢...
于是乎,你又接到一家高逼格大厂的面试邀请,好吧,你果断扫了一辆小黄车,怀着‘’每小时40迈‘’的理想,你胸有成竹,胸有沟壑,'胸'心壮志,胸.... 结果在和面试官对怼的时候,无奈,你又一次的跪了...
是不是感觉脉动不回来了.. 为什么,为什么,各种负面情绪,各种不开森...
咳咳,小黑板,划重点!
小凡觉得,究其根本原因是小伙伴们没有对互联网大厂的实际业务场景、高并发的思维还没有养成,虽然对一些基础理论了解的很清晰,但是一旦面对实际问题,加上程序猿面试都会微微有些小紧张,导致面试的败北。
接下来,我们进入正题,正题,正题!
STEP ONE :
首先我们要学习的是高并发的基础知识,比如Synchronized关键字、Volatile关键字、Cas原子性、Atomic类、并行集合类、J.U.C工具类、线程池、AQS锁、JVM调优,性能优化以及相对应的各种基础点,不仅仅要学会基本使用,
要对底层源码进行深度的学习与分析,还有能够在实际的场景中去真正的实践。嗯,这只我们走在高并发路上的起点而已,所以往往小伙伴在自己学习、以及阅读相关书籍的时候,也只是停留在了起点上。
有了一个好的开始,也就注定会有一个愉快的过程,虽然可能这个过程我们需要付出的很多,也不见得能够得到相等的收获,但是起码,我们有了一个正确的方向,只要朝着这个方向去前行,必然,我们会取得革命的胜利!
STEP TWO:
第二个梗,我们的并发编程、代码级别已经不能再使得我们的应用服务有一个更高性能、高稳定性、高吞吐率的提高了,那么接下来,我们要学习使用一些高级组件,比如Google大大的GUAVA包,里面有很多高逼格的工具类,提供了更易用并发集合类、限流组件、缓存组件、异步回调组件等等. 嗯,因为应用服务入口流量巨大,往往都是读请求偏多,我们又要GET新技能,Redis缓存,各种Redis集群模式、Redis在互联网大厂的实际应用,如何解决缓存雪崩、缓存击穿、对于大规模的Redis集群、大数据量的Redis集群又该如何运维与设计,比如大Key、热点Key的问题,在高并发场景下,Redis是选择分布式锁?还是做去重策略?这都是我们需要学习和根据实际场景去考量的。哦,如果追求性能,缓存,缓存... 缓存也已经不能够了...那么要进行内存级别的存储,利用JVM的堆内存、堆外内存来进一步提升性能。当然,小凡在这里只是例举了简单的高并发承载组件,就是缓存...当然,关注小凡,小伙伴们还会GET到其他技能...
STEP THREE:
接下来,高并发下的微服务、分布式架构,服务之间如何进行相互调用,在调用超时、失败、异常等场景下,我们服务的上下游又该如何去处理和补偿?嗯,这是个难题, 业界比较主流的解决手段是使用Spring AOP 切面的方式,去做一层限流和降级的处理器,比如阿里就是这么玩的,当然 我们有了一个新的利器,就是Hystrix,此Hystrix 和 彼 Hystrix 不同, 在这里我们要和大家聊聊Netflix Hystrix(他),而非Spring Cloud Hystrix(她),因为她是基于HTTP的,我们微服务调用如果追求高性能,低延迟的话,大家还是要选择开源的RPC架构,比如Dubbo、Thrift、ZeroC等等。。那么我们就可以使用Netflix Hystrix, 去对我们的服务去做 超时的熔断策略、并发下的线程池个数限制 以及 每秒并发个数的信号量限制等等。在多次重试"被调用服务方“”不可用的情况下,要进行服务的降级以及兜底策略。当然如果多次调用该下游服务,那么首先一定要保证下游服务是只读服务,或者是下游服务支持幂等。不然重复调用多次执行可能会对持久化存储有影响哦,谨记谨记!
在大规模服务进行上线发布的时候,也会面临种种问题,比如开始设置的参数阈值与实际的参数阈值不符,预期设置max=1000足够满足业务, 但是....可但是就是在高峰期这个阈值达到上线,那么我们要对这些参数进行即时的、动态的热更改,好吧,一个服务可能会有几十个参数需要调整,多个服务可能就成百上千个参数需要做到动态调整,而且还要第一时间去进行设置,这就尴尬了,所以我们需要一套动态参数化的服务配置管理组件,嗯嗯,这个时候是不是 zookeeper 就起到作用啦, zookeeper的watcher机制可以完美解决此类问题,原因如下,首先zookeeper是读高写低的分布式协调框架,我们不能用zookeeper去做高并发相关的东西,但是对于配置参数而已它是完全可以胜任的。另外一点zookeeper的统一发布机制,可以直接对我们微服务多节点的参数进行统一变更。
STEP最后,springCloud 在中小型公司使用也是比较广泛的,他是一套完善的肯德基"全家桶"快餐,类似的熔断降级机制可以采用Spring Cloud Hystrix,还有一些dashboard监控和集群监控turbine组件,包括统一配置服务Spring Cloud Config 配合 Spring Cloud Bus 也可以实现上面zookeeper的动态参数化的服务配置管理组件,嗯嗯,小凡推出的公开课以后也会为大家带来全面完善的Spring Boot & Spring Cloud 实战应用,关注我哦~
STEP FOUR:
嗯,对于并发编程、高并发组件、微服务治理我们有了一个完善的体系,那么接下来我们看看前端,此前端非彼前端哦,小凡所说的前端是指流量的入口端,对于CDN寻址啊 , LVS / APACHE/ NGINX / HAPROXY / KEEPALIVED 这些东东,在互联网大厂虽然不要求全面深入精通,但是基本的思想还是要有的,当然小凡也会为大家细细道来~前端组件 如何承载大流量? 采用分流策略,如何保障可用性,采用虚拟VIP动态切换服务等等等等,这些也都是居家旅行面试必备啦! 嗯,有的小伙伴说SESSION呢。这种负载均衡下的SESSION如何管理?当然肯定是有解决方案的啦, 比如CAS单点登录、APACHE SESSION组件,但是这些并不是重点,重点是在微服务层面上,我们要做的是统一用户中心,利用token的机制去做多点、微服务登录和管理。那么需要自己去实现类似SESSION的机制,后面小凡也会拼劲全力献上~
STEP FIVE:
我们在高并发广度层面上有了一个提升,无论从编码、微服务、到高级组件以及前端组件,接下来,似不似要提升下小伙伴的内力啦,没错,小凡也是这么想哒,如何提升内力?还是要从基础抓起,从娃娃抓起,也就是我们要给大家带来的无锁并行框架,啥是无锁并行框架?无锁,就意味着不使用JDK锁,消除锁就意味着消除等待、消除竞争,嗯,高大上,点赞~赞~赞!并行,就意味着多线程,并发处理。没错,小凡就是要给大家带来无锁并下框架的底层原理和深度代码分析,让小伙伴完完全全的读懂底层代码,学会我们在STEP ONE 中的各种技术点的实际应用,这就好像我们学了武功,不和别人去比划比划怎么能够,锦衣夜行,小凡做不到,小伙伴们也做不到。 小凡就是要大家学会如何去阅读底层代码,小伙伴们可能都知道要看底层代码,因为只有看底层代码才能进步的更快,显得更高大上,但是往往小伙伴们不知道方式和方法,只能苦苦的徘徊在底层代码的大门口...这就尴尬了,不过幸好,小凡来拯救各位亲~
SETP最后,我们底层代码也看了,架构也懂了,是不是感觉缺点什么?是不是觉得自己不上手去制造个“轮子“就会有点手痒,蛤蛤蛤,小凡懂你,接下来小凡会给大家全面的模拟无锁并行框架,让小伙伴们真正的写出自己第一个底层并发组件!叫什么来着,嗯,容我想想,JDK里面有个 ArrayBlockingQueue,那么我们就来搞个 ArrayUnBlockingQueue,宝典练成, 下半句忽略....
STEP SIX:
既然是 Six,那我们是不是逼格就要SIX SIX SIX, 没错,就是这么SIX.
还有这种操作?小凡:有,必须有,我们前端已经承载了高并发流量,那么从高并发请求的处理与分布式数据最终需要落地,包括如何进行读写分离、统计分析的角度来看,我们还需要最后一步,也就是,你扛下了这么高的流量,承接到你的服务以后,以后呢?小凡为大家细细道来,小凡要从整个数据层面。给大家解析高并发,比如前端分流限流之后,做了负载均衡,做了缓存,但是考虑到一个整体,嗯高并发是一个整体的解决方案,而不是简简单单的负载缓存就可以搞定的。
接下来面临的问题,我们数据如何落地,如何进行分库分表策略、异构数据库策略、缓冲表策略。如何去做海量的数据存储?我们如何进行读写分离操作,缓存与数据库如何进行同步? 比如Mysql主从,ElasticSearch进行读操作?
我们的微服务如何进行解耦操作、异步化处理操作,如何做到大流量的削峰?消息中间件必不可少!处理一些分布式定时任务如何破? 那么elastic-JOB / XXL-JOB等好用的分布式任务框架也必不可少!
对于即时性的数据处理,可以选择Flink、Jstorm、SparkStreaming等等流式处理框架,最终可以与Hadoop、Hive、Hbase等大数据级别的数据落地、数据仓库、数据库进行一个闭环的整合~
写到最后:高并发解决之道,第零篇,仅仅是一个起航,一个开始,嗯 ,怎么说: 梦,开始的地方!小伙伴们,关注《高并发解决之道》之第一、二、三、四、五、六、N篇,统统都是干货,技术解决方案!源码深度阅读!互联网大厂实际场景分析!一个都不能少
卜凡学院,成就卜凡
qq群:524423112
浙公网安备 33010602011771号