日10亿级处理,基于云的微服务架构(2)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 日10亿级处理,基于云的微服务架构(2)

10.4     API 网关

 

API 网关是微服务架构中不可或缺的部分。API 网关是对外提供的服务,是系统的入口,所有的外部系统都需要通过 API 网关来接入。Dgateway 提供安全认证、流控、路由、 API 版本管理等功能。流控维度分为用户类型、用户来源、IP、业务 API 等,保护服务或资源不被滥用或攻击。DGateway 基于开源软件 Tyk 做了二次开发。

 

 

10.5     服务框架

 

服务框架分两部分,高可用的 RPCDerbySoft-RPC)和服务依赖管理,如图 10.4 所示。



image.png


10.5.1    高可用 RPC

 

RPC 是微服务架构中最重要的基础组件,一个健壮的 RPC 能有效降低实施微服务架构的成本。RPC 封装了远程调用的复杂细节,让服务使用方感觉像调用本地方法一样调用远程方法,服务提供方感觉像实现本地接口一样来实现服务。DerbySoft-RPC 分为 Client Server 两部分。Client 主要有以下功能。

 


客户端故障检测,识别并标示太慢或崩溃了的服务器。

 

熔断机制,如果发现服务超时比例过限,则启动熔断,客户端会快速返回失败,以减轻服务端的压力,定时允许部分请求通过,根据请求返回的健康程度来决定是否恢复熔断。

 

负载均衡策略,通过记录到每个节点的未完成请求数来决定下一个请求发到哪里。容错机制,对某些错误自动重试,比如连接的服务节点不可用时可以自动将请求再次发送到其他节点,可定义重试次数。

 

序列化和反序列化,选择序列化工具最重要的考量点有性能高低、是否多语言支持、序列化后的消息大小、是否向前兼容等。我们尝试过各种序列化工具,而 Protocol Buffer 在性能和空间占用上都表现优异,是我们使用最频繁的序列化工具。对敏感数据加密,比如信用卡等敏感信息,需要在 Client 端加密传输。

 

超时管理,可设定每个请求的超时时间。


Server 部分相对简单,主要提供超时管理、序列化和反序列化、敏感信息解密、队列管理、线程管理等功能。


刚才提到选择序列化工具时需要考虑是否支持多语言,这一点很重要,RPC 最好能在多语言环境下实现,这样能让技术团队突破编程语言限制,使技术栈更丰富灵活。我们在这方面是有过教训的。


在公司早期,大概是 2009 年,当时的业务量不大,在语言上主要使 Java,为了方便我们在第一个 RPC 版本上采用了 Java 序列化机制,却导致后面想要更换编程语言时大受限制。因此我们做了第二版 RPC,将序列化机制换掉,采用 Java 的字节序以兼容第一个版本。DerbySoft-RPC 是第三版 RPC,实现了对 GoScala Java 三种语言的兼容。原则上我们不限制服务的实现语言,只要能按要求实现服务接口并满足性能要求即可。微服务化后的一个好处就是根本不用担心使用小众的编程语言,如果每个服务的粒度足够小,那么最坏的情况就是在没人能维护这个小众语言的服务时,需要花点时间用熟悉的语言来重写。

 

 

10.5.2    服务依赖管理

 

 

微服务化之后,系统面临的一个突出问题是服务虽小,但是数量极多。如果这些服务全部在一个可用区内,那么服务之间的依赖还比较好管理,可以做服务自动注册和发现来实现依赖管理,但是如果服务分布在很多可用区中,尤其是分布在跨国跨地区的可用区之间,则其依赖和调用的管理就会比较麻烦。

 

另外,跨可用区服务之间的调用还需要考虑通信安全的问题,对每个服务设置不同的特殊端口,如果需要跨区域调用服务,那么配置访问权限也是一件麻烦的事情。

 

众多服务的依赖示例如图 10.5 所示。

 



image.png



10.5 所示的服务依赖是不是很乱?我们的服务节点分布在全球 14 个可用区,大部分在亚马逊云上,小部分在自建的私有云里,可用区之间的服务有复杂的依赖关系。为了解决这种情况下服务之间的依赖调用问题、API 安全问题和服务的高可用问题,我们设计开发了路由服务,以解耦服务的调用者和提供者,简化网络拓扑及服务器的安全配置。引入路由之后,简化后的服务之间的依赖关系如图 10.6 所示。


 


image.png


所有的服务只和路由通信,服务之间不再相互依赖,每个服务只需要依赖并维护自己所在的可用区路由节点,路由会找到调用的服务目的地。绝大部分情况下,它在本区域内就能找到相应的服务,不需要跨区,这取决于服务的部署情况。为了提高响应速度,每个可用区都需要部署关键的服务,除非本可用区的服务崩溃了,否则在这种情况下不会出现跨区访问。有些服务不是那么重要,可能只会在某个或某几个可用区中部署,这时也可能会出现服务跨可用区调用的情况。


这样不仅更好地管理了依赖,解决了服务器可用区调用问题,还解决了 API 访问安全问题:每个可用区建立一个 VPC(虚拟私有云),所有的服务都在 VPC 内,VPC 内的 API 调用可忽略安全验证,跨 VPC 路由节点之间用安全组来限 IP 白名单访问,只允许路由节点可以跨可用区访问其他 VPC 内的路由节点,服务访问路由或者路由访问服务都必须在同一个 VPC 内使用内网地址访问。

相关文章
|
5天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
5天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
16天前
|
Kubernetes 安全 Java
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。
|
1天前
|
持续交付 API 开发者
构建高效微服务架构:后端开发的新范式
【4月更文挑战第24天】 随着现代软件系统的复杂性日益增加,传统的单体应用已难以满足快速迭代与灵活扩展的需求。微服务架构作为一种新兴的软件开发模式,以其服务的细粒度、独立部署和弹性伸缩等优势,正在逐渐成为后端开发的重要趋势。本文将深入探讨微服务架构的设计原则、关键技术以及在实际业务中的应用实践,旨在为后端开发者提供构建和维护高效微服务架构的参考指南。
|
3天前
|
监控 API 持续交付
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第23天】 随着现代软件开发实践的不断演进,微服务架构已经成为企业追求敏捷、可扩展和弹性解决方案的首选。本文深入探讨了如何构建一个高效的微服务架构,涵盖了关键的设计原则、技术选型以及实践建议。通过分析微服务的独立性、分布式特性和容错机制,我们将揭示如何利用容器化、服务网格和API网关等技术手段,来优化后端系统的可维护性和性能。文章旨在为后端开发人员提供一套全面的指南,以应对不断变化的业务需求和技术挑战。
|
7天前
|
机器学习/深度学习 运维 Prometheus
探索微服务架构下的系统监控策略
【4月更文挑战第18天】在当今快速迭代和持续部署盛行的软件工程实践中,微服务架构因其灵活性和可扩展性受到企业青睐。然而,随着服务的细粒度拆分和网络通信的增加,传统的监控手段已不再适用。本文将探讨在微服务环境中实施有效系统监控的策略,包括日志聚合、性能指标收集、分布式追踪以及异常检测等关键技术实践,旨在为读者提供构建稳定、可靠且易于维护的微服务系统的参考指南。
12 0
|
7天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第18天】在数字化转型的浪潮中,微服务架构已成为企业提升系统灵活性、加速产品迭代的关键。此文深入探讨了构建高效微服务架构的实践方法,包括服务划分原则、容器化部署、持续集成/持续部署(CI/CD)流程以及监控与日志管理等关键技术点。通过分析具体案例,揭示了微服务在提高开发效率、降低维护成本及促进团队协作方面的显著优势。
|
8天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
10天前
|
监控 JavaScript 安全
构建微服务架构下的API网关
【4月更文挑战第15天】在微服务架构中,API网关扮演着至关重要的角色。它作为系统的唯一入口,不仅负责请求的路由、负载均衡和认证授权,还涉及到监控、日志记录和服务熔断等关键功能。本文将探讨如何构建一个高效且可靠的API网关,涵盖其设计原则、核心组件以及实现策略,旨在为后端开发人员提供一套实用的指导方案。
25 4
|
11天前
|
监控 负载均衡 API
构建高性能微服务架构:后端开发的最佳实践
【4月更文挑战第14天】 在当今快速发展的软件开发领域,微服务架构已成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了后端开发人员在设计和维护高性能微服务时需要遵循的一系列最佳实践。我们将从服务划分原则、容器化部署、API网关使用、负载均衡、服务监控与故障恢复等方面展开讨论,并结合实际案例分析如何优化微服务性能及可靠性。通过本文的阅读,读者将获得实施高效微服务架构的实用知识与策略。