java - AWS 中的生产级微服务架构
问题描述
我有一个新的 Web 应用程序,在我们公司,我们决定如下所示,我是第一次创建架构,因此需要一些输入。
1) 前端 - React.js
2)后端 - Java(春季启动)
3) 架构——微服务
4) 基础设施 - AWS
5) CI - 詹金斯
我们将开发分为三个阶段
第 1 阶段 -使用 Spring Boot 和 Spring Cloud 创建 AWS 基础设施、前端服务和少量后端服务。尽可能少地使用 AWS 服务
第 2 阶段 -创建更多后端服务并将所有内容 docker 化
第 3 阶段 -使用 Kubernetes 编排前一个阶段,并在需要时使用更多 AWS 服务
我处于第 1 阶段,经过大量资源和学习材料后,在创建生产级架构和 AWS 环境方面需要帮助。有很多单独的资源,但没有找到太多关于真实系统在运行时应该是什么样子的信息。
1)如何隔离环境?
我的理解 -创建将有 5 个帐户的组织 - 根、安全、共享服务、产品和非产品 aws 帐户。如果需要,非产品可以有多个环境,例如测试、阶段。
Something like this
2)如何创建安全/网络层?
我的理解 -创建私有和公共子网,并在共享服务和非产品环境之间创建 vpc 对等,并使用 iam 角色。
3) 设计微服务的最佳方式?
我的理解 -在后端有一个微前端和微服务。客户端将在浏览器中请求网页,请求将到达 UI 服务。
我很困惑组件的顺序是什么。
要么它应该先响应应用程序,然后它会去 api 网关或 ELB?
我们需要ELB吗?
请求会到达 ELB,然后它会到达 API 网关并进一步?
对所有这些问题的回答将决定下一个问题的答案
选项 A 还是 B?或者如果两者都错了?或者从客户端指向后端服务的箭头应该在哪里?
4) 在私有子网和公共子网中保留哪些资源?
我的理解 -在第 1 阶段,每个服务模型遵循一个实例,因此每个服务都将具有 ec2 实例。在以后的阶段,我们将转向容器化。很少有事情很清楚,后端服务和持久性(如 DB)将位于私有子网中,并且只保留非常少的公共资源,如仅堡垒主机等
- Question is depending on answer for question #3, what others should be public?
- ELB, api gateway, service discovery?
- do i need to keep NAT gateway always so as to allow private ones to access internet?
5) 完整的发布部署工作流程应该是什么?
我的理解 -开发人员提交代码,詹金斯应该触发构建、存储工件和部署。- jenkins server 应该如何与其他机器通信来部署服务?
- how credentials are managed for communication between jenkins and ec2 instances?
- what is the production grade structure for jenkins project? like does build, deploy and test should be separate items?
如果您在您的企业/组织中配置了相同的配置,如果一些经验丰富的架构师可以帮助我,我将非常感激,并且如果有任何可用的在线参考资料我无法找到用于构建此类生产级系统,请告诉我
注意 - 阶段 1 的设计应尽可能平稳过渡到阶段 2 和 3
解决方案
推荐阅读
- python - 如何使用 Python 和 BeautifulSoup 或 Pandas 从 Finviz.com 刮取 Top Gainers 和 Top Losers 的表格行?
- forms - Symfony 4 - 未单击时未请求复选框(通过 js 广告原型添加)
- python - Pandas 根据列表项重复行
- python - 在 django admin 中的 pre_save 上获取文件 mime 类型
- javascript - 以反应形式的角度处理选择标签的 onSelect 数据的最佳方法是什么
- python - 从python中的文本字符串中提取相关信息
- python - matplotlib 刻度与预先存在的刻度重叠
- java - 如何根据另一个列表中对象的字段值从列表中删除元素
- iis - 如何使用iis重写?
- sql - 使用计数 (*)、st_intersect 更新工作 sql 并查询按 group_id 计算实际数字