架构设计
文章平均质量分 92
talentluke
这个作者很懒,什么都没留下…
展开
-
海量数据处理系列(二)系统过载保护
前言:前段时间在网上看到腾讯后台开发总监bison分享的一篇文章《浅谈过载保护》,读来受益匪浅。刚好自己也在处理系统请求过载的问题,把自己的一些心得体会总结出来拿来与大家一起探讨。 在bison的文章中谈到:对于延时敏感的服务,当外部请求超过系统处理能力,如果系统没有做相应保护,可能导致历史累计的超时请求达到一定的规模,像雪球一样形成恶性循环,由于系统处理的每个请求都因...原创 2013-04-03 17:47:53 · 207 阅读 · 0 评论 -
软件级负载均衡器(LVS/HAProxy/Nginx)的特点和对比
现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:一种是通过硬件来进行进行,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业 的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;另外一种就是类似于LVS/HAProxy、 Nginx的基于L...原创 2013-05-17 11:11:59 · 96 阅读 · 0 评论 -
应用架构设计的三个类型
转载http://www.jdon.com/43952前段时间在论坛回答两个问题:事务和事件,这两个概念涉及到业务和技术架构的区分问题,合适的架构解决合适的业务,就像不同运输工具装载不同的运输物一样,人用客车装载,货物用卡车装载。通过长期业务实践,我们会发现业务中隐约有一些通用共同的东西,如果我们能够总结出这些通用的业务功能应该使用什么技术架构解决,也就是解决了大部分软件系统的共...原创 2012-12-04 11:08:28 · 307 阅读 · 0 评论 -
关于软件的任务到底是什么的思考
摘自http://www.jdon.com/43127首先,我觉得软件是用来被用户使用的,也就是说软件是用来帮用户完成一些事情的。从下面的用例图可以很好的理解用户与软件的关系:上图是超市里的一个营业员处理一笔销售的一个用例。从这个用例我们可以清楚的看到营业员和系统之间的一个交互。从中我们可以清晰的得出系统该做什么:makeNewSaleenterItemmakePaymen...原创 2012-12-12 10:53:16 · 121 阅读 · 0 评论 -
关于领域建模时考虑用户需求的出发点的理解
摘自http://www.jdon.com/42751最近又重温了领域驱动设计的原著,有了一些新的理解。现在我觉得我能更好地理解jdon007之前说的下面这段话了。“用户需求”不能等同于“用户”,捕捉“用户心中的模型”也不能等同于“以用户为核心设计领域模型”。 《老子》书中有个观点:有之以为利,无之以为用。在这里,有之利,即建立领域模型;无之用,即包容用户需求。举些例子,...原创 2012-12-12 15:32:41 · 197 阅读 · 0 评论 -
抽象类与接口选择
从设计理念层面看 abstract class 和 interface 上面主要从语法定义和编程的角度论述了abstract class和interface的区 别,这些层面的区别是比较低层次的、非本质的。本小节将从另一个层面:abstract class和interface所反映出的设计理念,来分析一下二者的区别。作者认为,从这个层面进行分析才能理解二者概念的本质所在。 前面已经提到过,...原创 2013-12-06 00:20:06 · 129 阅读 · 0 评论 -
性能调优攻略
转载自http://coolshell.cn/articles/7490.html 关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充。在开始这篇文章之前,大家可以移步去...原创 2013-08-29 00:12:27 · 95 阅读 · 0 评论 -
API设计:用流畅接口构造内部DSL
摘自http://coolshell.cn/articles/5709.html程序设计语言的抽象机制包含了两个最基本的方面:一是语言关注的基本元素/语义;另一个是从基本元素/语义到复合元素/语义的构造规则。在C、C++、Java、C#、Python等通用语言中,语言的基本元素/语义往往离问题域较远,通过API库的形式进行层层抽象是降低问题难度最常用的方法。比如,在C语言中最常见的方式是提...原创 2013-09-05 18:29:05 · 147 阅读 · 0 评论 -
一些软件设计的原则
摘自http://coolshell.cn/articles/4535.html 以前本站向大家介绍过一些软件开发的原则,比如优质代码的十诫和Unix传奇(下篇)中所以说的UNIX的设计原则。相信大家从中能够从中学了解到一些设计原理方面的知识,正如我在《再谈“我是怎么招聘程序”》中所说的,一个好的程序员通常由其操作技能、知识水平,经验层力和能力四个方面组成。在这里想和大家说说设计中的一些...原创 2013-09-11 00:12:53 · 96 阅读 · 0 评论 -
大型网站架构演变和知识体系
源自http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html 之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么一个网站需要那么复杂的技术,于是有了...原创 2013-05-13 11:39:02 · 97 阅读 · 0 评论 -
分布式架构关键技术
分布式的概念所谓分布式,狭义的指代以Google的三驾马车,GFS、Map/Reduce、BigTable为框架核心的分布式存储和计算系统。Hadoop是一个基于Java实现的,开源的,分布式存储和计算的项目。作为这个领域最富盛名的开源项目, Hadoop实现的是分布式的文件系统HDFS,和分布式的计算(Map/Reduce)框架。分布式架构关键技术主要有分布式文件系统、分布式存储和分布...原创 2013-04-15 09:51:33 · 282 阅读 · 0 评论 -
分布式Web服务器架构
最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候已经是托管了一台主机,并且有一定的带宽了,这个时候由于网站具备了一定的特色,吸引了部分人访问,逐渐你发现系统的压力越来越高,响应速度越来越慢,而这个时候比较明显的是数据库和应用互相影响,应用出问题了,数据库也很容易出现问题,而数据库出问题的时候,应用也容易...原创 2013-04-15 09:52:15 · 121 阅读 · 0 评论 -
不变性immutablity设计
摘自http://www.jdon.com/42961不变性是统领业务分析和高性能架构重要法门,通过业务上不变性分析设计,可以实现代码运行的并发高性能和高扩展性。不可变性是一种抽象,它并不在自然界中存在,世界是可变的,持续不断变化。所以数据结构是可变的,他们是描述真实世界某段时间内的状态。而状态经常会被修改,如下面情况:1.状态被并发线程同时修改2.多个用户对一个共享对象(...原创 2012-11-08 14:39:09 · 269 阅读 · 0 评论 -
为什么要使用EJB?
源于http://www.jdon.com/artichect/whyEJB.htm首先,我们必须明确,为什么要使用J2EE?J2EE优点是什么?使用J2EE的主要原因是多层结构,传统的两层C/S结构难于维护,稳定性极差,界面代码和数据库代码混淆在一起,牵一动百,多层结构使得界面和数据库完全分离,并且诞生了中间件这样的技术,如下图:Web+EJB能组成真正的多层结构 为什么使用...原创 2013-04-23 10:17:31 · 82 阅读 · 0 评论 -
EDA事件驱动架构 领域事件 Event Sourcing
摘自http://www.jdon.com/eda.html EDA(Event-driven architecture)是以事件为核心,与SOA以服务为核心有本质区别,是状态模式的延伸到架构上,事件是触发状态变化的根源,事件是介于业务和技术两者之间的概念,用户界面是事件主要发生来源,事件也可以来源其他系统或模块,通过事件可以实现系统或组件之间松耦合。EDA可以实现SOA服务之...原创 2012-11-12 10:11:21 · 524 阅读 · 0 评论 -
DDD DCI和领域事件
摘自http://www.jdon.com/jdonframework/dci.html DDD是领域驱动设计(Domain-Driven Design )的简称,DDD是一种分析设计建模方法,它倡导统一语言,提出了实体和值对象 以及聚合根等概念,借助DDD我们能够在结构理清需求中领域模型。DDD专题。 DCI: Data数据模型, Context上下文或场景, I...原创 2012-11-12 14:40:05 · 389 阅读 · 0 评论 -
DCI架构是什么?
摘自http://www.jdon.com/37976DCI是数据Data 场景Context 交互Interactions的简称,DCI是一种特别关注行为的模式(可以对应GoF行为模式),而MVC模式是一种结构性模式,MVC模式由于结构化,而可能忽视了行为事件。我在javascript事件总线一文中也谈过这个问题,Javascript这种函数式functional语言...原创 2012-11-12 17:19:26 · 2332 阅读 · 0 评论 -
混合OO和Functional设计
摘自 http://www.jdon.com/43907面向对象定位于系统高层次,面向函数编程是定位于低层次. 来自Tell Above, and Ask Below - Hybridizing OO and Functional Design重新定义了面向对象,纠正了以往对OO的错误观点:Object-orientation is better for the...原创 2012-11-14 17:12:29 · 135 阅读 · 0 评论 -
深入浅出单实例Singleton设计模式
前序单实例Singleton设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了。这个设计模式主要目的是想在整个系统中只能出现一个类的实例。这样做当然是有必然的,比如你的软件的全局配置信息,或者是一个Factory,或是一个主控类,等等。你希望这个类在整个系统中只能出现一个实例。当然,作为一个技术负责人的你,你当然有权利通过使用非技术的手段来达到你的目...原创 2013-09-11 00:14:50 · 77 阅读 · 0 评论