1.7 引入Sysops Squad的传奇故事

我们在本书中讨论了很多传奇故事,既有字面意义的也有比喻意义的。架构师选择了Saga这个术语来描述分布式架构(详见第12章)中的事务性行为。然而,关于架构的讨论总是趋于抽象,尤其是考虑抽象问题(比如架构的困难部分)的时候。为了解决这个问题,并给我们所讨论的解决方案提供现实世界的上下文,我们开始创作一部关于Sysops Squad的传奇故事。

我们在每章里都用Sysops Squad的传奇故事来阐明本书中所描述的技术和权衡。很多关于软件架构的书讲的都是新的开发工作,而现实世界的很多问题其实是存在于已有系统中的。因此,我们的故事开始于现有的Sysops Squad架构。

Penultimate Electronics是一家大型电子巨头,在全国有数不清的零售门店。当客户购买计算机、电视、音响等电子设备时,他们可以选择购买保修计划。当发生问题时,面向客户的技术专家(Sysops Squad)就会来到客户的住所(或办公地点)解决设备问题。

Sysops Squad工单应用有以下四类主要用户:

管理员

管理员维护系统内部用户,包括专家名单及其对应的技能、位置和档期。同时也使用系统来管理所有客户的账单处理,以及静态参考数据(比如支持的产品、系统中的键值对等)。

客户

客户可以注册Sysops Squad服务,维护用户信息、保修合同和账单信息。客户在系统里发起问题工单,在服务完成后填写用户调查。

Sysops Squad专家

专家会被分配到问题工单上,根据工单内容解决问题。他们也使用知识库来搜寻客户问题的解决方案,写一些维修笔记。

经理

经理持续跟踪问题工单,接收Sysops Squad问题工单系统的运营和分析报表。

1.7.1 非工单工作流

非工单工作流包括那些由管理员、经理和客户发起的与问题工单无关的行为。工作流如下:1. 系统中Sysops Squad专家的添加和管理,管理员可以填写他们的位置、档期和技能。

2.客户注册Sysops Squad系统,根据购买的产品不同,可以有多个保修计划。

3.按客户在资料中填写的信用卡信息每月自动扣费。客户可以通过系统查看历史账单及其明细。

4.经理请求和查收各种运营和分析报告,包括财务报告、专家绩效报告和工单报告。

1.7.2 工单工作流

工单工作流从客户输入一个问题工单到系统里时开始,到维修后客户完成用户调查时结束。工作流如下:

1.购买了保修计划的客户可以通过Sysops Squad网站来提交问题工单。

2.工单提交之后,系统会根据技能、当前位置、服务区域和档期来决定最适合这个工单的专家。

3.任务分配之后,问题工单会上传到Sysops Squad专家移动设备上专门定制的移动应用程序。专家也会收到关于新工单的文字信息。

4.客户会收到短信或者email(根据设定偏好)提醒他们专家已经在路上了。

5.专家会在手机上使用这个定制的移动应用程序来获取工单信息和定位。Sysops Squad专家也可以通过移动应用程序使用知识库,查看以往是怎么处理此类问题的。

6.专家解决问题之后,他们会把工单标记为“完成”,还可以给问题补充信息,完善知识库。

7.系统接收到工单已完成的消息后,会给客户发一封带有调查链接的邮件,客户可以随后填写。

8.系统收到客户完成填写调查的信息并记录。

1.7.3 糟糕的局面

Sysops Squad问题工单系统近来不太顺利。目前的工单系统是很多年前开发的一个大型单体应用。客户抱怨因为丢单导致咨询师迟迟不出现,而且经常会出现咨询师到了现场才发现自己对要修理的东西一无所知的情况。客户还抱怨说提交新问题的时候,系统有时不可用。

在这个大块头里改东西也是困难和风险齐飞。每改一点点东西,总需要花费大量时间,还经常会破坏别的东西。由于可靠性问题,系统经常死机或崩溃。在定位问题和重启系统的5分钟到两个小时里,整个系统的所有功能在任何地方都不可用。

如果不快点做些什么,Penultimate Electronics公司就只能放弃利润颇丰的保修合同业务线,解雇所有Sysops Squad的管理员、专家、经理和IT开发人员——包括架构师。

1.7.4 Sysops Squad架构组件

Sysops Squad应用的单体系统处理工单管理、运营报告、客户注册和账单,还有一般的管理功能,比如用户维护、登录,以及专家技能和档案维护。图1-3及其对应的表1-1解释和说明了现有单体应用的组件(命名空间中的ss.特指Sysops Squad应用上下文)。

图1-3:现有Sysops Squad应用的组件

表1-1:现有Sysops Squad应用的组件

表1-1:现有Sysops Squad应用的组件(续)

在随后的章节里,我们会把该应用逐渐拆解成分布式架构,在这个过程中会用这些组件来说明各种技术和权衡。

1.7.5 Sysops Squad数据模型

表1-1中Sysops Squad应用程序的各种组件仅使用了数据库中的单一模式来托管所有的表和相关数据库代码。数据库用来持久化客户、用户、合同、账单、支付、知识库和客户调查。表1-2罗列了所有的数据库表,图1-4展示了ER模型。

图1-4:现有Sysops Squad应用程序的数据模型

表1-2:现有Sysops Squad数据库表

表1-2:现有Sysops Squad数据库表(续)

Sysops数据模型是标准的第三范式数据模型,只有几个存储过程和触发器。然而,存在一定数量的视图,主要是报表(Reporting)组件在用。当架构团队人员尝试拆解应用程序为分布式架构时,他们需要和数据库团队一起在数据库层面完成任务。这个数据库表和视图的设定将会贯穿在整本书里,用以探讨为了拆分数据库而采用的不同的技术和权衡。


[1]:克莱斯勒综合薪酬系统(Chrysler Comprehensive Compensation System),通常用C3项目代指,在这个项目上,Kent Beck发起了极限编程理论并加以实际运用。