当程序员的时候更多的注意功能性需求,但是作为一个架构师和程序员的主要区别之一就是要要满足系统的非功能性需求,包括如下:
1、高可扩展性
App或者网站的访问量弹性很大,刚开始的时候访问量可能比较小,随着市场推广进行,访问量可能急剧增加,或者随时间的波动,访问量变化很大,这需要在设计的时候将系统进行很好的切割,分成功能单一的服务,根据各个系统负载的情况启动规模不同的集群。
2、高可靠性
系统采取集群方式提供服务,有异常检查系统,及时识别有问题的节点和重启,保证服务的高可用性。
3、性能需求
根据市场推广的计划,给出各个阶段的性能需求,根据常规经验预估满足性能的硬件需求,在做出原型后评估性能,根据性能表现再优化设计
,或者通过优化系统提高系统的性能,例如增加缓存
。
4、可维护性
采用自动化的持续集成技术,自动编译、自动部署、自动测试,降低软件迭代过程中的重复劳动强度,减少出错的几率,让软件的修改bug和增加功能时更可靠;特别是代码的单元测试一定要做,将边界条件进行测试,让集成测试的过程中尽量发现价值比较大bug,避免在系统测试过程中去修改那些低水平的bug,毕竟系统测试的成本和代价都比较大。
5、对技术也业务的可适应性
模块划分的功能单一,充分实现mvc的分离,单职责的模块可扩展性、可维护性都要强过复杂模块。
6、异步
通过异步消息传递,将进行不同微结构之间传递,让数据分阶段处理,系统结构更清晰
7、安全
恰当的安全策略,既让客户舒适的登陆,又要保证安全,数据加密、防止ddos攻击、sql注入式攻击等方式。