如何用“二八原理”对微服务做系统梳理,找出黄金流程

作者:王新栋,目前就职于京东,一直从事京麦平台的架构设计与开发工作,熟悉各种开源软件架构。在web开发,架构优化上有较丰富实战经历。有多年在NIO领域的设计、开发经验,对HTTP、TCP长连接技术有深入研究与领悟,目前主要致力于移动与PC平台网关技术的优化与实现。

微服务的主要目的是将原本独立的系统拆分成多个小的,有独自进程运行的,同时这些小的服务单元之间通过RPC或者HTTP协议来相互通讯协作。每个独立的服务单元内部都有自己的数据存储、业务逻辑开发和自己的运维部署机制。我们在享受着微服务化后带来的灵活性便利的同时,对我们的运维和服务治理也提出了新的挑战。从早先单体应用中的代码依赖,变成了通信依赖。我们就不得不考虑以下问题,比如网络延迟、分布式事务、异步消息等等。

1、系统分类与演进

1.1 统分类

我们的系统如果按照功能划分的话,大概有如下三类系统。

第一类是接口服务系统,这类系统是提供外部接口比如JSF(京东自研RPC框架)、HTTP接口、hession接口等,这些接口有读,有写,尤其是写接口,要考虑好写的幂等性操作,读天然是幂等的,做好防刷即可。

第二类是网页类系统,用户直接使用网页,那么网页上的数据区域来源,就要分清楚,一张网页上面的数据从好多个源头过来,每个源头下面都有多个系统来支撑,如果一份数据来自多个渠道,需不需合并,都是要考虑的。

第三类是任务类系统,比如我们常见的统计、数据同步等功能的系统。这类系统要考虑任务是热备还是冷备,多数都是热备,此种情况下就需要考虑好分布式是任务调度的问题,资源分配,计算的准确性等。

每种系统对应的梳理方式又是不同的。

1.2 系统演进

系统架构变化也是与时俱进的,早期的单体系统跟现在大家践行的微服务化系统,在系统梳理上以及治理上也是完全不同。上图是一个系统架构的演进(图参照:《分布式服务框架》1.5章节)

2、梳理目的要搞清楚

每一年618和双11之前,备战开始,我们都要对所有的系统做一次梳理。那么每一次梳理的目的,就是要找出系统薄弱点。现在系统多了,系统里面的业务也变得复杂了。不过没有关系,还是那句老话,打蛇打七寸,利用二八原理。集中精力到最重要的环节。另外80%不是说就不管了,这里面的业务可以走限流或者降级处理,当然也是要梳理的。只不过要有轻重之分。

3、如何做

我们要从大的方面梳理出一个系统包含哪些功能,这些功能里面哪些是核心功能也叫做黄金功能。同时从小的方面,对已经梳理出的核心功能,我要再梳理出这些功能对应的流程上包含的各个节点。每个节点要找出强依赖和弱依赖。强依赖,是说少了这个依赖功能不能完成,那么就要准备容灾方案,也就是比如依赖的DB挂了,那么我们可以用开关切到MQ里面。弱依赖,则是不影响功能使用的依赖,比如插入ES记录日志,那么ES挂掉,我们直接降级就好。

3.1、接口服务类系统

我们要梳理出提供的所有服务接口,找出其中的黄金接口,比如接口1是黄金接口,那么我们就要确保这个接口一定是可用的,如何保证,就是灾备。依赖资源比如redis集群,放两个机房,一个机房两套。总之这个接口是不可降级的,在不能降级的情况下,就要准备多套方案来确保接口1必须提供服务。

3.2、网页类系统

网页类系统,比如首页,类目、展示区、导航栏,广告位,这些都不能挂,首页是一个网站的脸,企业的脸,一定不能丢脸。每个功能区域对应的信息都要有多级缓存,有托底数据,无论如何都要保证页面上是有内容的。

3.3、任务类系统


对于任务类系统,一样,要有分布式worker,切不可以单点。解决方案可以利用zookeeper+定时任务,自己实现,也可以采用开源的方案比如Elastic-Job。

上面的三类系统,在我们现有的结构中均都已微服务化,我们开篇也突出了微服务治理的特点,网络延迟、分布式事务、异步消息。因此我们针对微服务的梳理也是从这几个方面入手。关键点,就是找出通讯依赖,确定是强依赖,还是弱依赖。

3.4、核心功能的核心流程梳理

梳理出核心功能以后,我们就要开始梳理核心流程,流程的梳理要找出关键节点,比如下面这张图,只是作为举例使用,一些类名和和字段都用XX代替。关键节点,就是我们重点对待的,强依赖哪些资源,弱依赖哪些资源。使用不同颜色标注,比如深×××表示强依赖,浅绿色表示弱依赖。

4、总结

上面描述的过程中,列举了系统的分类,系统的演进,流程的梳理。我们的最终目的就是要找出黄金功能,找出黄金流程,流程里面的强依赖和弱依赖。强依赖不可降级必须要有灾备方案。做到以上几点,确保梳理没有遗漏,无论系统如何演进与变化,我们的服务治理,618和双11的备战都能很好的完成!

原文地址:http://blog.51cto.com/13732225/2136080

时间: 2024-10-03 15:29:21

如何用“二八原理”对微服务做系统梳理,找出黄金流程的相关文章

.NET Core微服务 权限系统+工作流(二)工作流系统

一.前言 接上一篇 .NET Core微服务 权限系统+工作流(一)权限系统 ,再来一发 工作流,我在接触这块开发的时候一直好奇它的实现方式,翻看各种工作流引擎代码,探究其实现方式,个人总结出来一个核心要点: 实际上工作流引擎处理流转的核心要义是如何解析流转XML或者JSON或者其它持久化方式,工作流通过解析XML或者JSON判断当前节点的状态和下个节点的信息并做出一些处理.感觉等于没说?直白一点,就是通过解析JSON文件得到下一步是谁处理. 工作流的流转线路实际上是固定死的,排列组合即可知道所

微服务 权限系统+工作流

一.前言 接上一篇 .NET Core微服务 权限系统+工作流(一)权限系统 ,再来一发 工作流,我在接触这块开发的时候一直好奇它的实现方式,翻看各种工作流引擎代码,探究其实现方式,个人总结出来一个核心要点: 实际上工作流引擎处理流转的核心要义是如何解析流转XML或者JSON或者其它持久化方式,工作流通过解析XML或者JSON判断当前节点的状态和下个节点的信息并做出一些处理.感觉等于没说?直白一点,就是通过解析JSON文件得到下一步是谁处理. 工作流的流转线路实际上是固定死的,排列组合即可知道所

从无到有构建亿级微服务秒杀系统

从无到有构建亿级微服务秒杀系统(真实工业界案例) 题取马:zuoz 课成滴志::https://pan.baidu.com/s/1yiNyYTbqMG4PWC4XBoYmJg 录制本套教程的初衷,通过从业10年接触过很多的技术开发人员,尤其在面试一些技术人员的时候,发现他们的技术知识更新较慢,很多人渴望接触到高并发系统和一些高级技术架构,为了帮助更多人能够提升自己和接触到这类技术架构,并满足企业的人才需求,利用业余时间开启了我录制这套教程.通过业余录制的课程有很多学员给我反馈信息,给了我很大的鼓

寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现。本文记录HAProxy服务热加载后某微服务50%概率失效的问题。设计3组对比实验,验证了陈旧配置的HAProxy在Reload时没有退出进而导致微服务丢失,并给出了解决方案. Keywords:HAProxy热加

寻找丢失的微服务-HAProxy热加载问题的发现与分析 原创: 单既喜 一点大数据技术团队 4月8日 在一点资讯的容器计算平台中,我们通过HAProxy进行Marathon服务发现.本文记录HAProxy服务热加载后某微服务50%概率失效的问题.设计3组对比实验,验证了陈旧配置的HAProxy在Reload时没有退出进而导致微服务丢失,并给出了解决方案. Keywords:HAProxy热加载.Marathon.端口重用 01 原文地址:https://www.cnblogs.com/yuanj

如何用代理平台解决微服务的一些痛点

为什么要做代理平台 微服务架构越来越流行,在一个上百号人开发的项目中,使用微服务的方式,大量模块之间通过接口调用,随之也带来了许多问题: 接口不能及时提供造成阻塞:往往客户端需要等待后台接口进入测试阶段,才能开始进行开发.一些刚入门的客户端开发(如web前端开发),并没有自行伪造接口数据的能力. 通信数据格式混乱:json.xml.protobuf等各种方式都有,方式相同而数据结构又不统一,主调和被调方都需要自行封装和解析不同格式的数据 日志未收敛汇集 : 日志分散在各个模块,未跟请求链路绑定,

微服务做个总结

开始主要是遇到的一些性能问题.以及固定时间点线程数数过多问题. 后来看进来去后从设计模设计层面包含工厂.抽象工厂.单例模式.职责链. 构建者.动态代理.静态代理等. 从实现的特点包含编解码多种序列化技术,多种负载均衡算法,多种动态代理 实现,泛型.注解.线程池的高效使用,多种协议的支持长连接jsf.短连接rest. webservice,高性能缓存.锁.原子数据.线程安全容器.spring注解.配置. spi模块加载等. 服务治理从注册中心.监控中心. 高性能的管理框架netty,netty粘包

微服务核心架构梳理

Hello,Microservices 什么是微服务 微服务Microservices之父,马丁.福勒,对微服务大概的概述如下: 就目前而言,对于微服务业界并没有一个统一的.标准的定义(While there is no precise definition of this architectural style ) . 但通在其常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调.互相配合,为用户提供最终

微服务架构的核心要点和实现原理

微服务架构中职能团队的划分 传统单体架构将系统分成具有不同职责的层次,对应的项目管理也倾向于将大的团队分成不同的职能团队,主要包括:用户交互UI团队.后台业务逻辑处理团队与数据存取ORM团队.DBA团队等.每个团队只对自己分层的职责负责,并对使用方提供组件服务质量保证.如果其中一个模块化组件需要升级.更新,那么这个变更会涉及不同的分层团队,即使升级和变更的改变很小,也需要进行跨团队沟通:需求阶段需要跨团队沟通产品功能,设计阶段需要跨团队沟通设计方案,开发阶段需要跨团队沟通具体的接口定义,测试阶段

Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转

原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过:如果单体架构都搞不好,就别搞微服务架构.乍一看,这句很有道理,后来发现这句话是不太对的,因为微服务架构的目的就是为了降低系统的复杂性,所以 微服务架构应该比单体架构更简单.更好实践才对. 这篇文章,我们就分享一下如何搭建一个 简单模式 的微服务架构. 什么是微服务架构的简单模式? 相对于大型互联网