当前位置: 首页 > 科技观察

故障转移、服务发现、负载均衡都和它有关!!!

时间:2023-03-18 11:31:29 科技观察

没错,就是关于连接池的。玩转互联网架构,连接池一定要掌握。什么是连接池?创建和管理连接缓冲池的技术本质上是资源重用。它不需要频繁创建和销毁连接,可以提高性能。画外音:数据库连接池,服务连接池,都是连接池。在微服务分层架构中,连接池扮演着极其重要的角色。如上图:上方虚线框为web集群;下方虚线框为服务集群;绿色框代表上游和下游连接;蓝色方框代表连接池;在这个例子中,一个调用者会和一个服务节点通信建立2个连接,服务集群中有3个集群,所以连接池一共有6个连接,从c1到c6。除了上层调用者拿连接在连接池中收发消息访问下游服务外,互联网架构中还有哪些技术点与连接池相关?1、故障转移和服务发现如上图所示:如果服务节点s1发生故障,c1和c2之间的连接就会发生故障,并从连接池中移除,后续请求不会发送到故障节点;服务发现,如果有新的服务节点s4上线,c7和c8之间会建立连接,加入到连接池中,后续的请求会发送给新加入的节点;动态删除连接和添加新连接,这就是动态连接池。对于服务发现,如何感知新节点s4在线?详情见《改了配置,不想重启,怎么整?》。2、负载均衡采用轮询策略,一个一个使用连接池中的连接,实现下游服务访问的负载均衡。使用完全随机的策略也可以实现负载均衡。如上图:给每个连接赋予相同的权重,在取连接访问下游时,使用随机算法,哪个连接将使用哪个格子,还是上面的例子:n=random()%6+1;当n=[1,2]时,访问s1;n=[3,4],访问s2;n=[5,6],访问s3;三个区间的宽度是一样的,即落入某个服务的概率是相等的,负载是均衡的。那么,如果服务节点的服务能力不一样,有的处理能力强,有的处理能力弱,怎么办?3、静态权重负载均衡如上图所示:为每个服务配置不同的权重,在连接池初始化时,不同服务的区间大小不同,落入某个格子的概率也会取连接访问下游时不同:n=random()%16+1;当n=[1,2]时,访问s1;n=[3,6],访问s2;n=[7,16],访问s3;三个区间的宽度与服务的权重成正比,即落入某个服务的概率等于权重。画外音:nginx支持这种玩法,但是静态权重太粗糙了。那么,如果各个服务节点的服务能力不同,但是静态权重很难识别,怎么办呢?4、动态权重负载均衡如上图所示:在连接池初始化时,会为连接分配一个动态权重。画外音:该服务不再需要配置。仍然按照之前的方式分配负载,但是:连接处理超时,动态权重下降;连接处理成功,动态权重增加;更具体的细节,见《异构服务器的负载均衡,怎么设计?》。这样就可以根据服务的实际处理能力来分配负载。是不是很有趣?故障转移、服务发现、负载均衡、静态权重/动态权重负载均衡,你有收获吗?【本文为专栏作者《58神剑》原创稿件,转载请联系原作者】点此查看该作者更多好文