• 互联网三高架构


    互联网的三高架构:高并发、高性能、高可用技术

    韩佳龙

    (石家庄铁道大学,河北省石家庄市05000)

    摘要:互联网三高架构包括高并发、高性能、高可用。互联网的三高系统,最关注的软件质量属性是:性能、可用性、伸缩性、扩展性、安全性。高并发是互联网分布式系统架构设计中必须考虑的因素之一,通常是指通过设计保证系统能够同时并行处理很多请求。高可用是分布式系统架构设计中必须考虑的因素之一,它通常是指通过设计减少系统不能提供服务的时间。高性能就是指程序处理速度快、耗能少。高并发和高性能是紧密相关的,提高应用的性能,可以提高系统的并发能力。

    关键词:高并发;高性能;高可用

    中图分类号:文献标志码:A

    ThreehigharchitectureofInternet:highconcurrency,highperformanceandhighavailabilitytechnology

    HanJialong

    (ShijiazhuangTiedaoUniversity,ShijiazhuangCity,HebeiProvince)

    Abstract:Internetthreehigharchitectureincludeshighconcurrency,highperformanceandhighavailability.ThethreehighsystemoftheInternetpaysmostattentiontothesoftwarequalityattributes:performance,availability,scalability,scalabilityandsecurity.HighconcurrencyisoneofthefactorsthatmustbeconsideredinthearchitecturedesignofInternetdistributedsystem.Itusuallyreferstoensuringthatthesystemcanprocessmanyrequestsinparallelatthesametime.Highavailabilityisoneofthefactorsthatmustbeconsideredinthedesignofdistributedsystemarchitecture.Itusuallyreferstoreducingthetimewhenthesystemcannotprovideservicesthroughdesign.Highperformancereferstofastprogramprocessingspeedandlessenergyconsumption.Highconcurrencyandhighperformancearecloselyrelated.Improvingtheperformanceoftheapplicationcanimprovetheconcurrencyofthesystem.

    Keywords:Highconcurrency;Highperformance;Highavailability


    0引言

    随着网络使用的日益普遍,网络上存在的各种不良信息(色情、反动、暴力等等)越来越多的干扰着互联网的正常秩序。所以,网络信息的内容安全引起了越来越多的关注,对于存在于网络中大量无序、不良信息的过滤,已成为各个国家研究的重点和热点。目前在针对互联网信息内容资源的管理与监测和引导工作中,相当大的程度还依赖于简单技术同人力相结合的方式。普遍的现状是工作强度大,时效性较差,果不明显。事实上,对于这一现状我们必须认识到针对信息化、网络化浪潮带来的问题,只有通过信息化、网络化的技术手段与先进的管理机制相结合才有可能获得成功架构师在进行系统设计时需兼顾业务功能的实现以及同时保证系统的高并发、高可用。

    1高并发性

    1.1高并发性的特点

    高并发HighConcurrency)的三大特性—原子性、有序性、可见性高并发是互联网分布式系统架构设计中必须考虑的因素之一,它一般是指,经过设计保证系统可以同时并行处理不少请求。高并发相关经常使用的一些指标有响应时间,吞吐量,每秒查询率QPS,并发用户数等。原子性,即一个操作或者多个操作,要么全部执行并且不被打断,要么就都不执行。可见性,当一个线程修改了共享变量的值,其他线程会马上知道这个修改。当其他线程要读取这个变量的时候,最终会去内存中读取,而不是从缓存中读取。有序性,虚拟机在进行代码编译时,对于那些改变顺序之后不会对最终结果造成影响的代码,虚拟机不一定会按照我们写的代码的顺序来执行,有可能将他们重排序。实际上,对于有些代码进行重排序之后,虽然对变量的值没有造成影响,但有可能会出现线程安全问题。

    1.2高并发性的要求

    互联网分布式架构设计,提高系统并发能力的方式,方法论上主要有两种:垂直扩展(ScaleUp)与水平扩展(ScaleOut)。垂直扩展:提升单机处理能力。垂直扩展的方式又有两种:

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

    (2)提升单机架构性能,例如:使用Cache来减少I0次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;在互联网业务发展非常迅猛的早期,如果预算不是问题,强烈建议使用“增强单机硬件性能”的方式提升系统并发能力,因为这个阶段,公司的战略往往是发展业务抢时间,而“增强单机硬件性能”往往是最快的方法。不管是提升单机硬件性能,还是提升单机架构性能,都有一个致命的不足:单机性能总是有极限的。所以互联网分布式架构设计高并发终极解决方案还是水平扩展。

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

    1.3高并发性的设计方案

    我们在应对高并发大流量时也会采用类似“抵御洪水”的方案,归纳起来共有三种方法。

    Scale-out(横向扩展):分而治之是一种常见的高并发系统设计方法,采用分布式部署的方式把流量分流开,让每个服务器都承担一部分并发和流量。

    缓存:使用缓存来提高系统的性能,就好比用“拓宽河道”的方式抵抗高并发大流量的冲击。

    异步:在某些场景下,未处理完成之前,我们可以让请求先返回,在数据准备好之后再通知请求方。

    2高可用性

    2.1高可用性的特点

    可用性(也称有效性)是指可维修产品在规定的条件下使用时具有或维持其功能的能力。其量化参数为可用度,表示可维修产品在规定的条件下使用时,在某时刻具有或维持其功能的概率。可用度(也称有效度)通常记作A,可用平均无故障时间(MTBF)和平均修复时间(MTTR)来计算:A=MTBF/(MTBF+MTTR)。计算可用性:在实际系统中,如果一个组件发生故障,则将其修复或更换为新组件。如果此新组件发生故障,请更换另一个组件,依此类推。固定组件被视为与新组件处于相同状态。在其生命周期内,组件之一可以被视为以下状态之一:运行或修复。运行状态表明该组件正在运行并且正在维修中,表示该组件已发生故障并且尚未被新组件替换。负载均衡:所有硬件都有其局限性,并且同一服务通常必须分布在多台计算机上,而不会变得拥塞。这些解决方案可以专门用于进行负载平衡的小组:CPU使用率,存储或网络。要么引入群集的概念,要么引入服务器场的概念,因为平衡可能要在多台服务器上完成。在计算机网络中,负载平衡是一种在两台或多台计算机,网络链接,CPU,硬盘或其他资源之间平均分配工作负载以优化资源利用率,最大化性能,最小化响应时间并防止过载的技术。通过负载均衡使用多个组件而不是单个组件,可以通过冗余提高可靠性。平衡网络:平衡网络使用率主要是为了通过备用路由转发流量,以减少对服务器的访问拥塞。这种平衡可以发生在OSI层的任何级别。平衡存储:存储介质的平衡使访问时间明显增加,从而可以跨多个磁盘(软件/硬件RAID)访问分布式文件系统。这些解决方案可以是专用的,也可以存在于群集中的每个服务器中。平衡CPU:这种类型的平衡由分布式处理系统执行,基本上包括将总负载处理除以系统中的多个处理器(本地或远程)。

    2.2高可用性的要求

    高可用性可让您为数据弹性和应用程序可用性选择不同的技术。这些技术分别具有不同的特征,而这些特征应该与每个个别业务应用程序的独特要求相匹配。在选择最适合于业务的数据弹性技术时,应该了解和考虑以下参数。系统级的高可用性要求网络拓扑必须有冗余节点和备份设计,例如在一个网络节点上配置多台交换机并指定其中一台为主交换机,然后通过VRPP技术使得其余多台交换机均作为主交换机的备份;组件级的高可用性着眼于网络设备自身,要求网络设备具有冗余部件和热备份机制,例如需要配有双电源、双主控之类的备份组件;链路级的高可用性要求传输线路必须有备份,如果主要数据通路中断,备用线路将迅速启用,链路冗余在技术上体现为STP/RSTP/MSTP(后面统称为STP)、链路聚合技术等。

    3.3高可用性的设计方案

    高可用性设计方案时应从如下几方面考虑应对。扩展:是最常见的提升系统可靠性的方法,系统的扩展可以避免单点故障,即一个节点出现了问题造成整个系统无法正常工作。换一个角度讲,一个容易扩展的系统,能够通过扩展来成倍的提升系统能力,轻松应对系统访问量的提升。隔离:隔离级别按粒度从小到大,可以分为线程池隔离、进程隔离、模块隔离、应用隔离、机房隔离。在数据库的使用中,还经常用到读写分离。解耦:在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使模块之间的耦合度尽量小。限流:一个系统的处理能力是有上限的,当服务请求量超过处理能力,通常会引起排队,造成响应时间迅速提升。如果对服务占用的资源量没有约束,还可能因为系统资源占用过多而宕机。因此,为了保证系统在遭遇突发流量时,能够正常运行,需要为你的服务加上限流。分类:按照计数范围,可以分为:单机限流、全局限流。单机限流,一般是为了应对突发流量,而全局限流,通常是为了给有限资源进行流量配额。漏桶算法:漏桶算法可以使用Redis队列来实现,生产者发送消息前先检查队列长度是否超过阈值,超过阈值则丢弃消息,否则发送消息到Redis队列中;消费者以固定速率从Redis队列中取消息。Redis队列在这里起到了一个缓冲池的作用,起到削峰填谷、流量整形的作用。令牌桶算法:对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。桶里能够存放令牌的最高数量,就是允许的突发传输量。滑动窗口计数法:计数法是限流算法里最容易理解的一种,该方法统计最近一段时间的请求量,如果超过一定的阈值,就开始限流。在TCP网络协议中,也用到了滑动窗口来限制数据传输速率。动态限流:一般情况下的限流,都需要我们手动设定限流阈值,不仅繁琐,而且容易因系统的发布升级而过时。为此,我们考虑根据系统负载来动态决定是否限流,动态计算限流阈值。可以参考的系统负载参数有:Load、CPU、接口响应时间等。降级:业务降级,是指牺牲非核心的业务功能,保证核心功能的稳定运行。简单来说,要实现优雅的业务降级,需要将功能实现拆分到相对独立的不同代码单元,分优先级进行隔离。在后台通过开关控制,降级部分非主流程的业务功能,减轻系统依赖和性能损耗,从而提升集群的整体吞吐率。熔断:不得不提经典的电力系统中的保险丝,当负载过大,或者电路发生故障时,电流会不断升高,为防止升高的电流有可能损坏电路中的某些重要器件或贵重器件,烧毁电路甚至造成火灾。保险丝会在电流异常升高到一定的高度和热度的时候,自身熔断切断电流,从而起到保护电路安全运行的作用。

    3高性能

    3.1高可用性的特点

    高效率:主要指信息传播的效率,互联网没有围墙、门槛的聚集属性,使信息已经发出,就能迅速让人们都知晓。高精准度:主要指信息传播的靶向性,互联网的使用习惯,从线下的被动接收信息,变成线上主动搜索信息,使发布的信息能精确的传递到用户。实时便捷:主要指信息的展示不受地域、时空的限制,并且保持24小时不休地进行展示,只需一部智能设备,人们就可以随时随地的查找自己所需要的内容。互动联系:主要指信息的展现方式,各类软件、APP等IT工具的开发与出现,使得人与信息(物)、人与人的沟通、互动更多样、更灵活、更全面

    3.2高可用性的要求

    互联网发展至今各种应用层出不穷,用户量动辄上亿。所以如何构建一个优秀的高性能、高可靠的应用系统对每一个开发者至关重要。要想做到高性能,有以下几点要求:缓存,DNS缓存,数据库缓存,分布式缓存,拆分,业务拆分,数据库拆分,异步,网络异步,磁盘异步,使用消息。

    3.3高可用性的设计方案

    说无状态服务我们首先要想到无状态对象,无状态对象简单的可以理解为没有Field的对象,比如model/entity对象就不属于无状态对象,因为他含有Field,比如典型MVC场景的**Controller,**Service就是无状态的,他们只含有method。第一种就是将对象信息全部存储在cookie中,通过相应的算法等在服务端将cookie中的信息读出来。这些信息一般都会进行加密处理。

    第二种方法,就是将session存储在分布式数据库或者分布式缓存中,一般存在redis或者memcache中。那这种服务扩展会依赖第三方数据库或缓存的能力。淘宝有类似的组件,开源世界也有基于memcache和redis的分布式session。业务拆分:无状态可以使应用服务水平扩展,但是当单个应用太大太臃肿时,有必要对应用进行拆分。垂直拆分即按业务拆分,比如电商系统中,按照订单系统,积分系统等进行拆分。拆分可以方便开发,更方便扩展。数据库拆分:一般项目都会经历数据量从小到大的变化,所以数据库拆分也是根据不同的数据量已经不同的阶段进行相应的处理。

    4结束语

    面针对网络业务具有数据量大,实时要求高等特点,在规划与建设中必须充分考虑整个系统的网络建设能级,尤其要关注作业系统中信息获取模块的互联网出口带宽,对敏感信息系统特征,在建设中同时必须高度重视系统的安全建设。在系统建设中要以三高为技术指导要求,使系统更加高效。

  • 相关阅读:
    Cocos2d-JS中的Sprite精灵类
    Cocos2d-JS中的精灵菜单和图片菜单
    Cocos2d-JS中的文本菜单
    SpringMVC01
    xml文件
    MyEclipse保存文件时 自动格式化代码! 不包括文档注释
    MyEclipse修改servlet模版
    java05 选择结构
    ssh注解开发
    使用socket实现聊天功能
  • 原文地址:https://www.cnblogs.com/1329197745a/p/16293062.html
Copyright © 2020-2023  润新知