顾客至上
理解
不管任何行业,任何产品以及服务最终目标就是给人用,如果有人愿意用而且愿意付费使用,这样的人一定要珍惜。我这几年更多的在从事一些架构设计相关的工作,从一个架构师的角度来说顾客至上就体现在如何让系统稳定和高效地运行。
稳定高效这四个字说起来简单,但要做好真的很难。所以作为架构师,需要相应的理论体系作为支撑来丰富和完善我们思考问题的方式。比较常用的一种理论就是多架构视图。它要求架构师在设计架构时要从多个视角或维度去考虑。每个视角对应一类问题,每类问题又对应特定的参与者,这样通过多视角的方式把每类问题以及对应的参与者都有机的组织到一起,这样就不会发生大的纰漏。那多视图架构如何去实现稳定高效的呢? 首先我们看一下常用的架构视图有哪些,以及每种视图解决哪类问题
- 基础设施视图 不管任何系统都需要依赖于网络和硬件资源。那如何合理地规划这些资源,从而搭建安全稳定的开发及运行环境就是基础设施视图需要考虑的问题。
具体来说,对于传统开发,需要购买各种类型的硬件如服务器,交换机,软件比如Oracle或其他付费服务,有的甚至自己要搭建机房等等。对于云计算平台来说,虽然我们淡化了网络和硬件的物理可见性,但是网络规划以及计算资源分配的过程仍是不可避免。当然,serverless提供了另一种思路,这里不展开讨论。但是不管怎么说上面提到的资源规划问题是不可避免的。一般来说程序运行在多种环境,例如:给开发人员使用的开发环境,给QA使用的测试环境,然后还有准生产环境以及正式的生产环境。每个环境的参与者,配置都不一样,前期如何做好这些环境的配置和搭建对系统开发周期的每个阶段都十分重要。
- 开发视图
开发视图重点关注技术栈,架构风格的选择及实现。比如选择微服务架构还是事件驱动架构,
SQL还是NoSQL。当然,这一视图这也包括了各种测试。
在开发过程中,我个人比较关注两个点,一是单元测试覆盖率,另一个是集成测试的质量。从整个软件生命周期的成本消耗来看,开发过程的成本消耗站总消耗的40%左右,其他的就是在不停的测试,维护,升级。而且越到后期的修改成本越高。所以如果我们前期能更加注重单元测试的质量,是可以很大程度降低后期的修改成本的。这也对测试用例的设计质量提出了更高要求,如果我们在开发阶段能分配更多的时间和精力来考虑一些用例的边界条件,重点路径的覆盖等等,虽然感觉减缓了开发进度,但是从最终的效果看其实是提升了开发效率和质量的。当然这也涉及到如何让所有成员都能接受诸如TDD的理念,并真的愿意在单元测试上花费时间和精力。
另外一个我比较关注的点是集成测试的质量。现在的系统往往包含多个功能模块,实际在开发过程中都是不同的团队负责不同的模块,那如何保证系统的进度和质量呢 ? 一个很重要的指标就是集成测试的效果。比如当用户的某一个操作包含多个模块的交互时,当出现性能问题时如何快速定位是哪个模块,就是在考验集成测试的质量。
-
DevOps视图DevOps视图最开始被称为部署视图,伴随着云计算相关概念的普及,部署试图逐渐进化为DevOps视图。这个视图重点要解决的问题就是代码版本,发布管理,以及CI/CD的相关操作。比如在发布新版时是蓝绿部署还是找个合适的时间段整体上线,如果上线失败如何回滚等等,都是需要在这个视图里考虑的。 -
安全视图 系统安全是我们永远无法回避的问题,而且这类问题平时不出事还好,一旦出事影响很坏。所以系统的安全性也是需要作为一个单独视图来考虑的。
安全性问题也需要从多个层次来考虑,比如最底层的网络防火墙,然后硬件的升级,操作系统的升级及安全补丁。然后是应用层面的安全加固。像我们公司都有专门的代码漏洞扫描,如果扫描分数很低是不允许上线的。然后是数据的传输及存储加密,每个方面都有专门的课题。
上面是我们常用的四种架构视图,当然,业务越复杂需要考虑的视图越多,比如基于云平台的开发和运行,可能需要添加专门的成本视图,因为当我们在享受云平台带来的各种便捷的同时,是需要支付相应费用的,而且这个成本可能比你预期的要高。这里再提一下serverless架构,据说它能做到按需收费,不会为空闲的资源浪费金钱。但是这仍然需要考察。
以上是我们从架构设计方面来保证系统的稳定和高效。那在具体实现方面呢?这就跟具体的技术栈以及开发人员的编程水平相关了。比如数据库我们常用MySQL,那关于MySQL的优化就可以写一本书。所以这里我们就无法展开讲了,而且相关技术细节在网上有很多,大家可以自行学习。除了数据存储,还有其他实现,比如前端技术,如果在一定范围内允许用户自定义界面或操作流程,那么就给了用户更多的自由度,这在一些特定场合下可能对用户非常有吸引力。前端需要注意的细节更多,因为是直接面向用户,所以我们更需要花时间去精雕细琢。
举个最简单的例子,以前我们在删除某一个资源时,总会提示用户是否确认删除,但事实上99%的可能性是我们确定要删除。以前的实现是为了照顾用户那1%可能误删的概率而让用户重复了99%的确认操作。所以你可能注意到现在win 10的系统已经不再提示了,那如果真的误删了怎么办? 有回收站啊!应用程序也可以有自己的回收站。对于一些电商网站,现在很多会分析用户的购买习惯,然后当出现新折扣信息时,会自动推送给客户。
上面从架构和实现两个方面论述了如何保证系统的稳定和高效。总结来说如果能让设计和开发人员多付出一点,而让用户少付出一点,哪怕就是让用户少点击一次确认按钮,我觉得也是值得的,这才真正的客户至上。