介绍
好吧,标题似乎是一个大胆的陈述,所以让我们澄清一下我所说的微服务系统是什么意思。我不是指要在生产中使用的任何类型的框架,只是一个了解微服务架构的挑战以及它如何在幕后工作的项目。
我不打算将这个系列作为分步指南,因为到最后它可能至少有 100 篇文章。相反,我将尝试写关于设计选择、如何编写一些机制并突出一些有趣的问题(从全栈开发人员的角度来看)我在此过程中偶然发现。
我们在建造什么
首先,我们的目标是什么类型的系统?这将决定我们需要什么样的服务,以及系统的非功能性需求。
最近在玩《中土世界:战争之影》,心想:为什么不为索伦军队创建管理应用程序呢?因此,一个系统来统治他们所有人的想法(简称*“*一个系统” )。然后我决定把它变成一种学习体验,所以我不会把自己限制在我知道的 Java 和 Angular 上,也会尝试学习其他语言。
技术栈
我打算使用和学习至少基础知识的技术是:
- 对于服务:
- Java ( Zulu) 和Spring BOOT (我从头开始写的东西是有限制的;))
- Haskell- 因为我以前从未使用过函数式语言
- Python- 因为它广受欢迎
- GoLang - 因为为什么不
- 对于前端:
- UI的选型
- 服务器端的Java ( Zulu) 和Spring BOOT
- 对于部署:
- Docker和 Docker-compose
- 架构模式:
- 微服务
- 前端SPA
现在,已经决定了,我们是否要使用 Netflix Hystrix、Ribbon 等库?我们要使用 RabbitMQ 吗?嗯,没有。由于这是一个学习经验,我们将尝试自己实施。它可能最终不会成为有史以来最好的代码,但它会让我们了解这些库是如何实现的,这反过来又可以帮助我们在职业生涯中更好地调试或实现其他解决方案。
架构 (v0.0.1)
好的,或多或少地决定了技术堆栈,我们现在需要设计实际的架构。The One基本上是一个资源管理系统,其中资源范围从乌鲁克到前哨,再到食物链和武器储存。
每个管理系统都需要有某种用户数据库来允许访问控制、身份验证和授权服务,以及 UI 应用程序来允许用户友好地访问。但是由于选择的架构是微服务,我们不能简单地编写一个 Spring BOOT 应用程序并完成它,我们还需要:
- API网关连接不同的服务
- 服务发现允许我们动态启动和停止服务
- 记录器服务聚合来自每个服务的日志
- 服务监控
- 还有一些其他的事情
基本图将如下所示(为了使其更小,我省略了一些内容):
看起来它不会做太多工作 - 通常在公司中可能不会 - 但我们将从头开始构建它,因此,第一个里程碑将是:
- 创建 API 网关服务,代理对用户服务的请求,以从服务发现获得地址。
- 用户服务和 API 网关将等待服务发现启动,然后再启动自己。
- 启动后,用户服务将向服务发现注册自己,并传递可用的 IP 和端口。
- 将有脚本在本地或使用 docker 构建和运行所有内容。