繁体   English   中英

我应该如何设计Spring Microservice?

[英]How should I design my Spring Microservice?

我正在尝试为一个业余项目创建微服务Microservice architecture ,但我对某些决定感到困惑。 因为我以前从未使用过微服务,您能帮我吗?

  1. 我的要求之一是我的AngularJS GUI需要显示一些下拉列表或值列表(例如:国家/地区列表)。 这可以使用被获取Microservice REST调用,但应该在哪里值从何而来? 我可以从Config Server获取它们吗? 还是应该来自Database 如果是后者,那么每个微服务都应该具有自己的数据库以获取查询值,或者它可以是一个公用数据库吗?
  2. 在这种情况下,服务器端验证将如何工作? 我的意思是,GUI肯定会调用一个微服务来进行验证,但是验证服务应该是所有用例/屏幕的通用微服务,还是每个GUI页面一个,或者是否应该将CRUD也重新用于验证?
  3. 我如何处理后端不是数据库而是Web服务调用的用例? 我是否仍需要一些本地DB在这些调用之间保持某种状态(尤其是要注意Web服务调用失败的情况),然后将状态最终传递给GUI?

首先,没有单向设计微服务 ,必须根据用例和项目要求进行选择。

  1. 我可以将它们保存在配置服务器中吗? 还是应该来自数据库?

同样,这取决于用例和需求。 但是,由于每个MS都应该有自己的数据库,所以如果国家/地区只有名称,则可以使用数据库。 但是,如果他们与城市/州有某种关系,则应仅使用DB。

  1. 如果数据库应该每个微服务都具有自己的数据库以获取查询值,或者可以是一个通用数据库?

否,IMO多个MS不应依赖于单个DB,因为如果DB发生故障,则所有MS都将失败,因此不应该这样做。 每个MS应该与其他DB或MS一起单独工作。

  1. 验证服务应为所有UseCases / Screens的通用微服务

与第2点相同

  1. 在后端不是数据库调用而是另一个Web服务调用的情况下,如何处理? 我是否仍需要一些本地数据库在这些调用之间保持某种状态,然后将状态最终传递给GUI?

如果使用的是HTTP,则不应保存任何请求的状态。 如果要将请求重定向到另一个MS,则可以使用Feign客户端 ,该客户端提供了一种很好的方式来调用rest-api和其他重要功能,例如: Load balancing

微服务架构很简单。 在这里,我们将每个任务划分为单独的服务(例如Spring-boot应用程序)。 在每个应用程序示例中都会有登录功能,注册功能等等。每一个都会在微服务架构中提供独立的服务。

1.您可以将其存储在数据库中,因为如果要添加更多值,可以轻松添加。 您可以维护单独或单个数据库。 每个微服务具有单独集合或表的单个数据库。

  1. 验证意味着您正在询问谁可以使用哪种微服务(基于角色的访问)???

3.我认为你必须使用本地数据库。

微服务是一组松散耦合的服务。 例如,如果您正在创建电子商务应用程序,则用户管理可以是一项服务, 订单管理可以是一项服务, 退款和退款管理可以是另一项服务。 现在,这些服务中的每一个都可以进一步划分为较小的单元,可以将它们称为API端点。 例如, 用户管理可以将登录名作为端点,将注册名作为另一个端点。

如果您想真正利用微服务架构的功能,这就是我的建议。 对于上面的示例,为每个服务创建3个Springboot应用程序。 此后,您应该做的第一件事是在这些应用程序之间建立信任。 我希望JWT建立信任关系。 之后,一切都是小菜一碟。 这是您要寻找的答案:

  1. 理想情况下,应该使用数据库而不是将值保存在配置服务器中来获取国家/地区列表,这样就不必在每次添加新国家/地区时都重新编译代码。

  2. 如果您要指的是基于角色的访问,则可以使用@PreAuthorize轻松限制访问。

  3. 您可以在此用例中使用OkHttp或任何其他HttpClient。 而且您当然不需要维护任何本地数据库。 但是,如果需要,您可以缓存webservice调用的输出。

PS:如果您不了解所有美味佳肴,那么在微服务之间建立信任可能是一项复杂的任务。 在这种情况下,我建议继续使用单个Springboot应用程序。 这是一个整体架构。 我仍然会推荐JWT。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM