系统设计:代理&冗余&复制

2021-09-03 14:59:44 浏览数 (1)

代理

代理服务器是客户端和后端服务器之间的中间服务器。客户端连接到代理服务器以请求网页、文件、连接等服务。简言之,代理服务器是一种软件或硬件,充当客户端从其他服务器寻求资源请求的中介。

通常,代理用于过滤请求、记录请求,或者有时转换请求(通过添加/删除头、加密/解密或压缩资源)。

代理服务器的另一个优点是缓存可以处理很多请求。如果多个客户端访问特定资源,代理服务器可以缓存该资源并将其提供给所有客户端,而无需访问远程服务器。

那么什么时候使用呢?这里对于大促场景都有使用,比如我举个比较具体的。笔者曾经在京东,我就以京东举例子,京东的APP首页是直接曝光所有京东用户的,尤其是大促时候可能活跃用户上亿,同时参与商品促销、秒杀,那么对于这些热点商品,我们要如何处理呢?

毫无疑问就是要有个接入网关,为什么呢?因为大促的三大利器就是缓存、限流、降级。所以有时候你会发现页面给你返回现在页面故障正在恢复中,降级了。比如有时候你发现现在比较繁忙,请不要重复点击,限流了。还有的时候,你发现你明明看见有商品的,但是下单的时候发现没了,因为同步缓存的时候库存已经售光了。

那么网关是如何处理的呢?往往就是Nginx Lua代理服务器 三级缓存。

代理服务器类型

代理可以驻留在客户端的本地服务器上,也可以驻留在客户端和远程服务器之间的任何位置。以下是几种著名的代理服务器类型:

开放代理

开放代理是任何Internet用户都可以访问的代理服务器。通常,代理服务器仅允许网络组(即封闭代理)内的用户存储和转发DNS或网页等互联网服务,以减少和控制组使用的带宽。但是,使用开放代理,Internet上的任何用户都可以使用此转发服务。有两种著名的开放式代理类型:

1. 匿名代理-这些代理修订版在服务器上发布,但没有解析IP地址。比如我们的域名DNS实际上是隐藏了我们内部的服务器IP地址。

2.透明代理-比如我们的VIP实际上是我们的IP地址映射。

反向代理

反向代理代表客户端从一个或多个服务器检索资源。然后将这些资源返回到客户机,看起来好像它们来自代理服务器本身

冗余

冗余是指为了提高系统的可靠性而对系统的关键组件或功能进行的复制,通常采用备份或故障保护的形式,或为了提高实际系统性能。例如,如果一台服务器上只存储一个文件副本,则丢失该服务器意味着丢失该文件。由于丢失数据很少是件好事,我们可以创建文件的重复或冗余副本来解决此问题。

冗余在消除系统中的单点故障方面起着关键作用,并在发生危机时提供备份。例如,如果有两个服务实例在生产环境中运行,而其中一个出现故障,则系统可以故障切换到另一个。

复制

复制意味着共享信息以确保冗余资源(如软件或硬件组件)之间的一致性,从而提高可靠性、容错性或可访问性。

复制广泛应用于许多数据库管理系统(DBMS),通常在原始和副本之间具有主从关系。主控器获取所有更新,然后将更新传递到主的从服务器。每个从机输出一条消息,说明它已成功接收更新,从而允许发送后续更新。

笔者补充

其实从本质上来说,代理服务器相当于是我们为了满足隐私性,也就是软件设计原则的高内聚、低耦合。我们通过代理方式,可以轻松的屏蔽掉一些我们不想关注的事情(比如鉴权、缓存、聚合等),我们可以更聚焦的处理自身业务事情。冗余其实是复制以后的一种状态,我们是为了达到冗余来提高我们的高可用性,所以我们才会选择进行主从复制。而类似的思想就是不同集群之间的副本保留,比如ES的对于副本的使用。

参考资料

grok_system_design_interview.pdf

0 人点赞