40了解云计算平台的高可用架构,如 AWS 的多可用区GCP 的负载均衡器

Posted 玩机科技社

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了40了解云计算平台的高可用架构,如 AWS 的多可用区GCP 的负载均衡器相关的知识,希望对你有一定的参考价值。

云计算平台提供的高可用架构可以帮助用户确保服务的可靠性和稳定性。在 AWS 和 GCP 中,高可用架构通常涉及多个可用区域(Availability Zones)或负载均衡器(Load Balancer),以确保服务的高可用性。

  1. AWS 的多可用区

AWS 的多可用区架构利用了 AWS 的全球基础设施。AWS 将数据中心和服务器分布在全球多个地点,每个地点都是一个可用区域。可用区域之间通过高速网络连接。AWS 用户可以将他们的应用程序和服务部署在多个可用区域中,从而确保服务的高可用性。

在 AWS 中,可用区域是一个逻辑概念。每个可用区域都是独立的、物理隔离的数据中心,但它们之间通过高速网络连接。AWS 的多可用区架构使用了这些可用区域,从而提供了高可用性和冗余性。当一个可用区域发生故障时,应用程序和服务可以自动切换到其他可用区域,从而保持连续性和可用性。

  1. GCP 的负载均衡器

GCP 的负载均衡器是一个基于软件的负载均衡器,可以帮助用户在 GCP 中部署高可用性应用程序和服务。负载均衡器可以将流量分发到多个虚拟机实例中,并将流量负载均衡到多个区域和可用区域。这有助于确保服务的可用性和可靠性。

GCP 的负载均衡器支持多种负载均衡算法,例如轮询、最小连接和 IP 散列。负载均衡器还支持 SSL 终止、内容转发和健康检查等高级功能。用户可以使用 GCP 控制台或 API 创建和配置负载均衡器,并将其与他们的虚拟机实例和服务相关联。

  1. 示例代码

以下是一个使用 AWS 多可用区和 GCP 负载均


在 GCP 中,用户可以使用 Cloud Deployment Manager 来创建负载均衡器和虚拟机实例。以下是一个简单的 Cloud Deployment Manager 部署文件,用于创建一个负载均衡器和两个虚拟机实例。这个文件将虚拟机实例部署在两个不同的区域中:

器的示例代码,演示了如何在 AWS 和 GCP 中实现高可用性。

在 AWS 中,用户可以使用 CloudFormation 模板来创建多个可用区域的网络基础设施。以下是一个简单的 CloudFormation 模板,用于创建一个 VPC 和两个子网。这个模板将子网分别部署在两个不同的可用区域中:

Resources:
  Vpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: "10.0.0.0/16"

  Subnet1:
    Type: AWS::EC2::Subnet
    Properties
VpcId: !Ref Vpc
CidrBlock: "10.0.1.0/24"
AvailabilityZone: us-west-1a

Subnet2: Type: AWS::EC2::Subnet Properties: VpcId: !Ref Vpc CidrBlock: "10.0.2.0/24" AvailabilityZone: us-west-1b

resources:

name: my-load-balancer
type: compute.v1.forwardingRule
properties:
region: us-west1
IPAddress: 10.0.0.1
loadBalancingScheme: EXTERNAL
portRange: 80-80
target: $(ref.my-target-pool.selfLink)

name: my-target-pool
type: compute.v1.targetPool
properties:
region: us-west1
healthChecks:

$(ref.my-http-health-check.selfLink)
instances:
zone: us-west1-a
instance: $(ref.instance-1.selfLink)
zone: us-west1-b
instance: $(ref.instance-2.selfLink)
name: my-http-health-check
type: compute.v1.httpHealthCheck
properties:
port: 80
requestPath: /healthcheck

name: instance-1
type: compute.v1.instance
properties:
zone: us-west1-a
machineType: n1-standard-1
disks:

deviceName: boot
boot: true
autoDelete: true
initializeParams:
sourceImage: debian-cloud/debian-10
name: instance-2
type: compute.v1.instance
properties:
zone: us-west1-b
machineType: n1-standard-1
disks:

deviceName: boot
boot: true
autoDelete: true
initializeParams:
sourceImage: debian-cloud/debian-10


这个 Cloud Deployment Manager 部署文件创建了一个负载均衡器,将流量负载均衡到两个虚拟机实例。负载均衡器将流量分配到两个区域中的虚拟机实例上。这个部署文件还创建了一个健康检查,用于确保虚拟机实例的可用性。如果一个虚拟机实例不可用,负载均衡器会将流量切换到另一个可用的虚拟机实例上。

以上是使用 AWS 和 GCP 实现高可用性的简单示例代码。这些示例代码可以帮助用户了解如何在云计算平台上实现高可用性。在实际生产环境中,用户需要仔细考虑他们的应用程序和服务的需求,并根据需求选择适合的高可用性架构。还需要注意架构的复杂性和成本,以确保在高可用性的同时也保持成本效益

本地机器和AWS之间的多处理?

【中文标题】本地机器和AWS之间的多处理?【英文标题】:Multiprocessing between local machine and AWS? 【发布时间】:2019-02-04 14:28:16 【问题描述】:

我使用 multiprocessing.managers 的 BaseManager 开发了 3 个脚本(一个服务器、一个写入器和一个读取器)。所有这些都在 AWS 或本地运行良好。但现在我想把事情搞混。对于更复杂的脚本,使用 GPU,我想使用我的本地机器,并且仍然在 AWS 之外运行它......

如何连接到在 AWS 上运行的创建 IPC、队列等的“服务器”?

(编辑:我找到了答案,请看下面,我删除了我之前留下的技术细节,并为有同样问题的人创建了一个更通用的问题和答案)

请查看以下 3 个实体的代码:

服务器:

from multiprocessing.managers import BaseManager
from queue import Queue

class Server():
    def __init__(self, ip, port, authkey):
        super(Server, self).__init__()
        self.ip = ip
        self.port = port
        self.authkey = authkey

    def make_server_manager(self):
        """ Create a manager for the server, listening on the given port.
            Return a manager object with all the required queues.
        """
        q = Queue()  # input queue
        BaseManager.register('q', callable=lambda: q)
        manager = BaseManager(address=(self.ip, self.port), authkey=self.authkey)
        print('Server started at port ' + str(self.port))
        return manager


if __name__ == "__main__":
    ip = '172.31.2.45'
    port = 11111
    authkey = 'abc'.encode('utf-8')

    s = Server(ip, port, authkey)
    mgr = s.make_server_manager()
    s = mgr.get_server()
    s.serve_forever()

Writer(在 AWS 上运行,但如果我需要它也可以在我的机器上本地运行):

from multiprocessing.managers import BaseManager

class Client():

    def __init__(self, ip, port, authkey):
        super(Client, self).__init__()
        self.ip = ip
        self.port = port
        self.authkey = authkey

        # Create the queus and variables
        BaseManager.register('q')
        m = BaseManager(address=(ip, port), authkey=authkey)
        m.connect()
        self.q = m.q()

if __name__ == "__main__":
    ip = '172.31.2.45'
    port = 11111
    authkey = 'abc'.encode('utf-8')

    Client = Client(ip, port, authkey)

    while True:
        X = input('What is your secret message?')
        Client.q.put(X)
        if X == 'Close':
            break

阅读器(在我的本地机器上运行以完成本练习)

from multiprocessing.managers import BaseManager

class Client():

    def __init__(self, ip, port, authkey):
        super(Client, self).__init__()
        self.ip = ip
        self.port = port
        self.authkey = authkey

        # Create the queus and variables
        BaseManager.register('q')
        m = BaseManager(address=(ip, port), authkey=authkey)
        print('connecting...')
        m.connect()
        print('connected')
        self.q = m.q()

if __name__ == "__main__":
    ip = '18.191.25.217'
    port = 11111
    authkey = 'abc'.encode('utf-8')

    Client = Client(ip, port, authkey)

    while True:
        rcvd = Client.q.get()
        print(rcvd)
        if rcvd == 'Close':
            break

【问题讨论】:

【参考方案1】:

(我自己找到了答案,所以决定稍微修改一下我的问题,并确保我突出显示答案中的重要部分。)

为了使其正常工作,请务必在 AWS 上的安全组和脚本中正确设置 IP 地址。

我这里给出的答案是假设服务器在AWS上运行,其他脚本既可以在本地运行,也可以在AWS上运行。

您需要进行以下设置: 在您的 AWS 安全组中创建具有以下规范的自定义 TCP 规则: 1. IP地址:你本地机器的IP地址 2.端口范围:你的Server运行的端口(范围/编号),本例中为11111

您的脚本必须包含以下 IP 地址: - 服务器(在 AWS 上运行):AWS 上实例的私有 IP - 未在 AWS 上运行的进程(读取器/写入器/您选择在本地计算机上运行的任何内容):运行服务器的实例的公共 IPv4 地址

脚本中的端口号和验证码显然必须全部匹配。

希望很清楚。祝大家愉快。

【讨论】:

以上是关于40了解云计算平台的高可用架构,如 AWS 的多可用区GCP 的负载均衡器的主要内容,如果未能解决你的问题,请参考以下文章

网络产品动态-2016-6-28

AWS云计算平台工作使用中的心得

云计算架构课程

云计算的高可用性

云计算的高可用性

《系统虚拟化与云计算》大作业报告——云计算的高可用性