本文作者:九章学员Henry
首先说一个发生在我身上的惨痛案例吧:
我们公司,说起来算是个十八线小厂吧。有一次运营策划了个1元秒杀的活动。因为我们前期没有准确预估用户的访问量。导致活动开始一小时后,访问量太大直接给网页搞崩了。
就因为这件事,我进公司半年从没见过的大佬们全部出现了,想想这个画面也是有点壮观...…好在最后网页崩溃问题得到了解决,活动效果也不错,虚惊一场。
所以说,其实中小型公司都会在不同程度上出现高并发这件事。他的本质只是一个结果,跟你平时做低并发时使用的技术手段大差不差
当初我进公司的时候,也没啥高并发经验,但随着公司不断发展,体量不断扩大,让我学习到了很多高并发相关的知识以及有效提高高并发经验的项目,在这里分享给大家。
灵活应用基础知识很重要
这里的基础不光包括算法,还有数据库、多线程、QPS等等。
这些东西是个人都能学,但要根据应用场景去逐个使用,还是很考验个人能力的。也别执着于框架,真要是有什么突发事件,框架啥也不是。
我在学习的过程中,时常觉得自己的基础已经非常牢固了,可每次遇到新的场景,就会有新的问题出现,后来在一位阿里学长的推荐下,我去听了一场由北美顶尖IT企业的高级系统架构师讲授的《重塑系统架构体系》讲座。让我对系统设计有了更深的理解。
扫码报名,免费试听
印象最深的是讲座中的一个案例:
商家以4499的价格上架了某iphone,比官网价格便宜了1000元,库存总数10台,运营设置11/11 00:00活动生效,一人只能购买1台,商品售完为止。
根据《重塑系统架构体系》讲座中给出的分析思路。
第一步Scenario场景。需要确定设计哪些功能,承受多大的访问量?
这里要知道秒杀系统的常见概念QPS(Queries Per Second),即一秒内可以处理的请求数量。
假如一个服务的RT(Response time)是20ms,则QPS为50(这里计算的是单机单线程QPS,如果要计算集群的话,需要考虑集群数量和线程数量)。
  • QPS = 100,用你的笔记本做Web服务器足矣。
  • QPS = 1k,用一台好点的Web服务器也差不多了。
  • QPS = 1m,则需要建设一个1000台Web服务器的集群。
QPS和服务器/数据库之间的关系:
  • 一台服务器承受量约1k的QPS(考虑到逻辑处理时间以及数据库查询的瓶颈)。
  • 一台SQL Database承受量约1k的QPS(如果JOIN和INDEX query比较多的话,这个值会更小)。
  • 一台NoSQL Database(Casscandra)承受量约10k的QPS。
  • 一台NoSQL Database(Memcached)承受量约1M的QPS。
第二步,Service服务服务可以认为是逻辑处理的整合,对同类问题的逻辑处理放在一个服务中。
这里秒杀系统服务设计如下:
于是可以看到在秒杀活动中,数据库之间的关系是这样的:
然后,重点来了!我们先基于数据库Mysql来扣库存。
看到这里你一定会问,秒杀系统的并发问题怎么解决?
这里有两种办法,乐观锁和悲观锁
对于数据一致性要求很高的场景中,用悲观锁的比较多,所以这里只分享悲观锁。
流程如下:
通过前三个步骤的分析,其实基本上已经得到了一个可行性的解决方案。但这样的方案不见得是最优的,还有很多地方需要完善。这里可以用到分析法的最后一步:Scale 扩展
这部分主要是解决产品设计缺陷,以及系统的维护,比如有服务器挂了怎么办等问题。
除此之外还有非常多的的实战案例可以学习。这个讲座目前还处于免费试听状态,建议大家赶紧薅一波~
↓↓扫码免费试听
多练习高并发项目
一开始我作为一个基础很薄弱的菜鸡,在很多平台都进行过秒杀项目的练习。这里分享给大家三个我认为非常有实操价值的项目。
《电商秒杀系统》
这个项目课的授课老师是阿里的技术大佬,课上讲的内容也挺全的,包括项目基础架构搭建,数据府库分析,MyBatis 整合与逆向生成等,老师会手把手的额带你从零起步,完成一个电商秒杀系统。非常适合新人练手,还会涉及Redis、防爬虫和恶意刷请求、库存超卖问题等核心知识点。
现在可以免费试听,感兴趣的朋友可以去看看。
扫码报名,免费试听
 neural 
微服务架构中的神经组织,主要为分布式架构提供了集群容错的三大利刃:限流、降级和熔断。并同时提供了SPI、过滤器、JWT、重试机制、插件机制。此外还提供了很多小的黑科技(如:IP黑白名单、UUID加强版、Snowflake和大并发时间戳获取等)。
核心功能:
  • 限流:致力于解决外部流量的冲击压力。
  • 降级:致力于解决内部服务的故障事件。
  • 熔断:致力于解决内部服务的稳定性。
  • 重试:致力于提高外部服务的成功率。
https://github.com/yu120/neural
 youzan 
有赞做的PHP开发面向C10K+的高并发SOA服务 和RPC服务首选框架。
基于 PHP 协程的网络服务框架,提供最简单的方式开发面向 C10K+ 的高并发SOA服务和RPC服务。
每天为2,000+个服务提供300,000,000+次访问量支持,广泛应用于有赞各项业务。
理想的技术栈是ZanPHP + Go + 少量的C/C++。不过,对于致力于终身coding的码农来说:Java依然是很难跨过去的坎。
https://github.com/youzan
没有机会接触百万级的高并发项目真的没关系的。关键还是积累高并发经验,以及在目前的公司去不断的学习。把身边能接触到的项目尽量优化到最好。
这样在面试大厂的过程中,就算你没有非常亮眼的项目经验,也会保持十足的底气。让面试官发现你的过人之处。
希望我的分享对你有用,一起共同进步吧!
戳下方
阅读原文”免费试听课程
继续阅读
阅读原文