目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

Hystrix

服务可用性  复杂分布式体系结构中的服务具有多个依赖关系,每个依赖关系在某些时候都将不可避免地失败。如果主服务未能与这些外部故障隔离,则他们可能会收。  例如,对于依赖于 30 个服务的服务 A,其中每个服务的正常运行时间为 99.99%,服务 A 的最终可用性如下: 99.99^30 = 99.7%正常运行时间 十亿次请求中的 0.3%= 3,000,000 请求失败次数 每月平均 2 小时的服务宕机时间,即使所有依赖项都具有出色 99.99%的正常运行时间。  现实情况通常更糟。即使所有依赖项都表现良好,如果您没有为整个系统设计弹性,那么即使 0.01%停机时间对数十种服务中的每项服务的总体影响也相当于每月停机时间可能达到数小时。 分布式体系结构中服务之间的依赖问题 由业务原因在某一时刻,某服务并发请求骤增,导致该服务的延迟,响应过慢。 复杂分布式体系结构中的应用程序之间往往存在多层级联赖的关系,当 Provider 服务在某一时刻出现故障,如果 Consumer 服务如果没有与这些故障服务隔离,会导致 Consumer 服务也会出现请求堆积、资源占用、宕机不可....

Feign

简介 v.假装,人如其名,是一个伪 RPC 客户端,是一种声明式、模板化的 HTTP 客户端。在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 请求访问远程服务,就像调用本地方法一样,开发者完全感知不到这是在调用远程方法,更感知不到在访问 HTTP 请求,Feign 的具体特性如下: 可插拔的注解支持,包括 Feign 注解和 JAX-RS 注解。 支持可插拔的 HTTP 编码器和解码器 支持 Hystrix 和 Hystrix 的 Fallback 机制。 支持 Ribbon 的负载均衡。 支持 HTTP 请求和响应的压缩。 Feign 是一个声明式的 Web Service 客户端,它的目的就是让 Web Service 调用更加简单。它整合了 Ribbon 和 Hystrix,避免了开发者需要针对 Feign 进行二次的整合。Feign 提供了 HTTP 请求模版,通过编写简单的接口和注解,就可以定义好 HTTP 请求的参数、格式、地址等信息,Feign 会完全代理 HTTP 的请求,在使用过程开发者只需要依赖注入 Bean,然后调用对应的方法并传递参数....

Remote Procedure Call

Remote Procedure Call  当 A 机器中程序想要调用 B 机器中的程序时,A 中进程会被挂起,而 B 机器接着执行;B 机器在返回后,会把运算结果的数据传回给 A 机器的进程,A 机器获得调用结果后在接着执行,这种机制叫作 RPC(Remote Procedure Call)——远程过程调用。 RPC 协议  RPC 协议是一种通过网络向远程计算机程序请求服务,而不需要了解底层网络技术的协议。  RPC 协议以传输协议(TCP、UDP、HTTP)为基础,跨穿于 OSI 的传输层和应用层之间,通过利用现有的基础网络协议及自己良好的封装性,适用于基于网络的分布式应用开发。 RPC 调用原理 连接:通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。 寻址:A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口。 编码:网络协议是基于二进制的,内存中的参数的值要序列化成⼆进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给B服务器。 解码:....

Eureka

服务发现的由来 单体架构时代  服务自成一体,对于依赖的少数外部服务采用配置域名的方式访问。 SOA 架构时代  单体架构拆分为较粗粒度的服务化架构,依赖内部服务较多,内部服务间相互调用较多,以基于 HTTP 形式暴露服务为例,B 服务需要调用 A 服务: B 服务自己维护 A 服务的所有实例 IP,耦合度高。 A 服务自己恢复其所有实例的 IP,暴露统一的内网域名供调用者消费,解耦合。 微服务架构时代  底层运维方式发生了巨大的变化,随着 Docker 的流行,业务服务不再部署在固定的虚拟机上,其 ip 地址也不再固定,此时前面的解决方式就显得捉襟见肘,以 Nginx 为例: 在没有引入注册中心时候,需要手工或者通过脚本的方式,在部署的时候去更新 Nginx 的配置文件,然后 reload,或者是使用 ngx_http_dyups_module 通过 rest API 来在运行时直接更新 upstream 而不需要 reload. 将注册中心作为一个标配的分布式服务组件,网关等中间件服务都可以从注册中心获取相关的实例信息,实现动态路由。比如 consul-template + ....

微服务与SpringCloud

应用架构的发展  软件架构分为三种架构类型,分别是业务架构、应用架构、技术架构。业务决定应用、技术支撑应用。架构的发展:  单体架构 => 分布式架构 => SOA 架构 => 微服务架构 微服务架构  微服务是一种架构风格,可以将一个大型复杂的业务系统按功能拆分为多个相互独立的微服务,各个微服务之间是松耦合的,通过各种远程协议进行同步/异步通信,各微服务均可以被独立部署、扩/缩容以及升/降级。 基于 SpringCloud 的微服务解决方案 SpringCloud 是什么  它是由 Spring 官方开发维护,基于 SpringBoot 开发,提供的一套完整的微服务解决方案,其中容纳了很多子项目,SpringCloud 组件如下图所示: 组件名称所属项目组件分类 Eurekaspring-cloud-netflix注册中心 Zuulspring-cloud-netflix第一代网关 Sidecarspring-cloud-netflix多语言 Ribbonspring-cloud-netflix复杂均衡 Hystrixspring-cloud-netfli....

HTTP协议概念

HTTP 协议应用的场景分析 在用户界面中,即浏览器 URL 地址栏中输入地址。 当地址还没有输入完整,浏览器引擎会从本地数据存储中查询历史数据,以便智能补全输入的完整地址。 按下 Enter 键后会由渲染引擎通过网络发起首次 HTTP 请求。 服务端响应 HTML 包体至客户端浏览器,渲染引擎接收到响应,并解析包体内容渲染至用户界面,并根据包体内的超链接构建新的 HTTP 请求,例如:js、CSS 等不同种类的超链接。 接收到服务端的响应,并交给对应的解释器,例如:JS 解释器。 渲染引擎拿到所需的所有文件后,通过UI 后端绘制到用户界面中。 一次完整的 HTTP 请求流程 Chrome 浏览器 Network 面板 Hypertext Transfer Protocol (HTTP) 协议  a stateless application-level request/response protocol that uses extensible semantics and self-descriptive message payloads for flexible inte....

容器、虚拟化、Docker

容器  顾名思义是指用以容纳物料的基本装置,譬如:水杯、饮料箱子、海洋、地球。  不完全近似于日常生活中的是 —— 在信息技术领域,容器的是标准化的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境,容器具备以下特点: 对软件和其依赖的标准化打包 应用之间相互隔离 共享同一个OS Kernel 可以运行在多种不同的主流操作系统是 容器和虚拟化的差异  容器和虚拟机具有类似的资源隔离和分配优势,但功能不同,因为容器虚拟化的是操作系统而不是硬件。所以容器更便携,更高效。  容器是APP层面的隔离、虚拟化是物理资源层面的隔离。  容器技术属于操作系统级虚拟化—— 内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同。操作系统虚拟化最大的特点就是不需要额外的 supervisor的支持。  虚拟机(VM)是物理硬件的抽象,将一台服务器转变为多台服务器。管理程序允许多台VM在单台机器上运行。每个VM都包含操作系统的完整副本(隔离性强),应用程序,必要的二进制文件和库 - 占用数十GB。虚拟机也可能很慢启动。  虚拟化的优点: 资源池 —....