架构设计原则.md 5.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
### 架构设计目标
从技术架构层面讲需要满足以下目标:
- **弹性:**架构要支持高度组件化,各子系统/功能模块/子功能模块均能实现独立编译。可适应从高端手机(如:8核SOC@3GHz/16GB RAM/512GB ROM)到手环、IoT模块(如:单核MCU@50MHz/128KB RAM/64MB ROM)等硬件配置差异巨大的多种终端,以及将来8~10年内可能出现的新类型终端。
- **可分布性:**系统提供的各种软件硬件服务,具有非集中式服务架构,可以在同一分布式系统下的多个终端上形成非对称的分布式计算。同时系统提供分布式用户程序框架,使应用程序同样具有可分布性。可分布式性一个隐含的需求是对跨版本,跨设备的较长周期的兼容性要求。
- **可演进性:**可适应未来8~10年可能出现的新技术带来的新业务模式,可实现老特性的逐步淘汰和新特性的平滑上线。
- **生态友好性:**可高效支持三方开发北向应用和对南向设备,并允许三方设备厂家开发扩展能力获得足够的商业利益,同时确保系统生态的完整性和一致性。
- **可重构性:**支持系统可局部重构。从项目基本需求考虑,由于存在生态环境变化、产品业务策略变化、业界技术趋势变化等诸多不确定因素,因此需要系统架构支持随时存在局部重构的可能性。为了保证局部重构的工作量尽可能小,需要子系统/功能模块/子功能模块均可支持可独立重构,每个子功能模块的代码规模要求不大于2万行。
- **可用性:**可用性是指系统处在可工作状态的时间的比例,单设备系统异常每千小时不大于0.2次,分布式系统异常每千小时不大于2次。
- **流畅性:**最终目标是向用户提供流畅的业务体验,用户交互设计在架构上需要保障处理时长可控。
- **安全性:**构建用户隐私数据保护的安全体系与分级,隔离的安全防御体系。
### 架构设计原则
- **用户体验优先原则:**面向业务获取和使用场景,构建实时、按需、在线、自助、社区化、方便易用的用户体验;
- **UX交互优先原则:**用户交互相关服务/组件优先获取足够系统资源,软件资源或硬件资源,保障用户体验的高流畅性。
- **隐私保护与安全原则:**构建最小权限、纵深防御、最小公共化、权限分离、不轻信、开放设计、完全仲裁、失效安全、保护薄弱环节、安全机制经济性、用户接受度以及加强隐私保护的安全体系,确保系统、网络和数据的机密性、完整性、可用性、可追溯。在各项设计目标发生冲突的情况下,隐私保护必须优先满足。
- **生态开放原则:**面向生态场景,按需开放平台设施、中间件、数据、业务逻辑、UI等能力,构建开放生态,支持分层、远程、自动、自助、简单高效地完成定制、集成、第三方应用开发。
- **跨多设备原则:**同类设备采用统一技术架构,技术框架和技术方案,支持一次开发支持所有设备,尽可能保持一致的业务体验。充分发挥不同设备的优势功能点,通过相关设备弥补自身设备的劣势功能点,设备间支持快速能力发现,能力互相调用,协同完成业务过程中对用户和开发者尽量无感知。
- **模块解耦原则:**对业务进行抽象建模,业务数据与业务逻辑解耦,软件和硬件解耦,平台和产品解耦,系统各部件间解耦。
- **服务化/组件化原则:**以服务、数据为中心,构建服务化、组件化架构,具备灵活、按需组合的能力。
接口隔离及兼容性原则:通过接口隐藏服务/组件的实现细节,服务/组件间只能通过接口进行交互,接口契约化、标准化,跨版本和跨设备兼容;热点服务/组件长期支持可独立演进、独立发布、独立升级;服务或组件自治,可管、可控、可测、可维、关键服务/组件要求故障可自愈。
- **高性能低功耗原则:**在满足用户业务体验的前提下,功耗要做到最低;在同样功耗条件下,性能要做到最高。性能和功耗高度统一,不在无谓的性能上浪费功耗,也不在为了节省功耗而牺牲用户体验。
- **高效开发原则:**创建支持迭代、增量、持续交付的架构,支持部件独立开发、自动化编译构建、测试、集成验证,并易于高效修改和持续优化;支持开发组织小型化、扁平化,支持小团队独立高效并行开发。
- **开源引用原则:**充分利用业界优秀的开源实践,不重复造轮子。需要进一步说明的是,每一个架构设计原则的守护都要付出一定的代价,也会带来相应的收益。甚至部分原则间存在不可避免的冲突和矛盾,上述架构原则需要综合考虑,整体权衡,不可孤立的强调一个而忽视另一个。权衡时针对具体问题具体分析,权衡的过程也是在某一个特定场景下的设计原则的优先级选择过程。