从数据闭环谈微服务拆分

Tips:关注公众号:松花皮蛋的黑板报,领取程序员月薪25K+秘籍,进军BAT必备!

数据闭环,并不是说我们要将所有的功能全包揽在身上,不依赖其他业务方,也不依赖中台。而是想强调一件事,那就是业务问题排查过程尽量不要牵扯过多团队,因为数据链路越长越乱处理问题时效性越差,服务性能往往也不尽人意。我先分享个案例给你,或许能帮助你理解和产生共鸣。

我们有一个内容渠道是直播,渠道权限和创建直播间入口都是我们来维护的,但是创建直播后的内容保存接口是直播团队维护的,保存接口会校验达人权限和等级,而校验接口又是另外一个团队提供的,他们对我们缓存进行了封装。最近发现权限校验异常频发,原因是缓存和数据库状态不一致。可是对于达人或者不知情的人来说,在达人创作平台上碰到的问题就应该由创作端来负责,可真正出现问题的环节不在我们这。

上面的例子暴露出了很多问题,比如业务不是独立性的、其他服务直接共享了缓存。没有备忘录,其他同事根本不会知道还有这种隐藏的逻辑。这就好比一个枚举类在这个系统上修改了,但是在另外一个使用到它的系统却没有同步修改,灾难往往就在不久的将来。想要避免这些问题,那就要做好服务拆分。业内推荐的微服务拆分一般有以下四种:

1、基于业务逻辑拆分

一个内容从达人生产到用户能看到,需要经过很多中间过程。涉及到用户成长体系、渠道权限管理、频道样式创作、内容机审人审质检等等。如果中间环节都拆分成单独的业务,而各种样式内容的站内站外分发交由各个频道独立处理,也就是内容从生产到审核都是在闭环的,那案例中的隐藏的大坑就不复存在。每三个同事负责每几个环节的微服务,哪个环节出现问题那就让负责这个环节的同事排查就可以了,不需要多方同时介入,大家各司其职。

按照业务逻辑拆分后,不仅能形成更稳定的接口,还能确保我们能够更好的反映业务流程的变化。另外,每个独立部署的业务都可以使用特定的专业技能进行开发,比如内容推荐算法。每个独立部署的业务都有主要负责的研发,产品也就不需要抢研发资源来满足需求。

2.基于可扩展拆分

我们部门负责京东内容生态的建设,服务业务方各种定制化需求,其他事业群比如国际站却以为我们是技术中台,然后要求我们做一个国际化的达人创作平台。不过说实在的,那怕小步慢跑也无法满足他们的需求,因为内容这么多环节都有可能涉及到兼容性问题,比如发现好货中的商品信息上游是否兼容、内容安全校验算法是否兼容等等。

因为我们不是技术中台,没必要将功能以可扩展性为目标进行组件化,实现整套开放赋能,毕竟组织架构影响着技术架构。在这件事情上,我们只能分享经验和体系架构,或者他们觉得某个功能能直接复用,我们肯定大大方方将其拆出来然后贡献出去,让其独立演化,仅止而已。

3.基于可靠性拆分

MCN机构达人生产内容然后引导用户购买商品所得到的佣金是他们的命根子,如果出现计算不准确、提现异常的情况,达人就会觉得有猫腻,产生不信任,就会主动离开。而内容由于机器审核异常导致短暂无法正常进入人工审核阶段,是可以接受。可以看出我们对佣金结算和审核系统的可靠性容忍程度截然不同。

另外,佣金结算是一个长期不迭代的、稳定的业务,而审核系统可能会经常引入新的校验逻辑而需要变更上线,也就意味着后者的上线变更可能会直接影响到结算业务。因为代码越是修改,引入不确定性的风险越大。那我们需要避免因为审核系统需求上线变更导致佣金结算业务受到影响。最好的方式就是将他们拆开。

也就是说,一个服务故障发生时产生的影响面很大,它就算系统中很脆弱的部分,我们必须将其拆分出去,将异常隔离。

4.基于性能拆分

我们内容人工审核是由外包团体承包的,时常收到他们反馈说,下午6点左右审核页面加载很慢,审核通过按钮需要点好几下才能生效。我们结合数据库IO告警和数据库慢查询来看,那个时间段应该是有人在跑大数据调度任务,可是很难定位到具体的任务。不知道读者有没有体验过这种因为数据源依赖导致个别业务性能受到影响,包括很难优化的数据库慢查询。因此,它们的数据源应该拆分掉,业务同理。

最后多说一点,不管采用何种方式拆分服务,或者何种组合拆分方式,都要注意数据流向,千万不能出现循环依赖,包括使用MQ解藕,那也算一种隐层的依赖。

好,如果文章有帮助到你,欢迎转发分享或者点个在看。

文章来源:www.liangsonghua.me

作者介绍:京东资深工程师-梁松华,在稳定性保障、敏捷开发、JAVA高级、微服务架构方面有深入的理解

关注微信公众号:松花皮蛋的黑板报,获取更多精彩!

原文地址:https://www.cnblogs.com/liangsonghua/p/www_liangsonghua_me_30.html

时间: 2024-10-09 14:11:19

从数据闭环谈微服务拆分的相关文章

论微服务拆分

微服务拆分的起点 使用微服务架构模式的思想对目标系统进行拆分之前,我们需要先明白服务拆分起点和终点,以及需要考虑的因素与坚持的原则.所谓起点就是需要清楚拆分的是已有的项目还是新的项目,如果是已有的项目,那么这个项目处于什么样的架构阶段.而终点则是服务拆分后所需达到的架构阶段,以及后续扩展性的考虑,毕竟好的架构不是一次性设计出来的,而是不断进化来的. 不适合使用微服务的业务场景: 系统中包含很多很强事务场景的,分布式事务比较难处理,而且由于CAP定律的原因,也无法保证数据的强一致性 业务相对稳定,

浅谈微服务架构与服务治理的Eureka和Dubbo

前言 本来计划周五+周末三天自驾游,谁知人算不如天算,周六恰逢台风来袭,湖州附近的景点全部关停,不得已只能周五玩完之后,于周六踩着台风的边缘逃回上海.周末过得如此艰难,这次就聊点务虚的话题,一是浅谈微服务的架构设计,二是聊聊微服务中广泛用于服务治理的Eureka与RPC框架Dubbo异同点. 一.微服务的架构设计 之所以想聊一下这个话题,主要有感于最近接触的两个新的微服务项目--两个项目的架构设计出自两个人之手,却不约而同的使用了相同的设计理念,项目结构非常类似.又想到就职于上家公司时接触到的项

微服务拆分

微服务拆分是做微服务架构很重要也很难的话题,很多时候,几个服务是合还是拆在设计团队内也很难达成共识. 当你纠结应该拆分和合并时我建议就先合并,等后面版本迭代需要时有必要再去做拆分.从系统发展的角度说,很多平台也都是从单体大应用.逐步拆分演化而来的,就像有位大牛说的那样,一开始就拆分的很好的微服务实践往往是失败的,成功的微服务平台都是在演化中迭代而来的.因为微服务拆分看似单个服务明确简单了,但服务间调用管理就麻烦很多,原来进程内函数调用.单数据库表查询连接及事务处理都不能用了,要用各种方法处理数据

浅谈微服务的来龙去脉

作者:王清培(Plen wang) 沪江 公共业务平台 应用架构师 转载至沪江技术学院微信公众号 背景介绍 最近一段时间公共业务平台在进行大面积的重构,对原来的技术栈进行迁移,逐渐往Java.Go.Node.js等开源.自由为主的技术体系中过度. 虽然这主要是替换技术框架,但也是我们应用系统进行重新设计.业务流程重新梳理的一个好机会,我们将利用这次机会来重构之前发现的一些问题. Martin Fowler大师<重构>一书中有说过一句话,大概意思就是,"每次对原有系统进行修改调整的时候

谈微服务架构(转)

时间 2016-03-22 11:38:33  人月神话的BLOG 原文  http://blog.sina.com.cn/s/blog_493a84550102w5x6.html 主题 微服务 其实在前面很多文章谈到SOA,特别是系统内的SOA和组件化的时候已经很多内容和微服务架构思想是相同的,对于微服务架构,既然出现了这个新名称,那就再谈下微服务架构本身的一些特点和特性. 从这个图可以看到微服务架构的第一个重点,即业务系统本身的组件化和服务化,原来开发一个业务系统本身虽然分了组件和模块,但是

以实例说明微服务拆分(以SpringCloud+Gradle)

前言 之前,我都是说了很多的关于微服务的概念,说到底,很多人看了之后会认为没有什么意思,因为没有实际的东西说明,即使每个概念都明白了,也很难赋之实践.所以这次,我来用一个实际的例子去说明,在实际的项目过程中我们会如何去构建我们的微服务. PS:我们只是利用场景去模拟我们微服务构建或者说拆分的整个过程,对于场景本身在实际中会出现的问题我们不做考虑,说白了就是我们不考虑场景本身在实际生活中是不是这样的. 使用SpringCloud+Gradle构建 本文目的:让你体会到服务拆分本身,引起你对服务拆分

浅谈微服务架构与.Net Core

微服务(microservice)这个概念是2012年出现的,2014年3月Martin Fowler在他的个人网站(https://martinfowler.com/articles/microservices.html)中是这样说到的: The term "Microservice Architecture" has sprung up over the last few years to describe a particular way of designing softwar

浅谈微服务架构(四)——容错模式2

3. 限流模式 服务的容量和性能是有限的,在第3章中会介绍如何在架构设计过程中评估服务的最大性能和容量,然而,即使我们在设计阶段考虑到了性能压力的问题,并从设计和部署上解决了这些问题,但是业务量是随着时间的推移而增长的,突然上量对于一个飞速发展的平台来说是很常见的事情. 针对服务突然上量,我们必须有限流机制,限流机制一般会控制访问的并发量,例如每秒允许处理的并发用户数及查询量.请求量等. 有如下几种主流的方法实现限流. 1)计数器 通过原子变量计算单位时间内的访问次数,如果超出某个阈值,则拒绝后

结合实际场景谈一谈微服务配置

作为 Nacos 5W1H 的系列文章,本文将围绕"Where",讲述 Nacos 配置管理的三个典型的应用场景: 数据库连接信息限流阈值和降级开关流量的动态调度上一篇:Nacos帮我解决了什么问题? 数据库连接信息曾经有朋友跟我聊过一个问题,"业务飞速发展,团队越来越大,人员流动也相对频繁起来,怎么才能更好的保证数据的安全性,不被泄露呢?".他提到这样一个场景,公司创立初期,服务后端的代码都是他一行一行码出来的,当时只有他一个人,后端与数据库的连接配置信息也就直接