说起在某一领域起到重要引领和带动作用的因素,我们往往会想到一次词语,那就是三驾马车,今天,我有幸学习了一下架构的三驾马车。这里所说的三架马车是指微服务、消息队列和定时任务。如下图所示,这里是一个三驾马车共同驱动的一个立体的互联网项目的架构。不管项目是大是小,这个架构模板的形态一旦定型了之后就不太会变,区别只是我们有更多的服务有更复杂的调用,更复杂的消息流转,更多的Job,整个架构整体是可扩展的,而且不会变形,这个架构可以在很长的一段时间内无需有大的调整。

微服务并不是一个很新的概念,在10年前的时候我就开始实践这个架构风格,在四个公司的项目中全面实现了微服务,越来越坚信这是非常适合互联网项目的一个架构风格。不是说我们的服务一定要跨物理机器进行远程调用,而是我们通过进行有意的设计让我们的业务在一开始的时候就按照领域进行分割,这能让我们对业务有更充分的理解,能让我们在之后的迭代中轻易在不同的业务模块上进行耕耘,能让我们的项目开发越来越轻松,轻松来源于几个方面:

1. 如果我们能进行微服务化,那么我们一定事先经过比较完善的产品需求讨论和领域划分,每一个服务精心设计自己领域内的表结构,这是一个很重要的设计过程,也决定了整个技术架构和产品架构是匹配的,对于All-In-One的架构往往会省略这一过程,需求到哪里代码写到哪里。

2. 我们对服务的划分和职责的定位如果是清晰的,对于新的需求,我们就能知道需要在哪里改怎么样的代码,没有复制粘贴的存在少了很多坑。

3. 我们大多数的业务逻辑已经开发完毕,直接重用即可,我们的新业务只是现有逻辑的聚合。在PRD评审后,开发得到的结论是只需要组合分别调用ABC三个服务的XYZ方法,然后在C服务中修改一下Z方法增加一个分支逻辑,就可以构建起新的逻辑,这种爽快的感觉难以想象。

消息队列MQ的使用有下面几个好处,或者说我们往往处于这些目的来考虑引入MQ:

1. 异步处理:类似于订单这样的流程一般可以定义出一个核心流程,这个流程用于处理核心订单的状态机,需要尽快同步落库完成,然后围绕订单会衍生出一系列和用户相关的库存相关的后续的业务处理,这些处理完全不需要卡在用户点击提交订单的那刹那进行处理。下单只是一个确认合法受理订单的过程,后续的很多事情都可以慢慢在几十个模块中进行流转,这个流转过程哪怕是消耗5分钟,用户也无需感受到。

2. 流量洪峰:互联网项目的一个特点是有的时候会做一些toC的促销,免不了有一些流量洪峰,如果我们引入了消息队列在模块之间作为缓冲,那么backend的服务可以以自己既有的舒服的频次来被动消耗数据,不会被强压的流量击垮。当然,做好监控是必不可少的,下面再细说一下监控。

3. 模块解耦:随着项目复杂度的上升,我们会有各种来源于项目内部和外部的事件(用户注册登陆、投资、提现事件等),这些重要事件可能不断有各种各样的模块(营销模块、活动模块)需要关心,核心业务系统去调用这些外部体系的模块,让整个系统在内部纠缠在一起显然是不合适的,这个时候通过MQ进行解耦,让各种各样的事件在系统中进行松耦合流转,模块之间各司其职也相互没有感知,这是比较适合的做法。

定时任务的需求有那么几类:

1. 如之前所说,跨服务调用,MQ通知难免会有不可达的问题,我们需要有一定的机制进行补偿。

2. 有一些业务是基于任务表进行驱动的,有关任务表的设计下面会详细说明。

3. 有一些业务是定时定期来进行处理的,根本不需要实时进行处理(比如通知用户红包即将过期,和银行进行日终对账,给用户出账单等)。和2的区别在于,这里的任务的执行时间和频次是五花八门的,2的话一般而言是固定频次的。

转载于:https://www.cnblogs.com/yyh-678/p/11028023.html

关于架构的学习之三驾马车相关推荐

  1. Google 早期三驾马车之 GFS 论文学习与研读

    前言 Google,作为全球最大的搜索引擎公司,其伟大之处不仅在于建立了一个强大的搜索引擎,还在于它创造了3项革命性的技术,即:GFS.MapReduce 和 BigTable.作为 Google 早 ...

  2. Google 早期三驾马车之 BigTable 论文学习与研读

    前言 Google,作为全球最大的搜索引擎公司,其伟大之处不仅在于建立了一个强大的搜索引擎,还在于它创造了3项革命性的技术,即:GFS.MapReduce 和 BigTable.作为 Google 早 ...

  3. arm体系结构与编程_RISCV中文版面市! MIPS、ARM、RISCV三驾马车配齐,奔向体系结构教学的新黄金时代!...

       在广大计算机程序员和工程师中,几乎没有人不知道Patterson和Hennessy的大作,而今RISC-V版的推出,再次点燃了大家的热情.RISC-V作为一种开源体系结构,从最初用于支持科研和教 ...

  4. 微软智能云三驾马车 Azure、Office 365、Dynamics 365 齐聚中国

    北京时间 10 月 25 日,2018 微软技术暨生态大会(Microsoft Tech Summit)在上海召开,微软正式宣布,作为微软智能云"三驾马车"中的重要一环 -- Dy ...

  5. Google三驾马车之GFS

    谷歌在2003到2006年间发表了三篇论文,<MapReduce: Simplified Data Processing on Large Clusters>,<Bigtable: ...

  6. 一文带你系统梳理Google三驾马车

    一文带你系统梳理Google三驾马车 不知道大家在工作中,有没有遇到过这类程序员:他们无论在什么岗位,开发什么系统,好像都能够抓到问题的本质,做得「游刃有余」. 我也经常碰到这类程序员,每次我向他们请 ...

  7. 华为发布车联网云服务的“三驾马车”

    12月21日,2021华为智能汽车解决方案生态论坛在线上隆重召开,论坛以"聚享生态 合创未来"为主题,汇聚汽车产业生态圈多方伙伴,围绕推动智能网联汽车产业展开了精彩的思想碰撞.华为 ...

  8. 微软智能云三驾马车Azure、Office 365、Dynamics 365齐聚中国

    Dynamics 365计划于2019年春落地中国:Windows Server 2019.Office 2019正式商用:SQL Server 2019.Azure Sphere 公开预览:Micr ...

  9. 中科院院士丁汉:数字化制造、机器人、人工智能是智能制造 “三驾马车”

    丁汉院士演讲 1月10日,由中国机电一体化技术应用协会.北京理工大学智能机器人与系统高精尖创新中心.中关村智友天使学院.机器人大讲堂(立德共创服务平台).中关村融智特种机器人产业联盟和中关村信息谷等单 ...

最新文章

  1. html流式布局怎么用,css 流式布局什么意思?
  2. Scratch等级考试(一级)模拟题
  3. win下手动编译狂魔的必备C/C++编译环境
  4. Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
  5. buu [BJDCTF 2nd]灵能精通-y1ng
  6. 使用canal同步MySQL数据到Elasticsearch(ES)
  7. python格式化字符串_阿博的Python之路详解String数据类型
  8. python 幂运算 整数_在Python中检查一个数字是否是另一个数字的幂
  9. jQuery基础教程之如何注册以及触发自定义事件
  10. 运放组成的吉他放大电路_如何通过5个步骤构建开放式硬件吉他放大器
  11. PHP被浏览器解释成注释,HTML+CSS入门 在HTML中嵌入的php代码会被浏览器注释掉如何解决...
  12. 有趣的算法(四)最通俗易懂的KMP算法解析
  13. 个人独资有限公司章程模板
  14. 电厂GPS北斗时钟同步(卫星时间同步系统)组成及配置
  15. 用户运营4大策略体系搭建:增长框架+用户建模+场景化分层+数据运营
  16. Scrapy爬取豆瓣读书全站
  17. 视频爆炸时代,谁在支撑视频生态网高速运行?
  18. 常用三角函数的无穷级数乘积公式推导详细过程与图形展示
  19. hadoop重命名文件_hadoop HDFS常用文件操作命令
  20. windows查看某个端口占用情况

热门文章

  1. 可以表白的生日祝福(附源码与修改教程)
  2. matlab学习矩阵1
  3. 人工智能技术在专利中的实际应用
  4. 档案系统专用服务器属于什么设备,想做档案数字化,却不了解所需设备?3分钟让你不懂到精通!...
  5. Unix命令运行tomcat
  6. 亚马逊无货源开店 精品模式和铺货模式怎么选?
  7. php dir opendir,php中目录操作opendir()、readdir()及scandir()用法示例
  8. 【文献心得】Linux 实时化相关
  9. 外卖o2o三足鼎立回归理性,持久战要拼什么?
  10. 3ds Max中顶点色RGBA的绘制