我应该如何设计我的Spring微服务?

时间:2018-05-02 06:02:52

标签: spring spring-boot microservices

我正在为一个爱好项目创建一个Microservice architecture,我对某些决定感到困惑。你可以帮助我,因为我之前从未使用过微服务吗?

  1. 我的一个要求是我的AngularJS GUI需要显示一些下拉列表或值列表(例如:国家/地区列表)。这可以使用Microservice REST调用获取,但值应该来自何处?我可以从Config Server获取这些内容吗?还是应该来自Database?如果是后者,那么每个微服务应该有自己的数据库用于查找值还是可以是常见的?
  2. 在这种情况下,服务器端验证如何工作?我的意思是,GUI肯定会有一个微服务调用验证,但是验证服务应该是所有用例/屏幕的通用微服务,还是应该是每个G​​UI页面一个,还是应该重用CRUD微服务?用于验证?
  3. 如何处理后端不是数据库而是Web服务调用的用例?我是否还需要一些本地DB来维持这些调用之间的某种状态(特别是为了处理Web服务调用失败的情况)并最终将状态传递给GUI?

3 个答案:

答案 0 :(得分:1)

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

  1.   

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

  2. 同样,它取决于用例和要求。但是,因为每个MS都应该拥有自己的数据库,所以如果国家/地区只有名称,则可以使用数据库。但如果他们与城市/州有某种关系,那么你应该只使用数据库。

    1.   

      如果DB应该每个微服务都有自己的DB进行查找   价值还是常见的?

    2. 不,IMO多MS不应该依赖于单个DB。因为如果DB失败则所有MS都将失败,这不应该完成。每个MS应该独立工作,具体取决于其他DB或MS。

      1.   

        验证服务应该是所有人的共同微服务   UseCases /屏幕

      2. 与第2点相同

        1.   

          如何处理后端不是数据库调用的用例   但另一个网络服务电话?我还需要一些本地数据库吗?   在这些调用之间保持一些状态,最后传递给   GUI的状态?

        2. 如果您使用的是HTTP,则不应保存任何请求的状态。如果您想将请求重定向到另一个MS,那么您可以使用Feign client,这提供了一种非常好的方式来调用rest-api和其他重要功能,例如:Load balancing

答案 1 :(得分:0)

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

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

  1. 验证意味着您询问谁可以使用哪种微服务(基于角色的访问)???
  2. 3.我认为你必须使用本地数据库。

答案 2 :(得分:0)

Microservices是一个松散耦合的服务集合。例如,如果您要创建电子商务应用程序,用户管理可以是服务,订单管理可以是服务,退款&退款管理可以是另一项服务。现在每个服务可以进一步划分为更小的单元,让我们称之为API端点。例如 - 用户管理可以将登录作为端点,将注册作为另一个端点。

如果你想真正意义上利用微服务架构的力量,我建议这就是。对于上面的示例,为每个服务创建3个Springboot应用程序。在此之后您应该做的第一件事是在这些应用程序之间建立信任。我更喜欢JWTs建立信任。之后,一切都是小菜一碟。以下是您要寻找的答案:

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

    < / LI>
  2. 如果基于角色的访问权限是您所指的,则可以使用@PreAuthorize轻松限制访问权限。

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

  4. P.S。:如果你不了解所有的美食,在微服务之间建立信任可能是一项复杂的任务。在这种情况下,我建议继续使用单个Springboot应用程序;这是一个单片架构。我仍然会推荐JWT。