微服务学习笔记(一)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微服务学习笔记(一)

什么是六边形架构“六边形架构”是Cockburn大牛在2005年提出的。该架构提供了一种将业务逻辑和具体输入输出技术分离的模式。为什么采用微服务现在大多数开发一个应用,哪怕是类似Uber或者淘宝的应用。基本上都是

已单体模式开发。虽然在应用自身架构上采用了模块化设计,但在本质上他还是一个单体应用。例如:如下图这样的单体应用不好吗?上图,是比较经典优秀的单体六边形架构。在很多公司实际上因为各种原因单体应用架构还没有达到

这个水平。所以会有以下几个方面问题1. 整体扩展性差,

当应用越来越庞大后,进行新功能开发或者功能修改将会很困难。2. 整体耦合度高,一样当应用庞大。解耦将是一个叫你头疼的问题。3. 复杂度高,维护性差。当他足够庞大。新来的同事将会接手一个对他们看来是个怪物的东西,你会听到这些抱怨。这都是什么??你们到底在想什么??4. 性能低下,因为各种原因,主要是开发人员水平不一。你会发现整个应用越来越慢,你想找到原因变的越来越困难。代码有大量沉余,你每天都在纠结是否可以重建他(不是重构!!)。为什么要采用微服务?不能直接采用比较高级的架构吗?

微服务实际上就是用多个单体应用的集合。用多个单体服务来处理一些复杂业务。在实际开发中,除了架构师,对单个

开发人员来说他只是需要开发一个简单的单体应用。开发门槛比较低,你以为在成都,西安等这些二三线城市高水平的程序员是那么好找的吗?(二三线小城市公司开不起工资,理解高级架构的高级程序员至少20,30K工资)。综上,微服务将是解决二三线小城市,小公司问题的一个优秀方案。什么是微服务?微服务开发团队怎么组建?上文已经说了,微服务实际就是多个单体应用的集合。那么一个微服务开发团队需要那些人员呢?下面我就说下我的理解。一个微服务最小开发团队:首先明确开发基础环境。既然微服

务了。那么你的应用已经不是一个简单的服务可以满足需求或者你设想中的业务是需要一个服务平台才能解决的。那么最小配置将需要以下岗位。项目经理:他会负责产品开

发进度把控等等。优秀的项目经理决定你团队的战斗力。

产品经理:一个优秀的产品经理可以快速把你的想法或者用户的需要精确形成各种需求,他是不可或缺的。架构师:一个精通各种设计理论,有丰富一线开发经验并且了解微服务的架构师他将是整个团队的核心。决定你整个产品的质量。核心高级工程师:他将会负责整个微服务开发门槛最高的API Gateway服务的人选。他的好坏直接决定你的产品性能。高级工程师:他是带领开发小组进行具体开发的人选。他

决定了代码质量和单个单体应用的性能。初中级工程师:他们将是大多数具体功能开发者。在高级工程师的指导下开

发出符合要求的代码,同时也是公司的后备人才,人才储备。微服务的架构是什么?我先展示一个最粗粒度的微服务

架构,然后我们在一起一步一步完善它。为什么采用API Gateway?对应用来说,不管你怎么变化技术。实际处理的业务可以抽象成一句话,客户端请求服务返回数据并向客户展示。客户端与服务端的通信我们常见的有两种方式。1. 客户端直接跟服务端通信。2. 客户端通过API Gateway 跟服务端通信。理论上说,一个客户端可以直接给多个微

服务中的任何一个发起请求。每一个微服务都会有一个对外服务端。这个URL可能会映射到微服务的负载均衡上,它

再转发请求到具体节点上。为了搜索产品细节,移动端需要向上述微服务逐个发请求。

不幸的是,这个方案有很多困难和限制。其中一个问题是客户端的需求量与每个微服务暴露的细粒度API数量的不匹配。如图中,客户端需要7次单独请求。在更复杂的场景中,可能会需要更多次请求。例如,亚马逊的产品最终页要请求数百个微服务。虽然一个客户端可以通过LAN发起很多个请求,但是在公网上这样会很没有效率,这个问题在移动互联网上尤为突出。这个方案同时会导致客户端代码非常复杂。

另一个存在的问题是客户端直接请求微服务的协议可能并

不是web友好型。一个服务可能是用Thrift的RPC协议,

而另一个服务可能是用AMQP消息协议。它们都不是浏览或

防火墙友好的,并且最好是内部使用。应用应该在防火墙外采用类似HTTP或者WEBSocket协议。

这个方案的另一个缺点是它很难重构微服务。随着时间的推移,我们可能需要改变系统微服务目前的切分方案。例如,我们可能需要将两个服务合并或者将一个服务拆分为多个。但是,如果客户端直接与微服务交互,那么这种重构就很难实施。

由于上述三种问题的原因,客户端直接与服务器端通信的方式很少在实际中使用。通常来说,一个更好的解决办法是采用API Gateway的方式。API Gateway是一个服务器,也可以说是进入系统的唯一节点。这跟面向对象设计模式中的Facade模式很像。API Gateway封装内部系统的架构,并且提供API给各个客户端。它还可能有其他功能,如授权、监控、负载均衡、缓存、请求分片和管理、静态响应处理等。API Gateway负责请求转发、合成和协议转换。所有来自客户端的请求都要先经过API Gateway,然后路由这些请求到对应的微服务。API Gateway将经常通过调用多个微服务来处理一个请求以及聚合多个服务的结果。它可以在web协议与内部使用的非Web友好型协议间进行转换,如HTTP协议、WebSocket协议。

API Gateway可以提供给客户端一个定制化的API。它暴露一个粗粒度API给移动客户端。以产品最终页这个使用场景

为例。API Gateway提供一个服务提供点

(/productdetails?productid=xxx)使得移动客户端可以在一个请求中检索到产品最终页的全部数据。API Gateway通过调用多个服务来处理这一个请求并返回结果,涉及产品信息、推荐、评论等。

一个很好的API Gateway例子是Netfix API Gateway。Netflix流服务提供数百个不同的微服务,包括电视、机顶盒、智能手机、游戏系统、平板电脑等。起初,Netflix视图提供一个适用全场景的API。但是,他们发现这种形式不好用,因为涉及到各式各样的设备以及它们独特的需求。现在,他们采用一个API Gateway来提供容错性高的API,针对不同类型设备有相应代码。事实上,一个适配器处理一个请求平均要调用6到8个后端服务。Netflix API Gateway每天处理数十亿的请求。API Gateway的优点和缺点如你所料,采用API Gateway也是优缺点并存的。API Gateway的一个最大好处是封装应用内部结构。相比起来调用指定的服务,客户端直接跟gatway交互更简单点。API Gateway提供给每一个客户端一个特定API,这样减少了客户端与服务器端的通信次数,也简化了客户端代码。

API Gateway也有一些缺点。它是一个高可用的组件,必须要开发、部署和管理。还有一个问题,它可能成为开发的一个瓶颈。开发者必须更新API Gateway来提供新服务提供点

相关文档
最新文档