软件架构简介:
架构是对系统中各个实体以及它们之间关系的抽象描述,是对功能和形式元素之间对应关系的分配,也是对元素之间关系及与周边环境关系的定义。软件架构的核心价值在于控制系统的复杂性,实现核心业务逻辑和技术细节的解耦和分离。
软件架构可以视为系统的草图,描述了直接构成系统的抽象组件,并明确和细致地描述了组件之间的通信。在实际实现阶段,这些抽象组件会被细化为具体的组件,比如特定的类或对象。在面向对象领域中,组件之间的连接通常通过接口来实现。
作为架构师,主要职责是培养思维能力,通过合理的分解和抽象来理解复杂系统,理解并解析需求,创建有用的模型,确认、细化和扩展模型,并管理整个架构过程。同时,架构师还需要进行系统分解,形成整体架构,正确选择技术方案,制定技术规范,并有效推动实施和落地。
系统复杂性的来源与应对
在软件开发中,程序员可以通过创造力思维和思维组织能力创造出天马行空的世界。然而,随着系统功能的增加,系统变得越来越复杂,各个模块之间存在微妙的依赖关系。这导致修改系统变得困难,并且容易引入Bug,从而延缓开发进度并增加开发成本。
复杂性的增加在很大程度上是不可避免的,而且往往不受我们主观意愿的影响。复杂性的来源可能包括:
1. 吸积与持续迭代:由于增量式设计和持续重构,软件设计永不结束,需要时刻考虑设计问题并找到更好的设计方案。
2. 交互且无扩展性设计:大规模系统结合了交互特性,使得技术系统更加复杂,并且各个系统之间的交互会增加系统的复杂性。
3. 不合理的业务封装:不合理的业务封装,例如面向过程而不是对象、分层不合理等,也会增加系统的复杂性。
4. 缺乏统一语言:团队成员专注于自己负责的环节,导致缺乏全局视角,影响沟通与理解。
5. 缺乏约束与规范:缺乏规范和约束会损害架构的一致性和代码的可维护性,导致整体复杂性的增加。
要应对复杂性,我们需要不断推陈出新,持续迭代,动态地重塑对软件系统的认识。控制复杂性的途径可以是编写简洁明晰的代码,减少特殊场景的处理,保持变量命名一致性等。另外,对于复杂问题,可以进行抽象和分解,采取分而治之的策略。
最后,需要注意的是,复杂性的应对是一个持续的过程,没有一劳永逸的解决方案。只有不断迭代和改进,才能有效控制和应对系统的复杂性。
大型网站的特点
1、用户多,分布广泛
2、大流量,高并发
3、海量数据,服务高可用
4、安全环境恶劣,易受网络攻击
5、功能多,变更快,频繁发布
6、从小到大,渐进发展
7、以用户为中心
8、免费服务,付费体验
大型网站架构目标
1、高性能:提供快速的访问体验。
2、高可用:网站服务一直可以正常访问。
3、可伸缩:通过硬件增加/减少,提高/降低处理能力。
4、安全性:提供网站安全访问和数据加密,安全存储等策略。
5、扩展性:方便的通过新增/移除方式,增加/减少新的功能/模块。
6、敏捷性:随需应变,快速响应;