⼤型⽹站核⼼架构5⼤要素
1.⽹站性能:
a.三个优化策略(浏览器、服务器、数据库)
b.性能指标(响应时间、TPS等)
2.可⽤性
a.可⽤性指标(4个9)
b.⾼可⽤的主要⼿段:冗余(应⽤部署在多台服务器上提供访问,数据存储在多台服务器上相互备份)
c.怎样衡量⼀台服务器是否⾼可⽤?(⼀台或多台服务器宕机,整个系统任然可⽤)
3.伸缩性
a.伸缩性的定义(向集中不断加⼊服务器来满⾜需求)
b.伸缩性的标准(添加服务器不会影响现有功能,新加⼊的服务器⽆差别?数量是否有限制)
4.扩展性
a.直接关注⽹站的功能需求
b.扩展性的标准(透明⽆影响、少变动)
5.安全性
关于什么是架构,⼀种⽐较通俗的说法是”最⾼层次的规划,难以改变的决定“,这些规划和决定奠定了事物未来发展的⽅向和最终的蓝图。具体到软件架构,是这样定义的:”有关软件整体结构与组件的抽像描述,⽤于指导⼤型软件系统各⽅⾯的设计”。
系统的各个重要组成部分及其关系构成了系统的架构,这些组成部分可以是具体的功能模块,也可以是⾮功能的设计与决策,
它们相互关联成⼀个整体,共同构成了软件系统的构架。
⼀般来说,除了当前的系统功能需求外,软件架构还需要关注性能、可⽤性、伸缩性、扩展性和安全性这5个架构要素。
架构设计过程中需要平衡这5个要素之间的关系以实现需求和架构⽬标,也可以通过考察这些架构要素来衡量⼀个软件架构设计的优劣,判断其是否满⾜期望。
1.性能
性能是⽹站的⼀个重要指标,(后⾯会阐述如何评估⼀个⽹站的性能)除⾮是没得选择,否则⽤户是⽆妨忍受⼀个响应缓慢的⽹站。
⼀个打开缓慢的⽹站会导致严重的⽤户流失,很多时候⽹站性能问题是⽹站架构升级的触发器。
可以说性能是⽹站架构设计的⼀个重要⽅⾯,任何软件架构设计⽅案都必须考虑可能带来的性能问题。
也⼏乎性能问题⼏乎⽆处不在,所以优化⽹站性能的⼿段也⾮常多,从⽽浏览器到数据库,影响⽤户请求的所有环节都可以进⾏性能优化。
在浏览器端,可以通过浏览器缓存、使⽤页⾯压缩、合理布局页⾯、减少Cookie传输等⼿段改善性能。
还可以使⽤CDN,将⽹站静态内容分发⾄离⽤户最近⽹络服务商机房,使⽤户通过最短访问路径获取数据。
可以在⽹站机房部署反向代理服务器,缓存热点⽂件,加快请求响应速度,减轻应⽤服务器负载压⼒。
在应⽤服务器端,可以使⽤服务器本地缓存和分布式缓存,通过缓存在服务器中的热点数据处理⽤户请求,加快请求处理过程,减轻数据库负载压⼒。
也可以通过异步操作将⽤户请求发送⾄消息队列等待后续任务处理,⽽当前请求直接返回响应给⽤户。
在⽹站有很多⽤户⾼并发请求的情况下,可以将多台应⽤服务器组成⼀个集共同对外服务,提⾼整体处理能⼒,改善性能。
在代码层,也可以通过使⽤多线程、改善内存管理等⼿段优化性能。
在数据库服务器端,索引、缓存、SQL优化等性能优化⼿段都已经⽐较成熟。
⽽⽅兴未艾的NoSQL数据库通过优化数据模型、存储结构、伸缩特性等⼿段在性能⽅⾯的优势也⽇趋明显。
衡量⽹站性能有⼀系列指标,重要的有响应时间、TPS、系统性能计数器等,通过测试这些指标以确定系统设计是否达到⽬标。
这些指标也是⽹站监控的重要参数,通过监控这些指标可以分析系统瓶颈,预测⽹站容量,并对异常指标进⾏报警,保障系统可⽤性。
对于⽹站⽽⾔,性能符合预期仅仅是必要条件,因为⽆法预知⽹站可能会⾯临的访问压⼒,
所以必须要考虑系统在⾼并发访问情况下,超出负载设计能⼒的情况下可能会出现的性能问题。
⽹站需要长时间持续运⾏,还必须保证系统在持续运⾏且访问不均匀的情况下保持稳定的性能特性。
2.可⽤性
对于⼤型⽹站⽽⾔,特别是知名⽹站,⽹站宕机、服务不可⽤是⼀个重⼤的事故,轻则影响⽹站声誉,重则可能摊上官司。
对于电⼦商务类⽹站,⽹站不可⽤还意味着损失⾦钱和⽤户。
因此⼏乎所有的⽹站都承诺7X24可⽤,总会有⼀些故障时间,扣除这些故障时间,就是⽹站的总可⽤时间,
这个时间可换算成⽹站的可⽤性指标,以此衡量⽹站的可⽤性,⼀些⼤型⽹站可以做到4个9以上的可⽤性,也就是可⽤性超过99.99%。
因为⽹站使⽤的服务器硬件通常是普通的商⽤服务器,这些服务器的设计⽬标并不保证⾼可⽤,
也就是说,很有可能会出现服务器硬件故障,也就是俗称的服务器宕机。
⼤型⽹站通常都会有上万台服务器,每天都必定会有⼀些服务器宕机,
因此⽹站⾼可⽤架构设计的前提是必然会出现服务器宕机,⽽⾼可⽤设计的⽬标就是当服务器宕机的时候,服务或应⽤依然可⽤。
⽹站⾼可⽤的主要⼿段是冗余,应⽤部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份,
任何⼀台服务器宕机都不会影响应⽤的整体可⽤,也不会导致数据丢失。
对于应⽤服务器⽽⾔,多台应⽤服务器通过负载均衡设备组成⼀个集共同对外提供服务,
任何⼀台服务器宕机,只需把请求切换到其他服务器就可实现应⽤的⾼可⽤,
但是⼀个前提条件是应⽤服务器上不能保存请求的会话信息。
否则服务器宕机,会话丢失,即使将⽤户请求转发到其他服务器上也⽆法完成业务处理。
对于存储服务器,由于其上存储着数据,需要对数据进⾏实时备份,
当服务器宕机时需要将数据转移到可⽤的服务器上,并进⾏数据恢复以保证继续有服务器宕机的时候数据依然可⽤。
除了运⾏环境,⽹站的⾼可⽤还需要软件开发过程的质量保证。
通过预发布验证、⾃动化测试、⾃动化发布、灰度发布等⼿段,减少将故障引⼊线上环境的可能,避免故障范围扩⼤。
衡量⼀个系统架构设计是否满⾜⾼可⽤的⽬标,就是假设系统中任何⼀台或者多台服务器宕机时,以及各种不可预期的问题时,系统整体是否依然可⽤。
3.伸缩性
⼤型⽹站需要⾯对⼤量⽤户的⾼并发访问和存储海量数据,不可能只⽤⼀台服务器就处理全部⽤户请求,存储全部数据。
⽹站通过集的⽅式将多台服务器组成⼀个整体共同提供服务。
所谓伸缩性是通过不断向集中加⼊服务器的⼿段来缓解不断上升的⽤户并发访问压⼒和不断增长的数据存储需求。(定义)
衡量架构伸缩性的主要标准就是是否可以⽤多台服务器构建集,是否容易像服务器中添加新的服务器。(标准)
加⼊新的服务器后是否真的可以提供和原来的服务器⽆差别的服务。集中可容纳的总的服务器质量是否有限制。
对于应⽤服务器集,只要服务器上不保存数据,所有服务器都是对等的,通过使⽤合适的负载均衡设备就可以向集中不断加⼊服务器。
对于缓存服务器集,只加⼊新的服务器可能会导致缓存路由失效,进⽽导致集中⼤部分缓存数据都⽆法访问。
虽然缓存的数据可以通过数据库重新加载,但是如果应⽤已经严重依赖缓存,可能会导致整个⽹站崩溃。
需要改进缓存路由算法保证缓存数据的可访问性。
关系型数据库虽然⽀持数据复制,主从热备等机制,但是很难做到⼤规模集的可伸缩性,
因此关系型数据库的集伸缩性⽅案必须在数据库之外实现,通过路由分区等⼿段将部署多个数据库的服务器组成⼀个集。
⾄于⼤部分NoSQL数据库产品,由于其先天就是为海量数据⽽⽣,
因此其对伸缩性的⽀持通常都⾮常好,可以做到较少运维参与的情况下实现集规模的线性伸缩。
4.扩展性
不同于其他架构要素主要关注⾮功能性要求⽹站的扩展性架构直接关注⽹站的功能需求。
⽹站快速发展,功能不断扩展,如何设计⽹站的架构,使其能够快速响应需求变化,是⽹站可扩展架构的主要⽬的。
衡量⽹站架构可扩展性好坏的主要标准就是在⽹站增加新的业务产品时,是否可以实现对现有产品透明⽆影响,
不需要任何改动或者很少改动既有业务功能就可以上线新产品。
不同产品之间是否很少耦合,⼀个产品改动对其他产品⽆影响,其他产品和功能不需要受牵连进⾏改动。
⽹站可扩展架构的主要⼿段是事件驱动架构和分布式服务。
网站架构事件驱动架构在⽹站通常利⽤消息队列实现,将⽤户请求和其他业务事件构造成消息发布到消息队列,
消息的处理者作为消息者从消息队列中获取消息进⾏处理,通过这种⽅式将消息产⽣和消息处理分离开来,
可以透明的增加新的消息⽣产者任务或者新的消息消费者任务。
分布式服务则是将业务和可复⽤服务分离开来,通过分布式服务框架调⽤。
新增产品可以通过调⽤可服⽤的服务实现⾃⾝的业务逻辑,⽽对现有产品没有任何影响。
可服⽤服务升级变更的时候,也可以通过提供多版本服务对应⽤实现透明升级,不需要强制应⽤同步变更。
⼤型⽹站为了保持市场地位,还会吸引第三⽅开发者,调⽤⽹站服务,使⽤⽹站数据开发周边产品,扩展⽹站业务。
第三⽅开发者使⽤⽹站服务的主要途径是⼤型⽹站提供的开放平台接⼝。
5.安全性
互联⽹是开放的,任何⼈在任何地⽅都可以访问⽹站,⽹站的安全架构就是保护⽹站不受恶意访问和攻击,保护⽹站的重要数据不被窃取。衡量⽹站安全架构的标准就是针对现有和潜在的各种攻击与窃取⼿段,是否有可靠的应对策略。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论