关于什么是架构,一种比较通俗的说法是 “最高层次的规划,难以改变的决定”,这些规划和决定奠定了事物未来发展的方向和最终蓝图。
从这个意义上说,人生规划也是一种架构。选什么学校、学什么专业、进什么公司、找什么对象、过什么样的生活,都是自己人生的架构。
联系到软件开发:
实际上业务类型+技术选型往往也决定整个项目的架构是怎么样的。
具体到软件架构,维基百科是这样定义的:”有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计”。
系统的各个重要组成部分及其关系构成了系统的架构,这些组成部分可以是具体的功能模块,也可以是非功能的设计与决策,他们相互关系组成一个整体,共同构成了软件系统的架构。
大型网站核心架构的五个因素:
- 性能
- 可用性
- 伸缩性
- 扩展性
- 安全性
一、性能
性能是网站的一个重要指标,性能差的网站往往也代表这可用性等各方面不好。
关于性能优化,对不同的对象,采取不同的优化措施。
1.浏览器端
参考《高性能网站建设指南》,里面提供了14个措施。
(1)减少HTTP请求;
(2)使用CDN;
(3)添加Expires头;
(4)压缩组件;
(5)将样式放在顶部;
(6)将脚本放在底部;
(7)避免CSS表达式;
(8)使用外部JavaScript和CSS;
(9)减少DNS查找;
(10)精简JavaScript;
(11)避免重定向;
(12)移除重复脚本;
(13)配置ETag;
(14)使用Ajax缓存;
2.应用服务端
(1)数据库服务器(索引、缓存、SQL优化);
(2)使用NoSQL;
(3)使用分布式;
(4)使用集群;
(5)异步操作;
3.代码层面
使用多线程、改善内存管理等手段优化。
对于网站而言,性能符合预期仅仅是必要条件,因为无法预知网站可能会面临的访问压力,所以必须要考虑系统在高并发访问情况下,超出负载设计能力的情况下可能会出现的性能问题。网站需要长时间持续运行,还必须保证系统在持续运行且访问压力不均匀的情况下保持稳定的性能特征。
二、可用性
网站高可用的主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存在在多台服务器上互相备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。
联系实际:
这种方式适合看公司情况,有的公司虽然有盈利,但是为了减少一些不必要的成本,需要架构师做一些技术架构的评估,比如A和B技术架构方案都适合业务时,这时公司拍板的人更倾向于成本更低的方案。
三、伸缩性
大型网站需要面对大量用户的高并发访问和存储海量数据,不可能只用一台服务器就处理全部用户请求,存储全部数据。网站通过集群的方式将多台服务器组成一个整体共同提供服务。所谓伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
联系实际:
针对之前研究过弹性伸缩,所谓弹性伸缩就是当处于高并发时,自动扩展,开启多台服务器来应对高并发,当处于低并发时,也就是用户不是特别多的时候,自动回收一些多余的服务器。减少不必要的资源浪费。
四、扩展性
不同于其他架构要素主要关于非功能性需求,网站的扩展性架构直接关注网站的功能需求。网站快速发展,功能不断扩展,如何设计网站的架构使其能够快速响应需求变化,是网站可扩展架构主要的目的。
衡量网站架构扩展性好坏的主要标准就是网站增加新的业务产品时,是否可以上线新产品。不同产品之间是否很少耦合,一个产品改动对其他产品无影响,其他产品和功能不需要受牵连进行改动。
联系实际:
说到扩展性,工作两年以上的朋友特别深有感触,两年的时间由一个初级开发者到中级开发者,从0写过项目,也维护过不少项目,应该能够深刻的理解扩展性是多么的重要。
五、安全性
互联网是开放的,任何人在任何地方都可以访问网站。网站的安全将就是保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取。
Web网站常用的攻击方式:
(1)SQL注入 - 此威胁的目标可能是绕过登录算法,破坏数据等。
(2)拒绝服务攻击 - 此威胁的目标可能是拒绝合法用户访问资源。
(3)跨站点脚本XSS - 此威胁的目标可能是注入可在客户端浏览器上执行的代码。
(4)Cookie /会话中毒 - 此威胁的目标是通过攻击者修改Cookie /会话数据以获取未经授权的访问权限。
(5)表格篡改 - 此威胁的目标是修改表单数据,例如电子商务应用程序中的价格,以便攻击者可以以较低的价格获得物品。
(6)代码注入 - 此威胁的目标是注入可在服务器上执行的PHP,Python等代码。代码可以安装后门,泄露敏感信息等。
破坏 - 此威胁的目标是修改网站上显示的页面,并将所有页面请求重定向到包含攻击者消息的单个页面。