分享

互联网架构之五高

 火鸟课堂 2020-06-03

一、什么是五高?

五高即: 高可用、高可扩展、高性能、高安全、高可管理

高可用(High Availability)即应用全年的停机时长要在标准范围内。

2个9即99%是基本可用,全年不可用时间是87.6小时

3个9即99.9%是基本可用,全年不可用时间是8.76小时

4个9即99.99%是基本可用,全年不可用时间是52.56分钟

5个9即99.999%是基本可用,全年不可用时间是5.256分钟

经常说的高并发并不是五高之一,高并发即通过设计保证系统能够同时并行处理很多请求

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

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

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

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

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

二、如何保证高可用?

       保证系统正常运行的规则就是:冗余,系统增加了冗余还不够当然如果系统之间出现了故障,人工干预则需要耗时,为了保证高可用就需要自动故障转移,即一个节点宕机立即自动切到另外一台保证系统的高可用。

三、互联网架构分层?

     还记的大学时学习的计算机网络这本书吗,里面的OSI七层模型首先来回忆一下。

    OSI七层模型: 第一层 物理层,第二层 数据链路层 ,第三层 网络层,第四层 传输层,第五层 会话层,第六层 表示层 第七层 应用层

                               

   如上图,是互联网分布式架构分为:

   客户端层: 调用方是 应用APP或者PC浏览器

   硬件负载均衡层:   F5可以 汇聚链接,去除https的s,  负载请求   即典型的三明治结构。 是一种硬件的负载,而F5的探测机制:心跳 一问一答形式和发送多次,比如发送三次在多少时间内三次没有应答就证明断链。 而F5属于温备,即有多台F5,备用机器启动但是限流。 除了F5,还有 DNS和HA Proxy可以解决同样的问题。  

  反向代理层:系统入口, 使用nginx进行反向代理,实现原理是: keep alived + virtual IP 

  web应用层:实现核心应用逻辑,返回html或者json

  服务层:如果实现了服务化,就有这一层

  数据-缓存:缓存加速访问存储

  数据-数据库层:数据库固化数据存储

四、如何实现各个层级之间的扩展(即冗余)?

   硬件负载均衡层:

    硬负载均衡层的水平扩展,是通过三明治结构实现的。在这一层布三层F5实现水平扩展。F5的官方名称叫本地流量管理器,可以做4-7层负载均衡,具有负载均衡,应用交换,会话交换,状态监控,智能网络地址转换,通用持续性,相应错误处理、高级路由,SSL加速,TCP优化,IPV6网关,智能端口镜像,SSL加速,智能HTTP压缩,TCP优化,第7层速率整形、内容缓冲、内容转换、连接加速、连接加速、高速缓存、Cookie加密、选择性内容加密、应用工具过滤、拒绝服务(Dos)攻击、SYN FLood保护、防火墙----包过滤、包消毒等。

F5提供12种灵活的算法将所有流量均衡的分配到各个服务器,而面对用户,只是一台虚拟服务器。假如一台服务器发生宕机,F5会检查出来并将该服务器标识为宕机,从而不将用户的访问请求传送到该台发生故障的服务器上,一旦宕机恢复又F5查证后又将流量切到该恢复的服务器上。

  反向代理层:

  反向代理层水平扩展是通过 DNS轮询实现,如上图dns-server对于一个域名配置了多个解析IP,每次DNS解析请求来访问dns-server,会轮询这些ip, 当nginx成为瓶颈的时候,只要增加服务器数量,新增的nginx服务的部署,增加一个外网ip就能扩展反向代理层的性能,做到理论上的无限高并发。

 web应用层(服务器节点):

 web应用层的水平扩展,即服务端节点,是通过nginx实现的,通过修改nginx.conf可以设置多个web后端

当web后端成为瓶颈的时候,只要增加服务器的数量部署,在nginx配置中配置新的web后端,就能扩展站点层的性能,做到理论上的无限高并发。

服务层:

服务层水平扩展是通过服务连接池实现的,站点通过RPC-客户端调用下游的服务层RPC-服务端中的连接池会建立与下游服务多个连接,当服务成为瓶颈的时候,只要增加服务器数量,新增服务部署,在RPC-客户端处建立新的下游服务连接,就能扩展服务层性能,做到理论上的无限高并发,如果需要优雅的进行服务层自动扩容,则需要zookeeper等注册发现。

数据层的水平扩展:

即将一台服务器上的数据(缓存和数据库)水平拆分到不同服务器上去以达到扩充系统性能的目的

以数据库为例,按照范围水平拆分

                                                     

每一个数据服务,存储一定范围数据,上图为例,user0库存储的范围0-1kw,user1库存储的范围1kw-2kw

优点:1、规则简单,service只需要判断一下uid范围就能路由到对应的存储服务;

                                    2、数据均衡性好;

                                    3、比较容易扩展,可以随时加一个uid[2kw到3kw]的数据服务

缺点:请求的负载不一定均衡,一般来说,新注册的用户会比老用户更加活跃,大的排列服务请求压力会更大。

以数据库为例,按照哈希水平拆分

                                                       

每一个数据库,存储某个key值hash后的部分数据上图为例

user0库存储偶数uid数据,user1库存储奇数uid数据

优点:  1、规则简单,service只需对uid进行hash能路由到对应得存储服务;

           2、数据均衡性好

           3、请求均衡性好

缺点: 不容易扩展,扩展一个数据服务,与主从同步读写分离来扩充数据库性能的方式有本质不同

通过水平扩展来扩充系统性能,与主从同步读写分离来扩充数据库性能的方式有本质不同:

1、每个服务器上存储的数据量是总量的1/n,所以单机的性能也会有提升;

2、n个服务器上的数据没有交集,那个服务器上数据的并集是数据的全集;

3、数据水平拆分到了n个服务器上,理论上读性能扩充了n倍多。

通过主从同步读写分离扩展数据库性能:

1、每个服务器上存储的数据量和总量相同;

2、n个服务器上的数据都一样,都是全集;

3、理论上读性能扩充了n倍,写仍然是单点,写性能不变;

 

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多