服务器开发
文章平均质量分 72
xiaofei_chain
手游方案提供者
展开
-
搭建一个后台服务器--引子
最近去了几家公司面试,有一些大公司(比如企鹅)的考核内容真心弱智,考的都是些算法,尼玛,拿一个刚毕业的学生来做说不定也可以过的,看来本来就不是在招搞服务器的,举个例子,企鹅多个部门都曾出的一道题:如何知道集合A,B中的相关性。意思就是哪些元素在A,B之中都有,哪些元素在A,B中不都出现。其实解法很简单,学过算法的完全可以做到 。我们知道集合具有互异性,就是集合中的元素只能出现一次,可以建一原创 2013-03-31 11:42:55 · 3947 阅读 · 4 评论 -
高并发服务器的设计--内存池的设计
不同的业务,设计也不尽相同,但至少都一些共同的追求,比如性能。做服务器开发很多年了,有时候被人问到,服务器性能是什么呢?各种服务器间拼得是什么呢?简单的回答就是QPS,并发数,但有时候想想也许也不对。QPS与并发数是针对同样的业务而言的,业务不同,相同的服务器能承受的压力也会不同。性能,也许可以打个俗点的比方:服务器就是一艘船,性能就是船的容量,开的速度,行得是否稳当。该用原创 2013-05-26 13:05:15 · 21804 阅读 · 14 评论 -
高并发服务器的设计--fastcgi的设计
服务器开发中不何或缺的要使用fastcgi,其使用方法如下:while( FCGI_Accept() >= 0 ){ printf( "Content-type: text/plain \r\n" "Content-Length: %d\r\n" "Connection: close\r\n\r原创 2013-05-23 10:17:51 · 5880 阅读 · 0 评论 -
搭建一个流媒体服务器--引子
在家休息一段时间了,中间有小公司老板邀请,也有企鹅的几个事业部的邀请,说实话要是放在以前应该都挺有兴趣,不过现在看的淡了。和企鹅几个HR聊过,人家总是自我感觉良好,以为薪水高一点就可以搞定原则了,其实在南山住的人有哪个不知道那个半夜12点还开着灯的公司,那个号称不夜城的公司。签企鹅说不定就是在出卖健康,出卖生命,只是过程看起来比较华丽。现在互联网公司都有一个迹象,加班都朝着无底线的方向走。原创 2013-06-08 15:18:17 · 3984 阅读 · 4 评论 -
搭建一个后台服务器--服务端(异步,大并发)
上篇的阻塞模式下服务器的并发只有几K,而真正的server 像nginx, apache, yumeiz 轻轻松松处理几万个并发完全不在话下,因此大并发的场合下是不能用阻塞的。1W的并发是一个分隔点,如果单进程模型下能达到 的话,说明至少在服务器这块你已经很厉害了。服务器开发就像一门气功,能不能搞出大并发,容错性处理得怎么样,就是你有没有内功,内功有多深。异步模式是专门为大并发原创 2013-03-31 18:31:42 · 7451 阅读 · 6 评论 -
P2P之我见,关于打洞的学问-------服务器架构
当用户A点击匹配的时候,服务端收到用户匹配请求,首先查询有无其他用户在进行匹配,如果没有就将A放进匹配池,如果有假设是B,就在AB间建立连接,同时返回AB。AB得到对方的信息后,依据服务器返回的连接类型进行连接操作。如果是打洞则进告诉打洞逻辑,否则进行中转逻辑。原创 2013-12-06 14:05:47 · 3616 阅读 · 1 评论 -
实时游戏对战引擎MatchVS,我的对战旅程
MatchVS对战引擎终于面世了,其对战效果简直屌爆了,有视频为证!2016年是中国电竞元年,所以让我们继续加油!原创 2016-01-28 12:13:13 · 3777 阅读 · 0 评论 -
jemalloc在linux上从安装到使用
首先,jemalloc是干什么的?我们看看作者自己的介绍:>jemalloc is a general purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support意思是说jemalloc干了malloc干的活,而且干得好一些,主要体现在避免内存碎片与并原创 2016-08-15 23:29:36 · 40543 阅读 · 2 评论 -
nginx在linux上从安装到使用
nginx在linux上从安装到使用如果你没听过nginx,那一定不是http后台开发人员。 相对于年代久远的apache,nginx显得小巧而强大。nginx使用的是单线程多进程模式,事件模型采用多路复用,对于反向代理类似的处理更用一筹。从官网上下载 http://nginx.org/download/nginx-1.11.3.tar.gz 解压: tar -xzvf nginx-1.1原创 2016-08-17 10:43:07 · 693 阅读 · 0 评论 -
nginx 如何使用rewrite
上一篇我们已经会安装nginx了,但是还不支持重定向。 要支持重定向得在nginx编译时安装pcre库。pcre全称是Perl Compatible Regular Expressions,是来处理正则表达式的。 我们去官网下载: http://www.pcre.org/我在linux直接下载并解压: cd /home/xiaofei/src wget ftp://ftp.csx.c原创 2016-08-17 17:43:26 · 3478 阅读 · 0 评论 -
nginx proxy_pass 反向代理的用法
反向代理简单来说就是代理服务器。nginx 对反向代理的支持应该是所有http服务器中最容易的。 其配置方法如下:原创 2016-08-20 12:42:47 · 20437 阅读 · 0 评论 -
nginx 反向代理-负载均衡
nginx 反向代理-负载均衡前一篇文章讲了反向代理的中转作用 实现了把一个复杂的网络地址用简单的地址替换。 实现了fastcgi, php的前端代理功能。 其实,反向代理作用远不止这些,下面我们仍以nginx为例: 按照之前的配置: location /music/{ proxy_pass http://music.baidu.com/; }结果: 浏览原创 2016-08-21 10:42:43 · 1106 阅读 · 0 评论 -
redis在linux上从安装到使用
redis 是目前比较流行的key-value数据存储系统,数据会存在内存中,与memcached不同的是会周期性的将数据落地到磁盘中。redis的安装过程:从redis官网下载3.2.3:http://download.redis.io/releases/redis-3.2.3.tar.gz解压出来的目录如下:原创 2016-08-15 13:54:02 · 1922 阅读 · 1 评论 -
高并发服务器的设计--架构与瓶颈的设计
做架构设计,难免有时候被人问及系统的瓶颈在哪,那首先来了解下什么是瓶颈?打个形象的比方,人的嘴巴可以吞下一整个面包,但是却咽不下去,因为食管不给力,它比较细,所以嘴巴能吞下的食物大小要受到食管的粗细限制。城市内部每天会产生几十万件跨城快递,可是跨城的交通不给力,只允许走小型卡车,一卡车一次就能装几千件,一天下来也不一定能投送的完。人在一定时间内能咽下多少食物,货运公司在一天运送多少货物原创 2013-05-27 20:48:57 · 10520 阅读 · 8 评论 -
高并发服务器的设计--缓存的设计
为什么需要缓存呢?很简单的道理,拿QQ做个比方,每天有几亿用户登录、查询个人信息,且这些信息基本不会变化,如果你是架构师,你会选择全部从数据库中查询么,估计会被笑的。一些业务要求大量且高速查询的,数据库必然会成为瓶颈,虽然可以通过横向扩容的方式优化,但这不是最优方案,其实服务器优化没有一个放之四海而皆准的最优方案,业务不同,最优方案也不同。举个例子,腾讯有十几亿用户,就光登录就是个头疼原创 2013-05-30 11:52:52 · 9830 阅读 · 13 评论 -
搭建一个后台服务器--服务端(阻塞)
为什么 要在标题后面加个“阻塞”呢,因为系统为了增大并发,减小等待(阻塞),建立了另一种事件模式,后文将介绍,这里只介绍阻塞的模型。阻塞服务器要干的事大致可以分为以下几步:1.创建服务端监听连接2.产生用户连接3.接收用户请求4.发送返回给用户敲码过程如下:设置监听地址与端口: addr_server.sin_family = AF_INET; add原创 2013-03-31 17:52:41 · 3829 阅读 · 2 评论 -
大并发服务器不得不说的技术--http 缓存
前面所说技术订都是服务器端一个人在努力,有时候也需要客户端配合。一个链接请求过程大致可以分成几个阶段如果客户端发送同样的请求,且结果都一样,我们是不是可以缓冲一下呢?是不是可以减少几步呢? 的确可以,一般来说以下几种方法:1.我们先试着在服务端进行缓冲,我们试着将一个已经返回的长链接发送内容不作释放,下次请求时直接返回刚才发送的内容,这个不适用于频繁访问,适原创 2013-03-20 16:10:04 · 3484 阅读 · 0 评论 -
大并发服务器不得不说的技术--writev
前面我们说过,对于静态文件的传输,用sendfile可以减少系统调用,现在我们看看动态的数据应该如何处理。首先,如果数据足够小(小于1024)且只有唯一的一个buffer,我们直接用 send/write 就可以了。通常的情况下,程序可能会在多个地方产生不同的buffer,如 nginx,第一个phase里都可能会产生buffer,放进一个chain里,如果对每个buffer调用一次s原创 2013-03-20 11:26:58 · 8784 阅读 · 2 评论 -
大并发服务器不得不说的技术--tcp cork
如果把tcp当成服务端与客户端的管道,cork 就是给管道加个塞子。为什么 要加个塞子呢?先来举个例子:int times = 10;while( times--){ send( sock_fd, buf, 1, 0 )}这段program会发送数据10次,每次就发送1个字节,这样会不会什么问题呢?记得以前农忙的时候,田里的稻子收割完了,要打成原创 2013-03-17 08:36:54 · 3638 阅读 · 3 评论 -
大并发服务器不得不说的技术--sendfile
socket发送函数。int send( SOCKET s, const char FAR *buf, int len, int flags );如果内容是动态生成的,一般是把传输内容直接丢给buf中用send函数传输,没有优化的空间。文件传输则要先把内容read到buf中,因此至少两次内核调用,如果文件很大,可能会用一个循环调用,如:while( size == P原创 2013-03-16 18:11:51 · 3069 阅读 · 0 评论 -
什么样的服务器才能叫做大并发
我觉得服务器在成为大并发前,首先要能承受住大并发的压力,无论能否正常返回,首先不能崩溃。apache和nginx是两个出名的服务器,先来分析一下它们。大量用户访问的时候,apache会创建大量的进程数,吃掉大量的内存,而nginx内存这块做得很好,不过这也是nginx的瓶颈所在。所谓有内存就是给你花的,你不花怎么对得起服务器呢,何况现在的服务器一般都是高配。快速响应与内存大小其实是原创 2013-03-13 15:40:50 · 4925 阅读 · 10 评论 -
搭建一个后台服务器--客户端
上篇规定的协议请求部分:request:username/password, 约定username与password 各占32个字节(联同末位0)可以将客户端的逻辑设计成:1.将username,password 封装进buffer2.连接服务端3.发送buffer4.接收二进制的系统当前时间 5.显示时间 代码如下:服务原创 2013-03-31 14:08:51 · 4872 阅读 · 1 评论 -
搭建一个后台服务器--服务端代码(异步,大并发)
#include #include #include #include #include #include #ifndef WIN32#include #include #include #include #include #include #else#include #define close( f ) closesocket( f )#endifstruc原创 2013-03-31 20:05:04 · 5442 阅读 · 10 评论 -
浅谈服务器的两种架构
今天和人电话聊了很长的技术问题,人家是成都卧龙工作室的,技术应该是很行的,但是在几个问题上我们的见解不一。一个单线程能不能形成几万的并发。这个问题首先就是个错误的提法,换个说法:nginx是不是就可以达到几万的并发。两个问题犯的是相同的错误。所有的并发都是针对业务处理的,业务简单点,像对于一些静态网页的处理,或者是无IO的事务,单线程和nginx都是可以达到几万的并发的。可是这原创 2013-06-09 19:16:00 · 3751 阅读 · 6 评论 -
高并发服务器的设计--连接池的设计
高并发服务器需要有一些池的设计,如内存池,连接池,数据库连接池。池(pool)的设计主要考虑到一些资源的频繁申请和释放,尤其是在高并发的服务器中,几万甚至几十万并发每秒,设计人员不得不去考虑这些。比如数据库连接池(sql pool),是通过TCP来通信的,属于IO类,有一定的延时,在高并发系统中频繁的创建会严重影响系统性能。内存( mem )的分配是要涉及锁( mutex )的,有锁就原创 2013-05-24 11:44:04 · 7651 阅读 · 12 评论 -
大并发服务器内存转换的灵活运用,memcpy的思考
在很多的网络开发中,经常会碰到一些内存转换,如下面的场景:#define PACKAGE_PARSE_ERROR -1#define PACKAGE_PARSE_OK 0int parse_package( int* a, int* b, int* c, int* d, char* buf, int buf_len ){ if( !buf || buf_len <原创 2013-05-22 11:42:18 · 4592 阅读 · 7 评论 -
rbtree 设计
什么是树?大街上到处都是,大伙别说没看过,除非你在沙漠中。树大致可以分为根,茎,枝,叶。大树枝会套小树枝,树枝上都有叶子。西方人有个圣诞节,圣诞来了,圣庭老人在树上的每个枝丫上都挂了礼物,礼物上都写上一个小朋友的名字,让小朋友去树上摘。问题来了,现在有两颗树,A原创 2013-06-02 22:22:01 · 3328 阅读 · 3 评论 -
hashmap 设计
先来看看泛型的数据队列。自然界中的数据关系多分为两种,拿人类来看,一类是靠人与人之间的关系来互相关联,我称为关系型,另一种是靠屁股相互关联,我称为位置型。对于关系型,一个富豪家族,女屌丝想成为其中成员很简单,与其中一个老头建立夫妻关系就加入了这个家族,被虐待了后想脱离它也很简单,解除夫妻关系就完事了。再看看位置型,比如厕所里有20个坑,上面都贴上数字,有人报告第17个坑堵了,找起来会很原创 2013-06-03 13:54:24 · 4042 阅读 · 8 评论 -
我对分布式计算框架的理解与设计
谢谢大家来看这篇文章,我想花点时间分享一下我对分布式计算的理解。 分布式服务有很多,比如hbase, hadoop, spark等,我所要讲述的重点不是这些服务的原理,而是用更浅显的话讲述更深刻的设计。 如何把多个的机器组合起来完成一件简单的计算任务,所以这方面的架构设计更多的关注服务器间的关系。 下面我们来设计一个框架,以进行简单的分布式计算。 我们假设计算目标有三类: 1.分布计算能力原创 2017-12-06 12:07:22 · 2301 阅读 · 0 评论