首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

大型网站架构之核心要素

上节我们讲了架构的演变和模式,那到底什么是架构呢?架构的核心又是什么呢?带着这写疑问,我们开启今天的旅途。

什么是架构?

比较通俗的概括就是:最高层次的规划,难以改变的决定;这些规划和决定,影响着事物未来发展的方向和蓝图。定位到软件架构层次,引用维基百科中的定义是这样的:有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。那么一般来说,我们的系统除了要关注当前系统需求之外,还需要关注以下几个方面:性能、可用性、伸缩性、扩展性和安全性,架构过程中通过平衡这5个方面之间的关系来实现需求和架构目标,也可以通过这个5个方面来衡量一个软件架构设计的合理化。

性能

性能是网站的一个重要指标,谁也无法忍受一个响应特别慢的网站,性能问题必然是一个网站升级优化的触发器,任何的软件在设计的时候就必须要考虑到其性能的影响,因为性能显得至关重要,所以在性能优化方面也做了很多工作,优化的手段也有很多,从用户浏览器的一个请求开始,到数据库。这中间每个环节都能进行性能的优化

网站性能架构的主要手段:

浏览器端:通过浏览器缓存、页面压缩、合理化布局、减少cookie传输等;

CDN和反向代理;

应用服务器端:通过本地缓存和远程缓存缓存热点数据;

异步操作:通过消息队列实现请求的异步操作,减少响应时间;

集群:高并发情况下,多台服务器组成一个集群环境,提供并发处理能力;

代码层面:通过多线程、改善内存管理,JVM调优等手段;

数据库端:主要包括索引、缓存、SQL优化等;

衡量网站性能的指标包括:响应时间、TPS、系统性能计数器等。

因为我们预先无法预知网站将来的面临的访问量,所以还要考虑系统在高并发访问,超出负载能力的情况下可能会出现的性能问题,对系统进行相应的压力测试;

可用性

因为网站一般使用的服务器硬件都是商用服务器,这些服务器设计本身并不保证高可用,很有可能就会出现服务器硬件故障,也就是所谓的服务器宕机。大型网站通常会有很多台服务器,发生服务器宕机的概率也是蛮大的,所以高可用设计的前提是服务器会出现宕机,而目标是在服务器出现宕机的时候,服务和应用依然正常运行。

网站高可用的主要手段:冗余主要从两个方面进行设计:

应用:应用部署在多台服务器上,通过负载均衡器组成一个集群同时对外提供服务,当任何一台服务器宕机,只需要将请求切换到其他服务器就可以实现整个应用的高可用(需要注意的是,应用服务器上不能保存会话信息,否则服务器宕机,会话丢失,即使请求转发到别的服务器但是拿不到会话信息,还是无法完成业务处理);

存储:数据存储在多台服务器上,相互之间进行实时备份,当任何一台服务器宕机时只需要将数据转移到可用的服务器上,并进行数据恢复,以保证继续有服务器宕机时数据依然可用;

衡量一个系统架构设计是否满足高可用的目标时,就是假设系统中任何一台服务器或者多台服务器宕机时,整个系统是否依然可以正常对外提供服务。

伸缩性

大型网站需要面对大量用户的高并发访问和存储海量数据,不可能只需要一台服务器就能处理全部请求和数据存储,网站必须通过集群的方式将多台服务器组成一个整体共同对外提供服务。而伸缩性,指的就是通过不断向集群中加入服务器来缓解用户不断上升的并发访问和不断增长的数据存储的压力。

衡量伸缩性的主要标准

是否可以用多台服务器构建集群;

是否容易向集群中添加新的服务器;

新的服务器是否可以提供和原来的服务器一样的服务;

集群中可容纳的总服务器数是否有限制;

伸缩性架构的主要手段

应用服务器集群:只要服务器上不保存数据,所有的服务器都是对等的,通过合适的负载均衡器就可以向集群中不断加入服务器;

缓存服务器集群:对于缓存服务器,新加入的服务器可能会使缓存路由失效,进而导致集群中大部分数据都无法访问,虽然缓存的数据可以通过数据库重新加载,但是如果应用已经严重依赖缓存,可能会导致整个网站不可用了,所以我们需要改进缓存的路由策略来保证缓存数据的可访问性;

关系数据库集群:虽然关系型数据库支持主从复制、主从热备等机制,但是很难做到大规模;

NOSQL数据库:大部分nosql数据库产品,天生就是为海量数据而生的,因此其对伸缩性的支持都比较友好;也很方便实现集群模式下的线性伸缩;

扩展性

网站快速发展,功能不断扩展,如何设计网站的架构使其能够快速响应需求变化,是网站可扩展性架构的主要目的。

衡量扩展性的主要标准

在网站有新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者改动很少一部分既有业务功能就能上线新产品;

不同产品之间是否低耦合,一个产品改动对其他产品无影响;

扩展性架构的主要手段

事件驱动:事件驱动主要是利用消息队列来实现,将用户请求和业务事件构造成消息发布到消息队列,消息处理方作为消费者从消息队列中获取消息进行处理。通过这种方式就将消息产生和消息处理分离开了,可以透明的增加消息生产者的任务,也可以透明的增加消息消费者的任务;

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

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

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

以上就是网站架构设计的五大核心要素,后续我们将围绕这5大要素一一展开详细的讲解;

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180206G060ES00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券