互联网软件架构发展历程

本文介绍了在高并发场景下,服务端架构从百万到千万级用户的演进过程,涉及分布式、高可用、负载均衡等核心概念。详细阐述了分布式与集群的区别,强调了系统的高可用性,并探讨了负载均衡的多种策略,如轮询、最小连接、散列等。此外,还解释了正向代理与反向代理的区别。
摘要由CSDN通过智能技术生成

1.概述

为了更好理解互联网软件架构,我们现在介绍一下,一百万到千万级并发情况下服务端的架 构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整 体的认知。

2.基本概念

在介绍架构之前,为了避免初学者对架构设计中的一些概念不了解,下面对几个最基础 的概念进行介绍。

2.1 分布式

什么是分布式?什么是集群?两者之间有什么区别?

首先我们来了解分布式的概念,简单来说分布式其实就是指不同的业务分布在不同的地方。举例,比如京东商城的A服务和B服务,两个独立的服务由于业务量庞大,需要不同的服务器作为支撑,组合起来去共同运行程序。

那么什么是集群呢?集群是指若干台服务器集中在一起,共同实现同一业务。可以理解为A服务是由若干个单独的服务器共同来组合处理运行A服务,B服务也是一样,两者可以单独运行,并且有数据之间的传递(这个以后再讲)。那么组成A服务的这些服务器就是一个集群,这里称为集群A;那么B服务的若干服务器是不是就是集群B呢?答案肯定是正确的。

集群是一种物理形态,而分布式是一种工作状态。那么我们再来看集群和分布式的关系,在这里引入'节点'这个概念,帮助我们理解!集群的节点是若干个服务器其中的某一个处理器;分布式的节点是集群,分布式的每一个节点都是一个集群,但是一个集群并不一定是分布式的。

2.2 高可用

我们的系统在实际运行中,某一个或者几个节点宕机了,需要请求的一些数据无法访问得到,这时候其它节点可以接替宕机的服务器节点来继续工作,就说明该系统具备高可用性。通过下面的图片具体看一下系统可用性的划分等级:

我们可以清楚的通过具备9的数量来了解系统可用性的等级划分。

2.3 负载均衡

例如A服务需要调用B服务,B服务存在若干个机器,那么A调用任意一个机器就能完成数据的请求任务,这是服务器之间的请求调用。我们可以通过下面这张图片来了解浏览器发送到服务器的数据的处理情况!

 这里我们引入一个Nginx服务器,负责将浏览器的请求转发给各个服务器端。在转发过程中我们不得不考虑一个问题,那就是这些请求的分配问题。有一个最现实的问题,如果Nginx服务器把浏览器所有的请求都发给了一个服务器,是不是这个服务器就会面临巨大的负载问题,我们没有起到合理分配的作用,这里就要通过一些算法来或者同时运用多种算法来实现合理分配。

1)轮询

轮询故名思意就是按照顺序轮流执行,也是默认的算法。Nginx服务器第一次将请求发送给第一台服务器,第二次发送给第二胎,依次进行请求分配,是不是就一定程度的起到了分配均衡的效果了呢!下面是轮询的一些设置参数参考:

2)最小连接

最小连接是指每一次请求,Nginx都对把这个请求分配给最小负载的服务器,从而提高请求性能。

3)散列

根据请求源的Ip的散列(Ip_Hash)来选择要转发的服务器,推荐保证特定的用户能连接到相同的服务器进行数据的请求。

4) 权重

#动态服务器组
    upstream server_select {
        server localhost:8080   weight=2;  #tomcat 7.0
        server localhost:8081;  #tomcat 8.0
        server localhost:8082   backup;  #tomcat 8.5
        server localhost:8083   max_fails=3 fail_timeout=20s;  #tomcat 9.0
    }

在轮询的基础上,我们可以设置weight的值,这个值默认为1,并且与访问比率成正比。我们可以看到localhost:8080端口的weight的值为2,说明Tomcat 7.0被访问的几率为其他服务器的两倍。

5)一些第三方的策略

①fair

按照服务器端的响应时间来分配请求,响应时间短的优先分配。

#动态服务器组
    upstream server_select {
        server localhost:8080;  #tomcat 7.0
        server localhost:8081;  #tomcat 8.0
        server localhost:8082;  #tomcat 8.5
        server localhost:8083;  #tomcat 9.0
        fair;    #实现响应时间短的优先分配
    }

②url_hash

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。 

#动态服务器组
    upstream server_select {
        hash $request_uri;    #实现每个url定向到同一个后端服务器
        server localhost:8080;  #tomcat 7.0
        server localhost:8081;  #tomcat 8.0
        server localhost:8082;  #tomcat 8.5
        server localhost:8083;  #tomcat 9.0
    }

我们可以根据业务需求的不同选择适合业务的算法策略。

2.4 正向代理与反向代理

我们需要站在客户端和服务器的角度来理解这个概念。正向代理是代理服务器代替系统内部来访问外部网络的过程,反向代理是外部请求访问系统时通过代理服务器转发到内部服务器的过程。正向代理一般是客户端架设的 ,比如在自己的机器上安装一个代理软件。而反向代理一般是服务器架设的 ,比如在自己的机器集群中部署一个反向代理服务器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值