大型网站技术架构核心原理和案例分析笔记
导语
架构师在IT行业地位举重若轻,为开发人员、测试、运维崇拜、向往。技术也是一个金字塔分布,能到塔尖的少之又少。大部分人认为架构太深奥,深不可及,管好自己一亩三分地就好,架构吗由架构师去负责就好。这是个人的心声啊,习惯性避免接触相关知识,也没有主动去补充和了解这块知识。在《抉择》这本书讲的最求完美人生,需要通过清晰思考,而在清晰思考前是有障碍的,第一个障碍就是一些忍受一些长期存在的问题(放弃解决这些问题,启动自我保护机制,选择忽略问题),所谓习惯性无助。刚有理论不够,还得实践,实践,实践。因此选择了长期忽视的一个知识点“软件架构”来学习。
什么是系统架构?
支撑用户服务的一套软硬件体系,设备,中间件、数据库、开发语言,早期最常见的LAMP架构模式,
LINUX操作系统+APPCHE+MYSQL+PHP
网站架构关键要素(关注什么)?
我们从哪些关键要素来评估一个网站架构是否满足业务需求?一般有5个要素,分别是性能、可用性、伸缩性、扩展性、安全。
性能
关于应用性能指标耳熟能详的是响应时间,还有两个指标是吞吐量。处理应用还有基础资源的性能指标,CPU使用率、内存使用率、磁盘使用、进出流量等。对于不同服务器资源的使用关注不一样,应用cpu要求高,服务要求内存高,存储要求磁盘高等。怎样确保性能达到要求?从用户访问应用环节来分析,由用户到服务提供顺序来讲。
应用前端,用户分布在全国各地,网络质量参差不齐。为了解决用户带宽质量差异,采用CDN方式,把静态资源部署到运营商机房,让用户就近服务,减少访问路径,减轻应用压力,提升用户体验。第二种方式采用反向代理方式,用户之前使用的,再次使用优先选择已提供服务的服务器;
应用, 集群(相同能力服务器部署多台),通过负载均衡进行访问,提供无差别服务,提升用户体验,举个例子一台服务器提供10,000个访问服务,如果15,000访问,通过集群的方式满足超出的5000访问。
缓存服务,用户访问按20/80分别,把经常访问的静态资源,本地缓存或者分布式缓存,提升用户响应。
可用性
集群,分布式部署,消息队列服务、服务能力分层服务、分层服务基础上功能分割、数据库分布式部署
静态资源服务,把CSS的图片、文件压缩分布式部署。
文件服务器,用户上传的文件分布式部署。
伸缩性
是讲服务能力可增可减,伸是指通过增加设备解决访问增加需求,缩是指高峰期过后可回收设备资源。
要满足这个要求,需要支持分布式部署,集群。
扩展性
业务需求来了后,实现需求对现有的系统影响很少或者没有影响,能快速部署上去。这里需要服务能力分层、功能分割,把一些经常使用功能抽象出来当作独立服务或者公共服务。例如:用户管理、支付分割为独立的服务,部署在服务服务器。首页按展示的类别分隔出来,例如,论坛,商城分割出来,部署在应用服务器。
安全性
防止网络攻击,常见的攻击由SXX和SQL注入、数据泄露、密码保护(三种机密机制单散列,输入后进行加密例如MD5、对称加密,http传输方式,通过加密算法进行解密、非对称方式,https传输方式,解密需要私密)
网站架构演化历程
了解网站架构的历程,先对这些架构的术语科普下。
1、一体机: 是一台硬件设备上门部署应用+数据库;
2、服务分层:按应用、服务、数据库服务能力分层
3、服务分割:在服务层次的基础上,按功能进行纵向分割,分而治之。
4、分布式部署:应用、服务、存储分设备部署,对应服务分层、服务分割
5、集群:同一层次服务,部署多台。
6、负载均衡:通过规则策略,提供访问集群能力。
7、消息队列:服务之间或者分层之间访问异步进行,通过消息队列方式实现。
8、本地缓存:常用资源缓存到本地服务器上。
9、分布式缓存:常用资源缓存到缓存服务器
10、CDN:静态资源部署到运营商机房
11、反向代理:重复访问用户,优先提供已之前提供服务的服务器。
12、静态资源服务器:把CSS图片、文件单独部署服务器
13、文件服务器:用户上传文件、图片单独部署服务器
14、关系数据库、NOSQL数据库、文件数据库、数据库搜索引擎
网站架构历程是一个从0到1,1到N的过程,没有完美的架构,只有适用的架构。架构是根据业务的发展不断优化、推到重来的过程。阿里巴巴架构研究也遵循这一规律,由一台服务器,多台服务器;由LAMP到ORACLE、JAVA、IBM;有ORACLE到开源,开源到自有。不是一蹴而就达成的,是伴随不断的业务增长、业务复杂性演化而出的成果。
几个深有体会的金句
事情成就了人,不是人成就了事。
好的管理勾勒出清晰的蓝图和价值观,成员发自内心的认同,自觉的为蓝图而奋斗。强制加班,制度压人都是管理管理偷懒无能表现。
高手定律:高手遇到了困难问题,并找到了解决问题的方案,高手之所以成为高手,是高手遇到了困难问题,并解决了,就成为高手了。