青山相待

            白云相爱

            梦不到紫罗袍共黄金带

            一茅斋

            野花开

            管甚谁家兴废谁成败

            陋巷单瓢亦乐哉

            贫,气不改!

            达,志不改!

随笔分类 -  软件架构

摘要:性能的目标 跑得更快吗?是用更少的资源跑得更快。如果不能兼得,我们通常选择跑得更快,这也是大多数时候性能优化的目的,也有些时候性能优化是为了减少资源消耗。 系统性能的定义 1.吞吐量,系统每s能处理的请求数、任务数 2.时延,系统处理一个请求或者任务的耗时 3.并发数,次级指标,同时接入的客户端数量 阅读全文
posted @ 2016-07-22 15:04 Leo.Z 阅读(464) 评论(1) 推荐(1)
摘要:BIO即background I/O service,后台I/O服务,是redis的aof持久化后台服务。 redis把阻塞的同步I/O操作交给后台I/O服务来完成:close和fsync。 close加入BIO的原因 1.如果fd是特定文件描述符的最后一份拷贝,那么文件描述符相关的资源会被释放。 阅读全文
posted @ 2016-07-12 10:19 Leo.Z 阅读(1882) 评论(0) 推荐(0)
摘要:基础要素 任务/数据划分 多个控制流并行,划分带来的负载均衡和通信开销也对程序的性能有决定性的作用 并发访问控制 多个控制流需要访问不同或者相同的资源,如何协调这些资源变得非常重要 并行化和面向对象 并行需要去除数据和控制的依赖关系,而面向对象把大问题解决成小问题,然后通过对象之间的通信来解决小问题 阅读全文
posted @ 2016-07-07 15:00 Leo.Z 阅读(327) 评论(0) 推荐(0)
摘要:概要 redis的每个server实例都维护着一个保存服务器状态的redisServer结构 struct redisServer { /* Pubsub */ // 字典,键为频道,值为链表 // 链表中保存了所有订阅某个频道的客户端 // 新客户端总是被添加到链表的表尾 dict *pubsub 阅读全文
posted @ 2016-07-03 11:22 Leo.Z 阅读(440) 评论(0) 推荐(0)
摘要:前言 C10K problem提出了一个问题,如果1w个客户端连接到server上,间歇性的发送消息,有哪些好的方案? 其中的一种方案是,每个线程处理多个客户端,使用异步I/O和就绪通知机制,redis无疑是一个很好的榜样 redis的特点和C10K proble的契合点 内存数据库; 单线程支持上 阅读全文
posted @ 2016-07-03 01:37 Leo.Z 阅读(1060) 评论(0) 推荐(0)
摘要:引言 C10K problem提到一种zero-copy的技术,可以提高网络的吞吐量,分布式消息队列kafka中在消费者消费消息的时候根据offset进行zero-copy。linux下的zero-copy通过sendfile API实现。 什么是zero-copy zero-copy在概念上是值操 阅读全文
posted @ 2016-07-03 00:33 Leo.Z 阅读(262) 评论(0) 推荐(0)
摘要:什么是C10K问题 I/O策略 软件架构 1.单线程解决多重I/O调用 不要使用阻塞/同步的调用,如果非要这么做,那就采用多进程或者多线程来并发处理。 使用非阻塞的调用和就绪通知策略,当下一个I/O可用时通知调用者。适用于套接字I/O,而不是磁盘I/O. 使用异步的调用和通知策略,当下一个I/O可用 阅读全文
posted @ 2016-07-03 00:06 Leo.Z 阅读(286) 评论(0) 推荐(0)
摘要:reactor介绍 reactor的工作模式就像它的名字一样,是一种反射模式,当事件发生时,根据发生的事件调用注册的处理器。 Reactor的优点和应用 Reactor最常用于非阻塞的socket 传统的设计是一种同步的停等协议,读写操作执行后要等待当前fd的下一次可读/写事件,这期间什么都不能干, 阅读全文
posted @ 2016-07-03 00:05 Leo.Z 阅读(1972) 评论(0) 推荐(0)
摘要:libev是一个开源库,实现了一个reactor模式事件驱动任务调度库。代码非常精简,包含所有实现的.c文件只有不到5000行。 支持的事件类型: ev_io ev_timer ev_periodic ev_signal ev_child ev_stat ev_idle ev_prepare and 阅读全文
posted @ 2016-07-03 00:04 Leo.Z 阅读(466) 评论(0) 推荐(0)
摘要:通过多路复用构建高性能服务器是一种常见的模型,单个I/O多路复用线程+一组工作线程,I/O线程负责协调分配任务,而实际工作交给工作线程处理。这种模型的好处在于高效并发和充分利用多线程的处理能力。 以memcached的构架图为例 memcached的主线程用epoll监听到EPOLLIN事件,并且触 阅读全文
posted @ 2016-03-30 22:03 Leo.Z 阅读(388) 评论(0) 推荐(0)
摘要:SOA是什么? 英语直译是基于服务的架构,就是一种技术框架,促使企业内部与外部所有相关的系统公开和访问定义良好的服务和绑定于服务的信息,进一步抽象成流程层和组合应用,从而构成解决方案。 说人话:重用服务和子系统。 SOA的优势 服务和行为的重用,在一个系统中可以方便的使用另外一个系统的服务。 快速修 阅读全文
posted @ 2016-03-28 22:33 Leo.Z 阅读(249) 评论(0) 推荐(0)
摘要:前言 从方向上改变糟糕的代码设计,如果你还是很直白的过程式思维,还在被一大堆的if else,随处可见的for、while所困扰,是时候学习设计模式了。 正文 软件设计中的合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。 合成和聚合都表示关联的特殊种类。聚合表示一种弱的”拥有“关系,体... 阅读全文
posted @ 2014-07-04 18:32 Leo.Z 阅读(217) 评论(0) 推荐(0)
摘要:前言 前两天学习了weak_ptr以后还是不甚明了,一则需要实际应用去锤炼,二来就是不懂观察者模式。 正文 观察者模式又叫发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,这个主题对象在状态发生改变时,会通知所有的观察者对象,使他们能够自动更新自己。通过一张visi... 阅读全文
posted @ 2014-07-04 16:44 Leo.Z 阅读(274) 评论(0) 推荐(0)
摘要:说明 本篇文章旨在讨论一些技术模型或者解决方案,从某一个侧面看技术的应用。 正文 1.即时战略游戏的AI设计 有没有想过WAR3的AI是怎么设计的,有木有想过做一款战略游戏的AI呢?AI的设计要基于游戏的架构:时间驱动模型或事件驱动模型,通常事件驱动的游戏可以用有限状态机的方式进行设计,或者扩展一... 阅读全文
posted @ 2014-07-04 11:48 Leo.Z 阅读(217) 评论(0) 推荐(0)
摘要:前言 我相信有很多像我一样的小菜朋友在纠结,写程序就像记一本流水账,偶尔用点基础数据结构改进一下程序效率,这完全看不到技术的存在,看不到成长,在下不才,愿做一个敢出头的小菜,分享一下我的体悟,欢迎各路大神来指点、敲打。 正文:我观象山多妩媚 象山本无奇,多情观之现妩媚。 对我们的程序也是这样的,同... 阅读全文
posted @ 2014-06-17 12:02 Leo.Z 阅读(3661) 评论(0) 推荐(0)