夜光序言:
十里桃林醉春光,你却未依约定而来,我也不曾黯然离去。
酒壶碗筷照旧,清香浮动,黄昏把影拨弄,你来亦不来,已无大碍。
正文:
十四、fastDFS
1.fastDFS简介
fastDFS是一个开源轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大量存储和负载均衡的问题,特别适合以文件为载体的在线服务。
FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储,支持存储服务器在线扩容
支持相同内容的文件只保存一份,节约磁盘空间,FastDFS只能通过Client API访问,不支持POSIX访问方式
FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等)
2.系统架构-上传文件流程
1. client询问tracker上传到的storage,不需要附加参数
2.tracker返回一台可用的storage
3.client直接和storage通讯完成文件上传
3.相关术语
1.Tracker Server:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。记录storage server的状态,是连接Client和Storage server的枢纽。
2.Storage Server:存储服务器,文件和meta data都保存到存储服务器上
3.group:组,也可称为卷。同组内服务器上的文件是完全相同的
4.文件标识:包括两部分:组名和文件名(包含路径)
5.meta data:文件相关属性,键值对(Key Value Pair)方式,如:width=1024,heigth=768
4.同步机制
同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行;
文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器
源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了
5.通信协议
协议包由两部分组成:header和body
header共10字节,如下:
8 bytes body length
1 byte command
1 byte status
body数据包格式由取决于具体的命令,body可以为空
十五、Spring
1.spring介绍
spring是一个非常活跃的开源框架,它是一个基于IOC和AOP来构架多层javaEE系统框架,它的主要目的是简化企业级开发
spring以一种非侵式的方式来管理代码,spring提倡"最少侵入",这就意味着可以适当的安装或者卸载spring。
2.专业术语
1.组件/框架设计
1).侵入式设计
引入了框架,对现有的类的结构有影响,即需要实现或者继承某些特定类
2).非侵入式设计
引入了框架,对现有类结构没有影响
2.控制反转
控制反转也是IOC,对象的创建交个外部容器完成,叫做控制反转。
3.依赖注入
处理对象的依赖关系
4.控制反转和依赖注入的区别
控制反转:解决对象创建问题(对象创建交给别人)
依赖注入:在创建完对象后,对象关系的处理是依赖注入(通过set方法依赖注入)
3.spring
1.概述
spring框架可以解决对象创建之间依赖关系的一种框架,可以和其他的框架一起使用
4.spring模块
1.springCode:springCode是核心功能(IOC容器),解决创建依赖关系
2.SpringWeb:SpringWeb是spring对web模块的支持
3.SpringDao:支持对JDBC的操作
4.SpringORM:对持久层框架整合
5.springAOP:面向切面
6.SpringEE:对JavaEE模块其他支持。
5.springIOC容器
1.创建对象
springIOC容器,是spring核心内容
作用:创建对象并且处理对象的依赖关系
2.IOC容器创建对象
创建对象方式:
1.调用无参构造函数
2.带有参构造函数
3.工厂创建对象
1).静态方法创建对象
2).非静态方法创建对象
对象创建:单例、多例
默认springBean是单例
配置多例:score="prototype"
配置单例:score="singleton"
如果bean设置为单例,会在加载配置文件后,直接初始化bean
如果bean设置为多例,会在调用getBean方法后,初始化bean
如果bean设置为lazy-init="true"会在调用getBean方法创建
销毁必须要手动销毁,调用destory方法销毁
3.对象依赖关系
1.spring中,如何给对象的属性赋值?
1).通过构造函数
2).通过set方法给属性注入值
3).p名称标签
4).自动状态
5).注解
6.AOP
1.什么是AOP?
AOP是面向切面编程,AOP采取横向抽取机制,取代了传统继承体系重复代码(性能监视、事务管理、安全检查、缓存)
springAOP使用纯java实现,不需要专门编译过程和类加载器,在运行期间通过代理方式向目标类织入增强代码
Aspect是一个基于java语言的AOP框架,Spring2.0开始,SpringAOP引入了对Aspect的支持,Aspect扩展了java语言,提供了一个专门的编译器,在编译时提供横向代码的织入。
2.AOP底层原理
AOP底层是通过代理机制实现,
动态代理(JDK使用):JDK的动态代理是对实现了接口的类生成代理。
cglib代理机制:对类生成代理
3.AOP的术语
1.joinpoint(连接点):所谓连接点是指那些被拦截的点,在spring中这些点指的是方法,因为spring只支持方法类型的连接点。
2.pointcut(切入点):所谓切入点是指要对哪些joinpoint进行拦截的定义。
3.advice(通知/增强):所谓通知是指拦截到joinpoint之后所要做的事情就是通知,通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
4.introduction(引介):引介是一种特殊的通知在不修改类代码的前提下,introduction可以在运行期间为类动态的添加一些方法或field
5.target(目标对象):代理的目标对象
6.weaving(织入):是把增强应用到目标对象来创建新的代理对象的过程
4.CGLIB动态代理
CGLIB是一个开源项目,是一个强大,高性能,高质量的code生成类库,可以在运行期间扩展java类与实现java接口,hibernate支持它来实现PO字节码动态生成,hibernate生成持久化类的Javassist
5.结论
spring框架,如果实现了接口,就使用JDK的动态代理生成代理对象,如果这个类没有实现任何接口,使用GBLIB生成代理对象。