架构师的视角

架构视角面向质量,主要回答“好不好”这个问题。架构视角并不像架构视图比较容易抽象,因为一个系统的质量属性包含很多内容,我们从中筛选出四个通用而又重要的架构视角,分别是安全性、性能、可用性和可扩展性并采用与架构视图同样的建模方式对每个视角进行展开。

1. 安全性视角

安全性体现的是控制、监控和审计对资源的访问性和执行能力,以及从安全漏洞中恢复的能力。在主流的信息化系统、面向服务和中间件系统中通常要求不高,但对于互联网系统而言,安全性是一项核心非功能性需求。

从产生安全性问题的源头出发,我们可以找到常见的安全性视角切入点。需要进行安全性控制的内容通常称之为资源(Resource),能访问资源的人或系统称为访问主体(Subject),控制安全性就是根据不同的访问主体对不同的资源进行精细化控制,包含建立完善的用户权限管理系统并提供相应安全策略。

找到安全性切入点,架构设计上就可以对症下药。对用户进行身份认证(Authentication)、授权(Authorization)访问、通过加密解密等确保信息保密性和完整性、提供类似单点登录(Single Sign On,SSO)的安全性管理平台、使用第三方安全性基础框架等都是安全性架构设计的常见手段。

2. 性能视角

性能视角的质量要求体现在系统在其指定的性能状况下执行,以及将来需要时提供增长的处理能力。性能要求对于信息化系统而言,不一定会成为一项核心质量指标,因为一般的信息化系统偏重于业务模型而不大容易形成性能瓶颈,但对于互联网应用和中间件系统,很多时候是最核心的一项系统构建目标。

性能的切入点通常也有一套完整的方法论和工程实践,我们可以从核心功能响应时间、系统吞吐量、部署架构的可伸缩性、性能问题的可预测性和峰值负载等方向判断系统是否存在性能问题并找到相应的解决方案。

架构策略上,也有很多针对性能问题的设计方案,对核心业务链路和活动进行分解并把串行操作转变成并行化流程、对需要重复执行的处理过程进行优化、重用资源和结果、使用异步处理、放松事务一致性、转换数据强一致性为弱一致性等都可以在一定程度上提升系统的性能。同时,在设计解决性问题时,也需要把握一定的平衡性,避免为了提升性能而提升性能。

3. 可用性视角

可用性视角提供系统在需要时能够完整的提供服务,并有效处理影响系统可用性故障的能力。和性能视角一样,可用性对于普通的信息化系统而言重要性居中,但对于互联网应用和中间件系统同样具备很高的重要性。

可用性的规划和实现需要先明确服务的类型,对不同类型的服务其可用性要求不尽相同。系统升级、停机和维修时间、系统备份、灾难恢复等也都需要有对应的实施计划。

架构设计策略上,使用容错硬件和容错软件、确保采用主流的集群和负载均衡机制、加强日志管理和分析、采用组件复制策略、建立完整的备份和灾难恢复解决方案都属于这个视角的考虑范围之内。

4. 可扩展性视角

可扩展性视角是指系统在经历不可避免的变更时足够灵活,针对提供这样的灵活性所要付出的成本进行平衡的能力。可扩展性对于信息化系统而言就有最高的重要性,对于面向服务和中间件系统具有最低的重要性,对于互联网应用而言,其重要性视具体系统而定。目前很多互联网应用如移动医疗行业,因为核心数据都是存放在医院,业务系统需要通过各种技术手段对接医院内部的HIS、LIS等系统,所以也具有较高的可扩展性要求;而对于电商行业而言,核心数据都属于内部系统可控范围之内,相对而言具备较低的可扩展性要求。

可扩展性(Extensibility)通常容易与可伸缩性(Scalability)想混淆。所谓可扩展,扩展的是业务;所谓可伸缩,伸缩的是性能。如下图所示,该图上半部分代表可扩展性,当往SystemA中添加新业务时,不需要改变原有的各个子系统而只需把新业务封闭在一个新的子系统中就能完成整体业务的升级,我们认为系统具有较好的可扩展性;而该图下半部分表示可伸缩性,即当SystemB的性能出现问题时,我们只需要简单添加一个应用服务器就能避免系统出现性能瓶颈,那么该系统无疑具备可伸缩性,实际上我们在前文的性能视角中已经提到过部署架构的可伸缩性概念。

明确了可扩展性的概念之后,我们明白实现可扩展性的一个切入点是加强产品管理,从业务需求的源头把控变化,把部分业务在进入开发流程之前进行梳理以避免不需要的变化的引入。对于已经进入开发流程的变化,同样需要把握变化的维度和量级,并从变化交付、开发复杂度等角度出发找到提升可扩展性的方法。

对于可扩展性视角,架构设计上重点在于梳理系统的变化并把它们抽象成扩展点,并通过对这些扩展点创建可扩展的接口、应用促进变更的设计技术,以及尽量使用基于业务标准的扩展点技术等手段确保系统具有较高的可扩展性。

易用性视角、开发资源和效率视角、国际化视角等也属于系统架构的视角,但不属于架构设计的核心视角,本文中不做展开。

 

如果对文章感兴趣,可以关注我的微信公众号:程序员向架构师转型,或扫描下面的二维码。

我出版了《系统架构设计:程序员向架构师转型之路》、《向技术管理者转型:软件开发人员跨越行业、技术、管理的转型思维与实践》、《微服务设计原理与架构》、《微服务架构实战》等书籍,并翻译有《深入RabbitMQ》和《Spring5响应式编程实战》,欢迎交流。

发布了92 篇原创文章 · 获赞 9 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/lantian08251/article/details/98784330