微服务架构是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务架构是啥相关的知识,希望对你有一定的参考价值。
参考技术A 微服务架构,主要是中间层分解,将系统拆分成很多小应用(微服务),微服务可以部署在不同的服务器上,也可以部署在相同的服务器不同的容器上。当应用的故障不会影响到其他应用,单应用的负载也不会影响到其他应用,其代表框架有 Spring cloud、Dubbo 等。微服务 Microservices 之父,马丁.福勒,对微服务大概的概述如下:就目前而言,对于微服务业界并没有一个统一的、标准的定义(While there is no precise definition of this architectural style ) 。但通常在其而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API ) 。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务。可以使用不同的语言来编写服务,也可以使用不同的数据存储。
六种常见的微服务架构模式:
1、聚合器微服务设计模式
聚合器调用多个服务实现应用程序所需的功能。它可以是一个简单的Web页面,将检索到的数据进行处理展示。它也可以是一个更高层次的组合微服务,对检索到的数据增加业务逻辑后进一步发布成一个新的微服务,这符合DRY原则。另外,每个服务都有自己的缓存和数据库。如果聚合器是一个组合服务,那么它也有自己的缓存和数据库。聚合器可以沿X轴和Z轴独立扩展。
2、代理微服务设计模式
这是聚合模式的一个变种,在这种情况下,客户端并不聚合数据,但会根据业务需求的差别调用不同的微服务。代理可以仅仅委派请求,也可以进行数据转换工作。
3、链式微服务设计模式
这种模式在接收到请求后会产生一个经过合并的响应,在这种情况下,服务A接收到请求后会与服务B进行通信,类似地,服务B会同服务C进行通信。所有服务都使用同步消息传递。在整个链式调用完成之前,客户端会一直阻塞。因此,服务调用链不宜过长,以免客户端长时间等待。
4、分支微服务设计模式
这种模式是聚合器模式的扩展,允许同时调用两个微服务链。
5、数据共享微服务设计模式
自治是微服务的设计原则之一,就是说微服务是全栈式服务。但在重构现有的“单体应用(monolithic application)”时,SQL数据库反规范化可能会导致数据重复和不一致。因此,在单体应用到微服务架构的过渡阶段,可以使用这种设计模式,在这种情况下,部分微服务可能会共享缓存和数据库存储。不过,这只有在两个服务之间存在强耦合关系时才可以。对于基于微服务的新建应用程序而言,这是一种反模式。
6、异步消息传递微服务设计模式
虽然REST设计模式非常流行,但它是同步的,会造成阻塞。因此部分基于微服务的架构可能会选择使用消息队列代替REST请求/响应。
微服务架构中的社交 SSO 是啥样的?
【中文标题】微服务架构中的社交 SSO 是啥样的?【英文标题】:What does Social SSO look like in a Microservices Architecture?微服务架构中的社交 SSO 是什么样的? 【发布时间】:2017-10-11 21:44:15 【问题描述】:晚上好
我正在尝试掌握社交 SSO(Facebook/Google 等)如何在微服务架构中工作的概念。
场景
假设我有 2 个后端微服务(订单、用户)和一个前端(WebApp)
用户:保存用户个人资料详细信息、电子邮件、姓名、地址。 订单:保存链接到用户的订单列表 WebApp:提供与两个后端服务交互的前端。添加Social SSO,是为了简化用户注册网站http://www.myproduct.com的流程
当一个人使用社交单点登录时,我想在用户服务中创建一个用户帐户。
问题
假设用户在 WebApp 上点击“Login with Facebook”并以“John”身份登录
在我的用户中为 John 创建帐户的最佳方法是什么 服务?
以 John 身份登录后,WebApp 如何传播身份 约翰到订单服务?
Order 服务如何验证 John 是否已登录?
相互依赖的服务订单和用户如何相互信任?
疑虑
-
使用授权服务器(Facebook、Google),下游服务将变得非常“健谈”
谢谢
丹尼尔
【问题讨论】:
【参考方案1】:-
在我的用户服务中为 John 创建帐户的最佳方法是什么?
这里没什么可做的,只需从 FB 获取用户详细信息并调用您的用户创建端点。对于 RESTful API,您可能需要向 https://your_api_gateway/users 发送 POST
-
以 John 身份登录后,WebApp 如何将 John 的身份传播到 Order 服务?
一种选择是使用令牌微服务。在登录时,您将创建一个长期存在的身份验证令牌和一个短期访问令牌。身份验证令牌是您从不共享的信任来源。您将访问令牌返回给客户端 webapp。从客户端到您的任何微服务的所有调用都会将该访问令牌作为请求的一部分发送。另一种选择是简单地使用 FB/Google 生成的访问令牌。
-
Order 服务如何验证 John 是否已登录?
您的订单服务将在请求中收到访问令牌。只要访问令牌有效,您就可以假定 John 已登录。
-
相互依赖的服务订单和用户如何相互信任?
访问令牌由令牌微服务签名 - 这应该是一个受信任的服务 - 它可以包含可以由您的任何微服务进一步验证的其他信息
-
使用授权服务器(Facebook、Google),下游服务将变得非常“健谈”
生成访问令牌后,您无需再次调用 FB 或 Google,直到您的 web 应用决定用户需要再次进行身份验证。
【讨论】:
谢谢@clonq 假设令牌服务是一个微服务,该服务会将用户重定向回 WebApp... 将长期存在的令牌作为查询参数传递?这安全吗?其次,假设这个长期存在的令牌实际上是 JWT。 WebApp 会在哪里存储这个?谢谢丹尼尔 不需要重定向。 Web 应用程序将对令牌微服务进行 AJAX 调用,该服务将以 JSON 有效负载的形式返回令牌。在有效负载中发送令牌是安全的,因为无论如何通信都应该通过 HTTPS。我的建议是使用短期令牌来增加安全性,而不是长期令牌,但在任何情况下,Web 客户端都可以根据您的“客户端会话”到期策略将其存储在内存中或将其保存在 localStorage 中。 嗨@clonq WebApp和Token服务是不同的微服务。因此,我想让令牌服务处理来自 SSO 提供者的响应,例如 FB 或 google。鉴于此,我如何让 WebApp 知道它以安全方式生成的长寿命令牌?谢谢 如果您想将调用移动到令牌服务中的 SSO 提供者,您只需将长期存在的令牌返回给客户端。所以流程是这样的:WebApp 调用 TokenService。 TokenService 调用返回令牌的 SSOProvider。 TokenService 然后将令牌返回给 WebApp。有意义吗?以上是关于微服务架构是啥的主要内容,如果未能解决你的问题,请参考以下文章