spring|腾讯T4架构师用这12张手绘图,轻松带你搞懂微服务架构!太厉害了( 四 )


下面介绍一下 Hystrix 的运行流程:
每一个微服务调用时 , 都会使用 Hystrix 的 Command 方式(上图的左上角那个) , 然后使用 Command 同步的 , 或者是响应式的 , 或者是异步的 , 判断电路是否熔断(顺着图从左往右看) , 如果断路则走降级 Fallback 。
如果这个线闭合着 , 但是线程资源没了 , 队列满了 , 则走限流措施(看图的第 5 步) 。
如果走完了 , 执行成功了 , 则走 run() 方法 , 获取 Response , 但是这个过程如果出错了 , 则继续走降级 Fallback 。
同时 , 看图最上面有一个后缀是 Health 的 , 这是一个计算整个链路是否健康的组件 , 每一步操作都被它记录着 。
容器与服务编排引擎
从物理机到虚拟机 , 从虚拟机到容器;从物理集群到 OpenStack , OpenStack 到 Kubernetes;科技不断的变化 , 我们的认知也没刷新 。
我们从容器开始说起 , 它首先是一个相对独立的运行环境 , 在这一点有点类似于虚拟机 , 但是不像虚拟机那样彻底 。
虚拟机会将虚拟硬件、内核(即操作系统)以及用户空间打包在新虚拟机当中 , 虚拟机能够利用“虚拟机管理程序”运行在物理设备之上 。
虚拟机依赖于 Hypervisor , 其通常被安装在“裸金属”系统硬件之上 , 这导致 Hypervisor 在某些方面被认为是一种操作系统 。
一旦 Hypervisor 安装完成 ,就可以从系统可用计算资源当中分配虚拟机实例了 , 每台虚拟机都能够获得唯一的操作系统和负载(应用程序) 。
简言之 , 虚拟机先需要虚拟一个物理环境 , 然后构建一个完整的操作系统 , 再搭建一层 Runtime , 然后供应用程序运行 。
对于容器环境来说 , 不需要安装主机操作系统 , 直接将容器层(比如 LXC 或 Libcontainer)安装在主机操作系统(通常是 Linux 变种)之上 。
在安装完容器层之后 , 就可以从系统可用计算资源当中分配容器实例了 , 并且企业应用可以被部署在容器当中 。
但是 , 每个容器化应用都会共享相同的操作系统(单个主机操作系统) 。 容器可以看成一个装好了一组特定应用的虚拟机 , 它直接利用了宿主机的内核 , 抽象层比虚拟机更少 , 更加轻量化 , 启动速度极快 。
相比于虚拟机 , 容器拥有更高的资源使用效率 , 因为它并不需要为每个应用分配单独的操作系统——实例规模更小、创建和迁移速度也更快 。 这意味着相比于虚拟机 , 单个操作系统能够承载更多的容器 。
云提供商十分热衷于容器技术 , 因为在相同的硬件设备当中 , 可以部署数量更多的容器实例 。
此外 , 容器易于迁移 , 但是只能被迁移到具有兼容操作系统内核的其他服务器当中 , 这样就会给迁移选择带来限制 。
因为容器不像虚拟机那样同样对内核或者虚拟硬件进行打包 , 所以每套容器都拥有自己的隔离化用户空间 , 从而使得多套容器能够运行在同一主机系统之上 。
我们可以看到全部操作系统层级的架构都可实现跨容器共享 , 惟一需要独立构建的就是二进制文件与库 。
正因为如此 , 容器才拥有极为出色的轻量化特性 。 我们最常用的容器是 Docker 。
①容器编排
过去虚拟机可以通过云平台 OpenStack 管理虚拟化 , 容器时代如何管理容器呢?这就要看看容器编排引擎了 。
Apache Mesos:Mesos 是基于 Master , Slave 架构 , 框架决定如何利用资源 , Master 负责管理机器 , Slave 会定期的将机器情况报告给 Master , Master 再将信息给框架 。 Master 是高可用的 , 因为 ZK , 也有 Leader 的存在 。
下面是架构图:
Kubernetes:Kubernetes 是最近十分火热的开源容器编排引擎:
Kubernetes 设计理念和功能其实就是一个类似 Linux 的分层架构 , 先说说每一个 Kubernetes 节点内部 , kubelet 管理全局全局 pod , 而每一个 pod 承载着一个或多个容器 , kube-proxy 负责网络代理和负载均衡 。
Kubernetes 节点外部 , 则是对应的控制管理服务器 , 负责统一管理各个节点调度分配与运行 。
②服务网格化
关于服务网络化 , 后面会更加深入的为大家进行讲解 。
下面这份腾讯T4架构师整理出来的微服务:SpringBoot+Cloud+Docker就是给读者送上来的福利哦!前言最近几年 , 微服务可谓是大行其道 。 在业务模型不完善 , 超大规模流量的冲击的情况下 , 许多企业纷纷抛弃了传统的单体架构 , 拥抱微服务 。 这种模式具备独立开发、独立部署、可扩展性、可重用性的优点的同时 , 也带来这样一个问题:开发、运维的复杂性提高 。 有人感觉微服务越做越不方便管理 。