大型分布式服务框架

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 一个分布式框架的架构

1、首先远程服务调用有三种模式:同步、异步 Future、异步 Callback 三种调用模型,正常的都是同步调用,调用的时候阻塞当前线程,异步一般只会在特殊的情景下有用。

2、全局配置:所有服务的配置应该是需要在一个全局配置中心配置(zookeeper集群)的,而不是写死在代码里面,避免出现问题还需要修改代码、重启所有机器。尤其是流量控制、接口降级、重试次数等。

3、接口的重试:远程调用接口一般由于网络问题等问题经常会出现异常,这时候往往可以需要重试一下,但是不是所有的接口都需要重试,比如由于处理时间过长导致超时异常,其实只是处理慢了点而已,已经处理了,这时候再重试会有问题的,所以一般建议update、insert类型的接口就不要重试了,或者接口能保证幂等。(像由于接口异常问题导致的数据不一致可以通过mq实现重试,在消费mq时保证幂等。这样能最大限度的保证数据一致性)

4、服务节点的自动注册和发现:一个分布式的rpc框架肯定缺不了服务的注册与发现,注册中心有很多种实现方式,一般采用zookeeper集群来实现。
1523259730500d8330a8565_jpeg

5、负载均衡:client端对server的调用负载均衡能规避短板效应,常见的负载均衡算法有轮询、随机、最少调用、一致hash等加权的算法。

6、熔断:这个功能也是一个分布式框架必须要有的。比如服务方法级的熔断可以使得client端在短时间内发现该方法大量异常就会直接抛出异常,避免继续给server端增加压力,防止级联崩溃。合适的设置消费方服务方法熔断,既可以保护服务提供方,避免其已经处于不健康状态下时继续给压。也可以避免消费方应用大量线程因等待服务方结果返回被阻塞(在同步调用下),有效的保护服务消费方自身。还有一种是服务节点级的熔断,比如发现该节点cpu打满、节点不可用,直接将本节点踢出集群,这样client在负载均衡调用时会忽略这个节点。

7、流量控制:分client段的流量控制和server端的流量控制。
服务端的流量控制:避免请求超过系统设计的承受能力,防止服务崩溃,应该设置一个合理的阀值,超过阀值的请求可以被快速拒绝。在服务提供方维护一个线程池,该线程池负责服务接口的执行,线程池有个任务队列,一但队列满了,直接拒绝服务。
消费方的流量控制:消费方可针对某个服务设置并发阀值,也可用线程池去维护,当并发量超过该阀值时则无法执行,合理的设置消费方的并发阀值不仅能有效的保护服务方,而且也能避免消费方大量线程因等待服务方结果返回被阻塞(在同步调用下),有效的保护服务消费方自身。

8、服务路由:client端的集群调用server端的那个集群是可以配置的,集群隔离也能有效的防止某个clinet的并发暴增导致的关键链路雪崩。在server端设置服务路由也能有效的控制所有client端调用的集群,集群隔离,保护自身。

9、服务治理及监控:trace监控也是很重要的,作为大型分布式系统,一个api接口的server方可能级联高达数十个,那么监控同一链路不同层级server的性能和参数日志就很重要,也可以依赖对此设置异常告警。

延伸一个问题,在超大型分布式系统里,为了更高的响应速度,可能会部署多机房,这时候很多业务的数据库架构为了性能就会出现跨zone拒绝写入的问题,这时候就很需要服务路由去解决找到正确的机房。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
11天前
|
Go API 数据库
[go 面试] 分布式事务框架选择与实践
[go 面试] 分布式事务框架选择与实践
|
18天前
|
Java 关系型数据库 MySQL
(二十七)舞动手指速写一个Seata-XA框架解决棘手的分布式事务问题
相信大家对于事务问题都不陌生,在之前《MySQL事务篇》中曾详解过MySQL的事务机制,在传统的单库环境下开发,咱们可依赖于MySQL所提供的事务机制,来确保单个事务内的一组操作,要么全部执行成功,要么全部执行失败。
|
1天前
|
Java 应用服务中间件 数据库
SpringCloud:服务保护和分布式事务详解
SpringCloud:服务保护和分布式事务详解
11 0
|
1天前
|
存储 分布式计算 Hadoop
分布式计算框架在大规模数据处理中的应用
【8月更文第18天】随着大数据时代的到来,对海量数据进行有效的存储、处理和分析变得越来越重要。传统的单机系统已经无法满足PB级别数据集的需求。分布式计算框架,如Apache Hadoop和Apache Spark,成为了处理这些大规模数据集的重要工具。
8 0
|
3天前
|
Java 开发者 Spring
一个强大的分布式锁框架——Lock4j
【8月更文挑战第15天】在分布式系统日益普及的今天,如何确保数据的一致性和避免并发冲突成为了开发者们面临的重大挑战。Lock4j,作为一个基于Spring AOP的分布式锁组件,以其简单易用、功能强大、扩展性强的特点,成为了解决这些问题的有力工具。今天,我们就来深入探讨一下Lock4j的技术特点和应用实践。
11 0
|
1月前
|
分布式计算 API 对象存储
Ray是一个开源的分布式计算框架,用于构建和扩展分布式应用。它提供了简单的API,使得开发者可以轻松地编写并行和分布式代码,而无需担心底层的复杂性。
Ray是一个开源的分布式计算框架,用于构建和扩展分布式应用。它提供了简单的API,使得开发者可以轻松地编写并行和分布式代码,而无需担心底层的复杂性。
132 11
|
2月前
|
消息中间件 传感器 Cloud Native
事件驱动作为分布式异步服务架构
【6月更文挑战第25天】本文介绍事件驱动架构(EDA)是异步分布式设计的关键模式,适用于高扩展性需求。EDA提升服务韧性,支持CQRS、数据通知、开放式接口和事件流处理。然而,其脆弱性包括组件控制、数据交换、逻辑关系复杂性、潜在死循环和高并发挑战。EDA在云原生环境,如Serverless,中尤其适用。
62 2
事件驱动作为分布式异步服务架构
|
1月前
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
119 5
|
2月前
|
数据采集 JavaScript Java
一款分布式爬虫管理平台,支持多种语言和框架
项目介绍 Crawlab —— 一个基于 Golang 的分布式爬虫管理平台,支持Python、NodeJS、Go、Java、PHP 等多种编程语言以及多种爬虫框架。 主要功能:
|
2月前
|
Shell 虚拟化
分布式系统详解--框架(Zookeeper-基本shell命令)
分布式系统详解--框架(Zookeeper-基本shell命令)
33 1

热门文章

最新文章