浅谈fastDFS服务器
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。FastDFS特别适合以文件为载体的在线服务,多图片、多视频的服务等等。
先普及一下在fastDFS的结构中的一些概念:
在fastDFS中,共分为三个部分:client、tracker Server、storage Server;→ 其中的client是用来对fastDFS发起操作的,如上传、下载;→ 其中的tracker Server是一个调配角色(中间人),当我们在client发起操作请求后,需要tracker Server来将我们与storage Server联系起来,它是负载均衡的核心;→ 其中storage Server可以理解为仓库,文件的存储就在于storage Server,一个完整的fastDFS的存储结构中,最大单位为group(或volume),通常以group来划分文件类型,如图片类型为一个group、视频类型为一个group等等,而一个group内,含有一个或多个storage Server。重点:storage Server是文件存储的核心,但它并不是文件存储中的最大单位,很多初学者会在这个地方迷惑。
一、两个角色:
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。
①跟踪器(tracker)
tracker Server是fastDFS的协调者(中间人角色);完整的fastDFS服务运行期间,我们将对无法对storage Server进行直接管理,仅仅我们发起的操作会对storage Server内的文件进行操作,而真正对storage Server进行管理的是tracker Server——每个storage Server在启动后,会连接tracker Server并告知之自己的信息(如所在group),并且在tracker Server与该storage Server之间保持连接,两个角色之间会进行信息的交流,tracker Server会根据storage Server的反馈信息,在内存中(tracker Server不需要持久化任何数据)建立group==>[storage server list]映射表。
在fastDFS集群中,多个tracker Server之间的信息数据会进行同步,而这一机制并不是由tracker Server之间互相完成的,而是由storage Server完成的。因为在storage Server的配置文件有该fastDFS服务中的所有tracker Server,storage Server会为每一个tracker Server创建一个通信线程,在storage Server与tracker Server通信过程中,如果该tracker Server返回的该group的storage Server列表信息相对于本机较少,那么storage Server就会将该tracker Server上所没有的该group的storage Server列表信息同步给该tracker Server。这就使得各tracker Server之间的数据保持一致。
②存储节点(storage)
storage Server是存储的角色,存储文件由storage Server进行管理。每一个storage Server的数据存储目录会有两级子目录,每一级都有256个子文件夹,一共有256*256=65536个文件夹。当有新文件被写入时,会以hash的方式被路由到其中的某个子目录下,然后新文件数据直接作为一个本地文件存储到该目录中。
storage Server以group【或volume(一个意思)】为单位组织,即便整个fastDFS只有一个storage Server,它也有一个group。
在fastDFS集群中,以group为单位可以方便负载均衡,由tracker Server配合可以实现改组内访问压力的均衡;也可以方便副本(即备份)数量的定制,同一组内的storage Server的数量减一,即为副本的数量。
在一个group内的storage Server之间的数据会互为备份,这一功能是由后台线程完成的。当客户端将一个文件写入group内的一个storage Server,则会认为文件写入成功,后台线程便会将文件同步到该group内的storage Server。注意:由于一个group内的storage Server数据互为备份,所以存储空间的容量由该group内的最小容量的storage Server决定。
同一个group内的storage Server在写文件后,会写一份binlog,这个binlog记录着文件名等元信息,它用于后台的同步,每个storage Server会记录向该group内其他storage Server的同步进度,记录进度的方式是时间戳,为的是避免机器down掉失去同步进度,以便在机器重启后接着进度继续同步。同时storage Server的同步进度会以元数据发送给tracker Server,以便在client访问文件时,作为tracker Server选择服务的storage Server的参考(即哪台strong Server上有该文件)。
图解:
二、文件的Upload过程
1、选择tracker Server
当集群不止一个tracker Server时,由于tracker Server之间是数据互为同步,完全对等,客户端任意选择即可。
2、选择存储的group
这个是tracker.conf配置文件的两项,其中的store_lookup用来选择group的规则;当tracker接收到upload file的请求时,会为该文件分配一个可以存储该文件的group,支持如下选择group的规则: 1. Round robin,所有的group间轮询 2. Specified group,指定某一个确定的group 3. Load balance,剩余存储空间多多group优先。当store_lookup为2时,可通过store_group进行指定group。
3、选择storage Server
这个是tracker.conf配置文件的一项,其中的store_server用来选择storage Server的规则;当选定group后,tracker会在group内选择一个storage server给客户端,支持如下选择storage的规则: 1. Round robin,在group内的所有storage间轮询 2. First server ordered by ip,按ip排序 3. First server ordered by priority,按优先级排序(优先级在storage上配置)。
4、选择storage path
这个是tracker.conf配置文件的一项,其中的store_path用来选择storage path的规则;当分配好storage server后,客户端将向storage发送写文件请求,storage将会为文件分配一个数据存储目录,支持如下规则: 1. Round robin,多个存储目录间轮询 2. 剩余存储空间最多的优先。
5、选择目录并生成文件名
当选定存储目录后,storage Server会为文件生成一个file_id,然后将文件路由到一个二级目录,并以file_id为文件名存储到该子目录。当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。
三、文件的下载及Nginx模块
访问过程:
client发送download请求给某个tracker Server,必须带上文件名信息,tracke Server从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage Server用来服务该download请求。
HTTP访问支持:
FastDFS的tracker Server和storage Server都内置了http协议的支持,客户端可以通过http协议来下载文件,tracker在接收到请求时,通过http的redirect机制将请求重定向至文件所在的storage Server上;除了内置的http协议外,FastDFS还提供了通过apache或nginx扩展模块下载文件的支持。
Nginx扩展模块:
在storage Server节点与tracker Server节点都需要安装nginx模块。
目的:
1、在storage Server安装nginx模块是结合fastdfs-nginx-module模块提供的Http访问服务,同时解决group中storage Serve而服务器的同步延迟;可能有些同学不理解,通俗一下:
假设Tracker服务器将文件上传到了192.168.1.80,文件ID已经返回客户端,这时,后台会将这个文件复制到192.168.1.30,如果复制没有完成,客户端就用这个ID在192.168.1.30取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。
2、在tracker Server上安装nginx模块是为了反向代理到storage Server上的nginx,并进行负载均衡,同时利用ngx_cache_purge模块实现缓存。
四、配置文件详解
(摘自XuJiaqing的博客)
1、tracker Server的配置详解
# is this config file disabled # false for enabled # true for disabled disabled=false #当前配置是否不可用false可用,true不可用 # bind an address of this host # empty for bind all addresses of this host bind_addr= #是否绑定IP如果一个服务器上有多个IP则设置哪个IP可用,如果不设置则不限制 # the tracker server port port= #默认端口为22122 如果不冲突,则尽量不要修改 # connect timeout in seconds # default value is 30s connect_timeout= #针对socket套接字函数connect的连接超时时间设置 # network timeout in seconds # default value is 30s network_timeout= #设置网络超时,单位秒,发送或接收数据时,如果在超时时间之后依然不能进行,则本次网络通讯失败 # the base path to store data and log files base_path=/home/fdfs #配置保存根目录地址,这个目录必须存在,子目录将自动创建,保存数据和日志文件呢 # max concurrent connections this server supported max_connections= #服务器支持的最大连接数 # work thread count, should <= max_connections # default value is # since V2. work_threads= #工作线程数,通常设置为CPU数量 # the method of selecting group to upload files # : round robin # : specify group # : load balance, select the max free space group to upload file store_lookup= #上传组(卷)的方式:0轮询,:指定,:负载平衡(剩余空间最大选择) # which group to upload file # when store_lookup set to , must set store_group to the group name store_group=group2 #如果上一参数选择1方式,即制定组名,当前参数用来设置指定的组,如果选择其他方式,当前参数无效 # which storage server to upload file # : round robin (default) # : the first server order by ip address # : the first server order by priority (the minimal) store_server= #同组推送方式0.轮询方式,.根据ip地址进行排序选择第一个服务器,.根据优先级进行排序(优先级由storeServer的配置文件中upload_priority属性设置) # which path(means disk or mount point) of the storage server to upload file # : round robin # : load balance, select the max free space path to upload file store_path= #选择哪个文件目录进行上传(一个StoreServer上面可以有多个base_path).轮询,.剩余空间最大 # which storage server to download file # : round robin (default) # : the source storage server which the current file uploaded to download_server= #选择哪个storeServer最为下载服务器,.轮询,.哪个为源则哪个下载 # reserved storage space for system or other applications. # if the free(available) space of any stoarge server in # a group <= reserved_storage_space, # no file can be uploaded to this group. # bytes unit can be one of follows: ### G or g for gigabyte(GB) ### M or m for megabyte(MB) ### K or k for kilobyte(KB) ### no unit for byte(B) ### XX.XX% as ratio such as reserved_storage_space = % reserved_storage_space = % #系统保留空间大小,用来保证系统和其他应用的正常运行 #standard log level as syslog, case insensitive, value list: ### emerg for emergency ### alert ### crit for critical ### error ### warn for warning ### notice ### info ### debug log_level=info #日志级别 #unix group name to run this program, #not set (empty) means run by the group of current user run_by_group= #使用那个系统用户组运行FastDFS,默认为启动线程的用户组 #unix username to run this program, #not set (empty) means run by current user run_by_user= #使用那个系统用户运行FastDFS。默认为启动线程的用户 # allow_hosts can ocur more than once, host can be hostname or ip address, # "*" means match all ip addresses, can use range like this: 10.0..[-,] or # host[-,-].domain.com, for example: # allow_hosts=10.0..[-,] # allow_hosts=host[-,-].domain.com allow_hosts=* #设置可以连接当前tracker的IP范围,包括client和store_server,* 代表所有 # sync log buff to disk every interval seconds # default value is seconds sync_log_buff_interval = #同步或刷新日志到本地硬盘的时间间隔,单位:秒 # check storage server alive interval seconds check_active_interval = #检测storage_server的存活状态时间间隔,单位:秒,本参数要大于storage server的心跳包发送间隔一般为2-3倍 # thread stack size, should >= 64KB # default value is 64KB thread_stack_size = 64KB #tracker server的线程栈大小,要求大于等于64K # auto adjust when the ip address of the storage server changed # default value is true storage_ip_changed_auto_adjust = true #当storage server的IP发生变化时集群是否自动调整。只有在storage server进程重启时才能完成自动调整 # storage sync file max delay seconds # default value is seconds (one day) # since V2. storage_sync_file_max_delay = #存储服务器之间同步文件的最大延迟时间,缺省为1天,可以根据实际情况进行调整 # the max time of storage sync a file # default value is seconds # since V2. storage_sync_file_max_time = #同步一个文件需要消耗的最大时间,缺省为300秒,即5分钟 # if use a trunk file to store several small files # default value is false # since V3. use_trunk_file = false #是否使用小文件合并存储特性,缺省关闭,打开时可以减少碎片文件的出现,但同时加大服务器的负载 # the min slot size, should <= 4KB # default value is bytes # since V3. slot_min_size = #为trunk file分配的最小字节数,比如一个文件只有16字节,根据当前设置,也会为其分配256字节 # the max slot size, should > slot_min_size # store the upload file to trunk file when it's size <= this value # default value is 16MB # since V3. slot_max_size = 16MB #为trunk file分配的最大字节数,如果文件小于大小则使用trunk方式存储,当文件大小大于这个数值是直接保存到一个文件中(不采用合并存储方式) # the trunk file size, should >= 4MB # default value is 64MB # since V3. trunk_file_size = 64MB #trunk file的大小,不建议设置过大 # if create trunk file advancely # default value is false # since V3. trunk_create_file_advance = false #是否提前创建好trunk文件,只用当这个参数设置为true时下面的3个以trunk_create_file开头的参数将不用设置 # the time base to create trunk file # the time format: HH:MM # default value is : # since V3. trunk_create_file_time_base = : #创建trunk file的起始时间点,当前为凌晨2点开始 # the interval of create trunk file, unit: second # default value is (one day) # since V3. trunk_create_file_interval = #提前创建trunk file的时间间隔,默认为1天 # the threshold to create trunk file # when the free trunk file size less than the threshold, will create # the trunk files # default value is # since V3. trunk_create_file_space_threshold = 20G #提前创建trunk file时,需要达到的空闲trunk大小 #例如:当前配置为20G,现在空闲的trunk file大小为4G,那么只创建16G的trunk file # if check trunk space occupying when loading trunk free spaces # the occupied spaces will be ignored # default value is false # since V3. # NOTICE: set this parameter to true will slow the loading of trunk spaces # when startup. you should set this parameter to true when neccessary. trunk_init_check_occupying = false #trunk file 初始化时,是否检查可用空间是否被占用 # if ignore storage_trunk.dat, reload from trunk binlog # default value is false # since V3. # set to true once for version upgrade when your version less than V3. trunk_init_reload_from_binlog = false #是否无条件从trunk binlog中加载trunk可用空间信息 # if use storage ID instead of IP address # default value is false # since V4. use_storage_id = false #是否使用 serverID作为storage server标识 # specify storage ids filename, can use relative or absolute path # since V4. storage_ids_filename = storage_ids.conf #use_storage_id设置为true,才需要设置本参数,详见源码目录下的conf/storage_ids.conf #这个文件中设置组名、serverID和对应的IP地址 # id type of the storage server in the filename, values are: ## ip: the ip address of the storage server ## id: the server id of the storage server # this paramter is valid only when use_storage_id set to true # default value is ip # since V4. id_type_in_filename = ip #use_storage_id设置为true时才需要设置本参数 # if store slave file use symbol link # default value is false # since V4. store_slave_file_use_link = false #存储从文件是否采用symbol link(符号链接)方式 #如果设置为true,一个从文件将占用两个文件:原始文件及指向它的符号链接 # if rotate the error log every day # default value is false # since V4. rotate_error_log = false #是否定期轮转error log,目前仅支持一天轮转一次 # rotate error log time base, time format: Hour:Minute # Hour from to , Minute from to # default value is : # since V4. error_log_rotate_time=: #error log定期轮转的时间节点,rotate_error_log参数设置为true时,本参数有效 # rotate error log when the log file exceeds this size # means never rotates log file by log file size # default value is # since V4. rotate_error_log_size = #error log按大小进行轮转 0代表不按大小进行轮转,否则当error log文件达到大小则轮转 # if use connection pool # default value is false # since V4. use_connection_pool = false #是否使用连接池 # connections whose the idle time exceeds this time will be closed # unit: second # default value is # since V4. connection_pool_max_idle_time = #连接池链接的最大生存时间,单位秒,use_connection_pool设置为true时有效 # HTTP port on this tracker server http.server_port= #http服务端口,默认情况下V4.06是不安装http服务的,详见INSTALL文件 # check storage HTTP server alive interval seconds # <= for never check # default value is http.check_alive_interval= #检查长链接的存活时间30秒 # check storage HTTP server alive type, values are: # tcp : connect to the storge server with HTTP port only, # do not request and get response # http: storage check alive url must return http status # default value is tcp http.check_alive_type=tcp #长链接的存在方式,当前配置为tcp方式 # check storage HTTP server alive uri/url # NOTE: storage embed HTTP server support uri: /status.html http.check_alive_uri=/status.html #利用什么标识进行检查
tracker.conf
2、storage Server配置详解
#这个配置文件是否失效 disabled=false #false为有效 true为无效 # 本storage server所属的group名 group_name=group1 # 可以版定一个ip,默认为空,绑定所有ip bind_addr= # 本配置只有在bind_addr设置以后才生效 # 本机作为客户端访问其他服务时,是否使用绑定的ip去访问其他服务器 client_bind=true # storage server监听端口 port= #默认23000,如果不冲突,尽量不修改 # 连接超时时间,针对socket套接字函数connect,默认为30秒 connect_timeout= # 网络通讯超时时间,默认是60秒 network_timeout= # 向tracker server发送心跳时间间隔,默认30秒 heart_beat_interval= # 向tracker server汇报磁盘使用情况时间间隔,默认为60秒 stat_report_interval= # 工作文件夹,日志也存在此(这里不是上传的文件存放的地址) base_path=/home/yuqing/fastdfs # 本traceserver最大连接数 max_connections= # 发送或接收数据的buffer大小,工作队列消耗的内存大小 = buff_size * max_connections # 建议这个设置大于8k,默认256k buff_size = 256KB # 接收数据的线程数 # 默认1个 # since V4. accept_threads= # 工作线程数,小于max_connections # 默认4个,通常设置为CPU核数,效率最高 work_threads= # 磁盘读写是否分离,默认为true disk_rw_separated = true # 磁盘读取的线程数(每个工作文件夹) # 对于磁盘读写不分离的模式,这个参数可以设置为0 # 默认为1 disk_reader_threads = # 磁盘写的线程数(每个工作文件夹) # 对于磁盘读写不分离的模式,这个参数可以设置为0 # 默认为1 disk_writer_threads = # 当发现没有需要同步的文件时,需要等待sync_wait_msec毫秒再去binlog中检查 # 不能设置为0,默认为50毫秒 sync_wait_msec= # 同步完一个文件后,休眠sync_interval毫秒后继续同步下一个文件 sync_interval= # 允许存储同步的开始时间 # Hour from to , Minute from to sync_start_time=: # 允许存储同步的结束时间,也就是说,storage server只能在sync_start_time到sync_end_time这段时间内同步数据 # 默认是全天都可以同步 # Hour from to , Minute from to sync_end_time=: #由开始时间和结束时间,指定了同步时间的范围 # 同步完write_mark_file_freq个文件后,如果markfile有变化,将mark file写入磁盘 write_mark_file_freq= # 工作路径个数(可以挂载多个磁盘),默认是1个 store_path_count= # 工作路径列表,如果store_path0不设置,那么使用base_path存储 # 设置的路径一定是存在的文件夹 # 需要配置store_path_count个 store_path0=/home/yuqing/fastdfs #store_path1=/home/yuqing/fastdfs2 # FastDFS是通过二级目录来存储文件的,该配置是每级目录的文件夹数据 # 如果设置为256,那么会生成256*=65535个文件夹 # 这个值默认大小256,可以设置区间1- subdir_count_per_path= # tracer server列表,多个tracer server的话,分行列出 tracker_server=192.168.209.121: #日志级别 ### emerg for emergency ### alert ### crit for critical ### error ### warn for warning ### notice ### info ### debug log_level=info # 运行本进程的Unix用户组,如果不设置,默认是当前用户所在的group run_by_group= # 运行本进程的用户名,如果不设置,默认是当前用户的用户名 run_by_user= # 可以连接到本机的主机ip范围,*代表允许所有服务器 # 支持这样的表达式:10.0..[-,] or host[-,-].domain.com allow_hosts=* # 文件分布式存储策略 # : 轮询 # : 根据文件名hash结果随机存储 file_distribute_path_mode= # 本配置在 file_distribute_path_mode= 时有效 # 当写文件数据达到file_distribute_rotate_count值时,换轮换到另外一个路径继续写入 # 本配置默认值是100 file_distribute_rotate_count= # 是否在写大文件的时候,调用fsync落地文件 # :永远不调用 # 其他数值:每写入fsync_after_written_bytes个字节,调用一次fsync # 默认为0 fsync_after_written_bytes= # 将缓存中的日志落地到磁盘的间隔时间,默认是10秒 sync_log_buff_interval= # 将缓存中的binlog落地到磁盘的间隔时间,默认是10秒 sync_binlog_buff_interval= # 将storage server缓存中的状态数据落地到磁盘的间隔时间,默认是10秒 sync_stat_file_interval= # 线程栈大小,默认64k,不建议设置小于64k,默认512k thread_stack_size=512KB # 和 tracker.conf 中store_server= 2时的配置相对应,本storage server作为目标服务器,上传文件的优先级,可以为负数。值越小,优先级越高。 # tracker.conf 中store_server参数的描述: # 上传文件选择服务器的规则: # :轮询(默认) # :按照IP排序,排在第一的server # :按照优先级排序,最小的server upload_priority= # 网卡别名,用ifconfig -a可以看到很多本机的网卡别名,类似eth0,eth0:0等等 # 多个网卡别名使用逗号分割,默认为空,让系统自动选择 if_alias_prefix= # 是否检查重复文件,如果设置成true,使用FastDHT来存储文件索引 # or yes: 需要检查 # or no: 不需要检查 # 默认值是 check_file_duplicate= # 文件签名形式,hash或md5,用来做文件排重,默认为hash file_signature_method=hash # 存储文件索引的命名空间(在check_file_duplicate=1是生效) key_namespace=FastDFS # 是否和FastDHT之间使用长连接 # 0代表短链接,1代表长连接 # 默认值为0 keep_alive= # 可以使用#include filename来加载FastDHT服务器列表,filename可以是相对路径(基于base_path) # 在check_file_duplicate=1时有效 # 更多信息参见FastDHT的安装须知 ##include /home/yuqing/fastdht/conf/fdht_servers.conf # 是否记录访问日志 use_access_log = false # 是否定期轮转访问日志,目前仅支持一天轮转一次 rotate_access_log = false # 如果按天轮转访问日志,具体生成新错误日志文件的时间 # Hour from to , Minute from to access_log_rotate_time=: # 是否定期轮转错误日志,目前仅支持一天轮转一次 rotate_error_log = false # 如果按天轮转错误日志,具体生成新错误日志文件的时间 # Hour from to , Minute from to error_log_rotate_time=: # 是否在错误访问文件达到一定大小时生成新的访问日志文件 # 0代表对日志文件大小不敏感 rotate_access_log_size = # 是否在错误日志文件达到一定大小时生成新的错误日志文件 # 0代表对日志文件大小不敏感 rotate_error_log_size = # 日志文件保存日期 # 0表示永久保存,不删除 # 默认为0 log_file_keep_days = # if skip the invalid record when sync file # default value is false # since V4. file_sync_skip_invalid_record=false # 是否使用连接池 use_connection_pool = false # 连接闲置超时时间,连接如果闲置的时间超过本配置,则关闭次连接,单位秒 connection_pool_max_idle_time = # storage server的http访问方式的域名,如果域名为空,则只能使用ip访问 http.domain_name= # HTTP端口 http.server_port=
storage.conf
3、client的配置文件详解
# 连接超时时间 # 默认30秒 connect_timeout= # 网络超时时间 # default value is 30s network_timeout= # 工作文件夹,日志存在此 base_path=/home/yuqing/fastdfs # tracer server列表,多个tracer server的话,分行列出 tracker_server=192.168.0.197: #日志级别 ### emerg for emergency ### alert ### crit for critical ### error ### warn for warning ### notice ### info ### debug log_level=info # 是否使用连接池 use_connection_pool = false # 连接闲置超时时间,连接如果闲置的时间超过本配置,则关闭次连接,单位秒 connection_pool_max_idle_time = # 是否从tracer server读取fastdfs的参数,默认为false load_fdfs_parameters_from_tracker=false # 是否使用storage id 替换 ip,默认为false # 和tracker.conf该参数含义一样 # 本配置只有在load_fdfs_parameters_from_tracker=false时生效 # 本配置默认为false use_storage_id = false # 指定storage id的文件名,允许使用绝对路径 # 和tracker.conf该参数含义一样 # 本配置只有在load_fdfs_parameters_from_tracker=false时生效 storage_ids_filename = storage_ids.conf #HTTP settings http.tracker_server_port= #引入HTTP相关配置 ##include http.conf
client.conf
五、总结
fastDFS是为集群而生,单机的fastDFS意义不大,因为fastDFS存在的意义在于其分布式文件系统,想要玩转fastDFS,仅仅掌握fastDFS是远远不够的。
浅谈fastDFS服务器的更多相关文章
- 浅谈|WEB 服务器 -- Caddy
浅谈|WEB 服务器 -- Caddy 2018年03月28日 12:38:00 yori_chen 阅读数:1490 标签: caddyserverwebhttps反向代理 更多 个人分类: ser ...
- NIO原理剖析与Netty初步----浅谈高性能服务器开发(一)
除特别注明外,本站所有文章均为原创,转载请注明地址 在博主不长的工作经历中,NIO用的并不多,由于使用原生的Java NIO编程的复杂性,大多数时候我们会选择Netty,mina等开源框架,但理解NI ...
- 浅谈web服务器的编写之http协议
本书是介绍怎么编写一个Web服务器,而Web服务器是基于HTTP(HyperText Transfer Protocol)协议实现的,所以要实现一个Web服务器就必须了解HTTP协议,本章主要介绍HT ...
- 浅谈Web服务器和应用服务器的区别
1Web服务器和应用服务器简介 通俗的讲,Web服务器传送页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods).确切一点,你可以说:Web服务器专 ...
- 浅谈Nginx服务器的内部核心架构设计
前言 Nginx 是一个 免费的 , 开源的 , 高性能 的 HTTP 服务器和 反向代理 ,以及 IMAP / POP3代理服务器. Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消 ...
- Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈
一个用户的Request是如何经过Web服务器(Apache,Nginx,IIS,Light)与后端的动态语言(如PHP等)进行交互并将结果返回给用户的呢? 本文浅谈个人观点,可能有误,欢迎拍砖,共同 ...
- 浅谈Hybrid技术的设计与实现第二弹
前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) ...
- 浅谈Hybrid技术的设计与实现
前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发 ...
- 浅谈Nginx负载均衡和F5的区别
前言 笔者最近在负责某集团网站时,同时用到了Nginx与F5,如图所示,负载均衡器F5作为处理外界请求的第一道"墙",将请求分发到web服务器后,web服务器上的Nginx再进行处 ...
随机推荐
- 使用wm_concat函数导致字符串过长
场景:使用select wm_concat(xxxxx) from table 的时候 返回的字符串过长 解决方案 :使用to_clob 将字符串转成 clob类型,但是由于使用的前端框架不能解析cl ...
- asp.net的HTTP请求处理过程
1.asp.net的HTTP请求处理过程 说明: (1).客户端浏览器向服务器发出一个http请求,此请求会被inetinfo.exe进程截获,然后转交给aspnet_isapi.dll进程,接着它又 ...
- python的文件对象(1)
1 首先要明确的是,文件只是连续的字节. 数据的传输经常会用到字节流,无论字节流是由单个字节还是大块数据组成. 2 打开文件之门的钥匙--open() open()内建函数成功打开文件后会返回一个 ...
- css 笔记1
type="text/css"的作用是什么?它是CSS样式的标记.type->类型,这里是style的属性text/css ->文本/css,即css文本type=&q ...
- LNMP-day3-php扩展缓存插件
perl的编译问题 [root@localhost php5.6.33]# echo 'export LC_ALL=C' >> /etc/profile #设置环境变量,解决后面perl ...
- webbench 网站压力测试
[root@localhost ~]# webbench -c 500 -t 4 http://172.24.61.41/Webbench - Simple Web Benchmark 1.5Copy ...
- app.config/web.config配置文件增删改
一.概述 应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe.config). 配置文件,对于程序本身来说,就是基础和 ...
- C++课堂作业(2)
github的链接: https://github.com/deepYY/object-oriented/tree/master/PAT.1025 题目 给定一个常数K以及一个单链表L,请编写程序将L ...
- kali_metasploit问题
出现类似提示: Failed to connect to the database: could not connect to server: Connection refused Is the ...
- 如何实现本机Windows连接虚拟机中的CentOS
1.确定CentOS的IP地址,命令为 ifconfig,由此可知,LinuxIP地址为 192.168.85.128 2.WIndows的IP地址为192.168.16.1, 3.保证CentOS和 ...