当前位置:  互联网>综合
本页文章导读:
    ▪Nginx学习之九-负载均衡(客户端请求与Nginx进程间负载均衡)      本文介绍的负载均衡是针对的客户端请求在多个Nginx进程之间的均衡。注意与客户端请求在多个后端服务器之间的均衡相区别。 负载均衡问题的产生 在nginx中,建立连接的时候,会设计负.........
    ▪利用URL重写实现参数目录化      参数目录化,就是将 类似 http://www.abc.com/store/store.aspx?id=1024 这样的网址,对外改为 http://www.abc.com/1024。要实现这种功能,可以用以下三种方式(应该不仅限这三种吧!)1、用微软的 Microso.........
    ▪矩阵最优路径       Given an NxM (N rows and M columns) integer matrix with non-negative values (0..MAX_INT inclusive). What is the maximum sum from going top left (0, 0) to bottom right (N-1, M-1) ? The condition is that when you're at point (p, q), you can only move .........

[1]Nginx学习之九-负载均衡(客户端请求与Nginx进程间负载均衡)
    来源: 互联网  发布时间: 2013-10-26
本文介绍的负载均衡是针对的客户端请求在多个Nginx进程之间的均衡。注意与客户端请求在多个后端服务器之间的均衡相区别。

负载均衡问题的产生

在nginx中,建立连接的时候,会设计负载均衡问题。在多个子进程争抢处理一个新连接事件时,一定只有一个worker子进程最终会成功建立连接,随后它会一直处理这个连接直到连接关闭。那么,就有可能出现这样的情况:有的子进程建立并处理了大部分连接,而有的子进程只处理了少量连接。这对多核CPU架构下的应用是很不利的。因为子进程之间应该是平等的,每个子进程应该尽量独占一个CPU核心。子进程间负载不均衡,必定会影响整个服务的性能。

如何解决负载均衡问题

与惊群问题的解决方法一样,只有打开了accept_mutex锁,才能实现子进程间的负载均衡。同时post事件机制也是解决负载均衡问题的关键。可以参考前一篇文章http://blog.csdn.net/xiajun07061225/article/details/9260535。
在ngx_event_accept方法建立新连接的过程中,初始化了一个全局变量ngx_accept_disabled。它就是负载均衡机制实现的关键阈值。其定义(/src/event/ngx_event.c):
ngx_int_t             ngx_accept_disabled;

初始化(sr/event/ngx_event_accept.c)是在函数ngx_event_accept中:
ngx_accept_disabled = ngx_cycle->connection_n / 8  - ngx_cycle->free_connection_n;

这样,在nginx启动的时候其实是个负值:-7/8 * ngx_cycle->connection_n。

依据这个值进行负载均衡的核心代码是在函数ngx_process_events_and_timers中(src/event/ngx.event.c):
         //负载均衡处理
        if (ngx_accept_disabled > 0) {
            ngx_accept_disabled--;
        } else {
            //调用ngx_trylock_accept_mutex方法,尝试获取accept锁
            if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
                return;
            }

解释一下:
当ngx_accept_disabled 为负数时,不会触发负载均衡操作,正常获取accept锁,试图处理新连接。
当ngx_accept_disabled 为正数时,会触发负载均衡操作。nginx此时不再处理新连接事件,取而代之的仅仅是把变量ngx_accept_disabled 减一,这表示既然经过一轮事件处理,那么负载肯定有所减小,所以要相应调整这个值。

即,当当前使用的连接超过总连接数的7/8的时候才会被触发,值越大,表示负载越重。每次调用process_events的时候只会将 ngx_accept_disabled  减一,直到ngx_accept_disabled 降到0,即使用的连接数降到总连接数的7/8。这样就减少了该worker进程处理新连接的机会,这样其他较空闲的worker进程就有机会去处理更多的新连接,以达到整个web服务器的均衡效果。

Nginx默认将accept_mutex配置项设置为accept_mutex on。

参考资料
《深入理解Nginx》
http://www.cppblog.com/converse/archive/2009/12/08/102816.html


作者:xiajun07061225 发表于2013-7-8 15:19:09 原文链接
阅读:163 评论:0 查看评论

    
[2]利用URL重写实现参数目录化
    来源: 互联网  发布时间: 2013-10-26

参数目录化,就是将 类似 http://www.abc.com/store/store.aspx?id=1024 这样的网址,对外改为 http://www.abc.com/1024。

要实现这种功能,可以用以下三种方式(应该不仅限这三种吧!)


1、用微软的 Microsoft URL 重写模块 2.0,但只能给IIS7使用,IIS6不行。

64位:

http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=1b8c7bd8-8824-4408-b8fc-49dc7f951a00

32位:

http://www.microsoft.com/zh-cn/download/details.aspx?id=5747

2、isapi_rewrite

http://www.helicontech.com/download-isapi_rewrite3.htm

但完全版有日期限制,如果不想掏钱,有大牛破解了,可以用下面这个:

http://download.csdn.net/detail/keke0307/3867086

3、urlrewriter.net

这个有源代码,可以自己编译。


机缘巧合之下,我用了方法一 和 二。因为开发机器是WIN7,装了IIS7,所以用微软的重写模块;而服务器是WIN2003,就用了isapi_rewrite。

下面就这两种方法分别做一点心得介绍。

事实上,这两种方法大同小异,IIS基本上不用怎么配置,没有网上说的那么玄妙,又是勾选,又是映射,又是权限之类,关键在于要写对正则表达式。


1、微软的 Microsoft URL 重写模块 2.0

安装好之后,就可以改写网站下的web.config了。

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <httpRuntime/>
  </system.web>
  <system.webServer>
    <rewrite>
      <rules>
	<!-- 实现http://localhost/1024 ==> http://localhost/store/store.aspx?id=1024 -->
        <rule name="storecode">
          <match url="^([1-9][0-9]*)/?$" ignoreCase="true"/>
          <action type="Rewrite" url="/store/store.aspx?id={R:1}"/>
        </rule>
	<!-- 实现http://localhost/1024/p=1&c=1 ==> http://localhost/store/store.aspx?id=1024&p=1&c=1 -->
        <rule name="storecode with param">
          <match url="^([1-9][0-9]*)/([^/]+)/?$" ignoreCase="true"/>
          <action type="Rewrite" url="/store/store.aspx?id={R:1}&{R:2}"/>
        </rule>
	<!-- 下面这些据说是从Discuz论坛里导出来的,肯定是正确的,供学习借鉴 -->
        <!--
                <rule name="已导入的规则 1">
                    <match url="^userinfo-([0-9]+)\.html$" ignoreCase="false" />
                    <action type="Rewrite" url="userinfo.aspx?userid={R:1}" 

appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 2">
                    <match url="^showforum-([0-9]+)\.html$" ignoreCase="false" />
                    <action type="Rewrite" url="showforum.aspx?forumid={R:1}" 

appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 3">
                    <match url="^showtopic-([0-9]+)\.html$" ignoreCase="false" />
                    <action type="Rewrite" url="showtopic.aspx?topicid={R:1}" 

appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 4">
                    <match url="^showforum-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
                    <action type="Rewrite" url="showforum.aspx?forumid={R:1}&page=

{R:2}" appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 5">
                    <match url="^showtopic-([0-9]+)-([0-9]+)\.html$" ignoreCase="false" />
                    <action type="Rewrite" url="showtopic.aspx?topicid={R:1}&page=

{R:2}" appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 6">
                    <match url="^archiver/showforum-([0-9]+)\.html$" ignoreCase="false" />
                    <action type="Rewrite" url="archiver/showforum.aspx?forumid={R:1}" 

appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 7">
                    <match url="^archiver/showtopic-([0-9]+)\.html$" ignoreCase="false" />
                    <action type="Rewrite" url="archiver/showtopic.aspx?topicid={R:1}" 

appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 8">
                    <match url="^archiver/showtopic-([0-9]+)-([0-9]+)\.html$" 

ignoreCase="false" />
                    <action type="Rewrite" url="archiver/showtopic.aspx?topicid={R:1}

&page={R:2}" appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 9">
                    <match url="^archiver/showforum-([0-9]+)-([0-9]+)\.html$" 

ignoreCase="false" />
                    <action type="Rewrite" url="archiver/showforum.aspx?forumid={R:1}

&page={R:2}" appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 10">
                    <match url="^tools/rss-([0-9]+)\.html$" ignoreCase="false" />
                    <action type="Rewrite" url="tools/rss.aspx?forumid={R:1}" 

appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 11">
                    <match url="^tools/spacerss-([0-9]+)\.html$" ignoreCase="false" />
                    <action type="Rewrite" url="tools/rss.aspx?uid={R:1}&type=space" 

appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 12">
                    <match url="^tools/photorss-([0-9]+)\.html$" ignoreCase="false" />
                    <action type="Rewrite" url="tools/rss.aspx?uid={R:1}&type=photo" 

appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 13">
                    <match url="^space\/((\w|\s)+)((\/?))?$" ignoreCase="false" />
                    <action type="Rewrite" url="space/index.aspx?user={R:1}" 

appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 14">
                    <match url="^space\/((\w|\s|-)+)((\/?))?\?((.*)+)$" ignoreCase="false" 

/>
                    <action type="Rewrite" url="space/index.asp      
    
[3]矩阵最优路径
    来源: 互联网  发布时间: 2013-10-26


Given an NxM (N rows and M columns) integer matrix with non-negative values (0..MAX_INT inclusive). What is the maximum sum from going top left (0, 0) to bottom right (N-1, M-1) ? The condition is that when you're at point (p, q), you can only move to either right (p, q+1) or down (p+1, q).

Expected time complexity O(N*M)
Expected space complexity O(N+M) 



about space complexity, need elaborate on it.





package com.zhuyu_deng.test;



public class Test
{
	private static int findOptPath(int[][] a)
	{
		int d[][] = new int[a.length][a[0].length];
		int m = a.length;
		int n = a[0].length;
		
		d[0][0] = a[0][0];
		for (int i = 1; i < m; ++i)
			d[i][0] = d[i - 1][0] + a[i][0];
		for (int j = 1; j < n; ++j)
			d[0][j] = d[0][j - 1] + a[0][j];
		
		for (int i = 1; i < m; ++i)
		{
			for (int j = 1; j < n; ++j)
			{

				if (d[i-1][j] > d[i][j-1])
					d[i][j] = a[i][j] + d[i-1][j];
				else
					d[i][j] = a[i][j] + d[i][j-1];
			}
		}
		
		for (int i = 0; i < m; ++i)
		{
			for (int j = 0; j < n; ++j)
				System.out.print(a[i][j] + "  ");
			System.out.println();
		}
		System.out.println();
		
		for (int i = 0; i < m; ++i)
		{
			for (int j = 0; j < n; ++j)
				System.out.print(d[i][j] + "  ");
			System.out.println();
		}
		return d[m - 1][n - 1];
	}

	public static void main(String args[])
	{
		// int[] a = {-2,11,-4,13,-5,-2};
		int[][] b = { { 0, -2, -7, 0 }, { 9, 2, -6, 2 }, { -4, 1, -4, 1 },
				{ -1, 8, 0, -2 } };
		int [][] matrix = 
			{	{2,3,4,1},
				{1,1,3,9},
				{2,2,3,1},
				{2,2,3,1}
			};
		System.out.println(findOptPath(matrix));
	}
}


作者:DENGZHUYU 发表于2013-7-9 17:27:06 原文链接
阅读:15 评论:0 查看评论

    
最新技术文章:
▪用户及权限基础 2---- Linux权限    ▪用户及权限基础 3---- Linux扩展权限    ▪git 简明教程(1) --创建及提交
▪背包 代码    ▪json对象的封装与解析    ▪01背包,完全背包,多重背包 ,模板代码
▪apache安装详解    ▪HDU 4668 Finding string (解析字符串 + KMP)    ▪《TCP-IP详解 卷1:协议》学习笔记(二)
▪素因子分解 Prime factorization    ▪C# DllImport的用法    ▪图的相关算法 iis7站长之家
▪Linux Shell脚本编程--nc命令使用详解    ▪solr对跨服务器表联合查询的配置    ▪递归和非递归实现链表反转
▪Linux磁盘及文件系统管理 1---- 磁盘基本概念    ▪Cholesky Decomposition    ▪HTTP协议学习
▪用C语言写CGI入门教程    ▪用hdfs存储海量的视频数据的设计思路    ▪java多线程下载的实现示例
▪【原创】eAccelerator 一个锁bug问题跟踪    ▪hadoop学习之ZooKeeper    ▪使用cuzysdk web API 实现购物导航类网站
▪二维数组中的最长递减子序列    ▪内嵌W5100的网络模块WIZ812MJ--数据手册    ▪xss 跨站脚本攻击
▪RobotFramework+Selenium2环境搭建与入门实例    ▪什么是API    ▪用PersonalRank实现基于图的推荐算法
▪Logtype    ▪关于端口号你知道多少!    ▪Linux基本操作 1-----命令行BASH的基本操作
▪CI8.7--硬币组合问题    ▪Ruby on Rails 学习(五)    ▪如何使用W5300实现ADSL连接(二)
▪不允许启动新事务,因为有其他线程正在该会...    ▪getting start with storm 翻译 第六章 part-3    ▪递归求排列和组合(无重复和有重复)
▪工具类之二:RegexpUtils    ▪Coding Interview 8.2    ▪Coding Interview 8.5
▪素因子分解 Prime factorization    ▪C# DllImport的用法    ▪图的相关算法
▪Softmax算法:逻辑回归的扩展    ▪最小生成树---Kruskal算法---挑战程序设计竞赛...    ▪J2EE struts2 登录验证
▪任意两点间的最短路径---floyd_warshall算法    ▪Sqoop实现关系型数据库到hive的数据传输    ▪FFMPEG采集摄像头数据并切片为iPhone的HTTP Stream...
▪Ubuntu 13.04 – Install Jetty 9    ▪TCP/IP笔记之多播与广播    ▪keytool+tomcat配置HTTPS双向证书认证
▪安装phantomjs    ▪Page Redirect Speed Test    ▪windows media player 中播放pls的方法
▪sre_constants.error: unbalanced parenthesis    ▪http headers    ▪Google MapReduce中文版
▪The TCP three-way handshake (connect)/four wave (closed)    ▪网站反爬虫    ▪Log4j实现对Java日志的配置全攻略
▪Bit Map解析    ▪Notepad 快捷键 大全    ▪Eclipse 快捷键技巧 + 重构
▪win7 打开防火墙端口    ▪Linux Shell脚本入门--awk命令详解    ▪Linux Shell脚本入门--Uniq命令
▪Linux(Android NDK)如何避免僵死进程    ▪http Content-Type一览表    ▪Redis实战之征服 Redis + Jedis + Spring (二)
▪Tomcat7.0.40 基于DataSourceRealm的和JDBCRealm的资源...    ▪利用SQOOP将ORACLE到HDFS    ▪django输出 hello world
▪python re    ▪unity3D与网页的交互    ▪内存共享基本演示
▪python join    ▪不再为无限级树结构烦恼,且看此篇    ▪python实现变参
▪打开文件数限制功能不断地制造问题    ▪Arduino Due, Maple and Teensy3.0 的 W5200性能测试    ▪Selenium实例----12306网站测试
▪基于协同过滤的推荐引擎    ▪C4.5决策树    ▪C#HTTP代理的实现之注册表实现
▪nosql和关系型数据库比较?    ▪如何快速比较这两个字符串是否相等?    ▪hdoj 1863 畅通工程 最小生成树---prime算法
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3