六星教育手把手教你,如何创建一个完美高并发系统?13年架构师亲历

随着社会发展,互联网已经渗透到生活中的方方面面。因此,很多APP、网站和系统承载的都是高并发的请求,甚至可以达到每秒并发量几千。如此,会不会高并发已经成为企业在选拨人才时的标准。今天,就让六星教育带你走进高并发世界,掌握高并发技能。
六星教育手把手教你,如何创建一个完美高并发系统?13年架构师亲历

想要设计一个高并发系统,你就必须知道高并发为什么会存在?它的存在解决了什么问题?

当技能不是很好,业务发展太快,系统就会无法承受用户压力,用户体验感降低,这时就需要设计一个高并发系统。想要实现高并发,需要从以下几个方面去解决:

1.把一个系统拆分成多个子系统,用dubbo来做,然后每个系统会连成一个数据库。本来是一个数据库,现在多个数据库,也可以实现高并发。

2.在高并发的场景下,最好在数据库和缓存里进行备份,这样在读取的时候就会大量走缓存,用缓存扛高并发。

3.在工作中,很容易出现高并发写的场景,如果一个业务操作员频繁的进入数据库,增删改增删,那高并发一定会导致系统崩溃。这个时候可以使用MQ,大量写请求灌入MQ里,控制在mysql承载范围之内。

4.分库分表可能到最后数据库层面还是会出现抗高并发的要求,这时最好把一个数据库拆分为多个库,用多个库扛更高的并发。

5.大部分数据库都是读多写少,因此没有必要都集中在一个库上。可以做主从架构,主库写入,从库读取。在读流量太多的时候,可以加更多的库。

六星教育手把手教你,如何创建一个完美高并发系统?13年架构师亲历

高并发到底难不难?不难。当你明白了一万并发的原理,然后扩展到百万、千万、亿万级很easy。

我们可以从以下几个方面进行了解,

垂直分层:DNS层、跨机房部署、LVS+Nginx负载均衡,vanish+共享存储实现动静分离,Nginx后挂载N台服务器集群,服务器集群后挂载微服务化、微服务后挂载数据库分库分表+消息队列+任务调度,最后端挂载数据集群负责数据的统一归档+流计算+异步批处理

水平分区:根据业务划分业务线,每个业务线中设计分区键,根据userNo设计用户隔离,根据IP地址设计地区隔离,根据用户级别设计级别隔离,根据操作日期设计时间隔离,根据关键key进行hash散列,然后考虑一下分区的扩容、缩容、灾备、监控

数据同步,跨机房跨集群的困难点在于数据同步,有三种做法:不同步,任由各子集群在自己的业务范围内运行;汇总集群,建立一个统一的数据汇总集群(如Hadoop\Spark\Kylin等),将数据汇总到统一的大数据集群中,再进行统计、汇总、运算等。缺点是会有时间差,短须5分钟,长须一天以上;远程数据同步,通过开源框架实现多个数据库的同步。数据同步冲突算法有两种:单向回环补救、时间交集补救。一般推荐使用单向回环补救。

六星教育手把手教你,如何创建一个完美高并发系统?13年架构师亲历

当你掌握以上几大功能,基本上百万级并发就轻松搞定了。然后需要注意一些细节:

1)集群与集群之间要实现从入口开始的严格隔离,即DNS层->LVS层->Nginx层完全隔离

2)数据库的链接数是重要资源,一个mysql数据库可以提供1000链接,因此数据库层的分库分表一定要彻彻底底的分开。子集群之间不能互相链接数据库。

3)一些关键业务可以在缓存中操作,建议采用redis缓存。而memcache死机后数据丢失,mongodb功能尚不完善。redis的安全机制一定要做好,千万不能丢数据。缓存到数据库的存储可以采用计数形式,每隔N次操作存一次数据库,可以线性降低数据库压力。

4)数据库只使用简单的存取功能,所有业务功能在代码层实现,DBA推荐的分区、分存储、存储过程等功能一般在数据仓库中是有用的,而在实时计算系统中,千万不要采用。否则你会看到你们几百人的开发团队等待一个DBA给你们排期的情况。

5)前端可以做一些小的手段,例如抽奖活动,可以在页面js中直接告诉用户未中奖,而并不通知后台,此为“基础不中奖率”,可以直接过滤掉90%以上的流量。

六星教育手把手教你,如何创建一个完美高并发系统?13年架构师亲历

6)消息队列系统建议采用一些堆积能力较强的系统,如:rocketmq,rabbit等,建议rocketmq,消息堆积能力之强,单机堆积上亿条。

7)日志系统建议kafka,日志系统之后可以增加storm,hdfs,logstash等配套设施

8)网卡流量问题需要严重关注,经常出现的问题是:在某个活动之间,redis网卡流量打满,导致redis无法访问,整个业务暂停。需要网络部门对公司内部的服务器路由有准确估算,出现分值之后可以妥善定位问题并修复,日常工作中也要做好规划,提前做好准备。

9)老生常谈的:断路器、限流、自动降级。断路器是指在RPC的客户端中实现如下功能:如果发现该断路器访问服务端在10秒内访问超过50次且失败率高于50%,则中断该断路器的访问10秒钟,以保护下游系统。自动降级就是:如果发生问题,自动切换到备用程序上,如报错、如访问redis失败改访问DB等。限流就是在RPC的服务端中实现如下功能:对每个IP、每个token进行限制,通过令牌桶算法,每个时间段只允许指定数量的服务通过,否则就拒绝服务调用。一般断路器使用hystrix,自动降级可以自行实现,也可以用hystrix的配套设施实现,限流比较简单自行实现即可。

通过以上对于高并发描述,是否有增进你对高并发技能的了解呢?

六星教育手把手教你,如何创建一个完美高并发系统?13年架构师亲历

六星教育《PHP进阶到架构》课程正在免费开放中,凡当日前50名同学进入课堂直播间,即有精美礼品相送。本次课程为大型互联网实战技术课程,涉及到Laravel/Redis/Swoole/高并发分布式等相关技能,上月已有5057人参与报名听讲,累积报名数高达8万人。

从TP5/Laravel框架内核原理,到PHP性能优化,到swoole网络通信引擎,微服务架构,大型商业企业项目实战,从人工智能技术到高并发分布式架构,跟着老师学习解决高薪就业和创业的问题。

六星教育手把手教你,如何创建一个完美高并发系统?13年架构师亲历

六星教育始终以“为每个互联网人提升竞争力”为使命,旨在帮助学员通过在线学习的方式提升技术技能,加强核心竞争力,实现高薪梦想。 目前,六星教育VIP学员已突破数万人,近三成VIP学员学习后进入一线互联网等大型企业任职,我们将始终以强大的师资阵容、严苛的教学管理体系和先进的课程研发理念,培养中国优秀的IT精英,为社会持续输送高素质人才!