一文讲透亚马逊云三层架构

关于三层架构,我们有很多想说的话:
(以下内容以下都在VPC中)

  1. cloudfront做CDN加速
  2. 网关规划
  3. S3做静态网站托管
  4. APIGateway作为统一网关入口+认证/限流
  5. Lambda 作为传统后端,并发,底层架构
  6. Redis缓存
  7. DDB作为持久化存储
    在这里插入图片描述

网络规划

出于HA的目的,我们用三个可用去来部署应用,由于VPC甚至子网的CIDR是不可变的,那么我们要前期规划好这个划分。

一般来讲我们是前后端分离的模式,所以在每个可用区会把前端,后端,数据库放在独立的子网里面,当然也需要预留一些IP地址的空间来应对后面的新需求,所以对于三个可用区而言要划分12个子网,当然如果再想预留一个AZ的空间也没关系,那就是一个VPC划分16个子网,现在用到9个,剩下7个用来应对以后不确定的业务需要。当然这个只是一个比较推荐的做法,可以根据业务需要做对应的调整。

在这里插入图片描述

认证以及流控

然后到后端,APIGateway提供了一系列的认证方式,包括Cognito集成Cognito用户池进行登录,也支持集成OIDC IDP使用JWT的认证,甚至也可以使用Lambda来做自定义的身份认证,访问需要授权的路由的时候会先进入到授权方的模块,然后再根据结果区访问目标的路由。
可以使用APIKEY做流量的的控制(header 中带api-key)。

在这里插入图片描述

后端应用

然后是后端,对于无服务而言我们后端一般都是Lambda,当然我们现在讨论的都在VPC的情况,这样lambda会在所在子网内生成一张网卡,所以效果是,公有的访问流量通过APIGateway转发到lambda,然后lambda使用VPC内的网卡来访问内网的数据库,比如redis,RDS,dynamoDB。
在这里插入图片描述

如果是传统后端上云,由于放在lambda上会更改项目代码,也可以选择部署到EC2上,然后使用NLB做负载均衡以及水平的弹性。这样的架构也可以使用VPC Link来集成到APIGatey中。
在这里插入图片描述

关于缓存:

  1. 延迟加载:查询时候没有命中缓存,在DB中查到数据,再把这条写到缓存中。
  2. 直写:写DB的时候直接更新缓存。
  3. TTL: 空间有限,设置缓存过期时间,防止大量缓存过期,TTL尽可能的打散。

【1】https://docs.aws.amazon.com/zh_cn/whitepapers/latest/serverless-multi-tier-architectures-api-gateway-lambda/single-page-application.html
【2】https://aws.amazon.com/cn/blogs/compute/understanding-vpc-links-in-amazon-api-gateway-private-integrations/
【3】https://aws.amazon.com/cn/caching/best-practices/

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 21:44:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 21:44:08       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 21:44:08       82 阅读
  4. Python语言-面向对象

    2024-05-11 21:44:08       91 阅读

热门阅读

  1. leetcode刷题:三数之和

    2024-05-11 21:44:08       33 阅读
  2. 思科基础命令(对标华为的HCIA知识)

    2024-05-11 21:44:08       35 阅读
  3. Goland GC

    Goland GC

    2024-05-11 21:44:08      35 阅读
  4. pg_basebackup备份恢复实战

    2024-05-11 21:44:08       26 阅读
  5. LeetCode 151.翻转字符串里的单词

    2024-05-11 21:44:08       32 阅读
  6. 【Linux】使用Valgrind定位内存增长问题

    2024-05-11 21:44:08       29 阅读
  7. C语言中的静态库和动态库的制作和使用

    2024-05-11 21:44:08       26 阅读
  8. 为何循环产生 SIGSGEV 信号处理函数打印

    2024-05-11 21:44:08       30 阅读
  9. Python 多进程和多线程在加速程序运行上的差别

    2024-05-11 21:44:08       36 阅读
  10. es 7.1.0 启用身份认证

    2024-05-11 21:44:08       27 阅读
  11. 送外卖面试回顾

    2024-05-11 21:44:08       27 阅读