大型网站需要关注的一些架构要素

关于大型网站的架构设计过程中,我们除了关心当前系统的功能性需求外和非功能性需求的设计外,还需要关心一些系统架构要素,架构设计过程中,基本需要满足这些架构要素,要平衡这几个要素之间的关系以实现需求和架构目标。

一、性能

性能是网站的一个重要指标,可以说性能是网站架构设计的一 个重要方面, 任何软件架构设计方案都必须考虑可能会带来的性能问题。

也正是因为性能问题几乎无处不在, 所以优化网站性能的手段也非常多, 从用户浏览器到数据库, 影响用户请求的所有环节都可以进行性能优化。

浏览器端:

使用页面缓存、cookie、使用页面压缩、使用CDN,将网站静态部分分发到离用户最近的机房,使用户通过最短路径获取数据。

应用服务端:

可以使用本地缓存和分布式缓存,通过缓存热点数据来返回用户请求,减少数据库连接查询压力。

可以使用异步的方式,使用将请求发送到消息队列后等待后续任务处理,当前请求直接响应给用户,消息队列中的消息如果执行失败了,可以做补偿机制。

可以使用集群的方式,利用多台服务器处理大量请求内容。

使用多线程并发编码设计,处理请求。

提高内存优化,垃圾回收等手段。

数据库端:

使用索引、缓存、SQL优化等性能优化手段。使用非关系型数据库,处理数据结构。

衡量一个网站性能的指标

1、响应时间
2、TPS
3、系统性能计数器等。

最后总结一下,对于网站来说,性能符合预期是必要条件,因为无法预知网站突然面临巨大访问的压力,所以需要测试系统在高并发情况下,超出负载设计能力的情况下可能会出现的问题,网站需要长时间持续运行,还必须保证持续运行时访问压力不均匀的情况下,保持稳定的性能。

二、可用性

对于大型网站而言,特别是知名网站,网站宕机,服务不可用是一个重大事故。一般而言,可用性都是指在一段时间内比如7*24小时内可用的时间占总时间的比例来衡量的,一些知名网站可用性达到99.99%已经非常高了。

一般主要的原因都是因为服务器会宕机,毕竟时24小时在线的,高可用设计的前提就是服务器宕机的时候,服务还需要保证可用。

高可用的主要设计手段其实就是冗余,这个我之前的架构模式已经说过了。冗余服务器,冗余备份数据。

还有一种手段我们可以做集群负载均衡,任何一台机器宕机,我们可以把请求切换到其他服务器实现应用的高可用。

对于存储数据的服务器,可以对数据进行多中心备份,当服务器宕机时将数据访问转移到可用的服务器上,并对数据恢复以保证继续有服务器宕机的时候,数据可用。

关于高可用设计手段可以看我这篇文章,里面会总结的更详细:
互联网高可用设计手段

三、伸缩性

所谓伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。

衡量架构伸缩性的主要标准就是是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。

这里区分几种情况:

对于应用型服务器集群,新加入的服务器只要服务器上不操作数据,可以使用合适的负载均衡设备不断像集群中加入服务器。

对于缓存服务器,比如redis,如果部署的是集群,可以使用一致性hash算法,来保证伸缩性。

对于关系型数据库,虽然支持数据复制、主从备份等机制,但是很难做到大规模集群的可伸缩性,因此关系型数据库的集群伸缩性方案必须在数据库之外实现,通过路由分区等手段,将部署有多个数据库服务器组成一个集群。

四、拓展性

不同于其他架构要素比较关注非功能性需求,网站的拓展性关注的是功能性需求,如何设计网站使其能够快速响应需求变化,就是网站可拓展性架构的目的了。

衡量网站架构扩展性好坏的主要标准就是在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。不同产品之间是否很少耦合,一个产品改动对其他产品无影响,其他产品和功能不需要受牵连进行改动。

网站可伸缩架构的主要手段是事件驱动架构和分布式服务。

事件驱动架构通常采用消息队列实现,将用户请求和其他业务事件构成消息发布到消息队列,监听该事件的服务或者说消费者就会从消息队列中获取消息并处理。通过这种方式,能够解耦。

分布式服务就是将业务和可复用服务分离开来,通过分布式服务框架调用,新增的产品可以通过调用可复用的服务,实现自身的业务逻辑,对现有产品没有影响,可复用服务升级时,可以通过多版本服务对应用透明升级,不需要强制应用同步变更。

五、安全性

网站的安全架构就是保护网站不受恶意访间和攻击,保护网站的重要数据不被窃取。

衡量标准:针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略。

后续文章会对这几个方面要素进一步分析。

摘自《大型网站技术架构核心原理与实践》在这里插入代码片

网站性能测试用例 某网站提供会员模板下载、上传、购买、支付等功能,目前进入性能测试阶段,通过性能需求可以了解到主要有以下几个性能指标需要进行测试:   ● 产品页面刷新性能   ● 产品上传性能   ● 产品下载性能   目前给出的指标为:   延迟:   测试项 响应时间 抖动 备注   产品页面刷新 <5秒 <2秒   产品下载相应时间 <4秒 <2秒   吞吐量:   编号 项 吞吐量   Perf.T.1 所有登录用户在线状态更改频率 每10分钟1次   Perf.T.2 每日页面平均访问量 60000次   Perf.T.3 每日下载量 50000   Perf.T.4 平均每日新增会员数量 500   Perf.T.5 高峰同一模板下载量 100用户并发下载   Perf.T.6 高峰不同模板下载量 150用户并发下载   容量:   编号 项 容量   Perf.C.1 用户数 <=100万   Perf.C.2 活动用户数 10000   Perf.C.3 模板中心总用户数 <=25万   根据如上性能需求及数据我们该如何设计性能测试用例及场景呢?(可以说给出的性能需求很垃圾,没有丝毫价值,但没办法还是点做啊)   首先,我不去在乎它要求的性能是什么,我只需要去做在一定的测试环境下对系统进行压力测试,找到各个性能指标的临界点就好了,至于是否达到性能指标,在和性能需求对照编写测试报告即可。   所以,针对这几个需要进行性能测试的页面,我们做一下分析,如何设计场景才能尽可能准确地体现出系统的性能:   先说一下搜索页面   搜索页面根据对项目的了解,搜索后,将所有符合条件的结果遍历出来,显示在前台,每页的显示数量是一定的,超出的部分分页显示。根据上面的描述我们可以看出搜索结果是在将符合条件的所有结果集均发送到前台页面,对于页面显示对性能的消耗我们可以忽略不计,主要的压力来自数据的传输、sql的执行及应用服务器的处理过程,所以我可以从两个方面设计场景:   a、虚拟用户一定,不同数据库数量级的情况下,搜索的性能   如何确定虚拟用户的数量成为一个关键,我们可以让客户提供一个常规情况下每天访问用户数(如果没有实际数据可参考,可以根据产品方案中期望的用户数来代替),我们就用这个用户数来进行测试;再来分析一下不同的数据库数量级,如果系统运营1年的产品数据量是5万条,那么我们就根据这个值分别取1W条、3W 条、5W条、10W条、20W条数据量来进行测试(具体的分法可以根据实际情况而定),所以对于这个测试目标,我们可以设计5个场景进行:   虚拟用户数 数据库数量级 录制页面 并发用户数执行时间思考时间   100 10000 搜索页面 随机产生 30分钟 加入思考时间   100 30000 搜索页面 随机产生 30分钟 加入思考时间   100 50000 搜索页面 随机产生 30分钟 加入思考时间   100 100000 搜索页面 随机产生 30分钟 加入思考时间   100 200000 搜索页面 随机产生 30分钟 加入思考时间   b、一定数据库数量级,不同量虚拟用户的情况下,搜索的性能   我们定下来一个常规的数据库数据量,在数据量不变的情况下逐步增加虚拟用户数,测试一下不同虚拟用户压力下系统的性能   虚拟用户数 数据库数量级 录制页面 并发用户数执行时间思考时间   50 50000 搜索页面 随机产生 30分钟 加入思考时间   80 50000 搜索页面 随机产生 30分钟 加入思考时间   100 50000 搜索页面 随机产生 30分钟 加入思考时间   120 50000 搜索页面 随机产生 30分钟 加入思考时间   150 50000 搜索页面 随机产生 30分钟 加入思考时间   产品上传   影响上传性能的主要因素有上传文件的大小和上传的请求数,所以我们就从这两个方面设计用例。   a、虚拟用户数一定,上传不同大小的文件   虚拟用户数 上传文件大小 录制页面 并发用户数 执行时间 思考时间   50 100k 上传页面 随机产生 30分钟 取消思考时间   50 300k 上传页面 随机产生 30分钟 取消思考时间   50 500k 上传页面 随机产生 30分钟 取消思考时间   50 800k 上传页面 随机产生 30分钟 取消思考时间   50 1M 上传页面 随机产生 30分钟 取消思考时间   b、上传文件大小一定,不同量的虚拟用户   虚拟用户数 上传文件大小 录制页面 并发用户数执行时间思考时间   20 300k 上传页面 随机产生 30分钟 取消思考时间   50 300k 上传页面 随机产生 30分钟 取消思考时间   80 300k 上传页面 随机产生 30分钟 取消思考时间   100 300k 上传页面 随机产生 30分钟 取消思考时间   产品下载   影响下载性能的主要因素有下载文件的大小和下载的请求数,所以我们就从这两个方面设计用例   a、虚拟用户数一定,下载不同大小的文件   虚拟用户数 下载文件大小 录制页面 并发用户数执行时间思考时间   50 100k 下载页面 随机产生 30分钟 取消思考时间   50 300k 下载页面 随机产生 30分钟 取消思考时间   50 500k 下载页面 随机产生 30分钟 取消思考时间   50 800k 下载页面 随机产生 30分钟 取消思考时间   50 1M 下载页面 随机产生 30分钟 取消思考时间   b、下载文件大小一定,不同量的虚拟用户   虚拟用户数 下载文件大小 录制页面 并发用户数 执行时间 思考时间   20 300k 下载页面 随机产生 30分钟 取消思考时间   50 300k 下载页面 随机产生 30分钟 取消思考时间   80 300k 下载页面 随机产生 30分钟 取消思考时间   100 300k 下载页面 随机产生 30分钟 取消思考时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值