问题标签 [microservices]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
service - In a micro-service architecture, how the micro-services will be served?
I have read some articles and watched some videos, but did not find a concrete suggestion when it comes to serving those micro-services. My understanding is that they should be served with their own application server.
My question is should they be deployed on different servers or it does not matter.
When they are served on the same server(computer) won't there be port conflicts?
architecture - 使用消息传递的微服务和 SOA
我一直对尝试将微服务/SOA 作为一种架构非常感兴趣,并且很难概念化如何实际完成服务之间的集成。
我喜欢使用消息传递将客户端与服务分离的想法,但不了解系统如何专门使用它。典型的异步操作和发布/订阅的东西显然是有意义的——比如创建新订单、广播数据以进行报告等场景。我不明白人们是否通常会尝试将消息传递用于常见的请求/回复场景——例如,用户点击他们的“个人资料”页面,需要在页面上呈现的部分数据来自用户服务。
我知道常见的消息传递实现提供类似 REST 的回复/请求功能,但它经常用于简单的数据请求吗?微服务似乎更有可能既公开 REST 端点,也向消息代理注册它将参与的不同类型的通信,但我观看的所有这些 SOA 和微服务架构的演示似乎表明它们只使用其中一种。 .
感谢您的任何详细说明/经验!
node.js - 你可以使用 Hapi.JS 作为微服务框架吗?
我最近看到了各种关于微服务乐趣的有趣演示(http://martinfowler.com/articles/microservices.html),并且想知道我们如何将这些概念与 Hapi.JS 一起使用。
Mail Online(地球上最大的在线报纸)的 CTO 名称检查 HAPI 及其与微服务相关的插件系统:
http://www.nearform.com/nodecrunch/how-node-js-has-revolutionized-the-mailonline
使用了受 Fred George 启发的微服务架构,这与 hapi 插件架构略有不同,构建应用程序以使其变得更大时可维护是未来的关键挑战,而微服务是解决方案这个。MailOnline 也是 Joyent(本地 SDC 和公共云)的重度用户。
还有专门为微服务设置的新节点框架(senecajs.org)
有没有人看过以这种方式利用 Hapi 的案例研究(最好是教程)?
spring-mvc - Spring Boot 环境特定的配置
我有一个使用执行器、自动配置和 JPA的 spring boot 应用程序。我希望能够在我的测试配置文件中使用内存数据库,在开发期间使用 MySQL 数据库配置,在生产中部署应用程序时使用单独的生产数据库配置。大概从 java 命令行中,我应该能够指定环境,并且将拾取application.properties (或 .yml)中的正确配置文件或配置块。
我还没有找到一个很好的帖子,上面有描述如何进行这种切换的例子,所以我想我会问是否有人有一个很好的例子。我的主要目标是在构建时预定义spring.datasource
和spring.jpa
属性,然后在运行时使用 java 命令行参数“动态”切换每个环境的应用程序配置。次要目标是对management
配置等做同样的事情。
谢谢你。
security - 微服务架构中的单点登录
我正在尝试设计一个新项目,该项目将具有多个服务(服务数据)和 Web 应用程序(服务 HTML)。我读过微服务,它们看起来很合适。
我仍然遇到的问题是如何实现 SSO。我希望用户进行一次身份验证并有权访问所有不同的服务和应用程序。
我可以想到几种方法:
添加身份服务和应用程序。任何具有受保护资源的服务都将与身份服务对话,以确保其拥有的凭据有效。如果不是,它将重定向用户进行身份验证。
使用诸如 OpenID 之类的网络标准,并让每个服务处理它自己的身份。这意味着用户必须单独授权每个服务/应用程序,但之后它将是 SSO。
我很乐意听到其他想法。如果一个特定的 PaaS(比如 Heroku)有一个专有的解决方案也是可以接受的。
architecture - Sharing code and schema between microservices
If you go for a microservices architecture in your organization, they can share configuration via zookeeper or its equivalent. However, how should the various services share a common db schema? common constants? and common utilities?
One way would be to place all the microservices in the same code repository, but that would contradict the decoupling that comes with microservices...
Another way would be to have each microservice be completely independent, however that would cause code duplication and data duplication in the separate databases each microservice would have to hold.
Yet another way would be to implement functional microservices with no context\state, but that's usually not realistic and would push the architecture to having a central hub that maintains the context\state and a lot of traffic from\to it.
What would be a scalable, efficient practical and hopefully beautiful way to share code and schema between microservices?
java - 如何关闭 dropwizard 应用程序?
我正在尝试使用 dropwizard 提出一个微服务。该文档说明了如何启动应用程序,但没有说明如何优雅地终止它。例如,apache tomcat 有启动和关闭脚本。
那么有谁知道除了按Ctrl+C
of之外如何终止 dropwizard 应用程序kill
?
rest - 微服务中的数据分组
在基于 REST 的微服务架构中,将相关数据分组到单个实体下的正确方法是什么。例如,我们可能有一个用户服务负责管理用户。此外,我们可能有一个服务负责管理为每个用户存储的某种数据(让我们假设在这个例子中,我们正在谈论用户的物品/库存)
我们可以分离库存管理服务并使用它来为任何东西创建库存,所以我不希望库存管理系统需要用户才能运行。
是否有一个典型的模式可以提供我正在寻找的分组(多个库存项目给一个所有者)?支持这种架构的其他端点会是什么样子?
scala - 我可以为微服务选择什么合适的 Scala 框架
目前,我正在使用 finagle Scala Web 框架作为我们项目的微服务,它们非常易于使用且易于部署。同时我的同事也在尝试用Play框架做微服务,但是我觉得太大了。它不再是微观的了。
我可以知道您对此有何看法吗? scala 中是否还有其他好的微服务框架应该考虑在内?
提前谢谢了
testing - 跨多个系统测试可重用组件/服务
我目前正在开始一个新项目,我们希望使用可重用的组件和服务开发一个新系统。
我们目前有 30 多个系统,它们都有共同的元素,但目前我们孤立地开发每个系统,所以感觉就像我们经常重复代码,当然我们有 30 多个独立的代码库需要维护和支持。
我们想做的是创建一个使用共享组件的通用平台,以实现新集合的快速开发、重用代码和重用自动化测试,并减少需要维护的代码库。
到目前为止,我们的想法是我们将为特定模块(例如用户管理和安全系统访问)建立一个通用代码库,这些模块可以由它们自己的通用 Web 模块、API 和上下文组成。这将创建一个通用的代码包。
然后,我们可以部署这些不同的组件/包来构建一个新系统,以节省对相同模块的一遍又一遍的编码,因此如果新系统需要管理用户,您可以获得用户管理包并使其满足您的需求. 但是,因为我们有 30 多个系统,我们将为每个集合多次部署组件。此外,我们意识到某些系统将需要独特的功能,因此有可能为通用模块添加扩展以满足系统特定需求,或者选择不使用通用模块之一并创建一个新模块,但使用其余模块的通用组件。
例如,如果我们有 4 个组成系统 A、B、C 和 D 的通用组件。可以部署这些组件来创建以下系统设置:
系统 1 - A、B、C 和 D(对所有通用组件感到满意)
系统 2 - Aa、B、C 和 D(扩展组件 A 以包含特定功能)
系统 3 - A、E、C 和 F(不能重用组件 B 和 D,因此创建特定的,但仍然重用组件 A 和 C)
这给我带来了一些问题,因为我需要能够测试这个平台和每个系统以确保它工作,这是我第一次遇到必须测试这样的设置。
我已经阅读了一些关于微服务以及如何测试它们的内容,但是这些通常只针对使用微服务的 1 个系统来解决问题,我们正在查看具有不同配置的多个系统。
到目前为止,我的想法使我相信,对于将由不同集合使用的通用组件,我可以在基本代码级别创建自动化测试,然后这些测试将确认通用功能,因此无需重新测试这些对每个组件再次起作用,而不是在部署后进行手动感知检查。然后在每个系统级别可以添加额外的自动化测试来检查可能创建的特定功能。
理想情况下,我希望设置某种测试平台,以便如果对用户管理等核心组件进行更改,则可以在核心级别触发所有自动测试,然后特定系统测试将共享组件的所有系统,以确保任何更改都不会影响核心功能或对特定系统产生连锁反应。然后需要进行快速手动检查。每次更改共享组件时,我都热衷于尝试消除大量手动测试开销,检查 30 多个系统。
我们以敏捷的方式工作,对于我们当前的项目,我们设置了强大的持续集成流程,因此当开发人员签入一些代码 (Visual Studio) 时,这会触发将运行所有单元的 CI 构建 (TeamCity / Octopus)测试,前提是所有这些测试都通过了,这将触发一个集成构建,它将运行我的 QA 自动化测试,这些测试混合了在 API 级别运行的测试和使用 SpecFlow 和 PhantomJS 或 Selenium Webdriver 的 Web 测试。我们希望保留这种框架以保持快速反馈循环。
这一切在理论上听起来都很棒,但我正在努力将一些东西付诸实践并创建一个完善的测试策略来涵盖这种系统设置。
所以我真的希望有人在过去遇到过类似的事情,并且对解决这个问题的最佳方法有想法,并且已经证明它们是有效的。
考虑到每个系统可能看起来不同,但具有共享代码,我渴望更好地了解如何设置测试平台/装备以帮助所有系统的持续集成。
您认为可能有帮助的任何想法或博客/白皮书等链接将不胜感激!