首页 > 其他分享 >大型网站技术架构 --核心原理与案例分析

大型网站技术架构 --核心原理与案例分析

时间:2024-09-23 10:51:40浏览次数:3  
标签:XSS 缓存 架构 -- 扩展性 案例 模块 加密

一、大型网站的特点

  • 用户多,分布广
  • 大流量,高并发
  • 海量数据
  • 服务高可用
  • 安全环境恶劣,易受攻击
  • 功能多,变更快,频繁发布

二、大型网站架构目标

  • 高性能:快速访问。
  • 高可用:服务一直可以正常访问。
  • 可伸缩:通过增加/减少硬件,提高/降低处理能力。
  • 扩展性:方便增加、减少功能或者模块。
  • 安全性:提供安全访问和安全存储等策略。

三、大型网站架构模式

  • 分层

    合理规划层次边界和接口,禁止跨层调用。分层可以清晰的展现软件逻辑结构,便于开发维护,更是高并发向分布式发展的重要基础。一般分为应用层,服务层,数据层,管理层,分析层。

  • 分割

    分层是将软件在横向方面进行切分,分割是在纵向方向进行切割。一般是在功能上进行,可按照业务/模块/功能特点进行划分。

  • 分布式

    分层和分割的主要目的是为了切分后的模块便于分布式部署。将应用分开部署,通过远程调用协同工作。

  • 集群

    多台服务器部署相同的应用/模块/功能构成一个集群,通过负载均衡统一对外提供服务。

  • 负载均衡

  • 缓存

    CDN,反向代理,本地缓存,分布式缓存。数据访问热点不均衡,在某个时间段内有效,不会很快过期。将数据放在离用户最近的位置,加快访问速度。

  • 异步

    降低耦合。消息队列可提高系统可用性,加快响应速度,消除并发访问高峰。

  • 冗余

    冷备份,热备份,灾备数据中心。增加副本,提高可用性,安全性,性能。

  • 安全

    XSS、注入攻击、CSRF; 单向加密、对称加密、非对称加密。

四、性能

  • 性能指标

响应时间、吞吐量、TPS。

  • 浏览器优化

减少Http请求数,使用浏览器缓存,启用压缩,减少Cookie传输;CDN加速,反向代理;

  • 应用层优化

缓存,异步,集群

  • 代码优化

多线程,资源复用(对象池,即连接池,线程池等),良好的数据结构,JVM调优,单例,Cache等;

  • 存储优化

缓存,固态硬盘,光纤传输,优化读写,磁盘冗余,分布式存储(HDFS),NOSQL等;

五、可用

在任何时候都可以正常提供服务。
网站高可用的主要手段是冗余备份失效转移。应用部署在多台服务器上同时对外提供访问,数据存储在多台服务器上互相备份。

  • 应用层

设计为无状态的。一般使用负载均衡技术(需解决Session同步问题)实现高可用。

  • 服务层

负载均衡,分级管理,快速失败(设置超时),异步调用,服务降级,幂等设计等。

  • 数据层

冗余备份(冷备,热备[同步,异步],温备),失效转移(确认,转移,恢复)。数据高可用的理论基础是CAP理论(持久性,可用性,数据一致性[强一致,用户一致,最终一致])

六、伸缩

伸缩性是指在不改变原有架构的基础上,通过添加/减少服务器的方式,提高/降低系统的处理能力。
是否可以用多台服务器构建集群,是否容易向集群中添加新机器。加入新的服务器后是否可以提供和原来无差别服务的能力。

  • 应用层:

对应用进行垂直或水平切分。然后针对单一功能进行负载均衡(DNS,HTTP[反向代理],IP,链路层)。

  • 服务层:

与应用层类似;

  • 数据层:

读写分离,分库,分表,分区,NOSQL等。

七、扩展

可以方便的进行功能模块的新增/移除,提供代码/模块级别的可扩展性。
快速响应需求变化,是可扩展的主要目的。
衡量网站扩展性好坏的标准就是在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者改动很少现有的业务功能就可以上线新产品。
可扩展架构的主要手段是事件驱动架构和分布式服务。

  • 事件驱动架构,通常利用消息队列实现。
  • 分布式服务,则是将业务和可复用服务分离,通过分布式服务框架调用。
    模块化,组件化:高内聚,低耦合,提高复用性,扩展性。
    稳定接口:定义稳定的接口,在接口不变的情况下,内部结构可以“随意”变化。
    设计模式:应用面向对象思想,原则,使用设计模式,进行代码层面的设计。
    消息队列:通过消息队列进行交互,解耦模块之间的依赖。
    分布式服务:公用模块服务化,供其他系统使用,提高可重用性,扩展性。
    扩展性是系统架构设计层面的开闭原则(对扩展开放,对修改关闭)。

八、安全

对已知问题有有效的解决方案,对未知/潜在问题建立发现和防御机制。

攻击类型
  • XSS攻击【跨站脚本攻击(Cross Site Script)】
    跨站点脚本攻击,指通过篡改网页,注入恶意的HTML脚本,在用户浏览网页时,控制用户浏览器进行操作。
    防范手段:消毒(XSS攻击者一般都是通过在请求中嵌入恶意脚本达到攻击的目的,这些脚本是一般用户输入中不使用的,如果进行过滤和消毒处理,即对某些html危险字符转译,如“>”转译为“& gt;”);HttpOnly(防止XSS攻击者窃取Cookie)。
  • 注入攻击:SQL注入和OS注入
    SQL防范:预编译语句PreparedStatement; ORM;避免密码明文存放;处理好相应的异常。
  • CSRF(Cross Site Request Forgery,跨站点请求伪造)。XSS利用的是站内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。
    防范:httpOnly;增加token;通过Referer识别
  • 文件上传漏洞
  • DDos攻击
加密技术
  • 单项散列加密:MD5, SHA
  • 对称加密:DES,RC,AES
  • 非对称加密:RSA

非对称加密常用于建立信息安全传输,数字签名等场景。
HTTPS传输中浏览器使用的数字证书实质上是经过权威机构认证的非对称加密的公钥。

参考

《大型网站技术架构 核心原理与案例分析 --李智慧》

标签:XSS,缓存,架构,--,扩展性,案例,模块,加密
From: https://blog.csdn.net/shuz0612/article/details/142442321

相关文章

  • 传统软件应用技术的价值转换率越来越低
    集团有自己的信息化公司、职能类型的子公司有自己的开发能力,请问广大软件信息化类公司的生存空间在哪?是不是在逐步缩小?为什么感觉到卷?可能的一个原因是大家都在进步,用户和竞争对手也在进步,而自己却没有进步,也谈不上思维模式的改变。我们不谈理论、......
  • JAVA类型转换怎么变
    类型转换类型转换是将一个值从一种类型更改为另一种类型的过程。例如,可以将String类型的数据“457”转换为数值型,也可以将任意类型的数据转换为String类型。如果从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功的;而把高精度数据类型向低精度数据类型转换时,......
  • Python 类型提示全解析:从入门到精通的必备技巧(如何让Python代码更清晰、错误更少)
    文章目录......
  • 记一次 .NET某上位机视觉程序 卡死分析
    一:背景1.讲故事前段时间有位朋友找到我,说他的窗体程序在客户这边出现了卡死,让我帮忙看下怎么回事?dump也生成了,既然有dump了那就上windbg分析吧。二:WinDbg分析1.为什么会卡死窗体程序的卡死,入口门槛很低,后续往下分析就不一定了,不管怎么说先用!clrstack看下主线程,输出如下:0:00......
  • 四海一叶秋 / 流氓软件黑名单,可以试试
    1.流氓软件专清:SoftCnKiller2.82.exe2.项目地址:https://gitcode.net/hfhbutn/SoftCnKiller/-/tree/master3.我已经下载到document盘了,可以试试。流氓软件公司:AnhuiShabakeNetworkTechnologyBeijingYundongshidaiNetworkTechnologyShanghaiXuSonginvestmentpartnersh......
  • python语言MIDI钢琴简谱播放器软件代码QZQ
    importtkinterastkimportpygame.midiimporttime初始化pygame.midipygame.midi.init()获取MIDI输出设备midi_out=pygame.midi.Output(0)乐器名称映射instrument_names={0:“大钢琴(声学钢琴)”,1:“明亮的钢琴”,2:“电钢琴”,3:“酒吧钢琴”,4......
  • fastapi-events fastapi 异步事件分发处理扩展
    fastapi-eventsfastapi异步事件分发处理扩展,提供了本地,以及远程消息处理能力,同时包含了一些内置的handler,对于自定义handler也是比较灵活的参考使用app.pyfromfastapiimportFastAPIfromfastapi.requestsimportRequestfromfastapi.responsesimportJSONResponsefrom......
  • WordPress网站遇到“数据库连接错误”报错解决方法
    当遇到WordPress网站出现“数据库连接错误”时,可以通过以下步骤来逐步排查和解决问题:1.确认数据库连接信息用户名和密码:确保数据库用户名和密码正确无误。服务器地址:确认数据库服务器地址(通常是localhost,但也可能是其他地址)正确无误。2.检查wp-config.php文件打开wp-......
  • NX绘图第三章之抽壳工具的使用
    利用抽壳工具绘制下图器件1.新建文件首先在文件中点击新建,选择如图模型,文件夹中可包含中文,老版的NX可能存在不能包含中文的情况。2.进入草图模式首先点击图一左上角的拉伸工具,弹出下图对话框。本次图像绘制要先确定基于某个界面,随后鼠标点击xy平面即可,然后点击弹窗的确定......
  • faststream 自己的asgi 实现
    faststream目前自己包含了一个asgi的实现,可以快速实现api能力,同时也可以与其他web框架集成,以下是一个简单试用参考代码demo.pyfromfaststream.redisimportRedisBrokerfromfaststream.asgiimportAsgiFastStream,get,AsgiResponsefromtypingimportAnyfrompyda......