互联网三高论述

互联网三高

摘  要:本文通过阅读相关资料,围绕互联网三高架构:高并发、高性能、高可用概念、要求,设计方案等方面详细展开。

关键词:高并发;高性能;高可用;架构设计;架构应用

Abstract: Through reading relevant materials, this paper focuses on the three high architectures of the Internet: high concurrency, high performance, high availability concept, requirements, design scheme and other aspects in detail.

Keywords: High concurrency. High performance; High availability; Architecture design; Architecture application

1    什么是互联网三高架构?

  互联网的三高架构就是指设计互联网系统架构时需要满足高可用,高性能,高并发,它们是互联网系统架构设计永恒的主题。

2    高并发

  高并发指运用设计手段让系统能够处理更多的用户并发请求,也就是承担更大的流量。它是一切架构设计的背景和前提,脱离了它去谈性能和可用性是没有意义的。

  高并发是一个结果导向的东西,例如,常见的高并发场景有:淘宝的双11、春运时的抢票、微博大V的热点新闻等,这些典型场景并不是陡然出世,而是随着业务发展的发展而逐渐出现。像2020年淘宝双11全球狂欢季,订单创建峰值达到了惊人的58.3万笔/秒。

  高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。

  1.响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。

  2.吞吐量:单位时间内处理的请求数量。

  3.QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。

  4.并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。

  一般的互联网应用,访问量非常大,最常见的是高并发问题。那么如何提升系统的并发能力?

  提高并发能力的两种主要方法:垂直扩展,水平扩展。

  垂直扩展:

  (1)硬件升级:CPU不够加CPU,内存不够加内存,磁盘空间不足加磁盘,机械磁盘换固态等。

  (2)网络升级:网络带宽拉满,域名、静态资源使用CDN加速。

  (3)软件升级:优化代码算法,减少逻辑处理循环,使用Cache代替实时查询,使用异步增加吞吐量,少用锁减少响应时间等。

  (4)数据库升级:本地数据库换云数据库,增加数据库连接数,优化索引,优化sql,提升配置等。

       水平扩展:

  (1)增加服务器数量

  (2)数据层的水平扩展

  (3)服务层的水平扩展

  在互联网领域由于时间重要性,在预算够的话,优先采用垂直扩展。业务快速发展重要性远超服务器升级费用。

  比如阿里云扩容以应对钉钉业务暴增。受疫情影响,钉钉后台系统峰值流量不断创下新高,通过连续在阿里云上扩容十几万台云服务器,钉钉平稳度过了流量高峰。基于阿里云弹性计算资源编排调度服务,钉钉在短短2小时内新增部署了超过1万台云服务器,创下了阿里云上快速扩容的新纪录。此外,阿里云遍布全球的2500个CDN节点和120T带宽,也为群直播、视频会议等提供了支持。

3    高性能

  高性能是指程序处理速度非常快,所占内存少、CPU占用率低。高性能的指标经常和高并发的指标紧密相关,想要提高性能,那么就要提高系统高并发能力,两者互相捆绑在一起。应用性能优化的时候,对于计算密集型和IO密集型还是有很大差别,需要分开来考虑。还有可以增加服务器的数量、内存、IO 等参数提升系统的并发能力和性能,但不要浪费资源,要考虑硬件的使用率最高才能发挥到极致。

  那么怎么提高性能呢?

  1.避免因为 IO 阻塞让 CPU 闲置,导致 CPU 的浪费。

  2.避免多线程间增加锁来保证同步,导致并行系统串行化。

  3.免创建、销毁、维护太多进程、线程,导致操作系统浪费资源在调度上。

 

 

                            图1 高性能架构

4    性能优化

  “天下武功,唯快不破”。性能是系统设计成功与否的关键,实现高性能也是对程序员个人能力的挑战。不过在了解实现高性能的方法之前,我们先明确一下性能优化的原则。

  首先,性能优化一定不能盲目,一定是问题导向的。脱离了问题,盲目地提早优化会增加系统的复杂度,浪费开发人员的时间,也因为某些优化可能会对业务上有些折中的考虑,所以也会损伤业务。

  其次,性能优化也遵循“八二原则:即你可以用 20% 的精力解决 80% 的性能问题。所以我们在优化过程中一定要抓住主要矛盾,优先优化主要的性能瓶颈点。

  再次,性能优化也要有数据支撑:在优化过程中,你要时刻了解你的优化让响应时间减少了多少,提升了多少的吞吐量。

  最后,性能优化的过程是持续的:高并发的系统通常是业务逻辑相对复杂的系统,那么在这类系统中出现的性能问题通常也会有多方面的原因。因此,我们在做性能优化的时候要明确目标,比方说,支撑每秒 1 万次请求的吞吐量下响应时间在 10ms,那么我们就需要持续不断地寻找性能瓶颈,制定优化方案,直到达到目标为止。

5    高可用性

  高可用性是指系统具有较高的无故障运行能力。

  高可用的主要目的是为了保障业务的连续性,即在用户眼里,业务永远是正常对外提供服务的。高可用主要是针对架构而言,那么要做好高可用,就要首先设计好架构,一般会采用分层的思想将一个庞大的 IT   系统拆分成为应用层,中间件,数据存储层等独立的层,每一层再拆分成为更细粒度的组件,第二步就是让每个组件对外提供服务,毕竟每个组件都不是孤立存在的,都需要互相协作,对外提供服务才有意义。

  目前多数互联网都会采用微服务架构,常见架构如下:

 

 

      图2 架构分层

  可以看到架构主要分以下几层:

  1.接入层:主要由 F5 硬件或 LVS 软件来承载所有的流量入口

  2.反向代理层:Nginx,主要负责根据 url 来分发流量,限流等

  3.网关:主要负责流控,风控,协议转换等

  4.站点层:主要负责调用会员,促销等基本服务来装配 json 等数据并返回给客户端

  5.基础 service:其实与站点层都属于微服务,是平级关系,只不过基础 service 属于基础设施,能被上层的各个业务层 server 调用而已

  6.存储层:也就是 DB,如 MySQL,Oracle 等,一般由基础 service 调用返回给站点层

  7.中间件:ZK,ES,Redis,MQ等,主要起到加速访问数据等功能,要实现整体架构的高可用,必须要实现每一层组件的高可用。

  除了做好架构的高可用之外,我们还需要在做好系统隔离,限流,熔断,风控,降级,对关键操作限制操作人权限等措施以保证系统的可用。

  这里特别提一下降级,这是为了保证系统可用性采取的常用的措施,简单举几个例子。

  1.例如对接一个第三方资金方由于自身原因借款功能出了问题导致无法借款,这种情况为了避免引起用户恐慌,于是在用户申请第三方借款的时候返回了一个类似为了提升你的额度,资金方正在系统升级这样的文案,避免了客诉。

  2.在流媒体领域,当用户观看直播出现严重卡顿时,很多企业的第一选择不是查 log 排查问题,而是为用户自动降码率。因为比起画质降低,卡得看不了显然会让用户更痛苦。

  3.双十一零点高峰期,我们把用户的注册登录等非核心功能给停掉了,以保证下单等核心流程的顺利。

  另外最好能做到事前防御,在系统出问题前把它扼杀在摇篮里,所以需要做单元测试,做全链路压测等来发现问题,还需要针对 CPU,线程数等做好监控,当其达到我们设定的域值时就触发告警以让我们及时发现修复问题,此外在做好单元测试的前提下,依然有可能因为代码的潜在 bug 引起线上问题,所以我们需要在关键时间(比如双十一期间)封网。

 

 

       图3 设计常见手段

6    总结

  1.业务需要推动了架构技术的演化,一个日活10来个人的网站,有必要上一个高大全的分布式的系统嘛?非要上一个,完全自寻死路,没那需求,也没那必要。

  2.大型网站的架构是根据业务需求不断完善的,根据不同的业务特征会做特定的设计和考虑。

  3.一个大的解决方案通常是由很多个一起协调工作的小的解决办法组成的。这需对每一个解决方案进行精心正确的设计和开发。

posted @ 2022-05-20 20:05  睡觉不困  阅读(420)  评论(0编辑  收藏  举报