所谓的应用后台就是指机房。机房架构是一个庞大的工程,你可能听说过很多大型互联网公司曾在各种技术峰会上介绍它们的“三地五中心”多机房,甚至是全球异地多活机房等,这些“高大上”的话题讨论的都是机房架构的内容。机房最简单的形式是单机房, 本章会用大量篇幅来讨论它。虽然拥有亿级用户的互联网应用的底层不大可能采用这种架构,但是它是我们了解机房架构的重要基础。首先,在建设多机房前,我们需要熟悉一个机房的“五脏六腑”,只有非常清楚地知道单机房架构的技术细节,才能轻车熟路地构建多机房架构;其次,各互联网公司的多机房架构体系并不是一步到位搭建的,而是随着用户的逐步扩张一步步演进而来的。让我们先抛开那些知名互联网公司今天的荣耀,回到它们过去艰难的岁月,一般而言,这些公司在创业起步阶段的特点如下。
用户量级相对较小。
研发工程师较少。
产品营收能力较差,现金储备紧张。
如果初创互联网公司选择直接构建多机房架构,则将是一件非常困难的事情。因为它要求公司:
已拥有海量用户,且难以接受机房级别的故障。海量用户意味着有海量数据、海量请求,单机房的资源已经无法满足业务需求,需要拓展到多机房;而且,如果发生了机房 ...
你可能在1.1节的引言中注意到业务服务层包括HTTP服务和RPC服务,两者的定位不一样。一般来说,一个业务场景的核心逻辑都是在RPC服务中实现的,强调的是服务于后台系统内部,所谓的“微服务”主要指的就是RPC服务;而HTTP服务强调的是与用户请求的交互,它做的主要工作一般比较简单,比如校验用户请求、打包响应数据,而用户请求真正的处理逻辑会被HTTP服务通过RPC请求交给RPC服务来执行,HTTP服务更像是业务服务层的“网关”。RPC服务对后台内部暴露RPC协议,而HTTP服务对后台外部暴露HTTP。
为什么后台内部要专门使用RPC协议来通信,而不直接使用HTTP?这就要从RPC的概念说起了。
RPC ( Remote Procedure Call,远程过程调用)的目标就是屏蔽网络编程的细节,能够像调用本地方法一样调用远程方法,让开发者更专注于业务逻辑本身。如图1-22所示,在一个单体应用内,假设有一个Calculator接口以及这个接口的实现类Calculatorlmpl,那么要调用Calculator的add方法执行相加运算就可以直接调用,这是因为Calculatorlmpl实现类和 ...
讲到这里,我们已经对一个客户端请求进入业务HTTP服务的过程有了较为详细的了解。业务HTTP服务在处理请求的过程中免不了与其他下游服务通信——可能会调用其他业务服务,可能需要访问数据库,可能会向消息中间件投递消息等,所以业务HTTP服务必须知道下游服务部署的可用地址。这就是本节要介绍的服务发现问题。
这里不是特指HTTP服务,在当前流行的微服务架构下,任何服务都涉及与其他服务通信的问题。要求每个服务的研发人员主动维护下游服务地址是不现实的,我们需要为每个服务提供可以自动发现下游服务地址列表的能力,这就是服务发现。服务发现组件是微服务架构下最重要的基础组件之一。
1.5.1 注册与发现服务发现的技术原理并不复杂,一般通过提供一个服务注册中心来实现。这个服务注册中心主要负责两件事情:
管理每个服务的地址列表(注册)
将某服务的地址告知调用者(发现)。
让我们通过一个例子来阐明服务注册中心的工作流程。调用者A需要调用服务B来完成某请求,服务发现过程如图1-18所示。
服务发现过程描述如下:
服务B的各个服务实例启动后,将自己的地址信息注册到服务注册中心,由服务注册中心将其存储起来。
...
前言本篇博客主要分享Load Balancing(负载均衡),将从以下方面循序渐进地全面展开阐述:
介绍什么是负载均衡
介绍常见的负载均衡算法
负载均衡简介初识负载均衡负载均衡是系统设计中的一个关键组成部分,它有助于将传入的请求和流量均匀分布到多个服务器上。负载均衡的主要目标是通过避免单个服务器过载和减少停机时间来确保高可用性、可靠性和性能。
通常,负载均衡器位于客户端和服务器之间,接收传入的网络和应用程序流量,并使用各种算法将流量分布到多个后端服务器上。通过将应用程序请求分散到多个服务器上,负载均衡器减轻了单个服务器的负载,并防止任何一个服务器成为单点故障,从而提高了整体应用程序的可用性和响应速度。
为了充分利用可扩展性和冗余性,我们可以尝试在系统的每一层进行负载均衡。我们可以在三个地方添加负载均衡器(LB):
在用户和Web服务器之间:这有助于在多个Web服务器之间分配用户请求,以防单个服务器过载并提高网站的响应速度和可用性。
在Web服务器和内部平台层之间:如应用服务器或缓存服务器。这一层的负载均衡可以进一步提高处理效率,优化资源的使用,并确保应用层的稳定性和效率。
在 ...