1、写在前面前端
“架构”一词,是一个很是大命题,一般很难用语言来描述这个东西,咱们先不谈“架构“这个词,咱们先来看一些现象。web
一、对于真正作实事的开发者来讲,一般会有相似的感受,架构师一般就画画ppt,代码也写不了,画的各类ppt也就看看,也解不了什么实际问题。后端
二、每次开会,就会大聊各类概念,又没法落地。浏览器
三、什么技术都能夸夸奇谈,你问细节,怎么实现,他不知道,老是表示本身不关心细节。缓存
四、老是以高屋建瓴的姿态来标榜本身。安全
诸如上面的现象其实很是多,我不过多的评价,只能说他们并不是热爱软件这个行业,至少心里是排斥这个行业的。但我以为,一个朴素的技术人,应该是有追求的,把”传到授业解惑“当成一种责任,剖开技术的华丽包装,还原技术想告诉人们的真相。服务器
注:上面并不是想批判什么。cookie
2、起因网络
回顾这些年的技术生涯,感触仍是很是深的,从Java web开发,到大数据,再到机器学习,再到深度学习这一路走来,都源于我想要揭示技术的真相。也慢慢想通一些事情,程序本质上所作的事情能够这样描述,有一个黑箱子,你给它一个input,它给一个output。那么获得这个”黑箱子“,有两种办法,硬编码和机器学习,那么这样即可以描述全部技术的真相了。程序和机器学习,本质上作的事情并无什么不一样,只是获得这个黑箱子的办法不一样而已,请看下图。ps:大数据技术到底解了什么,我从”冷眼”的视角,也总结了一些话,后面再写成文章。session
上面有点扯远了,最近又从新翻了一遍李智慧的《大型网站技术架构》一书,这是一本很是简洁而充满智慧的书。总结一个大型网站所具有的核心要素。本片博客将结合这本书,写一些东西。
3、架构
再说架构以前,咱们先来讲说一个B/S结构想解的核心问题是什么?它想解的核心问题是,数据任什么时候候高速、准确的读或者写的问题。围绕着这个问题,咱们得对设计作一些考量,这种设计,它应该叫架构。架构是最高层次的一种规划,一旦规划好,便难以改变,就像人生的规划同样,走过的路,不能从新走。
一、核心要求
高性能:任什么时候候操做网站,都能立刻响应
高可用:任什么时候候都是能够访问的
扩展性:能够随意扩展业务,并不对原业务形成影响
伸缩性:能够任意横向、或者纵向扩展服务器,固然也能随意缩减
安全性:抵御攻击
二、架构模式
围绕着上述要求,咱们有哪些设计思想是能够用的?
分层:分层这种思想实际上是计算机里很是朴素的一种设计思想,例如网络7层模型,5层模型等,固然对于web系统而言,视图层、服务层、数据层,这是最基础的分层。
分割:将业务进行合理的切分
分布式:不一样的业务,分而治之
集群:单一应用横向扩展
缓存:前端、后端缓存,多级缓存等等
异步:多阶段拆分业务,消息驱动
冗余:web节点冗余、数据冗余,异地容灾等等
三、高性能
衡量指标:响应时间、并发数、吞吐量(TPS、QPS、HPS)
web前端优化:减小http请求、使用浏览器缓存、压缩、减小cookie传输、CDN加速
服务端优化:分布式缓存、异步、集群、代码优化(多线程、资源复用、减小fullgc)
存储性能:机械硬盘、固态硬盘,索引技术(B+树、LSM)
四、高可用
高可用应用:无状态服务集群、有状态的session服务集群
高可用服务:集群(分级管理、超时设置、异步调用、服务降级、幂等设计)
高可用数据:CAP理论、数据一致性、数据备份(冷热备份)、失效转移
五、伸缩性
伸缩性设计:不一样功能进行物理分离、单一功能集群
负载均衡
分布式缓存
数据伸缩:分库分表、主从备份
六、扩展性
事件驱动:经过消息队列解耦合,用事件驱动的思想扩展
服务化:用interface的手段解耦合,横向扩展
七、安全性
xss、注入攻击、CSRF
固然,有了deeplearning,能够用Gan的思想,找到攻击流量的边界。
4、附上大图
如下是我梳理的全书的重要部分。
5、结束语
衡量一我的技术的好坏,广度和深度当然重要,但有一个最最重要的指标是:可否快速、优雅地解当前问题。还有最重要的一句话,不能为了技术而技术。
快乐源于分享。
此博客乃做者原创, 转载请注明出处