IT架构的本质--阅读笔记01
万物都有其本质,也只有了解了事物的本质之后,才不至于出现在事物稍作改变时就难以应对的情况,作为软件工程专业的学生,我们应该对IT架构的本质有一定的了解。“老僧三十年前未参禅时,见山是山,见水是水。及至后来,亲见知识,有个入出,见山不是山,见水不是水。而今得个休歇处,依前见山只是山,见水只是水。”这是参禅的三重境界,但同样适用于IT技术圈,初出茅庐的新手觉得每个产品都是有一定的技术难度的,他们学习着一门又一门的新语言,追逐着最强的IDE;有一定阅历与经验的前辈们深知各语言的优点与劣势,最好的语言也时常会有人对其发出嘲讽;然而当一切都沉淀下来以后,我们会明白,搞IT其实不过就是一份延续思想以及翻译语言的工作,例如技术架构师,这是一份古朴甚至有些无趣的工作。
架构技术像机器人哄小孩一样简单,各角色分工明确方便快速实现业务,但是也给架构优化埋下了大坑,底层的盲目支撑是巨大资源浪费,平级调度协作也没任何弹性,A系统会等B系统等到死锁就是架构悲剧。搞架构设计最重要的就是砍需求,将上层应用的需求优化删减,让同级的业务能容错,抓住核心诉求,不该要的东西通通不要。
作者对架构师的工作做出了五条基于核心道理的总结:1. 需求优化最重要:少查少写少依赖;2.群集设计通用规则:前端复制后端拆,实时改异步,三组件互换;3. 理解硬件天性:角色选型时要看硬件的天然特性;4. 数据的产生和消失:数据不会凭空产生,但会凭空消失;5. 各环节都不可盲信:容灾设计中都尽人事和听天命。
前端是管道是逻辑,而后端是状态是数据,所以前端复制后端拆。在群集性能规划中,网络和硬盘IO+CPU算力+磁盘和内存空间是可以互换的,架构师要完成补不足而损有余的选型。每个新选型都会带来细节上的万千变化,但每种变化都是符合自然规律有章可循的。例如,一个经典微机系统就是中央处理器+主存储器+IO设备,而这几个概念居然是和群集性能规划一一对应的。
架构层软件技术已经足够成熟,所谓技术选型不如说是适应场景;在做具体角色选型时,最深度也最易忽视的原则是顺应硬件天性。作者的精神导师说过,如果一个服务依赖硬盘,那这个服务就不适合扛性能压力。天性不可逆转,所谓理解硬件的天然特性,就是别让硬盘扛性能,别让内存保持久,别让网线扛稳定。
写代码时会遇见很多难以理解的问题,你可能不明白这个错是怎么出现的,也不知道那个错怎么下一秒忽然就没了,但我们需要知道的是,数据不会凭空产生,但有可能会凭空消失。计算机或者自输入设备获取数据,或者自其他数据源导入数据,而且原始数据的转化规则也要人类来定义。我们要便捷轻巧安全可靠的获取数据,就要选好数据源,保障好传输路径,定义好数据变换规则。在一个数据生命周期内,为了防止数据全部或部分凭空消失,数据的容错校验、关联复原、冷热备份和安全删除都要考虑到位。
架构师的核心技能包括画好访问逻辑和数据流量图,因为问题现状描述清楚了,问题就解决了一多半了。一个好的业务访问逻辑图,其信息量大到包罗访问过程的所有元素,同时也要详略得当高亮关键点。在生僻业务的规划实施过程中,没人告诉架构师该有哪些服务,他们只能靠摸透一个又一个访问逻辑图和数据生命周期,来摸索群集内有哪些角色和依赖关系。
要知道整个IT系统中就没有可靠的组件,架构师既不能盲目信任撞大运,又不能无限冗余吓唬自己,而是在尽人事和听天命之间做好权衡,不出故障的人是不存在的,不出错的标准难以达到。如果出了大范围的故障,只要员工没有恶意破坏,那就是群集健壮性设计不到位,是技术总监和架构师的锅,而非操作工。
作者说过庖丁可以解牛也可以杀猪,做架构的,明白了架构之道,以其作为思想支撑,即使面对的是全新业务类型,也能做到面不改色游刃有余。
IT架构的本质--阅读笔记01的更多相关文章
- uml大战需求分析阅读笔记01
<<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...
- <精通JavaScript>---阅读笔记01
下面是阅读精通JavaScript书做的相关笔记. JS中的函数重载 函数重载必须依赖两件事情:判断传入参数数量的能力和判断传入参数类型的能力,在js中每个函数都带有一个仅在这个函数范围内作用的变量, ...
- Spring源码阅读笔记01:源码阅读环境准备
1. 写在前面 对于做Java开发的同学来说,Spring就像是一条绕不过去的路,但是大多数也只是停留在对Spring的简单使用层面上,对于其背后的原理所知不多也不愿深究,关于这个问题,我在平时的生活 ...
- UML大战需求分析--阅读笔记01
本次阅读的书籍是<UML大战需求分析>,看了前两章的内容:1 大话UML,2绞尽脑汁的需求分析.这两章内容关联不大,分开描述. 第一章:大话UML 本章主要概述UML是什么,有什么内容.U ...
- 《UML大战需求分析》阅读笔记01
在刚学习软件开发的课程时,首先学习了UML设计,但只是学习了基本的语法,虽然在学期通过课堂练习进行了实践,但并没有真正理解其中作用.为了进一步的理解UML的用法,我阅读了<UML大战需求分析&g ...
- 《java与模式》阅读笔记01
这次我读了前两章的内容,就如书名所言,这本书主要将的就是java中的模式,在书中的序言就把所有的模式都介绍了一下,主要有, 1.创建模式:简单工厂模式,工厂方法模式,抽象工厂模式,建造模式 2.行为模 ...
- 《京东B2B业务架构演变》阅读笔记
一.京东 B2B 业务的定位 让各类型的企业都可以在京东的 B 平台上进行采购.建立采购关系. 京东 B2B 的用户群体主要分为 2 类: 一类是大 B 用户.另一类是小 B 用户.京东 B 平台需要 ...
- 《YouTube 网站的架构演进》阅读笔记
概述 YouTube 在国内是个404网站,需要翻墙得见,这是有用的废话,先铺垫一下. 从全球网站来看,它仅次于母公司 Google,全球排名位列第2.每天超过5亿以上视频播放量,平均每个用户点击10 ...
- 云时代架构阅读笔记六——Java内存模型详解(二)
承接上文:云时代架构阅读笔记五——Java内存模型详解(一) 原子性.可见性.有序性 Java内存模型围绕着并发过程中如何处理原子性.可见性和有序性这三个特征来建立的,来逐个看一下: 1.原子性(At ...
随机推荐
- 环境变量和文件查找&文件打包与解压缩
环境变量和文件查找 介绍环境变量的作用与用法 及几种搜索文件的方法 学会这些技巧可以高效地使用 Linux 知识点:环境变量的设置 环境变量的修改 环境变量 要解释环境变量,得先明白变量是什么,准确的 ...
- 编程入门-Eclipse基本使用
编程入门-Eclipse基本使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设置Eclipse的基本参数 1>.修改Eclipse默认的文件编码为"utf- ...
- C语言拾遗——sscanf
今天写题用到了sscanf,怕忘赶紧记录一下 去百度了一下这玩意的函数原型好像是长这样的,微软上扣下来的 int sscanf( const char *buffer, const char *fo ...
- Java 第一次课堂测试总结。
Java 第一次课堂测试总结. 昨天参加了JAVA的开学测试,课上没有完成计算基点的功能,以下是修改完成后的代码. 首先是ScoreInformation类来存储学生信息. //信1805-1 王正 ...
- Day2-T4
原题目 当然这是原题+,要输路径的.所以必须DFS. Describe:DP or DFS code: #include<bits/stdc++.h> using namespace st ...
- Spring Boot2(002):手动创建第1个SpringBoot2简单应用——“HelloWorld” web 工程
备注:以下内容参考 springboot 官方文档 https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/pdf/spring ...
- 量化投资_Multicharts数组操作函数_append()追加函数(自定义)
1. Multicharts中关于数组的操作比较麻烦,而且当中所谓的动态数组的定义并不是像其他语言那种的概念.因此要对数组进行元素“”追加“”的话,需要重新更改数组的索引,然后再最后一个位置添加val ...
- 精选干货 在java中创建kafka
这个详细的教程将帮助你创建一个简单的Kafka生产者,该生产者可将记录发布到Kafka集群. 通过优锐课的java学习架构分享中,在本教程中,我们将创建一个简单的Java示例,该示例创建一个Kafka ...
- POJ 1651:Multiplication Puzzle 矩阵相乘式DP
Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7118 Accepted: ...
- JavaScript 之 Function
JavaScript function 语句定义和用法: function 语句用于声明一个函数. 函数声明后,我们可以在需要的时候调用. 在 JavaScript 中,函数是对象,函数也有属性和方法 ...