万物都有其本质,也只有了解了事物的本质之后,才不至于出现在事物稍作改变时就难以应对的情况,作为软件工程专业的学生,我们应该对IT架构的本质有一定的了解。“老僧三十年前未参禅时,见山是山,见水是水。及至后来,亲见知识,有个入出,见山不是山,见水不是水。而今得个休歇处,依前见山只是山,见水只是水。”这是参禅的三重境界,但同样适用于IT技术圈,初出茅庐的新手觉得每个产品都是有一定的技术难度的,他们学习着一门又一门的新语言,追逐着最强的IDE;有一定阅历与经验的前辈们深知各语言的优点与劣势,最好的语言也时常会有人对其发出嘲讽;然而当一切都沉淀下来以后,我们会明白,搞IT其实不过就是一份延续思想以及翻译语言的工作,例如技术架构师,这是一份古朴甚至有些无趣的工作。

架构技术像机器人哄小孩一样简单,各角色分工明确方便快速实现业务,但是也给架构优化埋下了大坑,底层的盲目支撑是巨大资源浪费,平级调度协作也没任何弹性,A系统会等B系统等到死锁就是架构悲剧。搞架构设计最重要的就是砍需求,将上层应用的需求优化删减,让同级的业务能容错,抓住核心诉求,不该要的东西通通不要。

作者对架构师的工作做出了五条基于核心道理的总结:1. 需求优化最重要:少查少写少依赖;2.群集设计通用规则:前端复制后端拆,实时改异步,三组件互换;3. 理解硬件天性:角色选型时要看硬件的天然特性;4. 数据的产生和消失:数据不会凭空产生,但会凭空消失;5. 各环节都不可盲信:容灾设计中都尽人事和听天命。

前端是管道是逻辑,而后端是状态是数据,所以前端复制后端拆。在群集性能规划中,网络和硬盘IO+CPU算力+磁盘和内存空间是可以互换的,架构师要完成补不足而损有余的选型。每个新选型都会带来细节上的万千变化,但每种变化都是符合自然规律有章可循的。例如,一个经典微机系统就是中央处理器+主存储器+IO设备,而这几个概念居然是和群集性能规划一一对应的。

架构层软件技术已经足够成熟,所谓技术选型不如说是适应场景;在做具体角色选型时,最深度也最易忽视的原则是顺应硬件天性。作者的精神导师说过,如果一个服务依赖硬盘,那这个服务就不适合扛性能压力。天性不可逆转,所谓理解硬件的天然特性,就是别让硬盘扛性能,别让内存保持久,别让网线扛稳定。

写代码时会遇见很多难以理解的问题,你可能不明白这个错是怎么出现的,也不知道那个错怎么下一秒忽然就没了,但我们需要知道的是,数据不会凭空产生,但有可能会凭空消失。计算机或者自输入设备获取数据,或者自其他数据源导入数据,而且原始数据的转化规则也要人类来定义。我们要便捷轻巧安全可靠的获取数据,就要选好数据源,保障好传输路径,定义好数据变换规则。在一个数据生命周期内,为了防止数据全部或部分凭空消失,数据的容错校验、关联复原、冷热备份和安全删除都要考虑到位。

架构师的核心技能包括画好访问逻辑和数据流量图,因为问题现状描述清楚了,问题就解决了一多半了。一个好的业务访问逻辑图,其信息量大到包罗访问过程的所有元素,同时也要详略得当高亮关键点。在生僻业务的规划实施过程中,没人告诉架构师该有哪些服务,他们只能靠摸透一个又一个访问逻辑图和数据生命周期,来摸索群集内有哪些角色和依赖关系。

要知道整个IT系统中就没有可靠的组件,架构师既不能盲目信任撞大运,又不能无限冗余吓唬自己,而是在尽人事和听天命之间做好权衡,不出故障的人是不存在的,不出错的标准难以达到。如果出了大范围的故障,只要员工没有恶意破坏,那就是群集健壮性设计不到位,是技术总监和架构师的锅,而非操作工。

作者说过庖丁可以解牛也可以杀猪,做架构的,明白了架构之道,以其作为思想支撑,即使面对的是全新业务类型,也能做到面不改色游刃有余。

IT架构的本质--阅读笔记01的更多相关文章

  1. uml大战需求分析阅读笔记01

    <<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...

  2. <精通JavaScript>---阅读笔记01

    下面是阅读精通JavaScript书做的相关笔记. JS中的函数重载 函数重载必须依赖两件事情:判断传入参数数量的能力和判断传入参数类型的能力,在js中每个函数都带有一个仅在这个函数范围内作用的变量, ...

  3. Spring源码阅读笔记01:源码阅读环境准备

    1. 写在前面 对于做Java开发的同学来说,Spring就像是一条绕不过去的路,但是大多数也只是停留在对Spring的简单使用层面上,对于其背后的原理所知不多也不愿深究,关于这个问题,我在平时的生活 ...

  4. UML大战需求分析--阅读笔记01

    本次阅读的书籍是<UML大战需求分析>,看了前两章的内容:1 大话UML,2绞尽脑汁的需求分析.这两章内容关联不大,分开描述. 第一章:大话UML 本章主要概述UML是什么,有什么内容.U ...

  5. 《UML大战需求分析》阅读笔记01

    在刚学习软件开发的课程时,首先学习了UML设计,但只是学习了基本的语法,虽然在学期通过课堂练习进行了实践,但并没有真正理解其中作用.为了进一步的理解UML的用法,我阅读了<UML大战需求分析&g ...

  6. 《java与模式》阅读笔记01

    这次我读了前两章的内容,就如书名所言,这本书主要将的就是java中的模式,在书中的序言就把所有的模式都介绍了一下,主要有, 1.创建模式:简单工厂模式,工厂方法模式,抽象工厂模式,建造模式 2.行为模 ...

  7. 《京东B2B业务架构演变》阅读笔记

    一.京东 B2B 业务的定位 让各类型的企业都可以在京东的 B 平台上进行采购.建立采购关系. 京东 B2B 的用户群体主要分为 2 类: 一类是大 B 用户.另一类是小 B 用户.京东 B 平台需要 ...

  8. 《YouTube 网站的架构演进》阅读笔记

    概述 YouTube 在国内是个404网站,需要翻墙得见,这是有用的废话,先铺垫一下. 从全球网站来看,它仅次于母公司 Google,全球排名位列第2.每天超过5亿以上视频播放量,平均每个用户点击10 ...

  9. 云时代架构阅读笔记六——Java内存模型详解(二)

    承接上文:云时代架构阅读笔记五——Java内存模型详解(一) 原子性.可见性.有序性 Java内存模型围绕着并发过程中如何处理原子性.可见性和有序性这三个特征来建立的,来逐个看一下: 1.原子性(At ...

随机推荐

  1. 093-PHP数组比较

    <?php $arra=array('hello','hi'); //定义多个数组 $arrb=array(1=>'hi',0=>'hello'); $arrc=array(1,2) ...

  2. ES6 之 Proxy

    概述 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改. Proxy 可以理解在目标对象架设一个“拦截”层外界对该对象的访问都必须先通过这层拦截,因此提供了一种机制可以对外界的访问进行 ...

  3. 【iOS】Swift4.0 GCD的使用笔记

    https://www.jianshu.com/p/47e45367e524 前言 在Swift4.0版本中GCD的常用方法还是有比较大的改动,这里做个简单的整理汇总. GCD的队列 队列是一种遵循先 ...

  4. Python安装bs4

    - 需要将pip源设置为国内源,阿里源.豆瓣源.网易源等 - windows (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %appdata% (3)在这里面新建一个文件夹 pip ...

  5. distpicker.js 根据当前位置初始化select

    学习参考的地址放在最醒目的地方: https://blog.csdn.net/idea_boy/article/details/58280076 百度官方实例:http://developer.bai ...

  6. Dynamic Route Matching Vue路由(1)

    Dynamic Route Matching 动态的 路由 匹配 Very often we will need to map routes with the given pattern to the ...

  7. php条件判断(9.29 第十五天)

    超级全局变量:$GLOBALS //包含全部变量的全局组合数组$_SERVER //包含请求头中的信息,用户的IP.用户的UA.头信息$_REQUEST //包含用户提交的所有数据(POST/GET ...

  8. HDU 1003:Max Sum

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  9. mysql字符串操作

    https://h.w.com/lin/h ) 效果: https://h.w.com huangwanlin ) 效果: huang huangwanlin ) 效果: wanlin huangxi ...

  10. spring boot集成mybatis(2) - 使用pagehelper实现分页

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...