网站衡量的标准:高可用,高性能,易扩展,可伸缩,安全
模式:对于问题和场景的解决方案可重复使用。
应用服务器不能保存数据
性能测试时性能优化的前提和基础,也是性能优化结果的检查和度量标准。
调整浏览器缓存策略,使用CDN服务,反向代理
关注响应延迟,系统吞吐量,并发处理能力,系统稳定性
缓存加速获取数据,集群提高吞吐能力,异步消息加快请求响应以及实现削峰,代码优化提高程序性能。
基础设施性能和资源利用率,网络运营商的带宽能力,服务器硬件配置,数据中心网络架构,服务器和网络带宽达资源利用率。
使用高性价比的定制服务器,利用虚拟化优化资源,优化骨干网络
发出请求到接受到数据响应的时间。
系统同时处理请求的数目(同时提交请求的用户数量)。也反映了系统的负载特性。
测试程序通过多线程模拟并发用户的办法测试系统的并发能力,在请求之间加入一个随机等待时间。
单位时间内系统处理的请求数量,体现系统的整体能力。
请求数/s 页面数/s 访问人数/天 处理业务数/小时
TPS-每秒事物数。
HPS-HTTP请求数。
吞吐量:每天通过收费站的数量。
并发数:高速公路正在行驶的车辆。
响应时间:车速。
System Load(系统负载),对象与线程数,内存使用,CPU使用,磁盘,网络I/O
top
top - 10:42:16 up 7 days, 15:55, 2 users, load average: 0.03, 0.05, 0.05
Tasks: 146 total, 1 running, 145 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.7 sy, 0.0 ni, 98.7 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
对系统不断施加压力,验证系统在资源可接受访问内是否能达到性能预期。
对系统不断的增加并发请求以增加系统压力,知道系统的某项或多项性能到达指标的安全临界值。
超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能在处理任何请求,以此获得系统最大压力承受能力。
被系统在特定硬件,软件,网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以此检查系统是否稳定。
性能分析
性能优化
合并CSS,合并JavaScript,合并图片
使用浏览器缓存
启用页面压缩
CSS放在页面最上面, JavaScript放在页面最下面。
减少Cookie传输
CDN(Content Distribute Network内容分发网络)本质是一个缓存。
而且将数据缓存在离用户最近的地方。
CDN能够缓存的一般是静态资源,图片,文件,CSS,Script脚本,静态网页等。
缓存静态资源,负载均衡
缓存提高访问速度,提高数据访问的时间。缓存的数据是通过计算得到的,那么减少计算量。
缓存主要用来存放那些读写比很高,很少变化的数据,
频繁修改的数据。
没用热点的访问。
数据不一致与脏读。
缓存可用性。
通过分布式缓存服务器集群,将缓存数据分布到集群多台服务器上。
缓存预热。
在缓存启动的时候加载热点数据。
缓存穿透。
Memcached
简单的通讯协议,TCP,序列化(自定义)。
丰富的客户端程序。
高性能的网络通讯。
高效的内存管理。
互不通讯的服务集群架构。
使用消息队列将调用异步化。
将对象设计为无状态对象(对象本身不存储状态信息)。
使用局部对象:在方法内部创建对象。
并发访问资源是使用锁:通过锁的方式使多线程并发操作变成顺序操作。
尽量介绍开销很大的系统资源的创建和销毁,比如数据库连接,网络通讯连接,线程,复杂对象等
采用单例,和对象池。
单例:Web开发中使用贫血模式,丛Service到Dao都是无状态对象,无需要重复创建。
数据结构
程序 = 数据结构 + 算法
垃圾回收
JVM stack + heap
stack : 存储线程上下文信息,方法参数,局部变量
heap : 存储对象的内存空间,对象的创建和释放,垃圾回收。
设置Young Generation 和 Old Generation大小尽量减少Full GC.
不做数据备份,N块磁盘中只要有一块损坏,数据完整性就被破坏。
将一份数据同时写入两块磁盘
结合RAID0和RAID1 将所有磁盘平均分成两份,数据同时在两份磁盘写入RAID1,但是在每一份磁盘里面的N/2块磁盘上利用RAID0技术并发读写。
数据写入磁盘的时候,将数据分成N-1份,并发写入N-1块磁盘,并在第N块磁盘记录校验数据。
需要频繁跟换数据,每次写入数据都会导致第N块磁盘重写校验数据。
数据校验不是写入第N块磁盘,而是螺旋式的写入所有磁盘中。
数据只写入N-2块磁盘,并螺旋式的在两块磁盘中写入校验信息。
系统在整个存储机器的多台服务器上进行数据并发读写和备份。
MapReduce
技术服务业务
99% 基本可用
99.9 高可用
99.99% 自动恢复的高可用
99.999% 年度小于5分钟
应用层 负载均衡
服务层 集群方式,分布式服务
数据层 数据同步复制
Session复制
Session绑定
利用Cookie记录Session
Session服务器
同一管理Session信息,状态分离。
部署隔离
超时设置
异步调用
通过消息队列避免服务失败道义整个应用的请求失败。
拒绝服务:拒绝优先级低的应用的调用,随机拒绝部分请求
关闭服务:关闭部分不重要的服务,或者不重要的功能,以节约系统开销
淘宝双十一:关闭评价,确认收货等非核心服务。
数据备份,失效转移。
数据持久性
数据可访问性
数据一致性
数据强一致
数据用户一致
存储不一致,但是终端用户访问,通过纠错和校验机制,能正确返回给用户
数据最终一致
冷备份
热备份 同步热备 异步热备
失效确认 心跳坚持,程序范文失败
访问转移
数据恢复
负载一部分,一部分处理
回归测试
Selenium
部分发布--故障回滚
网站的伸缩性是指在不需要改变完整的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力。
在系统演化过程中,最重要的手段就是使用服务器集群,通过不断的向集群中添加服务器来增强整个集群的处理能力。
将业务处理流程上的不同部分分离不熟。
将业务分模块部署。
DNS解析作为第一级负载均衡手段。
LVS
常用的算法:
轮询(Round Robin):所有请求依次分发到每台应用服务器上,即每台服务器需要处理的请求数目都相同。
加权轮询(Weighted Round Robin):根据应用服务器硬件性能的情况,在轮询的基础上,按照配置的权重将请求分发到每个服务器。
随机(Random):请求随机分配到各个应用服务器。
最少连接(Least Connections):记录每个应用服务器正在处理的连接数,将请求分发到最少连接的服务器。
缓存请求不可以在缓存服务集群中的任意一台处理,必须先找到缓存数据的服务器。
一致性算法
主从分离
数据分库:不同业务表部署在不同的数据库集群上,这种方式的制约条件是跨库的表不能Join操纵。
分表
amoeba
cobar
MyCAT
Atlas
HBase
具体问题具体对待
扩展性:指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。表现在系统基础设施稳定不需要经常变更,应用之间较少依赖和耦合,对需求变更可以敏捷响应。开闭原则:对扩展开发,对修改关闭。当系统增加新功能的时候不需要对现有系统的结构和代码进行修改。
伸缩性:系统能够通过增加,减少自身资源规模的方式增强(减弱)自己计算处理事物的能力。
模块化
事件驱动架构:通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通讯完成模块间的合作。
生产者-消费者模型
提高系统的响应时间,消息可以暂存队列,消息接受者根据自身负载处理能力控制消息处理速度。
实现分布式异步调用
使用分布式服务降低系统的耦合性。
分布式服务则通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务调用。
巨无霸应用系统的问题:
服务提供者:通过WSDL(Web Services Description Language)向注册中心描述自身提供的服务接口属性。
注册中心:使用UDDI(Universal Description Discovery And Intergation)统一描述,发现和集成,发布服务提供者提供的服务。
服务请求者:丛注册中心检索到服务信息后,通过SOAP(Simple Object Access Protocol)简单对象访问协议和服务提供者通讯,使用相关服务。
Web Service缺点:
负载均衡:
服务需要部署在一个集群上。分布式服务框架要能够支付服务请求者使用可配置的负载均衡算法访问服务,使用服务提供者集群实现负载均衡。
失效转移:
当某个服务实例不可用,就将访问切换到其他服务实例上,以实现服务整体高可用。
高效的远程通讯:
整合异构系统:
不同的系统可以通讯。
对应用最少侵入:
版本管理:
实时监控:
Thrift
Dubbo
ColumnFamily
API接口:开放平台暴露给开发者使用的一组API,其形式可以使RESTful,WebService,RPC等各种形式。
协议转换:将各种API输入转换成内部服务可以标识的形式,并将内部服务的返回封装成API格式。
安全:身份识别,权限控制等手段,开放平台还需要分级的访问带宽,保证平台资源被第三方应用公平合理的使用。
审计:记录第三方应用的访问情况,并进行监控,计费。
路由:将开发平台的各种访问路由映射到具体的内部服务。
流程:将一组离散的服务组织成一个上下文相关的新服务,隐藏服务细节,提供统一接口供开发者调用。
Cross Site Script 跨站点脚本攻击,指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。
提交恶意脚本,嵌入恶意脚本的连接。
消毒,提交数据进行字符转义。
避免攻击者获取Cookie信息
SQL注入攻击
消毒 参数绑定
OS注入攻击
Cross Site Request Forgery 跨站点请求伪造。
表单Token
验证码
Referer Check 防盗链
错误回写 Error Code
HTML注释
文件上传
路径遍历
ModSecurity
App Scan
MD5,SHA
密码,生成摘要
Cookie加密,通讯加密
DES RC
信息传输,数字签名
非对称加密对对称密码进行安全传输。然后使用对称加密技术进行信息加解密。
RSA
正则表达式
Trie树变种
Hash表
贝叶斯分类算法
ARCS算法
Hash表
布隆过滤器
账户风险
买家风险
卖家风险
交易风险
规则引擎
统计模型
没有绝对的安全就像没有绝对的自由。
业务驱动
GeoDNS:基于开源域名服务器关键BIND的增强版本,可将域名解析到离用户最近的服务器。
LVS:基于Linux的开源负载均衡服务器。
Squid:基于Linux的开源反向代理服务器。
Lighttpd:开源的应用服务器,较主流的Apache服务器更轻量,更快速。许多网站使用Lighttpd作为图片服务器。
PHP:免费的Web应用程序开发语言。
Memcached:无中心高性能的开源分布式缓存系统,稳定,可靠。
Lucene:Java开发的全文搜索引擎。
MYSQL:开源的关系数据库管理系统。
使用缓存
内容页面不包括动态信息,以免页面内容缓存很快失效或者包括过时信息。
每个页面内容有唯一的REST风格的URL,以便CDN快速查找并避免重复缓存。
在HTML响应头写入缓存控制信息,通过应用控制内容是否缓存以缓存有效期等。
缓存--将热点数据缓存在分布式缓存系统中
使用较大的服务器内存。
使用RAID磁盘阵列。
将数据库事物一致性设置在较低水平。
如果Master数据库宕机,立即将应用切换到Salve数据库,同时关闭数据写服务。
JavaScript前端控制。
请求数: 全局订单数
限流 --- 异步
log debug 级别。
关闭第三方库日志输出
首页最好是静态的
首页不应该访问数据库,需要从缓存服务器或者搜索引擎服务器获取。
远程访问加锁
缓存不在是提高性能的一部分。
Apache,JBoss 同时启动 Apache启动成功之后接受请求,大量请求阻塞在JBoss进程中。
大文件应该使用类似的分布式文件系统。
在生产环境进行压力测试
diff 对比提交
code review
NPE
营造自我价值的工作氛围
事情成就了人,而不是人成就了事情。
分享自己的观点
对于技术细节应该立即验证而不是继续讨论
带团队,对于团队成员是一次自我超越,对于他而言只是完成了一个工作。
关注功能
关注非功能
关注团队组织与管理
关注产品运营
关注产品未来
最好的
好的
一般
差的
最差的
前端指用户请求到达网站应用服务器之前,通常不包含网站业务逻辑,不处理动态内容。
浏览器优化技术:页面缓存,合并HTTP请求,页面压缩。
CDN:内容分发网络,部署在网络运营商机房,通过将静态页面内容分发到离用户最近的CDN服务器。
动静分离,静态资源部署:静态资源,JS,CSS,文件部署在专门的服务集群上。
图片服务:网站上传的图片资源部署在图片服务器集群。
反向代理:在应用服务器,静态资源服务器,图片服务器之前,提供页面缓存服务。
处理网站业务逻辑的地方
开发框架:分离关注面,安全策略,
页面渲染:开发维护的动态内容和静态页面模块集成起来,组合成最终显示给用户的完整页面。
负载均衡:通过负载均衡将用户请求分发到不同的服务器上。
Session管理:应用服务器应该设计成无状态,不保存用户请求上下文信息,需要专门机制管理Session,使集群内甚至跨集群的应用服务器可以共享Session。
动态页面静态化:
业务拆分:
虚拟化服务器:将一台物理服务器虚拟化成多台虚拟化服务器,对于并发访问低的业务,更容易用较少的资源构建高可用的应用服务器集群。
分布式消息:利用消息队列机制,实现业务和业务,业务和服务之间的异步消息发送及低耦合的业务关系。
分布式服务:提供高性能的,低耦合,易复用,易管理的分布式服务。
分布式缓存:缓存热点数据
分布式配置:
提供数据,文件的持久化存储访问与管理服务。
分布式文件: 分布式文件系统。
关系数据库:增加数据库访问路由功能,根据业务配置将数据库访问理由道不同的物理数据库上。
NoSQL数据库:
数据同步:保持多个数据中心的数据之间进行数据同步,以保证每个数据中心都拥有完整的数据。
搜索引擎:数据增量更新及全量更新,构建索引,这些通过后台系统定时任务执行。
数据仓库:根据离线数据,提供数据分析与数据挖掘服务。
推荐系统:
浏览器数据采集:通过页面嵌入JS脚本采集用户浏览器环境与操作记录,分析用户行为。
服务业务数据采集:采集在服务端记录的用户请求操作日志,采集应用程序运行期业务数据。
服务器性能数据采集:系统负载,内存使用率,网卡流量。
系统监控:采集的数据以图表形式展示出来。
系统报警:超过预设正常情况的阈值,就通过邮件,短信,电话提醒。
Web攻击:
数据保护:敏感信息加密传输与存储,保护网站和用户资产。
机房架构:
机柜架构:
服务器架构:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务