Architecture 我想把我的单片电脑转换成微服务,但我';我还在坚持。需要建议

Architecture 我想把我的单片电脑转换成微服务,但我';我还在坚持。需要建议,architecture,microservices,Architecture,Microservices,到目前为止,我正在开发的应用程序计划在web和移动设备上可用,所以我决定将其作为微服务 到目前为止,我的应用程序所能做的如下所示: 注册(电子邮件、用户名、密码、密码确认) 登录(电子邮件、密码) 使用Facebook登录(如果数据库中存在电子邮件,则自动登录;如果数据库中不存在电子邮件,则创建新记录,然后自动登录) 查看文章 文章 编辑文章 删除文章 如上所述,我应该进入多少服务?我不确定是否要将每个操作拆分为服务,如注册服务/登录服务,或者将其分组,因为用户服务是正确的方式 另一个问题是

到目前为止,我正在开发的应用程序计划在web和移动设备上可用,所以我决定将其作为微服务

到目前为止,我的应用程序所能做的如下所示:

  • 注册(电子邮件、用户名、密码、密码确认)
  • 登录(电子邮件、密码)
  • 使用Facebook登录(如果数据库中存在电子邮件,则自动登录;如果数据库中不存在电子邮件,则创建新记录,然后自动登录)
  • 查看文章
  • 文章
  • 编辑文章
  • 删除文章
如上所述,我应该进入多少服务?我不确定是否要将每个操作拆分为服务,如注册服务/登录服务,或者将其分组,因为用户服务是正确的方式

另一个问题是,当我单独拆分服务时,如何获得作者的文章数据以在我的站点上呈现?构建新的代理服务,该服务在文章服务中获取文章数据,然后在用户服务中获取作者数据?或者,不需要代理服务,只需在我的web应用程序控制器中获取文章数据,然后编写数据即可

到目前为止,我正在开发的应用程序计划在web和移动设备上可用,所以我决定将其作为微服务

基于应用程序将支持多个平台的事实选择微服务(MS)方法是不可取的。如果您以前从未处理过微服务体系结构,那么最好构建一个具有强大上下文边界的模块化整体。通过这种方式,将更容易专注于编程和实现应用程序,之后您可以逐步将monolith分解为微服务,一次一个(即,您从低流量的模块开始,比如注册服务)。此外,直接使用微服务,除非您是为了自己的体验或乐趣而做一个项目,这也属于过早优化的范畴。关于“巨石第一法”的更多信息,马丁·福勒写了一篇文章

如上所述,我应该进入多少个服务

[我是在拆分后端系统并通过API从前端调用MS的情况下回答的。] 注册和登录应该是一种不同的服务,因为通常情况下,注册的使用频率(一旦用户注册,他从现在开始只需登录)低于登录。Facebook登录将与登录MS一起使用。 查看文章的频率也比发布、编辑或删除(你有博客平台或Facebook)更高,因此一个MS将提供查看文章的数据,一个MS将用于发布、编辑或删除文章

当我单独拆分服务时,如何获得作者的文章数据以在我的站点上呈现

MS ArtArchitecture最受欢迎的方法是polyglot持久化,每个MS都有自己的数据库,其中包含它实际编辑或更新的表。然后,您可以通过调用其API来访问其他MS的数据(查看文章服务在其文章表中也有作者ID,然后您使用作者ID调用用户服务/注册服务以获取其完整信息),尽管这提供了更紧密耦合的体系结构


另一个选项是以事件的形式存储数据,其中新用户注册是一个事件,存储在用户服务MS数据库中并发送到某个队列或主题,其他服务可以注册以接收来自它的事件并将事件存储在其数据库中。这样,您将复制数据,但将具有更松散耦合(和异步)的体系结构。Google event driven data management了解有关此方法的更多信息。

这是一个需要回答的广泛问题,我建议您阅读DDD(域驱动设计)概念,并尝试将其应用于微服务体系结构。只是让你知道去微服务路线总是不成功,有很多因素要考虑。