您将需要的最后一个企业 Web 架构模式。直到下一篇。
目标是通过以下方式优化开发人员体验:
project omega概念验证 - 微服务整体混合
project omega演示 - Kubernetes 微服务和独立容器部署
我想证明我们不必牺牲开发人员的效率来获得可扩展性。有关微服务和单体应用的优缺点的更多讨论请参见:微服务和单体应用。
我的印象是,许多行业专家会让我们相信以下是我们的主要 3 个选择:
我想表明我们不必选择这些选项中的任何一个。只要有一点创造力,我们就可以拥有一个真正的“混合体”,它既是一个整体,又是一组微服务。根据我目前的策略,我认为我们无法消除单体应用和微服务的所有缺点,但我们可以消除两者的许多痛点。
技术堆栈与我试图证明的高级概念基本上无关,但对于这个项目我将使用:
拥有大型应用程序的公司越来越多地被推向微服务,以便它们可以水平扩展(以及其他原因)。因此,为了实现这一目标,我们正在考虑以下内容:
这是另一个版本,显示了可能实现水平缩放的一种方法:
一旦我们沿着这条路走下去,我们最终就会遇到当地发展的真正问题。这实际上取决于产品是什么样的、有多少开发人员、以及谁在做什么、多久工作一次。话虽这么说,很大一部分选择微服务的公司最终都会陷入这样的境地:开发人员必须就如何进行日常开发做出一些艰难的选择。 project omega的目标是表明,我们可以通过在本地运行时将所有服务合并到一个应用程序中来消除本地运行服务的开销:
这是文件夹结构:
这是部署为微服务的样子:
每个实例都有所有代码的副本,但仅运行特定微服务的初始化、服务端点路由和工作进程。
这就是为什么在本地将应用程序作为整体运行如此简单,因为我们只需查找名为SERVICE_KEY
的环境变量,或者如果它不存在,则初始化所有服务。
其他服务特定初始化的示例:
当调用 Startup 时,它会扫描程序集以查找继承ProjectOmegaService
的类型,创建一个实例并运行该服务的初始化逻辑。当本地运行时,它将运行所有这些。
安装先决条件:
请注意,如果您有一段时间没有执行此操作,那么获取在 Windows 上运行的最新版本的 docker 可能需要一些额外的步骤,例如安装 WSL 2 和刷新 WSL 发行版。请遵循 Docker 网站上的任何说明。
步骤:
yarn run installAll
yarn run syncEnvFiles
.env.server
中的OMEGA_DEFAULT_DB_PORT
和OMEGA_MSSQL_HOST_PORT
yarn run dockerDepsUpDetached
启动依赖项yarn run dbMigrate
yarn run both
(这同时用于运行选项 2 中的命令)yarn run client
,在另一个终端中运行yarn run server
在第一次使用dotnet test
运行单元测试之前或在新的数据库架构上添加单元测试之后:
yarn run dockerDepsUpDetached
运行,则启动依赖项yarn run testDbMigrate
dotnet test
在 docker 中模拟生产和微服务:
yarn run dockerDepsUpDetached
运行yarn run dockerRecreateFull
如果您在 Linux 上进行开发,启动服务器时可能会遇到以下错误:
System.AggregateException:发生一个或多个错误。 (已达到 inotify 实例数量的配置用户限制 (128),或已达到打开文件描述符数量的每进程限制。)
这可能是由于 vscode 使用了太多文件监视造成的。您可以通过运行以下命令来增加inotify
实例限制(不仅仅是监视限制,该限制可能已经在/etc/sysctl.conf
文件中设置得非常高):
echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
设计模式成本效益分析:DesignPatternCostBenefit.md
设计模式变体:DesignPatternVariations.md
决策:Decisions.md
软件开发理念和咆哮:https://gist.github.com/mikey-t/3d5d6f0f5316abf9e74fb553be9fdef3