对于微服务没有适当的定义,你能够说它是一个框架,由小型的、独立的可部署的服务组成,执行不一样的操做。数据库
微服务专一于单个业务领域,能够做为彻底独立的可部署服务,并在不一样的技术栈上实现它们。安全
在使用微服务构建本身的应用程序以前,须要清楚地了解应用程序的范围和功能。性能优化
在当今世界,复杂性已经渗透到产品中。微服务架构可以更好地保持团队的规模和功能。服务器
如下是微服务设计的最佳实践:网络
如今,让咱们来看一个用例来更好地理解微服务。架构
案例:购物车应用程序并发
当打开购物车应用程序时,你看到的只是一个网站。可是,在幕后,购物车应用程序有接受支付服务、顾客服务等等。负载均衡
假设开发人员已经在一个总体框架中进行了建立。以下图:框架
全部功能都放在一个代码库中,并在一个底层数据库下。异步
如今,假设市场上出现了一个新品牌,开发人员但愿将这个品牌的全部细节都放在这个应用程序中。
他们不只要从新为新标签提供服务,还必须从新构建完整的系统并进行相应部署。
为了应对这种挑战,开发人员决定将其应用程序从单体架构转移到微服务。以下图:
这意味着开发人员没必要建立Web微服务,逻辑微服务或数据库微服务。相反,他们为搜索,推荐,客户服务等建立单独的微服务。
这种应用架构不只有助于开发人员克服之前架构面临的挑战,还有助于轻松构建,部署和扩展购物车应用程序。
推荐一个交流学习群:478030634 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
在设计微服务时,已经了解了基本的指导方针,如今来了解一下微服务的架构。
推荐一个交流学习群:478030634 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
一个典型的微服务架构(MSA)应该包括如下组件:
以下图:
这个架构看起来有点复杂,让咱们来简化一下。
一、客户端
架构始于不一样类型的客户端,从不一样的设备尝试执行各类管理功能,如搜索、构建、配置等。
二、身份提供者
这些来自客户端的请求将传递给身份提供者,这些提供者对客户端的请求进行身份验证,并将请求传递给API网关。而后,请求经过定义良好的API网关与内部服务通讯。
三、API网关
因为客户端不直接调用服务,所以API网关做为客户端将请求转发到适当的微服务的切入点。
使用API网关的优势包括:
全部服务均可以在客户端不知情的状况下进行更新。
服务也可使用非网络友好的消息传递协议。
API网关可执行跨切割功能,如提供安全性、负载均衡等。
在接收到客户端的请求后,内部架构由微服务组成,这些微服务经过消息相互通讯来处理客户端请求。
四、消息格式
有两种类型的消息经过它们进行通讯:
同步消息:在客户端等待服务响应的状况下,微服务一般倾向于使用REST (Representational State Transfer),由于它依赖于无状态、客户端服务器和HTTP协议。这个协议被用做一个分布式环境,每一个功能都用一个资源来表示,以执行操做。
异步消息:在客户端不等待服务响应的状况下,微服务一般倾向于使用AMQP、STOMP、MQTT等协议。这些协议在这种类型的通讯中使用,由于消息的性质被定义,这些消息在实现之间能够互操做。
下一个问题是,使用微服务的应用程序如何处理数据?
五、数据处理
每一个微服务都拥有一个专有数据库来捕获它们的数据并实现相应的业务功能。此外,微服务的数据库只经过其服务API进行更新。参考下图:
微服务提供的服务被转发到任何支持不一样技术栈的进程间通讯的远程服务。
六、静态内容
在微服务内部进行通讯后,将静态内容部署到基于云的存储服务,经过内容交付网络(CDN)直接将其交付给客户端。
除了上述组件,还有一些其余组件出如今典型的微服务架构中。
七、管理
该组件负责平衡节点上的服务和故障识别。
八、服务发现
用做微服务的指南,以找到它们之间的通讯路由,由它维护节点所在的服务列表。
如今来看看这个架构的优缺点,以更好地理解什么时候使用这种架构。
下面来比较一下UBER以前和如今的架构。
Uber以前的架构
像许多初创公司同样,UBER在开始之初在单一城市运营,为单一产品打造了单体架构。当时有一个代码库彷佛被清理了,并解决了UBER的核心业务问题。然而,随着UBER在全球范围内扩张,它们在可扩展性和持续集成方面面临各类各样的问题。
上图描述了UBER以前的架构。
所以,能够发现这里全部的特性,好比乘客管理、计费、通知功能、支付、行程管理和驱动管理都是在一个框架内完成的。
问题陈述
当Uber开始在世界范围扩张时,这种框架引入了各类各样的挑战。如下是一些突出的挑战。
解决方案
为了不此类问题,Uber决定改变本身的架构,效仿亚马逊(Amazon)、Netflix、Twitter等其余超级增加公司。所以,Uber决定将其总体架构拆分为多个代码库,以造成一个微服务架构。
参考下面的图表,看看Uber的微服务架构。
例如,咱们都知道,搜索出租车的人数比预订出租车和付款的人要多。这就获得了一个推论:在乘客管理微服务上工做的流程的数量超过了处理支付的流程的数量。
经过这种方式,Uber将其架构从单一业务转移到微服务中获益。