对于一个互联网网站的架构设计,要兼顾性能,可用性,可伸缩性,可扩展性和安全性五个方面。
性能主要关注终端用户的感受,最重要的特点就是快速响应,这与用户的体验直接相关。站在用户,研发人员以及运维人员的角度来看性能衡量的指标是不一样的。解决性能问题最好的方法是缓存,缓存是不需要访问存储服务器上的数据而直接从服务器的内存中读取的一种方式。由于存储设备的io性能一直是整个网站性能的瓶颈,所以数据的读取,尽量不要在硬盘上进行。内存中的数据是已经从硬盘上加载到内存中的数据,数据能直接从内存中访问要比从硬盘中访问快的多。
可用性是保证在任何情况下,网站的功能都可以使用。这是网站运营的最基本功能 ,但是由于网站的规模巨大,涉及到的设备配件众多还包括第三方的一些如网络带宽,缓存服务器等资源。要想保证网站随时可用是一件很困难的事情,即便如此也要想方设法在网站遭遇故障的时候保证系统持续可用。可用性的保证措施有两条,一是数据备份;二是故障转移。数据备份是对于存储服务器和缓存而言的,故障转移是通过负载均衡或路由算法等技术在集群中某些服务器出现故障的时候,能够切换到其它提供相同功能的正常的服务器。
可伸缩性是根据用户的数量及并发连接的数量灵活扩展网站的整体处理能力。每个互联网公司都是从小到大渐渐发展起来的,当业务规模做大的时候网站的并发连接数和用户数量也会相应的增大,这时要想同时处理大规模的用户访问,必须同时扩展网站的处理性能。可伸缩性的最好的解决办法是集群通过向集群中添加服务器的方式,线性的扩展网站的处理性能。如果同一时间一台服务器能够处理1000个用户连接那么十台服务器就可以处理1万个用户连接,以此类推。
可扩展性是指在不改变网站架构的情况下能够灵活的增加网站的功能的能力。这要求网站在增加一项或多项新功能的时候,对于其他的功能或者服务不造成影响。增强网站可扩展性的最好的办法解耦,如果模块与模块之间并不是紧密的直接调用的关系,那么任何一个模块都可以根据需求灵活调整。同时将众多应用同时需要的服务单独作为一个模块供其调用。就像共用主干基础设施,不需要修改基础设施的结构即可灵活的增加建筑的众多功能一样。
安全性涉及的因素很多,最主要的是要保证网站的安全。可以从技术和业务两个层面来保证。技术方面最重要的一点就是防止黑客攻击。业务方面是根据业务需求,防止不符合业务预期的操作进行。由于互联网网站处于公共区域所以要防止一些非法信息和恶意信息。具体的措施也是通过技术手段来实现的,比如说通过查找关键字智能识别。
除了上述五个性能,还有一些最重要的特性,虽然互联网站是作为一个整体出现在用户面前的,但它的功能实际上可以分为多个模块。有两种划分方式,横向划分和纵向划分,纵向划分是指互联网站,可以分为前端,应用层,服务层和数据层。每个层次又可以纵向划分成多个模块,比如说一个购物网站又可以把它分为产品,购物车,点评等子应用。服务层又可以划分为登陆服务,消息队列服务,用户认证服务等子服务模块。数据层又可以分为缓存,搜索引擎,数据库等子模块。这里每一个模块都可以采用不同的方式或相同的方式进行灵活的扩展。但由于各自模块的功能不一样,虽然它们都采用集群的方式,但在技术实现上也会有很大的区别。比如对于缓存来说,缓存服务器上保存的数据并不都是一样的,所以应用要访问缓存就必须准确的找到数据缓存的位置,这和数据持久化的存储服务器集群的设计方式又不同。对于应用集群服务器和服务集群服务器,由于他们是无状态的,所以构造可伸缩集群相对比较简单,只是往集群中增加服务器通过负载均衡技术进行分发即可。
互联网网站的设计归根结底来源于网站的需求,来源于业务的需求,根据业务设计符合需求的网站,而不是设计功能最丰富或技术最先进的网站。所以网站是演化出来的,而不是设计出来的。所以网站的设计的好坏有一个不变的标准就是是否最好的适应公司业务的发展。
网友评论