腾讯T8纯手写66个微服务架构设计模式,全部学会真的“变强”了
微服务的概念虽然直观易懂,但“细节是魔鬼”,微服务在实操落地的环节中存在诸多挑战。我们在为企业提供PaaS、人工智能、云原生平台等数字化转型解决方案时也发现,企业实现云原生,并充分利用PaaS能力的第一步,往往是对已有应用架构进行现代化微服务改造,而如何进行微服务拆分、设计微服务逻辑、实现微服务治理等实操问题成为很大的挑战。
本文既包含了微服务的原理、原则,又包含了实际落地中的架构设计模式;既包含可举一反三的理念和概念,也包含类似领域驱动设计、Saga实现事务操作、CQRS构建事件驱动系统等具体可套用的示例。本书可以帮助读者把传统的单体巨石型应用循序渐进地改造为微服务架构,从微服务的拆分,微服务架构下业务逻辑的设计以及事务、API、 通信等的实现,一直到微服务系统的测试与生产上线,帮助读者建立从无到有的完整微服务系统搭建的生命周期。
书籍优质内容节选
第8章外部APl模式
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章部署微服务应用
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领取方式也简单,作为电子版全网首发,需要领取的朋友麻烦帮忙转发转发这篇文章+关注小编,然后添加小编vx:kaixindian331免费获取。
腾讯T8纯手写66个微服务架构设计模式,全部学会真的“变强”了的更多相关文章
- vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件
vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件/库 一提到移动端的下拉刷新上拉翻页,你可能就会想到iScroll插件,没错iScroll是一个高性能,资源 ...
- springmvc 动态代理 JDK实现与模拟JDK纯手写实现。
首先明白 动态代理和静态代理的区别: 静态代理:①持有被代理类的引用 ② 代理类一开始就被加载到内存中了(非常重要) 动态代理:JDK中的动态代理中的代理类是动态生成的.并且生成的动态代理类为$Pr ...
- 简易-五星评分-jQuery纯手写
超级简单的评分功能,分为四个步骤轻松搞定: 第一步: 引入jquery文件:这里我用百度CDN的jquery: <script src="http://apps.bdimg.com/l ...
- 超级简单的jQuery纯手写五星评分效果
超级简单的评分功能,分为四个步骤轻松搞定: 第一步: 引入jquery文件:这里我用百度CDN的jquery: <script src="http://apps.bdimg.com/l ...
- 纯手写Myatis框架
1.接口层-和数据库交互的方式 MyBatis和数据库的交互有两种方式: 使用传统的MyBatis提供的API: 使用Mapper接口: 2.使用Mapper接口 MyBatis 将配置文件中的每一个 ...
- SQL纯手写创建数据库到表内内容
建表啥的只点点鼠标,太外行了,不如来看看我的纯手写,让表从无到有一系列:还有存储过程临时表,不间断的重排序: 一:建数据库 create Database Show on primary ( name ...
- 腾讯开源微服务架构 Tars,高性能 RPC 开发框架
腾讯微服务架构 Tars 于今日正式开源. Tars 取名于电影“星际穿越”中的机器人,是支持多语言的高性能 RPC 开发框架和配套一体化的服务治理平台,可以帮助企业或者用户以微服务的方式快速构建稳定 ...
- 纯手写SpringMVC到SpringBoot框架项目实战
引言 Spring Boot其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 通过这种方式,springboot ...
- Spring Boot2.0之纯手写框架
框架部分重点在于实现原理,懂原理! 废话不多说,动手干起来! SpringMVC程序入口? 没有配置文件,Spring 容器是如何加载? 回顾我们之前搭建Spring Boot项目使用的pom 引入的 ...
随机推荐
- Java实现 LeetCode 316 去除重复字母
316. 去除重复字母 给定一个仅包含小写字母的字符串,去除字符串中重复的字母,使得每个字母只出现一次.需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置). 示例 1: 输入: " ...
- Java实现 LeetCode 126 单词接龙 II
126. 单词接龙 II 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列.转换需遵循如下规则: ...
- 第八届蓝桥杯JavaC组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.数位和 题目描述 数学家高斯很小的时候就天分过人.一次老师指定的算数题目是:1+2+-+100. 高斯立即做出答案:5050! 这次你 ...
- Java实现夺冠概率模拟
足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能. 假设有甲.乙.丙.丁四个球队.根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表: 甲 乙 丙 丁 甲 - 0.1 0.3 0.5 ...
- Java并发编程实战总结 (一)
前提 首先该场景是一个酒店开房的业务.为了朋友们阅读简单,我把业务都简化了. 业务:开房后会添加一条账单,添加一条房间排期记录,房间排期主要是为了房间使用的时间不冲突.如:账单A,使用房间1,使用时间 ...
- 第12章 Java内存模型与线程
参考<深入理解Java虚拟机> 一.Java内存模型 1.Java内存模型 2.内存间交互操作 流程图: 3.volatile关键字 两个特性: 3.1.保证变脸对所有线程的可见性: 由 ...
- Centos 7 k8s Deployment新副本控制器
一.概念 Kubernetes提供了一种更加简单的更新RC和Pod的机制,叫做Deployment.通过在Deployment中描述你所期望的集群状态,Deployment Controller会将在 ...
- 讨论session共享方案设计
默认情况下,php的session文件是保存在磁盘文件中. 在php.ini配置文件中的配置项如下: session.save_handler = files session.save_path = ...
- 利用Jackson将数据转换为Json
1.确保相关依赖导入 2.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app ...
- 循序渐进VUE+Element 前端应用开发(10)--- 基于vue-echarts处理各种图表展示
在我们做应用系统的时候,往往都会涉及图表的展示,综合的图表展示能够给客户带来视觉的享受和数据直观体验,同时也是增强客户认同感的举措之一.基于图表的处理,我们一般往往都是利用对应第三方的图表组件,然后在 ...