浮萍晓生的开发日志

记录学习的旅程,把握可预见的未来

导航

文章分类 -  系统设计

摘要:JMS是Java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS支持两种消息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即点对点和发布订阅模型。P2P在P2P模型中,有下列概念:消息队列(Queue)、发送者(Sender)、接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。l 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)l 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收 阅读全文

posted @ 2014-03-20 10:32 浮萍晓生 阅读(319) 评论(0) 推荐(0)

摘要:订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。 将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相应对象间的一致性,这样会给维护、扩展和重用都带来不便。当一个对象的改变需要同时改变其他对象,而且它不知道具体有多少对象需要改变时,就可以使用订阅发布模式了。 一个抽象模型有两个方面,其中一方面依赖于另一方面,这时订阅发布模式可以将这两者封装在独立的对象中,使它们各自独立地改变和复用。订阅发布模式所做的工作其实就是在解耦合。让耦合的双方都依赖于抽象,而不是依赖.. 阅读全文

posted @ 2014-03-20 10:24 浮萍晓生 阅读(128) 评论(0) 推荐(0)

摘要:一、 订阅杂志我们很多人都订过杂志,其过程很简单。只要告诉邮局我们所要订的杂志名、投递的地址,付了钱就OK。出版社定期会将出版的杂志交给邮局,邮局会根据订阅的列表,将杂志送达消费者手中。这样我们就可以看到每一期精彩的杂志了。仔细思考一下订杂志的过程,我们会发现这样几个特点:1、 消费者订杂志不需要直接找出版社;2、 出版社只需要把杂志交给邮局;3、 邮局将杂志送达消费者。邮局在整个过程中扮演了非常重要的中转作用,在出版社和消费者相互不需要知道对方的情况下,邮局完成了杂志的投递。二、 发布-订阅消息模式刚刚讲了订阅杂志,下面我们会讲传统调用模式演化到发布-订阅消息模式。有些网站在注册用户成功后发 阅读全文

posted @ 2014-03-20 10:23 浮萍晓生 阅读(164) 评论(0) 推荐(0)

摘要:概述在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。意图将抽象部分与实现部分分离,使它们都可以独立的变化。[GOF《设计模式》]结构图图1 Bridge模式结构图生活中的例子桥接模式将抽象部分与它的实现分离,使它们能够独立地变化。一个普通的开关控制的电灯、电风扇等等,都是桥接的例子。开关的目的是将设备打开或关闭。实际的开关可以是简单的双刀拉链开关,也可以是调光开关。图2使用电子开关例子的桥接对象图桥接模式解说在创建型模式里面, 阅读全文

posted @ 2014-03-20 10:17 浮萍晓生 阅读(201) 评论(0) 推荐(0)

摘要:为了提高服务器的性能和工作负载能力,企业通常会使用DNS服务器、网络地址转换等技术来实现多服务器负载均衡,特别是目前企业对外的互联网Web网站,许多都是通过几台服务器来完成服务器访问的负载均衡。 目前企业使用的所谓“负载均衡服务器”,实际上它是应用系统的一种控制服务器,所有用户的请求都首先到此服务器,然后由此服务器根据各个实际处理服务器状态将请求具体分配到某个实际处理服务器中,对外公开的域名与IP地址都是这台服务器。负载均衡控制与管理软件安装在这台服务器上,这台服务器一般只做负载均衡任务分配,但不是实际对网络请求进行处理的服务器。 一、企业实现Web服务器负载均衡 为了将负载均匀的分配给... 阅读全文

posted @ 2014-03-14 16:23 浮萍晓生 阅读(121) 评论(0) 推荐(0)

摘要:在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1.泛化(Generalization) 【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。 【箭头指向】:带三角箭头的实线,箭头指向父类 2.实现(Realization) 【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现. 【箭头指... 阅读全文

posted @ 2014-03-13 11:47 浮萍晓生 阅读(87) 评论(0) 推荐(0)

摘要:UML定义的关系主要有六种:依赖、类属、关联、实现、聚合和组合。这些类间关系的理解和使用是掌握和应用UML的关键,而也就是这几种关系,往往会让初学者迷惑。这里给出这六种主要UML关系的说明和类图描述,一看之下,清晰明了;以下就分别介绍这几种关系:继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;实现指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此 阅读全文

posted @ 2014-03-13 11:30 浮萍晓生 阅读(117) 评论(0) 推荐(0)

摘要:boost::asio 在创建io_service时,可以指定线程数,如果没有指定,默认是一个线程,也就是io_service run的那个线程,如果没有任务运行,该线程会退出。 如果在创建的时候指定了线程数,那么io_service在执行的时候线程数就可以并发执行,如果你run的线程还是只有1个,那么io_service想多线程执行也没有条件,asio在内部是没有创建多线程的,所以这个时候需要你来手动创建多个线程执行io_service的run操作,这样才可以提高效率。顺便说下,worker辅助类可以保证ioservice一直run下去,直到调用stop,才会退出,这个是个很不错的用法... 阅读全文

posted @ 2014-02-26 14:31 浮萍晓生 阅读(507) 评论(0) 推荐(0)

摘要:文章架构简图:高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”。如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部(指挥部就是数据库及分布式存储)。如:能缓存在用户电脑本地的,就不要让他去访问CDN。 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了。能访问静态服务器的,就不要去访问动态服务器。以此类推:能不访问数据库和存储就一定不要去访问数据库和存储。说起来很轻松,实际做起来却不容易,但只要稍加努力是可以做到的,Google的日独立IP过亿不也做到了么?我们这几千万的PV站比起Go 阅读全文

posted @ 2014-02-21 11:04 浮萍晓生 阅读(168) 评论(0) 推荐(0)

摘要:目前网站架构一般分成网页缓存层、负载均衡层、 WEB层和数据库层,我其实一般还会多加一层,即文件服务器层,这样我们在后面的讨论过程中,我们可以依次用这五层对网站架构来进行讨论;这里为了更具有说服力,我将用三个并发较大的生产环境来说明下,一个是我现在维护的电子商务网站(并发最大峰值2900,日PV500万左右)、我目前维护的电子广告网站(并发最大峰值1500,日PV150万左右)、以前维护的大型CDN门户广告网站(并发最大峰值5000,日PV5000万左右)。网页缓存层首先说下这个网页缓存层,比如CDN租赁(效果比公司自己部署Squid/Varnish要好,他们专业,价格低廉,比如快网/CC等( 阅读全文

posted @ 2014-02-21 10:50 浮萍晓生 阅读(125) 评论(0) 推荐(0)

摘要:其实就一句话把所有的用户访问 尽量都往前推如果把用户比作来犯的“敌人”,我们一定要把他们挡在800里之外的老巢(浏览器)中,不能让他们一下子打到我们的指挥部(数据库或者其他数据存储设备)比如:能缓存在用户本地的就不要让他去访问CDN能缓存在CDN服务器的,就不要让CDN去访问静态服务器能访问静态服务器的,就不要去访问动态服务器能访问缓存的,就不要去访问数据库高并发网站访问的几个层次第一层:在用户浏览器端,使用apache的mod_deflate压缩传输,在比如:expires功能 deflate和expires功能利用的好,就会大大提升用户体验效果及减少网站带宽, 减少后端服务器的压力。当然, 阅读全文

posted @ 2014-02-21 10:25 浮萍晓生 阅读(240) 评论(0) 推荐(0)

摘要:·概要: 接触前摄器模式是在学习BOOST.ASIO时看到的—BOOST.ASIO内部是采用的前摄器模式实现的,为了深入理解BOOST.ASIO才学习一下前摄器模式。 同时采用前摄器模式的应用还有windows平台的IOCP和ACE--常听说的,还有其他很多应用。 学习之后才发现工作以来的通信学习应用从最开始的简单的SOCKET通信到应用BOOST.ASIO挺符合学习规律的。·要点:传统并发模型: 原理是根据CPU数量创建相应的线程,而每个线程中都执行: 等待新连接—>接受新连接—>利用新连接通信(I/O)—>结束连接 -->继续等待新连接(重复这个 阅读全文

posted @ 2014-02-19 18:00 浮萍晓生 阅读(363) 评论(0) 推荐(0)

摘要:1、标准定义两种I/O多路复用模式:Reactor和Proactor一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理器。两个与事件分离器有关的模式是Reactor和Proactor。Reactor模式采用同步IO,而Proactor采用异步IO。在Reactor中,事件分离器负责等待文件描述符或socket为读写操作准备就绪,然后 阅读全文

posted @ 2014-02-19 13:50 浮萍晓生 阅读(105) 评论(0) 推荐(0)

摘要:简介什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格 阅读全文

posted @ 2014-02-18 14:00 浮萍晓生 阅读(119) 评论(0) 推荐(0)

摘要:需求转而学习很多时候不少做开发的同学都认为技术更新的快,新技术、新概念层出不穷,大家乐此不疲的去跟随着所谓的“技术趋势”走在风头浪尖上,但其实往往忘记了一个最重要的问题“满足客户需求”。其实技术就是为满足需求服务的,用最小的代价来满足用户的需求,以最简单高效的方式来达到目标,就是每个开发者应该追求的。(不要因为自己的架构很简单就脸红拿不出手,只要你在满足用户当前需求的基础上对未来有所考虑,那么化繁为简就是一种能力的表现)SIP(服务集成平台)5.7版本中对于未来多个服务提供商,多种类型的服务,在每日几亿的调用压力下,需要找到一个解决方案:可以分流不同服务提供商的服务,分流不同类型的服务,服务隔 阅读全文

posted @ 2014-02-17 17:59 浮萍晓生 阅读(318) 评论(0) 推荐(0)

摘要:视频网站可以分为两类核心业务:视频上传和视频播放。视频上传从上传到发布视频的时间可能会比较长,尤其是遇到大视频,转换服务器的压力会比较大,内部传输的带宽消耗比较多,这个给用户的体验会比较差。在产品,技术和服务上要多考虑怎么满足用户的“快”感。这是一个系统工程,不仅仅是产品技术的问题,还有很重要的内容监管。上传视频量太大,内容审核人员忙不过来,出现延迟。需要做策略上的调整,例如:先发布后审核,特殊账号免审核。但有个政策风险需要考虑,万一内容监管出了纰漏,会吃官司,甚至公司被迫关门。视频播放Web服务器的压力不是最大的,资源最紧张的地方还是“流媒体服务器”。几乎所有的视频分享网站的播放器都是fla 阅读全文

posted @ 2014-02-12 15:29 浮萍晓生 阅读(186) 评论(0) 推荐(0)

摘要:FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB [storage server list]的映射表。Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的 阅读全文

posted @ 2014-02-10 12:08 浮萍晓生 阅读(251) 评论(0) 推荐(0)