以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的?
  • 证书又是怎么回事?
  • 证书和域名怎么就绑定在一起了呢?
  • ...

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

相关推荐
跳跳的向阳花7 小时前
03-03、SpringCloud第三章,负载均衡Ribbon和Feign
spring cloud·ribbon·负载均衡
linweidong1 天前
MariaDB面试题及参考答案
linux·运维·数据库·负载均衡·dba·mariadb·后端面试
码农研究僧3 天前
详细分析ipvsadm负载均衡的命令
运维·负载均衡·lvs·ipvsadm
wclass-zhengge3 天前
04高可用高并发(D2_高可用 - D1_负载均衡)
运维·负载均衡
不会编程的懒洋洋3 天前
Spring Cloud OpenFeign 声明式服务调用与负载均衡组件
java·spring boot·后端·spring·spring cloud·负载均衡·openfegin
海绵波波1074 天前
集群聊天服务器(12)nginx负载均衡器
服务器·nginx·负载均衡
.生产的驴4 天前
SpringCloud OpenFeign负载均衡远程调用 跨服务调用 连接池优化
java·运维·spring boot·后端·spring·spring cloud·负载均衡
zyh200504304 天前
SpringCloud多机部署,负载均衡-LoadBalance
spring·spring cloud·负载均衡
Likelong~4 天前
RPC框架负载均衡
网络协议·rpc·负载均衡
Dklau-c4 天前
探索Linux内核中的Runqueue:从O(n)到O(1)的演进与负载均衡应用
linux·服务器·网络·负载均衡