-
架构的设计影响系统的生产, 比如开发过程和效率, 代码和组建复用性等。同时也影响着系统的可用性,可伸缩性,性能,容量可预测性等。
-
从代码逻辑到物理网络, 从单机到分布式, 无数的技术可供架构师选择。
如分层, 组件化, 服务化, 标准化, 缓存, 分离, 队列,复制, 冗余, 代理。不过他们仍然只是术的范畴,比如顿悟变化的道理,在博弈中找平衡, 以系统化的角度来解析问题, 寻找相对与绝对的平衡, 开放的心态。 -
在软件设计中, 设计师需要考虑多方面的关注点, 票连的架构设计让这些关注点尽可能分离, 然后以最简单的机制结合在一起,从而得到高内聚低耦合的系统。
-
架构之美着重表达的是:间接性。 Dont,t repeat yourself。 好的架构致力于消除各种类型的信息重复。从结构化程序设计中的子函数和函数, 到面向对象程序设计中的集成, 无不体现了对表达简洁性的特殊偏爱。
在敏捷方法学中, 消除重复则是重构的主要目标之一。 -
架构之美需要解决时机问题, 它既是艺术,也是生活,软件像建筑一样,他的每不能脱离它的是哟个价值。
美是创造矛盾并解决矛盾。
架构要具有的基本特征如下:
1、具备客户要的功能
2、工期里面把软件交付,房子质量要没问题
3、性能足够好
4、可靠的
5、可用的,使用的时候不会对环境造成上海,系统不会崩掉,不会导致业务中断
6、成本可以接受。不能押研发个软件花十年,肯定无法接受
7、符合法规标准
8、超越别人和竞争者
- 架构到底是社么: 一堆文档, 带各种标注? 表明各种需求和文档?
不仅仅是一摞纸, 几张表。 它涉及的东西很多, 包括需要了解有哪些需求, 哪些功能。
这些共呢个应该用什么杨的技术栈来实现, 需要做抉择!然后还经过设计,讨论,复审,修改,批准。
官方定义: 一个程序或计算机系统的软件架构: 是系统的一种结构, 或 一组结构;
它包含软件元素, 也就是功能, 以及功能外放的表现属性。 功能或者实例或者是类之间的关系。
什么是外部可见? 你能看到接口或者是它提供的而服务, 执行的特征, 错误的处理, 共享资源的使用。
架构关注的是: 组件之间的关系 和 系统组件外部可见的属性,
那么架构还需要关注内部结构吗?我觉得不需要,架构之需要提出组件内部的要求, 例如高内聚,低耦合等等。
成功架构师的两项关键实践:
- 让利益参与人, 包括开发,测试,PO, 项目经理, 关注功能和品质
- 我们想从系统获取什么, 让系统实现什么共呢个? 有怎么样的优先级?
因为不同的系统有不同的特点, 有些系统的行呢个很好, 那么关注点的: 性能, 安全, 可伸缩性。
另外一些的关注可变性, 可维护性, 可用性。
关注品质: 包括是否允许迁移到分布式部署, 是否支持从单线程向多线程迁移。
业务模块的可变性, 可维护性, 可伸缩性。
概念完整性是架构最重要的特征。 说白了就是: 整个架构之体现一两个架构师的思想,而不是一个大而全的大杂烩。
架构师需要考虑一下:
- 功能性。 是要干啥的
- 可变性。 可塑性,后面做的这个东西再提供其他服务, 成本高不高。 例如买个轿车,以后能不能当货车用,偶尔拉拉货。
- 性能
- 容量。 支持给多少人提供服务。
- 生态系统 这个程序要和哪些系统打交道
- 模块化 如何将编写的任务分解 为工作指派。
- 可构建行
- 产品化
- 安全性, 如何保证你的用户数据的安全。
一些具体的架构方法, 就涉及到设计模式了。 例如整体部分原则, 例如信息隐藏原则。
例如高内聚, 低耦合原则。这些都是一些静态的结构
动态的结构: 说的就是服务有哪些进程承载, 这些进程之间的关系, 如何处理并发, 处理锁等等。
看到1.5章
什么是好的架构: 指导开发和测试完成系统。满足系统的利益相关人的功能和质量关注点。
- 有巨大的商业价值
- 要能影响并且输出到其他产品线,能够被"借用,复制,窃取"的架构
- 在使用架构前,我们必须先构建, 我们要寻找那些具有良好的使用结构的架构,他们支持增量式的构建。这样,每次构建迭代就能得到一个有用的,可测试的系统。我们也会寻找那些具有定义良好的模块接口,本来就很好测试的架构。这样,构建的过程就是透明的,可见的。
架构要考虑能够经过时间考验, 我们生活的技术环境一直在快速变化, 美丽的架构应该预期到变更的需要。我们想寻找那些避免了衰老的地平线的架构。超越了这条衰老的地平线, 维护将变得代价极大。同时,架构应该具有方便使用和构建的特点。
架构作为测试的一部分, 要能有模拟用户的行为的能力。
一致的架构学习起来更容易,更快。当知道了这一点以后, 你就可以预测其他的部分。 不需要记住并处理特殊的情况,代码更干净,测试集更小。一致的架构不会为做同一件事,提供两种甚至更多的办法,不会让用户浪费时间做出选择。
美丽架构的三个模型:
- A7E舰载飞行处理器
- 朗讯5ESS电话交换机的软件架构
- 万维网
- UNIX系统