本文既包含了微服务的原理、原则,又包含了实际落地中的架构设计模式;既包含可举一反三的理念和概念,也包含类似领域驱动设计、Saga实现事务操作、CQRS构建事件驱动系统等具体可套用的示例。本书可以帮助读者把传统的单体巨石型应用循序渐进地改造为微服务架构,从微服务的拆分,微服务架构下业务逻辑的设计以及事务、API、 通信等的实现,一直到微服务系统的测试与生产上线,帮助读者建立从无到有的完整微服务系统搭建的生命周期。
8.1外部API的设计难题
为了探索与API相关的各种问题,让我们考虑一下FTGO应用程序。如图8-1所示,该应用程序的服务由各种客户端使用。使用服务API的客户端一共有四种:
■Web应用程序,如Consumer web 应用程序一为 消费者实现基于浏览器的用户界面,Restaurant web 应用程序一实 现基于浏览器的餐馆用户界面,以及AdminWeb应用程序一实 现供内部管理员使用的用户界面。
■在浏览器中运行的JavaScript应用程序。
■移动应用程序,一个供消费者使用,另一个供送餐员使用。
■由第三方开发人员编写的应用程序。
Web应用程序在防火墙内部运行,因此它们通过高带宽、低延迟的局域网访问服务。其他客户端在防火墙之外运行,因此它们通过较低带宽、较高延迟的互联网或移动网络访问服务。
API的一种设计思路是让客户端直接调用服务。从表面上看,这听起来非常简单,毕竟,这就是客户端调用单体应用程序的API的方式。但由于存在以下弊端,这种方法很少用于微服务架构:
■细粒度服务API要求客户端发出多个请求以检索所需的数据,这样做效率低,并且可能导致糟糕的用户体验。
■由于客户端了解每项服务以及服务的API从而导致封装不足(紧耦合),因此今后很难更改服务的架构和API。
”服务可能使用对客户端而言不便或不能使用的进程间通信机制,尤其是防火墙外的客户端。
要了解有关这些弊端的更多信息,让我们来看看FTGO移动应用程序如何从服务中检索数据。
8.1.1 FTGO 移动客户端API的设计难题
消费者使用FTGO移动客户端来下订单和管理他们的订单。想象一下,你正在开发移动客户端的View Order视图,该视图显示订单。如第7章所述,此视图显示的信息包括基本订单信息,如订单状态、付款状态、餐馆视角下的订单状态,以及送餐状态(包括其位置和运输过程中的预计送餐时间)。
FTGO应用程序的单体版本具有返回订单详细信息的API接口。移动客户端通过发出单一请求来检索所需的信息。相比之下,在FTGO应用程序的微服务版本中,如前所述,订单详细信息分散在多个服务中,包括以下内容:
■Order Service: 基本订单信息,包括详细信息和状态。
■Kitchen Service: 餐馆视角下的订单状态以及送餐员可以取餐的预计时间。
■Delivery Service: 订单的送餐状态,预计送餐时间和当前位置。
如果移动客户端直接调用服务,则必须如图8-2所示,进行多次调用以检索此数据。
在此设计中,移动应用程序扮演着API组合器的角色。它调用多个服务并组合结果。尽管这种方法看似合理,但它有几个严重的问题。
...........................
8.1.2其他类型客户端API的设计难题
8.2 API Gateway模式
8.2.1什么是 API Gateway模式
8.2.2 API Gateway模式的好处和弊端
8.2.3以Netlix为例的API Gateway
8.2.4 API Gateway的设计难题
8.3实现一个 API Gateway
8.3.1使用现成的 API Gateway产品或服务
8.3.2开发自己的API Gateway
8.3.3使用GraphQL实现API Gateway
12.1部署模式: 编程语言特定的发布包格式
12.1.1使用编程语言特定的发布包格式进行部署的好处
12.1.2使用编程语 言特定的发布包格式进行部署的弊端
12.2部署模式: 将服务部署为虚拟机
12.2.1将服务部署为虚拟机的好处
12.2.2将服务部署为虚拟机的弊端
12.3部署模式: 将服务部署为容器
12.3.1使用 Docker部署服务
12.3.2将服务部署为容器的好处
12.3.3将服务部署为容器的弊端
12.4使用Kubernetes部署FTGO应用程序
12.4.1什么是Kubernetes
12.4.2在 Kubernetes.上部署Restaurant Service
12.4.3部署 API Gateway
12.4.4零停机部署
12.4.5使用服务网格分隔部署与发布流程
12.5部署模式: Serverless部署
12.5.1使用 AWS Lambda进行Serverless部署
12.5.2开发Lambda函数
12.5.3调用Lambda函数
12.5.4使用Lambda函数的好处
12.5.5使用Lambda函数的弊端
12.6使用AWS Lambda和AWS Gateway部署RESTful服务
12.6.1 AWS Lambda版本的Restaurant Service
12.6.2把服务打包为ZIP文件
12.6.3使用Serverless 框架部署Lambda函数
这份微服务架构设计模式PDF,小编已经为大家整理完毕,PDF内容完整,需要免费领取麻烦帮忙转发一下这篇文章+关注我,然后私信【学习】三个字。
第1章逃离单体地狱
第2章服务的拆分策略
第3章微服务架构中的进程间通信
第4章使用Saga管理事务
第5章微服务架构中的业务逻辑设计
第6章使用事件溯源开发业务逻辑
第7章在微服务架构中实现查询
第8章外部API 模式
第9章微服务架构中的测试策略(上)
第10章微服务架构中的测试策略(下)
第11章开发面向生产环境的微服务应用
第12章部署微服务应用
第13章微服务架构的重构策略
最后的最后小编想对读者朋友们说:
第一,要记住微服务不是解决所有问题的万能“银弹”。
第二,编写整洁的代码和使用自动化测试至关重要,因为这是现代软件开发的基础。
第三,关注微服务的本质,即服务的分解和定义,而不是技术,如容器和其他工具。
第四,确保你的服务松耦合,并且可以独立开发、测试和部署,不要搞成分布式单体(Distributed Monolith),那将会是巨大的灾难。
第五,也是最重要的,不能只是在技术上采用微服务架构。拥抱DevOps的原则和实践,在组织结构上实现跨职能的自治团队,这必不可少。
还必须记住:实现微服务架构并不是你的目标。你的目标是加速大型复杂应用程序的开发。
这份PDF领取方式也简单,作为电子版全网首发,需要领取的朋友麻烦帮忙转发转发这篇文章+关注小编,然后私信小编【学习】三个字。