`
LIMIMGJIE
  • 浏览: 173714 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于Nginx构建高并发协议解析服务[原创]

阅读更多
正文:

视频播放协议请求应用于多个业务产品,为了提供一个稳定的解析服务,当CMS、媒资、聚合平台等产品对视频信息发生的增、删、改操作时,通过监控DB服务将变化实时写入高性能简单消息队列服务,及时更新多个对外视频服务产品的视频信息更新.

1.Nginx服务通过内嵌的perl脚本动态解析URL参数.提取key信息.
perl_set $storm_key_new '
                use MIME::Base64::Perl;
                use URI::Escape;
                sub{
                        my $r = shift;//request请求对象
                        my $request_uri = $r->variable("request_uri");//提取uri
                        my $query_uri = $r->unescape($request_uri);

                        my $buffer = $query_uri;
                        if($buffer =~/&/){//判定uri中是否包含&符号
                                my @pairs = split(/&/, $buffer);//根据&符号分割数组
                                foreach $pair (@pairs)
                                {
                                        if($pair =~ /c=storm/i){//提取"c=storm"的字符串
                                                $pair =~ s/c=//g;//将"c="剔除
                                                return $pair;
                                        }
                                }
                        }
                        
                }
        ';



2.设置storm_perl的负载均衡服务
upstream storm_perl {
        server   192.168.1.87:8000 weight=1 max_fails=2 fail_timeout=30s;
        server   192.168.1.110:8000 weight=1 max_fails=2 fail_timeout=30s;
}


3.Nginx服务通过key信息查找本地是否存在对应的缓存数据,如果存在直接返回给客户端.
设置nginx开启本地缓存,并指定缓存存放位置及相关信息.
#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path   /opt/data/proxy_temp_dir;
#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
proxy_cache_path  /opt/data/proxy_cache_dir  levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=30g;

设置后端请求的header信息,缓存时间,
location / {
        #定义客户端缓存一小时        
        expires 1h;
        #后端服务请求返回的状态码为502,504,error,超时等,自动转入下个后端服务器
	proxy_next_upstream http_502 http_504 error timeout invalid_header;
        #进行缓存,使用Web缓存区cache_one
        proxy_cache cache_one;
        #对不同的HTTP状态码设置不同的缓存时间
        proxy_cache_valid  200 304 30d;
        proxy_cache_valid  404 1m;
        #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
        
        proxy_cache_key $storm_key_new;
        #设置后端服务请求的host信息
        proxy_set_header Host  $host;
        #设置客户端的真实IP地址
        proxy_set_header X-Forwarded-For  $remote_addr;
        #将请求转向upstream
        proxy_pass http://storm_perl;

        error_log  /opt/modules/nginx/logs/error.log crit;
        access_log  /opt/modules/nginx/logs/access.log main;
                }


4..Nginx服务通过内嵌的perl脚本动态读取memcache服务的数据,读取失败后,直接将请求转向后端的apache服务器
#设置memcache服务的IP和端口
set $memd 0;
set $memcached_server "127.0.0.1:11211";

location ~ .*\.(php|jsp|cgi)?
{
        perl 'sub {
                use Cache::Memcached;
                my $r = shift;
                if($r->variable("memd")){
                        my $memd = $r->variable("memd");
                }
                if(!$memd){
                        $memd = new Cache::Memcached {"servers" => [$r->variable("memcached_server")],"debug" => 0,"compress_threshold" => 10_000};
                        $r->variable("memd",$memd);
                }

                my $realkey = 0;
                $realkey = $r->variable("storm_key_new");
                my $stormbox = $memd->get($realkey);

                if($stormbox){
                        $r->send_http_header;
                        $r->print($stormbox);
                        return 200;
                }else{
                        return 404;
                }
        }';
        error_page      404 500 502 503 504 =[color=red] @get_storm;[/color]
        access_log  /opt/modules/nginx/logs/log_mm.log count;
}

当读取memcache的请求返回404时,直接转向另外一个location
location @get_storm {
        proxy_set_header Host  $host;
        proxy_set_header X-Forwarded-For  $remote_addr;
        proxy_pass http://backend_server;
        access_log  /opt/modules/nginx/logs/log_db.log count;
}





  • 大小: 282.1 KB
分享到:
评论
2 楼 LIMIMGJIE 2010-09-11  
tedeyang 写道
两个问题:
1,mysql的数据变动用什么方式进行监听的?触发器?
2,用的什么消息队列?



1。对mysql的数据变动做了一层外部的封装,所有的数据操作均通过封装代码进行调用,我们实验过mysql触发器的特性,性能很低,不是很好用,一些复杂的表级联动还需要用到存储过程,所以干脆自己写了一个外部封装代码(用的是jar调用的方式)

2.目前用的是activeMQ队列。有些性能问题,不过数据量比较小的情况下,还是满足应用的。
1 楼 tedeyang 2010-09-07  
两个问题:
1,mysql的数据变动用什么方式进行监听的?触发器?
2,用的什么消息队列?

相关推荐

    架构师实战Nginx构建高性能WEB服务器

    ### 架构师实战Nginx构建高性能WEB服务器 #### 1. Nginx入门简介 Nginx是一款高效、稳定、功能丰富的Web服务器软件,同时也是一款优秀的反向代理服务器和邮件代理服务器。Nginx最初由Igor Sysoev为解决当时Web...

    深入理解Nginx模块开发与架构解析 第2版

    这本书旨在帮助读者全面掌握Nginx的核心原理、模块开发及系统架构,从而更好地利用Nginx进行高性能的Web服务构建。 Nginx是一款开源的高性能HTTP服务器和反向代理服务器,以其高效的并发处理能力、轻量级的内存占用...

    Nginx深入理解Nginx模块开发与架构解析(第2版)

    《Nginx深入理解Nginx模块开发与架构解析(第2版)》...无论你是Nginx的初学者还是经验丰富的开发者,都能从《Nginx深入理解Nginx模块开发与架构解析(第2版)》中受益匪浅,提升自己在构建高性能Web服务器领域的专业能力。

    Nginx高性能Web服务器实战教程+高清+完整书签

    《Nginx高性能Web服务器实战教程》是一本深入讲解如何利用Nginx构建高效稳定Web服务的书籍。Nginx以其高性能、轻量级、反向代理和负载均衡等特性,已经成为许多企业和开发者首选的Web服务器。这本书涵盖了从基础配置...

    深入理解Nginx模块开发与架构解析(第2版).pdf

    《深入理解Nginx模块开发与架构解析(第2版)》是一本专注于Nginx技术的专业书籍,针对Nginx的内部工作机制和模块开发进行了深入的探讨...通过阅读此书,你将能够更有效地驾驭Nginx,构建高性能、高可用的网络服务环境。

    陶辉深入理解Nginx 模块开发与架构解析第二版

    本书旨在帮助读者掌握Nginx的核心概念、工作原理以及模块开发技能,从而在实际工作中更好地利用Nginx处理高并发、高性能的Web服务需求。 Nginx是一款开源的Web服务器,因其高效的性能和强大的反向代理、负载均衡...

    深入理解Nginx模块开发与架构解析.mobi

    1. **Nginx基础架构**:Nginx采用事件驱动的异步非阻塞模型,这使得它在处理高并发请求时表现出色。书中会详细介绍Nginx的多进程模型、工作进程的工作方式以及事件处理机制。 2. **配置文件解析**:Nginx的配置文件...

    Nginx高性能Web服务器详解.pdf

    Nginx是一款广泛应用的开源Web服务器,以其高性能、高并发处理能力以及轻量级的特性著称。本书旨在帮助读者全面理解Nginx的工作原理和配置技巧,提升网站服务的稳定性和效率。 Nginx的核心特点在于其反向代理、负载...

    Nginx高性能Web服务器详解

    本章将深入探讨Nginx的架构原理、配置、功能以及如何利用它来构建高性能的Web服务。 一、Nginx的特性与优势 1. 非阻塞I/O模型:Nginx采用事件驱动的异步非阻塞I/O模型,能够高效地处理大量并发连接,降低了CPU和...

    深入理解Nginx模块开发与架构解析完整-高清-目录-最新版

    Nginx的核心特性包括其事件驱动的异步非阻塞模型,这种模型使得Nginx在处理高并发请求时表现出色。Nginx采用多进程结构,主进程负责管理工作进程,工作进程则处理实际的网络IO操作。这种架构设计保证了系统的稳定性...

    深入理解Nginx 模块开发与架构解析-完美排版

    《深入理解Nginx模块开发与架构解析》是一本针对Nginx技术的深度解析书籍,专注于探讨Nginx的内部机制、模块开发以及整体架构。Nginx是一款高性能的Web服务器,因其反向代理、负载均衡和静态文件处理能力而广受欢迎...

    深入理解Nginx 模块开发与架构解析

    这将帮助你了解Nginx如何实现高并发和低延迟,以及如何优化性能。此外,Nginx的配置文件解析、模块间的交互、以及配置指令的生命周期也是重要的学习内容。 Nginx的反向代理功能使得它能有效地分发流量,实现负载...

    Nginx高性能Web服务器详解.rar

    Nginx由俄罗斯开发者Igor Sysoev于2002年开发,其设计目标是解决高并发问题,提供低延迟和高吞吐量的服务。Nginx采用事件驱动的异步非阻塞模型,使得它在处理大量并发连接时表现出色。此外,Nginx不仅支持HTTP和...

    深入理解Nginx模块开发与架构解析第2版LinuxUnix技术丛书.zip

    Nginx是一款高性能的HTTP和反向代理服务器,因其轻量级的事件驱动模型和非阻塞I/O处理方式,在高并发场景下表现出色。本书首先会介绍Nginx的基础概念和配置,包括其基本命令行参数、配置文件结构以及主要功能模块的...

    Nginx高性能Web服务器实战教程

    《Nginx高性能Web服务器实战教程》是一本深入解析Nginx服务器的实用指南,旨在帮助读者掌握如何利用Nginx构建高效、稳定的Web服务环境。Nginx以其反向代理、负载均衡、静态文件处理等功能,以及轻量级、高性能的特性...

    深入理解Nginx模块开发与架构解析

    Nginx作为一款高性能、轻量级的Web服务器和反向代理服务器,在大数据处理、高并发场景下表现出色,因此在互联网行业中广泛应用。本书旨在帮助读者深入掌握Nginx的工作原理,从而能够进行高效的定制化开发。 首先,...

    nginx实战-基于lua语言

    通过深入理解Nginx与Lua的结合,开发者可以构建出更加灵活、高效的Web服务,满足复杂业务需求,同时充分利用Nginx的高性能特性。在实际工作中,结合"NGINX实战 基于LUA语言的配置、开发与架构详解@java1234.com.pdf"...

    实战Nginx:取代Apache的高性能Web服务器+张宴.扫描版

    通过《实战Nginx:取代Apache的高性能Web服务器》这本书,读者不仅可以掌握Nginx的基本操作,还能学习到如何利用Nginx构建高效、稳定、安全的Web服务环境,对于从事Web开发和运维的人员来说,是一份宝贵的参考资料。

    高并发nginx+keepalived部署教程

    通过本文的介绍,我们不仅深入了解了Nginx与Keepalived的核心概念及其在高并发场景下的应用,还具体学习了如何通过这些工具构建一套完整的高可用、高并发网站部署方案。通过合理规划和细致操作,能够显著提升网站的...

    nginx最牛的服务器

    它的设计目标是高并发、低内存占用以及稳定的服务性能,这使得Nginx在处理大量并发连接时表现卓越,尤其适合于大型网站和高流量的应用场景。 ### 1. 高并发能力 Nginx采用事件驱动、异步非阻塞的架构,能够高效地...

Global site tag (gtag.js) - Google Analytics