高并发架构的难点是什么?

高并发架构最大问题主要是由于网站PV访问量大,单台服务器承载大量访问所带来的压力,所以会采用多台服务器进行分流,采用服务器集群技术,对于每个请求访问会被 发送到不同的服务器。

这样架构的难点就在管理、维护、监控、负载等等都面临很大的技术问题,同时还需要应对某些业务的突发流量,像秒杀、促销等场景化

使用什么技术解决高并发?

互联网分布式架构设计,提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)。

垂直扩展:提升单机处理能力。垂直扩展的方式又有两种:

(1)增强单机硬件性能,例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G;

(2)提升单机架构性能,例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;

 

在互联网业务发展非常迅猛的早期,如果预算不是问题,强烈建议使用“增强单机硬件性能”的方式提升系统并发能力,因为这个阶段,公司的战略往往是发展业务抢时间,而“增强单机硬件性能”往往是最快的方法。

不管是提升单机硬件性能,还是提升单机架构性能,都有一个致命的不足:单机性能总是有极限的。所以互联网分布式架构设计高并发终极解决方案还是水平扩展。

 

水平扩展:只要增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的,如何在架构各层进行可水平扩展的设计,以及互联网公司架构各层常见的水平扩展实践。

水平扩展要怎么来做?

  1. 首先是软件服务拆分到不同的服务器进行部署,全部堆积在一台上性能将会受限。例如:Redis 就只是部署在独立的服务器上,其它软件都在这服务器上出现
  2. 增加各个软件服务部署的服务后,采用技相关技术手段分担到各个服务器上。
    1. nginx反向代理层可以通过“DNS轮询”的方式来进行水平扩展。dns-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问dns-server,会轮询返回这些ip。
    2. PHP站点层可以通过修改nginx.conf实现负载均衡机制来进行水平扩展。从而设置多个web后端。
    3. 服务层可以通过服务连接池来进行水平扩展;这里一部需要实现服务化,PHP像swoole tarsphp等
    4. 数据库可以按照数据范围,或者数据哈希的方式来进行水平扩展;
    5. 常见互联网分布式架构如上,分为:

      (1)客户端层:典型调用方是浏览器browser或者手机应用APP

      (2)反向代理层:系统入口,反向代理

      (3)站点应用层:实现核心应用逻辑,返回html或者json数据

      (4)服务层:服务化,例如像Swoole

      (5)数据-缓存层:缓存加速访问存储

      (6)数据-数据库层:数据库固化数据存储