万物都有其本质,也只有了解了事物的本质之后,才不至于出现在事物稍作改变时就难以应对的情况,作为软件工程专业的学生,我们应该对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. 086-PHP数组按数字排序和按字母排序

    <?php $arr=array(2,54,167,'a','A','12'); //定义一个数组 echo '数组排序之前的信息:<br />'; print_r($arr); / ...

  2. 本地Redis服务配置

    本地Redis服务配置 要求:在虚拟机中启动redis服务,并要在windows物理机上取得链接 虚拟机安装略,(结果如下) windows工作机上装了Oracle VM VirtualBox,并在其 ...

  3. C#使用throw和throw ex的区别(转)

    使用throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查, ...

  4. Channel详解

    复制自:http://www.cnblogs.com/youngKen/p/4921092.html java.nio.channels.FileChannel封装了一个文件通道和一个FileChan ...

  5. POJ 2521:How much did the businessman lose

    How much did the businessman lose Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9965 ...

  6. 基于 burpsuite的web逻辑漏洞插件开发(来自JSRC安全小课堂,柏山师傅)

    基于 burpsuite的web逻辑漏洞插件开发 BurpSuite 提供了插件开发接口,支持Java.Python.Ruby语言的扩展.虽然 BApp Store 上面已经提供了很多插件,其中也不乏 ...

  7. stm32h7 hal 库的学习

    stm32h7xx_hal_conf.h 中需要注意的几个地方: HSE_VALUE 这个外接晶振的频率 TICK_INT_PRIORITY 这个 tick 的中断优先级,因为 HAL_DELAY 这 ...

  8. SASS - @extend(继承)指令

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – 语法 SASS – 变量 SASS- 局部文件(Partial) SASS – 混合(Mixin) SASS ...

  9. Tensorflow——用openpose进行人体骨骼检测

    https://blog.csdn.net/eereere/article/details/80176007 参考资料code:https://github.com/ildoonet/tf-pose- ...

  10. CSS行间样式与内部样式

    注释 <!-- --> 快捷键 crtl+/ div 双标签<div></div> CSS语法    属性名:属性值: Css引入方式 1.行间样式的引入:在标签中 ...