jon*_*nie 8 nginx mongodb node.js microservices
TLTR:无论服务器或技术的位置如何,通过Auth和用户信息的服务进行通信的好方法是什么
我正在尝试了解微服务,我有点不清楚如何访问用户信息和控制多个服务的访问.如果我接近这个完全错误,请告诉我.
例如,我有一个用于博客CRUD操作的基本服务和一个用于上传和存储图像和视频的服务.我还没有对授权或用户做过任何事情(除了我最终会在我的模型中出现UserIds(例如在我的博客模型ObjectID中为作者,评论者等).
我希望保持尽可能分开(为了更多的学习目的),而目前我正在Node.js中构建它我希望能够交换进出不同的技术,如nginx,一个java/go/python服务或不同的存储(目前是mongo,但希望能够切换到sql作为选项)
我目前如何构建这些结构是我有两个服务构建为Express.js应用程序,目前我使用node-http-proxy代理快递服务(这只是为了保存现在设置nginx但我没有我想依赖于nginx).
我应该如何处理:
经过身份验证的用户或某些路由(例如,在创建新帖子或更新/删除时)和Not在获取帖子时读取(最终我也希望合并角色)
填充用户信息,例如来自存储在博客作者中的用户ID,并将其替换为用户信息(在单个应用程序中,我可以使用mongoose populate
主要目的是我希望将Auth和Users保留在可以在任何其他服务中调用的单独服务中,并存储在另一个数据库中,例如,如果它们位于不同的物理服务器上.
有人向我建议我可以使用HTTP/S做到这一点,但有更好的方法来做到这一点,任何人都可以指向任何实现示例,Node.js将是更好的但不是必要的
这可能需要一些服务注册表,但我有点失去了如何实现它
身份验证层作为其自己的应用程序非常适合 SOA 设计。有一个 HTTP 端点无法直接访问微服务数据库,SOA 最佳实践是:
\n\n\n\n\n对于我们来说,面向服务意味着将数据与对数据进行操作的业务逻辑封装在一起,并且只能通过已发布的服务接口进行访问。不允许从服务外部直接访问数据库,并且服务之间没有数据共享。
\n\n——沃纳·沃格尔斯,亚马逊首席技术官
\n
参考http://martinfowler.com/microservices/
\n\n什么是身份验证层或服务?服务器如何确认身份验证已建立?一种基于客户端的持久性是严格与域名挂钩的 HTTP cookie,因此在没有显式身份验证步骤的情况下,在多个域之间重用相同的 cookie 并不容易。
\n\n如果您能够传递某个密钥或标头,http_request可以提供不显眼的身份验证,该模块从 1.5.4 版本开始成为内置的 Nginx 核心: http ://nginx.org/en/docs/http/ngx_http_auth_request_module.html
\n\nlocation /upload {\n auth_request /auth;\n ...\n}\n\nlocation = /auth {\n internal;\n proxy_pass http://auth_service.localhost;\n proxy_pass_request_body off;\n proxy_set_header Content-Length "";\n proxy_set_header X-Original-URI $request_uri;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n可通过http://auth_service.localhost访问端点是隔离的,并且拥有自己的数据库,并且只做一件事 - 是否对用户进行身份验证。一种机制可以依赖于某个密钥或标头甚至 IP 地址。要抑制大量后续请求,您可以缓存响应。
\n\nSOA 很难,但我建议仔细阅读以下内容: https ://www.nginx.com/blog/introduction-to-microservices/
\n| 归档时间: |
|
| 查看次数: |
1346 次 |
| 最近记录: |