以AWS云为例,了解基本的分布式系统搭建

前言

稍微大一点儿的系统基本都需要分布式部署,分布式部署也有很大方式。我们对基本的部署有一些了解,会引出一些基本的概念,这样方便我们理解其它方案。

单服务器部署

我们先在AWS里部署一个服务,然后引出问题,解决问题。

EC2

我们先创建一台EC2虚拟机,EC2是AWS提供虚拟服务器,可以简单理解和你手头的物理机一样。创建好之之后,我们就可以把服务部署到这台虚拟机了。

这台虚拟机被称为一个实例:

它有独立的IP地址,通过这个IP地址就可以访问你的服务。如果不能访问,还需要理解一个概念。

防火墙

创建每个实例的时候,都需要选择多个安全组,他就类似于你本机的防火墙。我们需要运行流量(数据请求)可以进入这台机器,互联网用户无法访问你的服务。

假设你的服务在这台服务器上监听的是3000端口,如果不设置安全组,别人是无法访问这个端口的。现在我们需要在安全组里添加一个规则,具体如下:

  • 类型:根据自己服务的需要选择,http、https、socket都可以选择自定义TCP,指示要注意端口。
  • 端口范围:我们的例子中是3000,意思是流量可以进入3000这个端口。
  • 源:是运行哪些用户可以访问这个端口,如果你是正常的互联网服务,按如图选择即可(允许所有的互联网用户访问)。

经过这样的设置之后,服务就可以正常的访问了。

负载均衡

由于我们的用户量比较大,一台服务器已经无法满足我们的需求了,于是我们又部署了一个实例。问题来了,现在两个实例有两个IP地址,但是,我们的域名已经绑定到其中一个先前那个IP了,怎么办?

创建负载均衡器

来到这里,创建负载均衡器:

根据需求选择负载均衡器擅长的类型。

安全组

和单台服务器的逻辑一样,需要选择允许流量进入的端口,比如我们允许80和443这两个http相关的端口。

侦听器和路由

我们根据需要创建侦听器和路由,这里我们选择侦听80和443端口。当流量进入这个负载均衡器的80和443端口的时候,我们希望它把流量路由到哪里?

于是,我们需要创建目标组。

目标组

目标组也需要设置端口,在我们这次示例中,我们的目标是3000端口,于是,我们这里设置一个目标组的端口是3000。

这里还需要设置目标状态的检查:

负载均衡会定时检查这个目标组里的实例,是否还能正常提供服务。比如我们提供一个api接口,用户访问的时候,返回的状态码是200,我们就可以在这里配置这些参数。当负载均衡器检查的时候,告诉它,这个服务还活着。

注册目标

配置好目标组的这些参数之后,需要把刚才我们创建的两个EC2实例注册到这个目标组,同样的,设置3000端口。

我们有多个实例,就在这个目标组注册多少个实例,这样负载均衡器就会把流量按规则路由到这些实例里。

证书

在添加侦听器的时候,如果选择TLS(也就是https)的话,会有安全设置的选项,这里主要是证书,选择一个之前创建的证书。或者新建证书:

新建证书

添加一个域名,证书会和这个域名绑定。

这个证书会有域相关的信息:

接下来需要去域名解析服务那里,创建一个CNAME的域名解析:

  • 主机记录:把CNAME名称添加到主机记录里(记得去掉后面的域名部分)
  • 记录值:把CNAME值复制进去

点击创建就可以了。等待几分钟,等状态完成,就可以在负载均衡那里配置了。

最后结果

当把这些配置完成之后,会得到如下结果的截图:

总结

最后截图里有个DNS名称,这个是可以直接访问。流量流程是这样的:

  1. 访问这个DNS,比如80端口
  2. 这个DNS背后是一个负载均衡器
  3. 负载均衡器侦听了80端口
  4. 80端口有一个路由的目标组
  5. 流量被路由到这个目标组
  6. 目标组配置了两个EC2实例
  7. 并且目标组把流量路由到了目标组的3000端口
  8. 这样,整个流程就走通了。

通过这几步,就了解了整个流程,其它云也是大同小异。

还有一点,刚才创建证书的时候,有一个域名,我们还没有利用它。

比如这个域名是a.b.com,如何把这个域名与我们的负载均衡器绑定呢,负载均衡那里提供了一个DNS,上面有说到,它是可以直接访问,这时候,我们就可以把这个域名在域名服务商那里创建一个CANME的记录,具体配置如下:

自此,真个流程都完结了。

因为知识是一棵树,我们总有疑问,比如:

  • 域名来自哪里?
  • 域名又是如何解析到这个DNS的?
  • 证书又是怎么回事?
  • 证书和域名怎么就绑定在一起了呢?
  • ...

这篇文章不能一一解答,只能按照一个线性的逻辑讲述,稍微有一点点分叉来解决依赖问题,其余需要不断的学习和梳理。

相关推荐
小晶晶京京1 天前
day35-负载均衡
运维·网络·网络协议·学习·负载均衡
CodeDevMaster2 天前
Gemini Balance:轻松实现Gemini API负载均衡与无缝切换的终极指南
负载均衡·api·gemini
扶风呀5 天前
具有熔断能力和活性探测的服务负载均衡解决方案
运维·负载均衡
Hello World呀6 天前
springcloud负载均衡测试类
spring·spring cloud·负载均衡
菜菜子爱学习6 天前
Nginx学习笔记(七)——Nginx负载均衡
笔记·学习·nginx·负载均衡·运维开发
扶风呀6 天前
负载均衡详解
运维·后端·微服务·面试·负载均衡
PXM的算法星球7 天前
spring gateway配合nacos实现负载均衡
spring·gateway·负载均衡
抛物线.9 天前
Docker Compose 部署高可用 MongoDB 副本集集群(含 Keepalived + HAProxy 负载均衡)
mongodb·docker·负载均衡
ZNineSun10 天前
什么是负载均衡,有哪些常见算法?
负载均衡·osi·七层网络模型
竹竿袅袅10 天前
Nginx 反向代理与负载均衡架构
nginx·架构·负载均衡