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

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

相关推荐
叶北辰CHINA5 小时前
nginx反向代理,负载均衡,HTTP配置简述(说人话)
linux·运维·nginx·http·云原生·https·负载均衡
王彬泽1 天前
【微服务】负载均衡 - LoadBalance(day4)
微服务·负载均衡
秋夫人1 天前
负载均衡可以在网络模型的哪一层?
运维·网络·负载均衡
睆小白1 天前
【理论】负载均衡
运维·负载均衡
holeer2 天前
基于Apache和Tomcat的负载均衡实验报告
运维·负载均衡
努力--坚持3 天前
SpringCloud入门(四)Ribbon负载均衡
负载均衡·springcloud
天冬忘忧3 天前
Flume实战--Flume中的拦截器详解与操作
大数据·负载均衡·flume
为难4524 天前
负载均衡(Load Balancing)是一种计算机技术,用于在网络应用中分配工作负载,以优化资源使用、最大化吞吐量、减少响应时间以及避免过载。
运维·负载均衡
-纸短情长4 天前
负载均衡--相关面试题(六)
运维·负载均衡
杰信步迈入C++之路4 天前
【SpringCloud】多机部署, 负载均衡-LoadBalance
java·spring cloud·负载均衡