一、应用程序分层
分布式应用程序由三个主要逻辑部分构成:表示逻辑、业务逻辑和数据源逻辑。
- 表示逻辑:终端用户可以通过它操作权限内的可操作数据,对于用户来说这部分就是应用程序;
- 业务逻辑:是应用程序的中心,包括定义业务运行方式的业务规则;
- 数据源逻辑:用于保存将来可能用到的数据,这部分逻辑的功能绝大部分是由数据库实现的,但是我们仍然需要设计数据层以及操作数据所需要的语句。
设计任何应用程序的首要之处是将应用程序的各个部分逻辑划分为不同的层次,不能将不同部分的逻辑混在一起,层与层之间只能通过良好定义的接口与另一层交互。分布式设计要遵顼五个原则:保守分布;本地化相关内容;使用 Chunky 接口,而不是 Chatty 接口;优先选用无状态对象,而不是有状态对象;接口编程,而不是具体实现的编程。
二、可伸缩性
可伸缩性用于测量当像系统中增加资源时的性能改善。伸缩方式有两中:垂直伸缩和水平伸缩。
- 垂直伸缩:当使用新的快速的硬件取代慢速硬件时,对于没有经过良好设计的应用程序,垂直伸缩时唯一可进行的扩展方式。但是垂直伸缩相对昂贵并且容易出现问题。
- 水平伸缩:当为现有应用程序添加额外的负载均衡的服务器时,即可实现水平伸缩。它可以保护当前硬件资源,并且如果其他服务器损坏,它也会为应用程序提供相应的故障保护,并且水平伸缩相对便宜,但应用程序必须支持前文所说的五个原则。
Tip:一些短期内的优化看起来很好,但是从长远来看可能会削弱可伸缩性。例如在 ASP.NET 中会使用会话对象来换从每个用户信息,这对于单台服务器的应用来说无疑是一个很好的优化,但是如果应用的服务器数量扩展到了多态,那么这个方法就无法保证不会出现问题,并且这个办法也违反了优先使用无状态对象的原则。