早期的网站为了节省成本一般会设计成集中式系统,应用程序、数据库等都部署在一台服务器上。 但随着业务的快速度发展,逐渐出现瓶颈,按一定原则**(应用拆分、服务拆分、数据拆分、应用解耦)**,向分布式系统转型,涉及到以下环节改造。
主要环节
-
业务拆分:将整个网站业务拆分成不同的应用,每个应用独立部署维护,应用之间通过RPC或消息队列通信。
-
集群化(应用服务器;基于RPC的微服务应用等)
-
LVS负载均衡,负责将请求转发给不同业务集群
-
反向代理服务器,常用的如Nginx
-
应用服务器,servlet容器,如tomcat
-
应用和数据服务分离,分别部署在不同的服务器
-
后端应用合理分层,通常分为表现层或网关层、业务逻辑层、数据持久层
-
缓存。分为两种:本地缓存;分布式缓存
-
CDN化。静态内容部署到CDN,就近获取,加速网站响应。
-
数据库读写分离。数据库采用主从热备,应用服务器在写数据时访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库。
-
分库分表,引入分布式数据框架
-
引入NoSQL,支持海量数据存储
-
借助elastics search等开源搜索引擎
-
异步化,系统解耦。
-
缩短业务流程,加快网站访问速度
-
消除并发访问高峰
架构五要素:
-
高性能
-
可用性(Availability)
-
伸缩性(Scalability)
-
扩展性(Extensibility)
-
安全性
1、高性能
性能的测试指标主要有:
-
响应时间:指应用执行一个操作需要的时间
-
并发数:指系统能够同时处理请求的数目
-
QPS:指单位时间内系统处理的请求量
-
系统性能计数器:描述服务器或者操作系统性能的一些数据指标
性能优化,根据网站分层架构,可以分为三大类:
-
Web 前端性能优化
-
减少 http 请求
-
使用浏览器缓存
-
启用压缩
-
CSS 放在页面最上面,JavaScript 放在页面最下面
-
减少 Cookie 传输
-
应用服务器性能优化:主要手段有 缓存、集群、异步
-
多线程(设计为无状态,使用局部对象,并发访问资源使用锁)
-
资源复用(单例,对象池)
-
数据结构
-
异步操作(消息队列,削峰作用)
-
多台应用服务器组成一个集群共同对外服务,提高整体处理能力。
-
使用 CDN,将网站静态内容分发至离用户最近的网络服务商机房,使用户通过最短访问路径获取数据。可以在网站机房部署反向代理服务器,缓存热点文件,加快请求响应速度,减轻应用服务器负载压力
-
应用服务器端,可以使用服务器本地缓存和分布式缓存(网站性能优化第一定律:优化考虑使用缓存优化性能)
-
代码层面,也可以通过使用多线程、改善内存管理等手段优化性能。
-
数据库服务器端,索引、缓存、SQL 优化等性能优化手段
-
NoSQL 数据库通过优化数据模型、存储结构、伸缩特性等
-
存储服务器性能优化
-
机械硬盘 vs. 固态硬盘
-
B+ 树 vs. LSM 树
-
RAID vs. HDFS
2、高可用
高可用的网站架构:目的是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问,主要手段数据和服务的冗余备份及失效转移
-
高可用的应用:显著特点是应用的无状态性
-
通过负载均衡进行无状态服务的失效转移
-
应用服务器集群的 Session 管理
-
高可用的服务:无状态的服务,可使用类似负载均衡的失效转移策略,此外还有如下策略
-
超时设置
-
异步调用
-
服务降级
-
限流
-
高可用的数据:主要手段是数据备份和失效转移机制
-
失效确认
-
访问转移
-
数据恢复
-
冷备:缺点是不能保证数据最终一致和数据可用性
-
热备:分为异步热备和同步热备
-
数据一致性(Consisitency)
-
数据可用性(Availibility)
-
分区耐受性(Partition Tolerance)
-
CAP 原理
-
数据备份
-
软件质量保证
-
自动化测试
-
预发布验证
-
灰度发布
-
网站实时监控
-
警报系统
-
自动优雅降级
-
用户行为日志采集(服务器端和客户端)
-
服务器性能监控
-
监控数据采集
-
监控管理
3、伸缩性
大型网站需要面对大量用户的高并发访问和存储海量数据,不可能只用一台服务器就处理全部用户请求,存储全部数据。网站通过集群的方式将多台服务器组成一个整体共同提供服务。所谓伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
衡量架构伸缩性的主要标准就是是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。
对于应用服务器集群,只要服务器上不保存数据,所有服务器都是对等的,通过使用合适的负载均衡设备就可以向集群中不断加入服务器。
对于缓存服务器集群,加入新的服务器可能会导致缓存路由失效,进而导致集群中大部分缓存数据都无法访问。虽然缓存的数据可以通过数据库重新预热,但是如果应用已经严重依赖缓存,可能会导致整个网站崩溃。需要改进缓存路由算法保证缓存数据的可访问性。
关系数据库虽然支持数据复制,主从热备等机制,但是很难做到大规模集群的可伸缩性,因此关系数据库的集群伸缩性方案必须在数据库之外实现,通过路由分区等手段将部署有多个数据库的服务器组成一个集群。
至于大部分 NoSQL 数据库产品,由于其先天就是为海量数据而生,因此其对伸缩性的支持通常都非常好,可以做到在较少运维参与的情况下实现集群规模的线性伸缩。
概括起来伸缩性的分为如下几个方面:
-
应用服务器集群的伸缩性设计
-
轮询(Round Robin, RR)
-
加权轮询(Weighted Round Robin, WRR)
-
随机(Random)
-
最少链接(Least Connections)
-
源地址散列(Source Hashing)
-
DNS 域名解析负载均衡
-
反向代理负载均衡(在 HTTP 协议层面,应用层负载均衡)
-
IP 负载均衡(在内核进程完成数据分发)
-
数据链路层负载均衡(数据链路层修改 mac 地址,三角传输模式,LVS)
-
分布式缓存集群的伸缩性设计
-
Memcached 客户端(包括 API,路由算法,服务器列表,通信模块)
-
Memcached 服务器集群
-
分布式缓存的一致性 Hash 算法(一致性 Hash 环,虚拟层)
-
数据存储服务集群的伸缩性设计
-
关系数据库集群的伸缩性设计
-
NoSQL 数据库的伸缩性设计
4、可扩展
系统架构设计层面的“开闭原则”,构建可扩展的网站架构
-
利用分布式消息队列降低耦合性
-
分布式消息队列
-
事件驱动架构(Event Driven Architecture)
-
利用分布式服务打造可复用的业务平台
-
分布式服务框架设计(Thrift,Dubbo)
-
可扩展的数据结构(如 HBase的 ColumnFamily 设计)
-
利用开放平台建设网站生态圈
5、网站的安全架构
XSS 攻击和 SQL 注入攻击是构成网站应用攻击最主要的两种手段,此外还包括 CSRF,Session 劫持等手段。
-
攻击与防御
对js转义,使其失去执行功能,只作为纯字符串展示
防范:httpOnly;增加token校验;通过Referer识别。
-
网站安全漏洞扫描
-
CSRF 攻击:跨站点请求伪造(Cross Site Request Forgery)
-
Error Code
-
表单 Token
-
验证码
-
jsonp请求的,Referer 校验
-
SQL 注入
-
html 危险字符转义
-
XSS 攻击:跨站点脚本攻击(Cross Site Script)
http://mp.weixin.qq.com/s/LRU3wUtRjRWvCoIoyoU5uA
相关推荐
功能说明: 环境说明: 开发软件:VS 2017 (版本2017以上即可,不能低于2017) 数据库:SqlServer2008r2(数据库版本无限制,都可以导入) 开发模式:mvc。。。
labview程序代码参考学习使用,希望对你有所帮助。
大米外贸商城系统 简称damishop 完全开源版,只需做一种语言一键开启全球133中语言自动翻译功能,价格实现自动汇率转换,集成微信支付宝 paypal以及国外主流支付方式,自带文章博客系统。 软件架构 基于MVC+语言包模式,增加控制台,API导入产品方便对接其他系统(带json示例数据)。 使用要求 PHP7.4+ MYSQL5.6+ REDIS(可选) 安装方法 composer install 打开安装向导安装 http://您的域名/install 特色 1、缓存层增加时间与批量like删除 2、API产品导入方便对接其他系统 3、增加控制台命令行,命令行生成语言翻译包 4、后台一键开启自动翻译模式,支持全球133中语言,由于google代理翻译需要收费,这个功能需要付费。 5、可选购物车与ajax修改购物车产品 6、一键结算checkout 7、增加网站前台自定义路由 方便seo 更新日志 v3.9.7 集成鱼码支付接口,方便个人站长即使收款到账使用 v3.9.3 更新内容 1:增加ueditor与旧编辑器切换 2:增加可视化布局插
labview程序代码参考学习使用,希望对你有所帮助。
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot人工智能客服系统类及旅游规划平台源码+论文+视频