红色有角F叔对《聊聊架构》的笔记(8)

红色有角F叔
红色有角F叔 (次元の呪い)

读过 聊聊架构

聊聊架构
  • 书名: 聊聊架构
  • 作者: 王概凯
  • 副标题: 洞见架构之道
  • 出版社: 电子工业出版社
  • 出版年: 2017-5
  • 架构产生的条件
    1. 必须由人执行的工作。
    2. 每个人的时间有限。
    3. 对目标系统有更高的要求。
    4. 目标系统的复杂性使得单个人完成这个系统时会受限于时间。
    2017-05-09 22:37:53 回应
  • 切分的原则
    随着社会的发展,产生了人类的分工,分工背后的动力来自于每个人寻求自己的利益最大化的冲动。人们都希望能够在最短的时间内,得到更大的产出,把自己的利益最大化。所谓的利益,其实就是保障自身的生命周期活动推进的质量。... 对比一个人干所有的事情,分工的结果让大家都能够得到更多。

    一旦确定了问题的主体,那么系统的利益相关人就确定了下来。所发现的问题,基本上会有两种:a. 某个或者某些利益相关人时间或空间上的负载太重;b. 某个或者某些利益相关人的权力和义务不对等。

    1. 被切分的生命周期,如果必须要生命周期的主体在连续时间内持续执行,而且不能够被打断并更换生命周期主体的话,就不能切分出去;2. 每个生命周期的负责人,对负责生命周期的权力和义务必须是对等的;3. 切分出来的生命周期,不应该超过一个自然人的负载;4. 切分是内部活动,内部无论怎么切,对整个系统的外部都应该是透明的。

    架构切分的结果最终都会体现在组织架构上,因为架构的切分是对人利益的重新分配。另一方面,架构切分需要组织架构来保障实施。负担重的相关利益人要减轻职责和权力;负担轻的相关利益人要增加职责和权力;所有人负担都很重,就要增加人,形成新的架构切分,或引进新的技术,提升大家的生产力,以形成新的架构切分。所以进行架构切分的时候,往往也就是组织在长大的时候。

    从这方面可以看出,任何架构调整都会涉及组织架构。同样,如果对于利益先关人的利益分析不够透彻,也会导致架构无法落地。因为没有人愿意去损坏自己的利益,一旦强制执行,人心就容易涣散。当然,这也不一定是坏事,只要满足权责对等的原则,就能够建立一个很好的新次序和新的利益关系,保持组织的良性发展。长久来看这是对所有人都有益的,虽然短期内对某些既得利益者会有利益损害。
    2017-05-09 22:54:00 回应
  • 什么是软件架构
    业务相当于基因,而架构树状拆分则相当于细胞的分裂。...基因决定了细胞最终会分裂生长成什么样的一个生命。.. 长成什么树是由基因决定的,不是架构。

    所以严格来说,只有业务才会进化。架构是支撑业务长大的,形成的是新的拆分。... 如果该结构的拆分不是以增长为目的,则很难认为是架构,自然也无法称之为架构的演化,或许可以称之为结构的演化。
    2017-05-15 21:58:21 回应
  • 什么是软件架构师
    当软件工程师需要帮助别人解决问题,并且按时、按需解决业务问题已经成为他们自己的问题的时候,软件工程师就有了时间的压力,潜意识里会自然而然地产生对时间的恐惧。... 为什么软件工程师会对时间有恐惧和压力呢?其原因是他们把按时完成自己的工作当成了自己的最大利益。

    在软件行业,很多公司设了软件架构师的职位,主要职责是做出架构设计,也具备一定的影响力,但并不具备调动组织架构的权力。这样的职位往往达不到架构师的效果,有时候还会起反作用。因为架构师只能够通过建立某些流程来行使架构师的权力,比如强制架构 Review,给出架构建议等。时间一长反而会造成很多不必要的内部冲突,最终会导致沟通成本增加,减慢研发的速度,同时也会使这些流程流于形式,大家敷衍了事,反而增加了研发成本,得不偿失。比如有些团队为了应付架构 review,会做两套架构,一套用于 review,一套用于实施。

    架构师拆分生命周期,技术人员实现生命周期。... 架构师思考技术时则更多地考虑技术对生命周期拆分的支撑,以及不同技术实现拆分时落地的成本和收益。
    2017-05-15 22:06:27 回应
  • 业务和架构及技术之间的关系
    在解决同一个业务问题的前提下,更高效、更低成本的技术,会淘汰低效、高成本的技术。
    通常开始解决核心业务问题的核心技术(钻木取火)的效率是比较低的,只是把不可能变成了可能。从这一点上来说,技术才是业务的使能者(Enabler)。慢慢就会有提高效率的需求出现,改进技术的要求就会变得很迫切。技术所解决的业务生命周期慢慢就会开始发生拆分。非核心生命周期分离出去之后,要么使用现有的技术来实现,要么形成新的技术,服务于更广泛的业务。

    业务是核心,技术是解决业务问题的工具,而架构是让业务长大的组织方法。架构需要用技术来实现拆分,而技术需要架构来合理组织,以提升效率。
    2017-05-15 22:10:20 回应
  • 设计模式的误区
    还有一个误区是架构师和软件工程师普遍存在的一个省力思维,总想用一个不变的方法来解决所有的问题,什么代码都考虑重用。设计模式强调的也是重用,恰好满足了这一需要,因此存在滥用的状况。但是重用并不总是带来好处,比如不同角色重用同一个服务(Service),就会导致两个角色不必要的相互干扰,反而增加了新的问题。重用并不是软件开发的目标,软件开发的真正目标是模拟业务,并提供用户访问。

    很多架构师或软件工程师使用了很多设计模式,就是为了让访问代码部分能够做到重用。究其根本原因,是因为这部分代码里面混入了业务逻辑,并且深深地认为这样做是对的,因为只能这么干,并且所有人都这么干。结果当业务需求快速变化的时候,设计模式因为无法规避不同用户修改需求带来的相互影响,反而导致部分的代码修改更加的困难。
    2017-05-15 22:17:01 回应
  • 访问类框架
    很多人把 MVC 中的模型(Model)理解为业务模型,这是有问题的。模型更多的是指对视图(View)的数据支持,一般用DTO来表达。而业务模型关注的是业务生命周期及其行为,业务模型的内部数据只是这些行为的结果。MVC 中的模型和业务模型是两个不同的概念,不可混用。
    2017-05-15 23:12:25 2回应
  • 软件运维
    运维的业务目标是保证用户的访问生命周期不受影响。

    非核心生命周期的意思并非说该生命周期不重要,而是不再需要自己亲自干,可以分工出去让别人干,用来提升并行度。

    运维的生命周期是从软件部署开始的。

    而为了要控制变化,隔离环境是第一件要做的事情。

    所有生产环境的变更可以分为两类:一种是被动发生的变更,一种是企业内部主动发起的变更。... 主动变更所导致的软件系统问题大约占所有线上问题的 2/3 以上。

    生成预警的主要困难在于对业务生命周期的理解。

    主导变更的策略主要就是让变更逐步地发生,一般被称为“灰度发布”。

    还有一个更先进的做法就是把代码发布和功能启用进行架构拆分,先确保代码上线没有问题,再通过软件开关来打开关闭某个功能,功能的打开和关闭就形成了一个新的发布生命周期。
    2017-05-15 22:26:56 回应

红色有角F叔的其他笔记  · · · · · ·  ( 全部654条 )

注定一战
1
美国反对美国
1
哲学·科学·常识
1
计算机组成(第 6 版)
2
图解TCP/IP(第5版)
1
沸腾十五年
2
重新理解创业
8
雄性衰落
3
股市真规则
1
资本和收入的性质
2
存在主义是一种人道主义
3
程序员的职业素养
1
何为良好生活
1
活出生命的意义
3
货币的教训
3
Docker——容器与容器云(第2版)
2
政治的人生
4
中国巨债
3
深入浅出React和Redux
5
历史的教训
4
聪明的投资者
8
Designing Data-Intensive Applications
4
投资中最简单的事
5
供给的逻辑
1
逃不开的经济周期
1
图解服务器端网络架构
1
斯坦福极简经济学
3
政治的逻辑
4
原则
5
大数据之路
1
在苍茫中传灯
4
巴菲特传(纪念版)
1
中产阶级如何保护自己的财富
1
指数基金投资指南
4
模式分类
2
深度学习
1
我看电商
2
数据挖掘导论
1
中国国家治理的制度逻辑
2
漫步华尔街
2
尽在双11:阿里巴巴技术演进与超越
2
共同基金常识
3
企业IT架构转型之道:阿里巴巴中台战略思想与架构实战
6
未来简史
2
MySQL DBA修炼之道
1
大国大城
2
计算广告
4
机器学习
1
集体智慧编程
1
重新定义公司
1
Hadoop应用架构
1
第二性
6
硅谷钢铁侠
1
大数据
5
经营的本质
1
人人都是产品经理
7
你凭什么做好互联网
4
Spark机器学习
2
游戏引擎架构
1
美国大城市的死与生(纪念版)
5
给大家看的Photoshop讲座
1
技术的本质
5
我们房地产这些年
2
行动的勇气
2
合作的进化
5
马克斯·韦伯与德国政治:1890—1920
6
数据库索引设计与优化
1
精益企业
7
高可用MySQL
2
发布!软件的设计与部署
2
项目管理艺术
2
右派国家
5
现实感
4
领域驱动设计
11
从0到1
1
高效程序员的45个习惯
1
可扩展的艺术
3
空之境界 上
1
成为技术领导者
1
改革的逻辑
3
修改代码的艺术
9
恰如其分的软件架构
7
软件开发者路线图
3
实现领域驱动设计
1
21世纪资本论
9
持续交付
16
构建之法
6
黑格尔导论
19
极端的年代
1
微服务设计
10
Site Reliability Engineering
5
测试驱动的面向对象软件开发
3
城市的胜利
2
对知识的恐惧
5
ZeroMQ
6
现代经济学主要流派
7
数学之美
2
程序员的思维修炼
1
大教堂与集市
1
一切坚固的东西都烟消云散了
5
兜售繁荣
1
数据科学与工程技术丛书
1
政治的细节(第10版)
8
发展研究指南(第二版)
2
代码大全(第2版)
2
企业应用架构模式
9
The Datacenter as a Computer
3
无情的革命
6
新教伦理与资本主义精神
3
人类简史
7
Understanding MySQL Internals
2
他改变了中国
1
态度改变与社会影响
4
复杂
2
民主新论
19
人件
2
国家的常识
4
乌合之众
3
Web Operations
2
个人印象
4
湖上闲思录
2
自由及其背叛
7
C++语言的设计与演化
8
百年中国经济史笔记
1
改变
4
创新与企业家精神
5
Cassandra
3
不敢止步
4
意志力
2
通向财务自由之路
1
制造同意
6
美国种族简史
4
NoSQL Distilled
4
理解专业程序员
2
一个自由主义者的良知
4
政治经济学要义
2
施瓦辛格健身全书
2
房地产的繁荣与萧条
5
为学十六法
2
Akka in Action
1
Java虚拟机并发编程
3
软件工艺
3
面向模式的软件架构,卷3
1
动物精神
4
非理性繁荣
10
MongoDB权威指南
2
海量数据库解决方案
1
Erlang/OTP并发编程实战
1
学术与政治
12
Java并发编程实战
16
论中国
3
金融炼金术
4
多处理器编程的艺术
1
Effective java 中文版(第2版)
1
中國近代史(下冊)
6
系统之美
6
压力下的角逐
2
古代东方史
1
Go 语言程序设计
1
Remote
1
深入Linux内核架构
2
中國近代史(上冊)
3
隐秩序
1
空之境界(上下集合售)
1
开放社会
4
中国近代史八种
5
喀提林阴谋 朱古达战争
1
政治秩序的起源
5
现代性的后果
2
失去的胜利
9
了不起的盖茨比
5
许倬云说历史:台湾四百年
2
大规模分布式存储系统
1
C++网络编程(卷1)
2
在约定的场所
1
中国的宗教
2
了不起的盖茨比
1
希腊罗马名人传(全三册)
2
自私的基因
2
学龠
1
中国政治思想史
4
列克星敦的幽灵
1
人月神话
2
现代体系结构上的UNIX系统
1
虚拟机
2
朱熹的历史世界
1