Monthly Archives: May 2013

© 2013 . All rights reserved.

千万级并发连接的秘密

既然我们已经解决了过万并发连接(C10K concurrent connection problem)的问题,现在如何升级到支持千万级的并发连接?你会说:“不可能”。不,现在,一些系统通过使用一些不广为人知的先进技术,已经能够提供千万级的并发连接。 为了明白这是如何实现,我们找到了Errata Security的CEO—— Robert Graham和他在Shmoocon 2013上精彩绝伦的演讲—— C10M Defending The Internet At Scale(译者注:翻墙的同学可以去看看)。 Robert解决这个问题的方法如此技艺高超,此前我从未听说过。他首先讲了一段Unix的历史,他提到Unix系统最开始并不是设计成通用的服务器操作系统,而是设计成电话网络中的控制系统。电话网络中,控制面与数据面有明显的区分,数据传输是在电话网络中进行的。问题就在于我们现在把Unix服务器当成是用户面的部分来使用,这是不应该的。如果我们设计内核时是为了让每台服务器运行一个应用程序,那会与现在的多用户内核有巨大得差别。 所以,他说关键是在于明白: ·内核并不是解决方法,内核是问题所在。 意思是: ·不要让内核做所有繁重的工作。将数据包处理,内存管理和线程调度等从内核中移出来,放到应用程序里,使其处理得更加高效。让Linux内核处理控制面,应用程序处理数据面。 这样,系统在处理上千万的并发连接时,200个时钟周期用于数据包处理,1400个时钟周期用于程序逻辑。由于内存访问要使用300个时钟周期,使用减少代码和减少cache丢失的方法进行设计也是关键所在。 一个专门的数据面处理系统,可以处理每秒1千万的数据包。而一个控制面的处理系统,每秒只能处理1百万的数据包。 如果这看起来很极端,那么记住一句老话:可扩展性是一门技术活。为了做出成功的系统,千万别把性能“外包”给操作系统。你必须亲自去完成。 现在,然我们看一下Robert是如何构建一个具备支持千万级别并发连接能力的系统…… C10K 问题 – 上一个十年 十年前,工程师们解决了C10K(concurrent 10,000)可扩展性问题。他们通过为内核打补丁、从多线程服务器(如Apache)迁移到事件驱动服务器(如Nginx和Node)。人们从Apache到可扩展服务器迁移了10年。在最近几年,我们看到了人们更快的采用可扩展服务器。 Apache的问题 ·Apache的问题在于,随着连接的增多,性能愈发下降。 ·关键点:性能与可扩展性是正交的。这两个是不同的概念。当人们讨论扩展时他们常常会说到性能,但是这两者间有着明显的区别。 ·对于只持续几秒的短连接,我们称之为快事务(quick transaction),如果你能够处理1000TPS(Transaction Per Second),那么你的服务器只能支持1000的并发连接。 ·如果事务的时长改为10秒,现在在1000TPS的情况下你能够支持10,000的连接。Apache的性能会急剧下降,即使这可能会触发了DoS攻击的检测。通过大量的下载就能使Apache宕机。 ·如果你能够每秒处理5000连接,而你要怎么做才能够每秒处理10,000连接呢?假设你升级了硬件而且使处理器快了两倍。会发生什么?你能够获得两倍的性能,但是你不能获得两倍的扩展。也许你只能够处理每秒6000的连接。如果持续升级硬件,你会得到同样的结果。性能与可扩展性是不一样的。 ·问题在于Apache会创建一个CGI进程然后杀掉他。这导致了其不可扩展。 ·为什么?服务器不能处理10,000个并发连接是由于内核使用O(n)算法。   ·内核中两个基本问题: … Continue reading

© 2013 . All rights reserved.

微信公众平台消息接口开发(31)微信浏览器HTTP_USER_AGENT判断

微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 微信浏览器 HTTP_USER_AGENT作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archive/2013/05/25/weixin-if31-http_user_agent.html    在微信公众平台的开发过程中,我们有时需要开发网页并判断是否是是来自微信浏览器访问,本文介绍如何做出这一判断。   一、$_SERVER数组 $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。   在 $_SERVER 中,你也许能够,也许不能够找到下面的这些元素。注意,如果以命令行方式运行 PHP,下面列出的元素几乎没有有效的(或是没有任何实际意义的)。 ‘PHP_SELF‘ 当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将得到/test.php/foo.bar。__FILE__ 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。 ‘argv’ 传递给该脚本的参数的数组。当脚本以命令行方式运行时,argv 变量传递给程序 C 语言样式的命令行参数。当通过 GET 方式调用时,该变量包含query string。 ‘argc’ 包含命令行模式下传递给该脚本的参数的数目(如果运行在命令行模式下)。 ‘GATEWAY_INTERFACE‘ 服务器使用的 CGI 规范的版本;例如,“CGI/1.1”。 ‘SERVER_ADDR‘ … Continue reading

© 2013 . All rights reserved.

Catlooking – 专心写作工具[Win/Ubuntu]

Catlooking 是一款专心写作工具,可选白天黑夜模式,文字会优美的自动滚屏,支持 Windows/Ubuntu,自动保存,可导出 txt 格式。@Appinn via @GeekPark 小众介绍过不少专心工具了,Catlooking 的效果看视频: 滚动文字的效果很赞 http://catlooking.com/ ©2013 scavin for 小众软件 | 加入我们 | 投稿 | 订阅指南 | 反馈(图片不正常等问题) b27c41ad47c2611d60d7452a4c02dd52      from 小众软件 http://www.appinn.com/catlooking/ would be fabulous additions to anyone’s fall weather collection Isabel Marant Shoes … Continue reading

© 2013 . All rights reserved.

Web开发者不容错过的20段CSS代码

摘要:共享已成为互联网的一种主流,尤其是分享一些非常实用的技术,本文收集了20段非常专业的CSS 2/CSS 3代码片段给大家,你可以把它们保存在IDE里、或者存储在CSS文档里,这些代码片段绝对会给你带来意外的惊喜。 Web开发技术每年都在革新,浏览器已逐渐支持CSS3特性,并且网站设计师和前端开发者普遍采用这种新技术进行设计与开发。但仍然有一些开发者迷恋着一些CSS2代码。 本文将分享20段非常专业的CSS2/CSS3代码供大家使用,你可以把它们保存在IDE里、或者存储在CSS文档里,这些代码片段绝对会给你带来意外的惊喜。 1. CSS Resets 网络上关于CSS重置的代码非常多。本段代码是根据Eric Meyer’s reset codes进行改编的,里面包含一点响应式图片和所有核心元素的边界框设置,这样就可以保持页边距和填充可以很好地对齐。 html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, … Continue reading

© 2013 . All rights reserved.

MariaDB线程池源码分析

  MariaDB线程池源码分析 心中无码   0  前言 MySQL5.5的Enterprise版本以plugin的方式引入了thread pool,在并发请求数达到一定 数量的时候,性能相比社区版貌似有不少提高, 可以看下这个性能对比。   在引入线程池之前,MySQL支持的线程处理方式(thread_handling参数控制)有no-threads和one-thread-per-connection两种方式,no-threads方式是指任一时刻最多只有一个连接可以连接到server,一般用于实验性质。 one-thread-per-connection是指针对每个连接创建一个线程来处理这个连接的所有请求,直到连接断开,线程 结束。是thread_handling的默认方式。   one-thread-per-connection存在的问题就是需要为每个连接创建一个新的thread,当并发连接数达到一定 程度,性能会有明显下降,因为过多的线程会导致频繁的上下文切换,CPU cache命中率降低和锁的竞争 更加激烈。   解决one-thread-per-connection的方法就是降低线程数,这样就需要多个连接共用线程,这便引入了线程 池的概念。线程池中的线程是针对请求的,而不是针对连接的,也就是说几个连接可能使用相同的线程处理 各自的请求。   MariaDB在5.5引入了一个动态的线程池方案,可以根据当前请求的并发情况自动增加或减少线程数,还好 MariaDB完全开源,本文结合MariaDB的代码来介绍下thread pool的实现。这里使用的MariaDB 10.0的 代码树。   1  相关参数 MySQL的参数都写在sys_vars.cc文件下。 static Sys_var_uint Sys_threadpool_idle_thread_timeout(  “thread_pool_idle_timeout”,  “Timeout in seconds for an idle thread in the thread pool.”  “Worker thread will be shut down after timeout”,  GLOBAL_VAR(threadpool_idle_timeout), CMD_LINE(REQUIRED_ARG),  VALID_RANGE(1, UINT_MAX), DEFAULT(60), BLOCK_SIZE(1));static Sys_var_uint Sys_threadpool_oversubscribe(  “thread_pool_oversubscribe”,  “How many additional active worker threads in a group are allowed.”,  GLOBAL_VAR(threadpool_oversubscribe), CMD_LINE(REQUIRED_ARG),  VALID_RANGE(1, 1000), DEFAULT(3), BLOCK_SIZE(1));static Sys_var_uint Sys_threadpool_size( “thread_pool_size”, “Number of thread groups in the pool. ” “This parameter is roughly equivalent to maximum number of concurrently ” “executing threads (threads in a waiting state do not count as executing).”,  GLOBAL_VAR(threadpool_size), CMD_LINE(REQUIRED_ARG),  VALID_RANGE(1, MAX_THREAD_GROUPS), DEFAULT(my_getncpus()), BLOCK_SIZE(1),  NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),  ON_UPDATE(fix_threadpool_size));static Sys_var_uint Sys_threadpool_stall_limit( “thread_pool_stall_limit”, “Maximum query execution time in milliseconds,” “before an executing non-yielding thread is considered stalled.” “If a worker thread is stalled, additional worker thread ” “may be created to handle remaining clients.”,  GLOBAL_VAR(threadpool_stall_limit), CMD_LINE(REQUIRED_ARG),  VALID_RANGE(10, UINT_MAX), DEFAULT(500), BLOCK_SIZE(1),  NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),   ON_UPDATE(fix_threadpool_stall_limit)); 这几个参数都有相应的描述,这里再稍微具体介绍一下。 thread_pool_size: 线程池的分组(group)个数。MariaDB的线程池并不是说一整个大池子,而是分成了不同的group,而且是按照到来connection的顺序进行分组的,如第一个connection分配到group[0],那么第二个connection就分配到group[1],是一种Round Robin的轮询分配方式。默认值是CPU core个数。   thread_pool_idle_timeout: 线程最大空闲时间,如果某个线程空闲的时间大于这个参数,则线程退出。 … Continue reading

© 2013 . All rights reserved.

想自学心理学,该看哪些心理学书籍?

心理导读:很多朋友问我,想自学心理学,但有不知道从哪里开始,该看哪些心理学书籍,小编整理了10本有代表性的心理学书籍,这些大部分是入门级书籍,帮你快速掌握心理学基本框架。—— www.xinli001.com  1、《心理学与生活》 BY格里格/津巴多 《心理学与生活》是美国斯坦福大学多年来使用的教材,也是在美国许多大学里推广使用的经典教材,也是一般大众了解心理学与自己的极好读物。凡是你问心理学专业的童鞋推荐书籍,一般都绕不开这本书。 >>> 下载书籍 2、《心理咨询的技巧和策略》 BY艾伦•艾维 一本非常实用的心理咨询书籍,教你如何使用咨询技巧,层层剖析心理个案,还有大量练习帮你成为优秀的心理咨询高手。 >>> 下载书籍 3、《与”众”不同的心理学》 BY斯塔诺威克 这本书介绍了心理学研究的本质、内容、科学方法和社会意义,它以深入浅出、充满睿智的论述去纠正人们对心理学的误解,帮助读者了解心理学的真相。可以说它是一本引导”消费者”认识心理学”文化产品”的指南,故定名为《与”众”不同的心理学》。 >>> 下载书籍 4、《改变心理学的40项研究(第5版)》 BY罗杰•霍克 本书分十个心理学专题,有“生物学与人类行为”、“知觉与意识”、“学习和条件反射”、“智力、认知和记忆”、“人的发展”、“情绪和动机”、“人格”、“精神病理学”、“心理治疗”和“社会心理学”。 >>> 下载书籍 5、《积极情绪的力量》 BY芭芭拉•弗雷德里克森 你是欣欣向荣,还是衰败凋零?这完全取决于你内心由衷的积极情绪。积极情绪不是越多越好,消极情绪也不是越少越好。 >>> 下载书籍 6、《积极心理学》 BY卡尔 积极心理学是当代最热的心理学研究领域之一,一本让我们如何幸福的书籍,非常值得品读。 >>> 下载书籍 7、《社会心理学》 BY伦森 外国写的书总是深入浅出的解释很多社会现象,这本书的内容非常有可读性,而且和我们生活息息相关,看完这本书,你会对很多社会问题有种豁然开朗的感觉。 >>> 下载书籍 8、《人格心理学》 BY伯格 本书行文流畅、通俗易懂,融入了丰富的生活案例,并穿插一些新闻报道和相关自测题,帮助读者测验自己或他人的人格特征,还会帮助你了解各大心理学流派对人格的看法,其实精神分析只是心理学流派中的其中一部分而且近年来受到越来越多的质疑。 >>> 下载书籍 9、《引爆点:如何制造流行》 BY马尔科姆•格拉德威尔 《引爆点》是一本谈论怎样让产品发起流行潮的专门性著作。书中详细地指导了我们如何去寻找目标客户中的传播员、内行与推销员——那些有着非凡人际能力的人们。 >>> 下载书籍 10、《心理学的故事》 BY墨顿•亨特 … Continue reading

© 2013 . All rights reserved.

Linux下的ORACLE安装,成功率99.99999%

相信很多童鞋都有过在Linux上安装Oracle数据库的痛苦经历,其中绝大多数都是环境设置的问题。我给大家推荐一个国外大牛写的Oracle的安装脚本 OTK,是用Bash写的,这东东大大简化了Oracle安装过程,而且成功率达到99.9999%以上,只要确保你的Linux系统是干净的,那么按照这个教程,保证你会安装成功。 准备工作 OTK针对各种Linux提供了 安装文档,本文使用的RHEL5.5_x86_64位,数据库版本为11gR2,主要参考这个 文档。 首先准备阿好如下的安装文件: linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip oratoolkit-1.0.2.1.5-1.noarch.rpm 下载上述文件并放在/var/tmp/oracle目录下。最好要把你的YUM源指向你的系统安装光盘或者ISO文件。 安装OTK 用root登陆,执行如下命令: # su – root # cd /var/tmp/oracle # ls -1 oratool* oratoolkit-1.0.2.1.5-1.noarch.rpm # rpm -ivh oratoolkit-1.0.2.1.5-1.noarch.rpm Preparing… ########################################### [100%] 1:oratoolkit ########################################### [100%] otk已经帮我们建立了oracle用户,下面需要设置Oracle用户密码 # passwd oracle Changing password for user … Continue reading

© 2013 . All rights reserved.

自制LED发光订婚戒,GEEK也能有妹纸

怎样能够将一条钛合金打造成一个LED的在靠近能量源的时候会发光的订婚戒呢?首先,你要有个妹子(#小寒:这真的是原文说的不是我说的)。然后,一大堆其他的事情。最后,就成了,魔戒。 Ben Kokes 就造出了这样一枚戒指。戒指里面藏了一个铜线圈,这样当戒指靠近磁场的时候,外面镶的石头就会发光。在 Kokes 的网站上,可以看到详细的制作过程。 [小寒 via io9 & kokes.net] (#小寒:妹子的观点:会发光有什么用,是白金吗?是钻石吗?=_=) >>点这里浏览原文<< © 煎蛋 / 随便看看 / 煎蛋的微博 / 图片托管于又拍云存储      from 煎蛋 http://jandan.net/2013/05/24/led-ring-diy.html not necessarily on what was really said woolrich jassen dames redeems the franchise but still … Continue reading

© 2013 . All rights reserved.

赖床时间不浪费,“起床20分”叫你起床的同时自动播报你想听的内容

赖床是件很棒的事情,要是在赖床的过程中再自动播放些新闻、音乐什么的就更棒了!“起床20分”就能帮你做这样的事。这款应用定位为床上信息产品,锁定人们起床后20分钟和睡前20分钟的时间空挡,自动为用户播报之前设定好的内容,音乐、新闻、广播等。 在选定起床时间后,到达起床的时间点,“起床20分”就会发出三声闹铃声(自己设定),三声过后开始自动播放用户设置的内容,时间由用户设置,最多20分钟。应用中内置有国内外新闻、百度听音乐、中小学英语和新概念英语,用户也可以自定义播放的内容,不过需要将自定义的内容提前上传到“起床20分” PC端的主页保存至云端服务器,再在应用中选择播放。晚上睡觉因大多数人没有固定的时间点,故需要手动点击播放,可以看到在睡前内容的选择上,多了一项我的本机音乐。在时间设定的最后一分钟声音会渐小到停止。 为什么会有这个想法呢?起床20分的负责人周榕告诉36氪,他的孩子每天起床后和睡觉前都要听英语,之前用录音机,需要人工开关,很麻烦,而自己也希望在起床后和睡觉前听一些国内的新闻,但躺在床上不想动,于是就萌生了做起床20分的念头。周榕说,有研究表明,睡觉和起床前20分钟是一个人培养语感最佳的时候,起床20分正是利用这一特点,为学生提供一个良好的语感培养环境。 当然,想成为一款有趣又实用的应用,起床20分的界面还是过于单调,功能也还是过少,如果你现在正躺在床上,不妨下一个试试看:iOS客户端 、安卓客户端。 除非注明,本站文章均为原创或编译,转载请注明: 文章来自 36氪 36氪官方iOS应用正式上线,支持『一键下载36氪报道的移动App』和『离线阅读』 立即下载! from 36氪 | 关注互联网创业 http://www.36kr.com/p/203518.html by using personal computer popular generating woolrich arctic parka The Do Nots of Male Fashion earned a mere 20 points valentino shoesTips to be … Continue reading

© 2013 . All rights reserved.

Android JNI和NDK学习(02)–静态方式实现JNI

Android JNI和NDK学习(02)–静态方式实现JNI   JNI包括两种实现方法:静态和动态。两种方法的区别如下: 静态:先由Java得到本地方法的声明,然后再通过JNI实现该声明方法。 动态:先通过JNI重载JNI_OnLoad()实现本地方法,然后直接在Java中调用本地方法。   本文介绍静态实现方式,下一篇会介绍动态实现方式。 1 首先,在Eclipse下新建一个工程myndk Myndk.java的代码如下: 1 package com.skywang.ndk; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.widget.TextView; 6 7 public class Myndk extends Activity { 8 9 @Override10 public void onCreate(Bundle savedInstanceState)11 {12 … Continue reading

© 2013 . All rights reserved.

Android JNI和NDK学习(01)–搭建NDK开发环境

Android JNI和NDK学习(01)–搭建NDK开发环境 本文主要介绍“JNI”、“Android NDK”以及“如何搭建Android NDK开发环境” 1 JNI介绍 JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。   2 NDK介绍 Android NDK,即Native Development Kit。众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。Android的NDK是采用JNI机制实现的。   3 NDK开发环境需求 (一)linux开发环境。如ubuntu操作系统,或cygwin模拟环境;因为jni编程会用到gcc等交叉编译环境。     本文环境:ubuntu 12.04。 (二)Android应用开发环境。包括eclipse、jdk等。     本文环境:ubuntu 12.04下搭建好的eclipse开发环境。 (三)Android ndk开发包。     本文环境:(ubuntu)ndk r7b版本   本文只介绍如何“(三)Android ndk开发包”的配置。 … Continue reading

© 2013 . All rights reserved.

最佳 Nginx 日志分析工具 GoAccess – Best Nginx log analyzer

非常小又精悍的 Nginx 日志分析工具 GoAccess,今天在 CentOS VPS 上安装测试了一番 就2个字,神器! 可以用 XShell 或 Putty 上去命令查看,也可以生成 html 报告,先看图 原文作者:21Andy.com Main scrollable dashboard Operating Systems module/report Browsers module/report. All reports are searchable Main scrollable window/report Hosts module/report – Reverse DNS & IP Geolocation Full … Continue reading