腾讯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实现 蓝桥杯 历届试题 城市建设
问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修.市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他. C市中有n个比较重要的地点,市长希望这些地点重点被考虑.现在 ...
- TZOJ Find the Spy
描述 Whoooa! There is a spy in Marjar University. All we know is that the spy has a special ID card. P ...
- Spring zuul 快速入门实践 --看zuul如何进行服务转发
zuul 作为springCloud 的全家桶组件之一,有着不可或缺的分量.它作为一个普通java API网关,自有网关的好处: 避免将内部信息暴露给外部: 统一服务端应用入口: 为微服务添加额外的安 ...
- 【代理】内网穿透工具 frp&frps
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发. ### frp 的作 ...
- 【Java】利用反射执行Spring容器Bean指定的方法,支持多种参数自动调用
目录 使用情景 目的 实现方式 前提: 思路 核心类 测试方法 源码分享 使用情景 将定时任务录入数据库(这样做的好处是定时任务可视化,也可以动态修改各个任务的执行时间),通过反射执行对应的方法: 配 ...
- MATLAB作图之二
"平滑"二维图像可以通过对图像进行插值实现.那么对于一条有大量"毛刺"的曲线,是不是也可以通过插值来平滑呢?答案是肯定的. "平滑"前 x ...
- 油猴脚本 之 网教通直播评论记录抓取 v2.0
先放一个 <油猴脚本 之 网教通直播评论记录抓取>那篇文章的传送门 . 修复内容 将所有表情转为 [符号表情] 字样,而非删除: 修复被禁言用户读取异常,现在被禁言用户表示为 张三 [已禁 ...
- 线上排查Class、Jar加载问题的一般方法
问题背景 本问题源于<ojdbc6中OraclePreparedStatement的ArrayIndexOutOfBoundsException异常BUG-6396242>这篇博文中最后思 ...
- JS之预解释原理
预解释的原理 预解释的不同机制 var的预解释机制 function 的预解释机制 预解释机制 面试题练习 预解释的的不同机制 预解释也叫预声明,是提前解释声明的意思:预解释是针对变量和函数来说的:但 ...
- VScode快捷键集锦(持续更新)
本文的快捷键是根据VScode for mac来的,Windows和Linux用户可能需要些许改动. 注释:cmd + / 注释当前选中的行,或者注释掉选中的行,再按一次反注释.还可以在按cmd + ...