个人观察
1.通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性。
2.单一职责原则SRP,真的很关键,广大程序员需要不断深入理解这个原则。
3.架构图是架构师的重要输出,通过图可以直观地看出整个架构思路。
本文转载于

《程序员》2014年11月刊:电商峰值系统架构设计

原文链接:http://www.csdn.net/article/2014-11-04/2822459

该做什么的就做什么

保障整个系统的可用性和稳定性,第一步需要做 的就是,使整体架构清晰化、层次化。那么,对系统进行合理拆分,是最直观的选择。从业务和技术角度出发,遵循SRP(Single Responsibility Principle)原则,合理拆分系统中的各个模块,明确每个模块的职责。这样可以方便快速定位和排查问题,甚至可以有针对性地对每个模块进行优化。

拆分方式基本上分为两种,路由拆分和物理拆 分。所谓路由拆分,就是按照请求特征,将请求流量分摊到两个或多个同质的集群里面;而物理拆分,就是在路由拆分的基础上,按照业务和技术上的特征,将同质的集群进行彻底拆分,成为非同质集群。

下面以交易流程为例,来看一下如何操作拆分。

交易流程主要包括购物车、下单、支付等几个环节,具体的拆分结果,如图1所示。

图1  交易流程拆分结果

经过分析,整个交易流程按照架构层次可以分解为展示层、业务层及外围应用三块内容,这三部分由于职责差异比较大,所以先按照物理拆分,让层次清晰。

再来看展示层,由于存在一些共享的东西,如页面元素等,做物理拆分,会引入额外的成本,所以路由拆分是不错的选择。

接着来看业务层。这一层是很容易按照角色和业务场景进行拆分的,例如,交易管理服务是给管理人员提供管理功能的,需要考虑权限、内控等问题;交易核心服务是给业务主流程提供主要业务功能,需要考虑可用性;交易查询服务是读取交易数据的主要途径,需要考虑易用性;交易网关服务主要是对接外部支付渠道,需要考虑连通性。很明显,这一层由于自身的差异性比较大,所以采用物理拆分是上上策。

最后来看外围应用,其中包括后台管理、日志查 询、业务监控及交易超时控制等,这些应用基本上都是在底层系统平台(管理平台、日志平台、监 控平台以及任务平台)进行二次开发而成的,所以天生就适合进行物理拆分。

从上面不难看出,拆分是一个细活,可以选择的 维度很多,拆分方式也比较讲究。良好的拆分方案,会让系统更加清晰明了,每个模块该做什么的就做什么。这样应对大型促销活动时,可以游刃有余地按照模块特征进行优化。

总结一下在可用性和稳定性工作中的一些感悟。 
首先,清晰的架构划分可以大大减轻稳定性工作量;
其次,功夫要尽量在平时做足,避免总是出临时解决方案;
再次,普及稳定性思维,注意细节;
最后,出现问题,先快速恢复再查找根源。  

电商架构设计-通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性的更多相关文章

  1. C#软件设计——小话设计模式原则之:单一职责原则SRP

    前言:上篇C#软件设计——小话设计模式原则之:依赖倒置原则DIP简单介绍了下依赖倒置的由来以及使用,中间插了两篇WebApi的文章,这篇还是回归正题,继续来写写设计模式另一个重要的原则:单一职责原则. ...

  2. IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)

    定义 就一个类而言,应该仅有一个引起它变化的原因. 定义解读 这是六大原则中最简单的一种,通俗点说,就是不存在多个原因使得一个类发生变化,也就是一个类只负责一种职责的工作. 优点 类的复杂度降低,一个 ...

  3. 架构师之路——单一职责原则SRP (我单纯,我快乐)

    定义: 不要存在多于一个导致类变更的原因.通俗地讲,一个类只做一件事情.   单一职责原则的好处: 1.类的复杂性降低,实现什么职责都有清晰明确的定义: 2.可读性提高,复杂性降低,那当然可读性提高了 ...

  4. 【面向对象设计原则】之单一职责原则(SRP)

    单一职责原则是面向对象原则五大原则中最简单,也是最重要的一个原则, 他的字面定义如下: 单一职责原则(Single Responsibility Principle, SRP): 一个类只负责一个功能 ...

  5. 设计模式学习--面向对象的5条设计原则之单一职责原则--SRP

    一.SRP简介(SRP--Single-Responsibility Principle): 就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因.   所谓职责,我们可以理解他为功能,就是设 ...

  6. 六大设计原则(一)SRP单一职责原则

    单一职责原则SRP(Single reponsibility principle) BO(Business Object):业务对象 Biz(Business Logic):业务逻辑 SRP最简单的例 ...

  7. Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享

    Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享 说明:任何一个电商行业都涉及到退货与退款的问题,但是生鲜电商行业还设有一个显著的特点,那就是换货.在人性面前,各种各样的退货,退款,换货的售 ...

  8. Java生鲜电商平台-会员积分系统的设计与架构

    Java生鲜电商平台-会员积分系统的设计与架构 说明:互联网平台积分体系主要用于激励和回馈用户在平台的消费行为和活动行为,一个良好的积分体系可以很好的提升用户的粘性及活跃度. 一.互联网平台积分体系设 ...

  9. Java生鲜电商平台-商家支付系统与对账系统架构实战

    Java生鲜电商平台-商家支付系统与对账系统架构实战 说明:关于生鲜电商平台,支付系统是连接消费者.商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付 ...

随机推荐

  1. Spark 2.2.0 分布式集群环境搭建

    集群机器: 1台 装了 ubuntu 14.04的 台式机 1台 装了ubuntu 16.04 的 笔记本     (机器更多时同样适用) 1.需要安装好Hadoop分布式环境 参照:Hadoop分类 ...

  2. ubuntu/linuxmint如何添加和删除PPA源

    [添加] 1.sudo add-apt-repository ppa:user/ppa-name 2.sudo apt-get update (然后再安装软件sudo apt-get install ...

  3. 微信小程序setData的使用,通过[...]进行动态key赋值

    首先先介绍一下微信小程序Page.prototype.setData(Object data, Function callback)的讲解: setData函数用于将数据从逻辑层发送到视图层(异步), ...

  4. Y-C

    1.asp.net服务控件生命周期 11个生命阶段 (1)初始化: 初始化在传入Web请求生命周期内所需的设置,.跟踪视图状态.页面框架通过默认方式引发Init事件,并调用OnInit()方法,控件开 ...

  5. MongoDB一些常用指令与他的JavaScript的对应表

  6. navicat mysql报错误:2013 Lost connection to MySQL server during query

    好像是MySQL的navicat UI界面跟数据的连接问题,如果直接用命令导入数据的话,或许能规避这个问题.

  7. ajax无限循环

    // 猜你喜欢的无限加载 (function(){ var content = document.getElementsByClassName("content")[0]; var ...

  8. MySql 1248 - Every derived table must have its own alias

    执行一个sql语句,报错:1248 - Every derived table must have its own alias 提示说每一个衍生出来的表,必须要有自己的别名 执行子查询的时候,外层查询 ...

  9. PHP——基本使用(一)

    Apache安装与配置 install 下载地址:https://www.apachelounge.com/download/,选择2.4.33版本64位 将程序解压到一个英文目录下,以管理身份打开c ...

  10. 【译】x86程序员手册26-7.5任务切换

    7.5 Task Switching 任务切换 The 80386 switches execution to another task in any of four cases: 80386在以下四 ...