当前位置: 首页 > news >正文

大型网站技术架构(三)架构核心要素

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

 所谓架构,一种通俗的说法就是“最高层次的规划,难以改变的决定”,这些规划和决定奠定了事物未来发展的方向和最终的蓝图。

       而软件架构即“有关软件整体结构与组件的抽象描述,用于指导大型软件系统各方面的设计”。一般来说软件架构需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构要素。

1、性能

      性能是网站架构设计的一个重要方面,任何软件架构设计方案都必须考虑可能带来的性能问题。也正因为性能问题几乎无处不在,所以优化网站性能的手段也非常多:

     浏览器端:可以通过浏览器缓存、页面压缩传输、合理布局页面、减少Cookie传输等手段,甚至可以使用CDN加速功能。

     应用服务器端:可以使用服务器本地缓存和分布式缓存,也可以通过异步操作方式来加快响应,在高并发请求的情况下,可以将多台应用服务器组成一个集群共同对外服务,提高整体处理能力,改善性能。

     数据库服务器端:可用使用索引、缓存、SQL性能优化等手段,还可以使用NoSQL数据库来优化数据模型、存储结构等。

     衡量网站性能有一系列指标,重要的有响应时间、TPS、系统性能计数器等,通过这些指标以确定系统设计是否达到目标。

2、可用性

     可用性即能够不间断提供服务的时间。几乎所有网站都承诺7×24小时可用,但事实上任何网站都不可能达到完全的7×24,总会有一些故障时间,扣除这些故障时间,就是网站的可用时间。一些大型网站可以做到4个9以上的可用性,也就是99.99%。

    网站高可用的主要手段就是冗余,应用部署在多台服务器上同时提供服务,数据存储在多台服务器上相互备份,任何一台服务器都不会影响应用的整体可以,通常的实现手段即把多台服务器通过负载均衡设备组成一个集群。

    衡量一个系统架构设计是否满足高可用的目标,就是假设系统中任何一台或者多台服务器宕机时,以及出现各种不可预期的问题时,系统整体是否依然可用。

3、伸缩性

       大型网站需要面对大量用户的高并发访问和存储海量数据,网站通过集群的方式将多台服务器组成一个整体共同提供服务。所谓伸缩性是指通过不断向集群中加入服务器的手段来缓解不断整体上市用户并发访问压力和不断增长的数据存储需求。

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

4、扩展性

        不同于其他架构要素主要关注非功能性需求,网站的扩展性架构直接关注网站的功能需求。网站快速发展,功能不断扩展,如何设计网站的架构使其能够快速响应需求变化,是网站可扩展架构的主要目标。

        衡量网站架构扩展性好坏的主要标准就是在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不同产品之间是否很少耦合等。

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

        事件驱动通常利用消息队列实现,通过这种方式将消息生产和处理逻辑分隔开。

        服务器服务则是将业务和可复用服务分离开来,通过分布式服务框架调用。新增加产品可用通过调用可复用的服务来实现自身的业务逻辑,而对现有产品没有任何影响。

5、安全性

      互联网是开发的,任何人在任何地方都可以访问网站。网站的安全架构就是保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取。

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

转载于:https://my.oschina.net/zhanghaiyang/blog/606397

相关文章:

  • 什么是语法糖?
  • command injection命令注入
  • java 发送邮件
  • apt-fast
  • Excel导出通用操作方式
  • 我感恩
  • 如何清除Exchange2010邮件日志
  • 人类的殒落与扬升
  • 304441事务管理与并发控制
  • 【412】Linux 系统编译 C 程序
  • 那些年我们一起遗忘的位运算!
  • Pots bfs()记录每一种状态,直到求出最优值
  • .Net Remoting(分离服务程序实现) - Part.3
  • ssh架构简单解释和vo po解释
  • [NOIP2018 PJ T4]对称二叉树
  • [译]Python中的类属性与实例属性的区别
  • “大数据应用场景”之隔壁老王(连载四)
  • 【mysql】环境安装、服务启动、密码设置
  • 2017-09-12 前端日报
  • ES学习笔记(12)--Symbol
  • JavaScript 基础知识 - 入门篇(一)
  • Java多态
  • Java深入 - 深入理解Java集合
  • Java应用性能调优
  • JS数组方法汇总
  • Koa2 之文件上传下载
  • LeetCode算法系列_0891_子序列宽度之和
  • PAT A1120
  • Sass Day-01
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 关于extract.autodesk.io的一些说明
  • 仓管云——企业云erp功能有哪些?
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 回归生活:清理微信公众号
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #define、const、typedef的差别
  • #pragma pack(1)
  • ( 10 )MySQL中的外键
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (1) caustics\
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (HAL库版)freeRTOS移植STMF103
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)【Hibernate总结系列】使用举例
  • ./configure,make,make install的作用
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Framework与.NET Framework SDK有什么不同?