微服务架构可视化平台实践
为什么需要架构可视化
随着企业进行微服务架构改造,系统架构复杂度越来越高,架构变化日益频繁,微服务改造后的实际架构模型可能与预期已经产生了巨大差异,架构师或系统运维人员很难准确记忆所有资源实例的构成和交互情况;其次,系统架构在动态演化过程中可能引入了一些不可靠的因素,比如弱依赖变强依赖、局部容量不足、系统耦合过重等,给系统的稳定性带了极大的安全隐患。所以我们每次在面对系统改造、业务大促以及稳定性治理工作之前,都会通过梳理架构图的方式,呈现系统架构中个组件之间的交互方式,架构可视化能够清晰的协助我们识别架构中存在的问题以及建立高可用的系统。
架构可视化后,可以给我们带来以下几点但不局限于此的优势:
- 确定系统边界
一张好的架构图,应该明确系统所包含的各个组件以及各个组件之间的核心调用关系,这些组件的集合就是系统的处理边界,系统架构的边界在一定程度上也反映了业务域的边界。 - 架构问题识别
基于高可用的架构准则,结合可视化的架构图,可以评估架构可能存在的安全风险,比如系统在容灾、隔离以及自愈维度下的健壮性。其次,一些架构链路可视化工具(比如鹰眼)在实际工作中确实大大提高了开发者排查与定位问题的效率。 - 提高系统可用性
有了系统架构的上下游依赖关系图,在故障发生时,开发人员可以借助依赖数据快速定位到问题的来源,极大缩短问题修复时间(MTTR)。借助架构图,我们还可以梳理出系统中存在的强弱依赖,在业务高峰期对弱依赖进行降级,或者针对系统依赖的各个组件进行故障模拟,以评测系统整体在面对局部故障的可靠性。
常见架构可视化的做法
我们熟知的架构图是静态的停留在PPT上的,很多时候我们的架构已经发生了非常大的变化,但是我们还在使用那张看上去很经典却早已过时的架构图。长时间使用与实际架构不符的架构图对线上架构的认知的危害是巨大的,我们需要在脑海中不断更新对系统架构的视图,以保持对系统架构的敏感度。每年的大促或者重大系统改造成为我们梳理系统架构、对架构进行重新认知的机会,此刻我们需要通过各种工具查看系统的各个组件分布以及不同组件的内部与外部的依赖关系,这种梳理架构图的方法是最常用的方式,权且称之为“__手工绘制法__”。
手工经常干的事情,就有追求效率的同学使用计算机系统带来的自动化手段帮助自己做这件事情,比如我们常常看到的基于数据埋点的微服务可视化解决方案,这类架构可视化手段通常在分布式追踪、APM等监控领域使用较多,下图为某APM产品提供的应用维度架构可视化方案:
我们称这种可视化方式为“__埋点式感知法__”,架构组件的识别是依赖关键的核心类检测与埋点,此种方案存在以下弊端:
- 语言相关性:只要是系统埋点,与语言相关的特征基本就拜托不了,需要针对不同语言提供不同的依赖包;
- 不易维护:因为是对核心类的检测,当组件包做了重大变更时,需要同步变更;
- 不易扩展:因为是客户端识别方案,客户端一旦开放出去,新组件的支持只能等待用户更新组件;
- 规模受限:客户端识别的另一个缺点是算法受限,服务端进行识别,可以借助大数据分析等手段更有效准确的识别;
还有一种自动化架构感可视化方法,我们称之为“__无界架构感知__”,是一种语言无关性的架构识别方案,其采用采集用户主机上的进程和容器的元数据、监控数以及网路数据的最最基础的数据,在服务端构建架构图。
我们设计架构可视化的理念
为了最大限度上降低用户进行架构可视化的成本,我们采用了无界架构感知-应用无侵入的方式微服务进行可视化,通过采集进程数据与网络调用数据,构建进程间的网络调用关系,构建微服务的架构信息。用户只需要安装我们AHAS Agent探针,即可完成架构可视化操作;对于阿里云云原生系统,我们提供了自动化安装方式,而无需登录机器。
核心本质
软件架构可视化的核心点是寻找在软件体系结构中有意义和有效的元素视图以及这些元素之间的关系。我们认为一款优秀的软件架构可视化产品应该帮助用户排除掉不重要的信息,给用户呈现出对他们有价值的视图,特别是在微服务架构下庞大而复杂的调用关系链场景中。这里面的核心点是__有意义__和__有效__,要做到这两点,首先需要识别什么是有意义和有效的元素和关系,我们在此领域做的事情归纳起来就是“__识别__”,识别机器上的每个进程是什么,发生的网络调用远端是什么,唯有知晓了这些元素是什么我们才有理由和依据来判断是否对用户有意义以及其在用户架构中的重要程度。
在梳理了大量架构图,我们发现用户关心的架构元素主要分为三类:
- 自己的应用服务;
- 应用对外部的资源依赖;
- 服务器本身的信息。
应用对外部资源的依赖通常以其它应用和通用中间件或者存储服务两种形式存在。故我们将需要识别的进程分为:应用服务和常见的组件服务(比如redis、mysql等),这些组件服务又分为用户自建的服务和使用公有云提供的服务,特别是对于Cloud Native应用来说,云服务的识别显得格外重要。
目前,我们提供了20种阿里云云服务的识别以及包含mysql、redis、Tomcat等常见的21种三方服务组件,此组件库还在不断扩张中,目的就是最大限度的知晓架构中的元素到底是什么。
(图中展示了节点详情的请求流向以及节点的监控等基本信息)
架构分层
我们同样认为架构可视化的有效性跟人的认知层次有关,架构可视化的重点是确定该工具是否更好的支持自顶向下方法、自下而上方法或者两者的结合。开发者更关心应用维度上的架构,架构师或者管理者更关心整体系统架构。所以需要针对不用的使用者提供不同层次的架构可视化视角。理想的架构图需要支持宏观维度以及不断下钻下的微观视角,我们对架构进行了分层设计,目前分为进程层、容器层和主机层,后期我们可能会继续上扩或者下钻支持地域层或者服务层。
架构回溯
没有哪个系统的架构是一成不变的,系统架构会随着系统的版本迭代不断进行演化。所以对架构可视化操作,还需要具备随着时间的推移可对架构信息进行自动更新已经回溯的能力。在我们提供的架构感知产品中默认架构图会随着时间自动刷新,同时支持对历史的回溯,你可以选择历史中的某一刻查看架构信息,比如,重大版本的变更时,发布前与发布后的系统架构是否发生了违背一些高可用原则的问题,抑或排查是否出现了不该有的依赖问题。
可见可得
架构可视化解决了可见的问题,但当我们从架构图中发现了问题需要解决时,架构图还应该给我们提供便利的可交互操作入口,让我们可以完成问题发现与解决的闭环。比如通过架构感知监控到了某个应用的流量非常大,我们需要对应用进行限流或者预案,那么通过架构图,我们应该是可以完成我们期望执行的操作。在架构图中融入可以交互的运维操作,让我们从看到到操作,再到问题恢复后体现在图中,这就像计算机发展史上从命令行视图到窗口视图的转变。
我们对架构可视化的定位
__架构可视化不是目的,只是实现系统高可用性的手段__。借助架构感知采集到的架构数据,在识别了用户使用的组件(我们对mysql、redis、mq等的统称)后,我们借助这些组件以及与组件匹配的故障库,可以给用户自动推荐这些组件可能遇到的故障,配合我们提供的评测服务让用户更方便地对组件进行各种故障的模拟与演练,以提高系统的健壮性。其次,通过架构感知识别Java Application 应用,如果发现其负载较高,配合我们提供的限流降级(阿里巴巴开源的Sentinel商业版)功能,为服务的持续可用性保驾护航。
我们对AHAS的定位是一款数据分析型的高可用保障产品,帮助云原生架构系统实现高可用能力的提升。架构可视化是我们给用户提供的高效运维和管控的窗口,我们期望通过丰富的云原生数据体系配合架构图的可视化以及可操作性,建立起以应用为中心的运维一体化平台。在未来,我们会加强与其它云服务的集成,比如监控、容器服务,以丰富架构感知的数据维度;其次,会在数据的深度挖掘和智能化消费上投入更多精力,真正让数据成为企业的核心价值,让数据成为保障业务的稳定性的利器。
产品体验连接:https://www.aliyun.com/product/ahas
微服务架构可视化平台实践相关推荐
- 北达软微服务架构设计与实践圆满结束
2016年10月26-27日,为期两天的微服务架构设计与实践在北京大学成功举办.随着新一代信息技术的快速发展,业务需要快速变化.快速创新,互联网的连接带来了大的并发量和数据量.从单机架构走向分布式架构 ...
- GitHub 的微服务架构设计与实践
以下文章来源方志朋的博客,回复"666"获面试宝典 本文介绍 GtHub 如何从单体架构迁移到微服务架构,并对其中一些最佳实践做了详细说明. 1 旅程开启 GitHub 创建于 2 ...
- 【转】构建微服务架构的最佳实践2/3
本文是这一系列文章的第二篇,将介绍服务的交互. 服务的交互 微服务架构提倡有许多职责单一的小服务组成,这些服务之间互相交互.然而这就造成了一系列的问题,比如:服务之间如何发现彼此?是否采用统一的协议? ...
- 微服务架构设计总结实践
- 目录 - 一.微服务架构介绍 二.出现和发展 三.传统开发模式和微服务的区别 四.微服务的具体特征 五.SOA和微服务的区别 六.如何具体实践微服务 七.常见的微服务设计模式和应用 ...
- 华为云MVP:来自工业制造领域的微服务与云平台实践
[摘要] 首先,和大家先聊聊的是为什么微服务.DevOps和云计算会在各个产业大行其道;其次,再谈谈微服务架构设计有那些自己独特的设计思想,和传统的SOA有什么区别;最后,我们再一起看一看在工业领域云 ...
- 美团点评DDD在微服务架构中的实践!10张ppt一次讲透
点击"技术领导力"关注∆ 每天早上8:30推送 来源:美团技术团队 至少30年以前,一些软件设计人员就已经意识到领域建模和设计的重要性,并形成一种思潮,Eric Evans将其定 ...
- Spring Cloud 微服务架构全链路实践
阅读目录: 1. 网关请求流程 2. Eureka 服务治理 3. Config 配置中心 4. Hystrix 监控 5. 服务调用链路 6. ELK 日志链路 7. 统一格式返回 Java 微服务 ...
- 解析微服务架构与最佳实践
- 【ArchSummit】阿里云原生微服务架构治理最佳实践
前言
最新文章
- Python进阶之递归函数的用法及其示例
- xcode编译Undefined symbols for architecture i386问题解决
- Maven settings.xml配置Nexus
- HDU - 1223 DP 分类
- 使用Eclipse创建一个Android程序方法
- java基础—FileWriter 的使用
- 【BZOJ3675】序列统计,斜率优化DP
- 人工智能应用,德国AI公司
- 零中频接收机频率转换图_【鼎阳硬件智库原创︱频谱分析仪】频谱分析仪应用解惑之频率分辨力...
- quartus仿真15:全加器和半加器及如何生成符号文件
- Python并发编程之线程池/进程池
- ElasticSearch - 嵌套对象 nested
- IDL | 实验二、IDL语法基础
- swift -inout关键字
- mysql学生管理系统背景_学生基本系统管理
- 电视hdr测试软件,HDR+4K一个都不能少 本地资源播放测试
- java 抽样算法_java生成抽样随机数的多种算法
- ios15验证失败因为你不在连接互联网
- ubuntu 18.04 安装谷歌输入法
- Django新增数据
热门文章
- 脚本编程语言python语言-python算的上脚本语言吗
- python管理系统-基于Python实现用户管理系统
- python100行代码-python代码统计 100行
- python真的超过java了吗-Python 的开发效率真的比 Java高吗?
- 使用netron对TensorFlow、Pytorch、Keras、PaddlePaddle、MXNet、Caffe、ONNX、UFF、TNN、ncnn、OpenVINO等模型的可视化
- LeetCode Merge k Sorted Lists(有序单链表数组的合并)
- Django的静态文件的配置
- 物联网与边缘计算的融合
- “A and B ...”,谓语动词必以复数形式呈现?
- Loj #2036. 「SHOI2015」自动刷题机