Archive for the ‘ 架构 ’ Category

京东技术架构(二)构建需求响应式亿级商品详情页

该文章是根据velocity 2015技术大会的演讲《京东网站单品页618实战》细化而来,希望对大家有用。

商品详情页是什么

商品详情页是展示商品详细信息的一个页面,承载在网站的大部分流量和订单的入口。京东商城目前有通用版、全球购、闪购、易车、惠买车、服装、拼购、今日抄底等许多套模板。各套模板的元数据是一样的,只是展示方式不一样。目前商品详情页个性化需求非常多,数据来源也是非常多的,而且许多基础服务做不了的都放我们这,因此我们需要一种架构能快速响应和优雅的解决这些需求问题。因此我们重新设计了商品详情页的架构,主要包括三部分:商品详情页系统、商品详情页统一服务系统和商品详情页动态服务系统;商品详情页系统负责静的部分,而统一服务负责动的部分,而动态服务负责给内网其他系统提供一些数据服务。
Read more

京东技术架构(一)构建亿级前端读服务

作者:张开涛

从入职京东到现在,做读服务已经一年多的时间了,经历了各种亿级到百亿级的读服务;这段时间也进行了一些新的读服务架构尝试,从架构到代码的编写,各个环节都进行了反复尝试,压测并进行调优,希望得到一个自己满意的读服务架构。

Read more

[译]深入 NGINX: 为性能和扩展所做之设计

原文链接:Inside NGINX: How We Designed for Performance & Scale 翻译:丁一

NGINX在web性能上的表现尤为出众,这完全得益于其设计方式,许多web和应用服务器都是基于线程或进程这种简单的架构,NGINX用了一种精妙的事件驱动架构,在现代的硬件上,它可以处理成千上万的并发连接。

Inside NGINX中的信息图对高级别的进程架构和NGINX如何在单个进程中处理多个连接进行了深入探讨。本文更进一步地阐述了NGINX的所有工作原理。

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: [译]深入 NGINX: 为性能和扩展所做之设计

模块化的乐趣

原文链接  作者:Kirk Knoernschild

         模块间的紧耦合是一种很糟糕的设计,而耦合的最坏表现就是模块间的循环依赖。幸运的是,有几种方法可以用来消除循环依赖,分别是回调函数,代码上移,代码下移。 接下来,我会为大家展示一个小例子。示例中,我会分别使用上述几种技术来消除循环依赖。

        在消除循环依赖之后,我们会探索另外两项技术,来达到依赖反转和消除模块之间依赖的目的。本示例的所有代码都可以在Google Code下载,每个解决方法对应的代码都包含有一个编译脚本和一个简单测试用例。一般你只需要输入 ant compile就可以执行编译脚本,不过如果你想使用JarAnalyzer,那么必须要有GraphViz。注意每个解决方法对应的代码版本都具有相同的行为!

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 模块化的乐趣

聊聊架构-模块化

什么是模块化?
 
模块化是指解决一个复杂问题时,自上而下逐层把系统划分成若干模块的过程。

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 聊聊架构-模块化

角色对象模式

作者:Dirk Bäumer, Dirk Riehle, Wolf Siberski, and Martina Wulf  原文链接  译者:f0tlo <1357654289@qq.com>

意图

单个对象透过不同的角色对象来满足不同客户的不同需求。每一个角色对象针对不同的客户内容来扮演其角色。对象能够动态的管理其角色集合。角色作为独立的对象是的不同的内容能够简单的被分离开来,系统间的配置也变得容易。

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 角色对象模式

JAVA中的命令模式实例教程

原文链接  作者:Pankaj Kumar 译者:f0tlo <1357654289@qq.com>

命令模式是一种行为模式,因此,它处理的是对象的行为。命令模式为系统中不同的对象提供中性化的交流媒介。根据GoF的定义,命令模式是:

通过封装一组完全不相关的对象相互之间的的交互及通讯来完成松耦合。
允许某一个对象的行为的变化是独立于其他对象的。

在企业级应用中,命令模式是非常有用的,它使得多个对象可以相互交流。如果一些对象与另一些对象直接交流,系统组件之间是紧耦合的方式。这种方式导致系统具有更高的可维护性,可扩展的灵活性变得很低。命令模式专注于提供一个调解人介于需要交流的对象之间来帮助完成对象间的松耦合。
Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: JAVA中的命令模式实例教程

聊聊架构

(最近我会写一些我对架构的理解和思考,本篇是第一篇,欢迎交流)

什么是系统架构?

从字面上理解,系统架构是系统的框架结构,是系统进行抽象之后的一个草图。它包含了系统中各个抽象组件的协作方式。

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 聊聊架构

Java中的状态模式实例教程

原文链接 作者:Pankaj Kumar 译者:f0tlo <1357654289@qq.com>

状态模式是一种行为设计模式。适用于当对象的内在状态改变它自身的行为时。

如果想基于对象的状态来改变自身的行为,通常利用对象的状态变量及if-else条件子句来扮演针对对象的不同行为。状态模式Context(环境)State(状态)分离的方式既保证状态与行为的联动变化,又使得这种变化是条理明晰且松耦合的。

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java中的状态模式实例教程

一个高可扩展的基于非阻塞IO的服务器架构

原文链接   译者:mailto:ahahage@163.com

  • 目录
  • 线程体系结构
  • 反应堆模式
  • 组件架构
  • 接收器
  • 分配器
  • 分配器级别事件处理器
  • 应用程序级别事件处理器
  • 总结
  • 参考资料

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 一个高可扩展的基于非阻塞IO的服务器架构

Cloud Card能否干掉App

感谢同事【向西】投递本稿

云OS 3.0已发布,总算向外界表达了我们想做个啥,很多人也开始质疑,Cloud Card到底是个啥?云OS 3.0算不算自主研发的OS?等等,今天想就Cloud Card能否干掉App这个主题聊聊这些事情。

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Cloud Card能否干掉App

  • 9,022 人阅读
  • Comments Off on Cloud Card能否干掉App

Java设计模式:装饰者模式

原文链接 译者:秦建平

装饰者模式可以给已经存在的对象动态的添加能力。下面,我将会用一个简单的例子来演示一下如何在程序当中使用装饰者模式。

1.装饰者模式
让我们来假设一下,你正在寻找一个女朋友。有很多来自不同国家的女孩,比如:美国,中国,日本,法国等等,他们每个人都有不一样的个性和兴趣爱好,如果需要在程序当中模拟这么一种情况的话,假设每一个女孩就是一个Java类的话,那么就会有成千上万的类,这样子就会造成类的膨胀,而且这样的设计的可扩展性会比较差。因为如果我们需要一个新的女孩,就需要创建一个新的Java类,这实际上也违背了在程序开发当中需要遵循的OCP(对扩展开放,对修改关闭)原则。
让我们来重新做另外一种设计,让每一种个性或者兴趣爱好成为一种装饰从而可以动态地添加到每一个女孩的身上。

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java设计模式:装饰者模式

Tomcat-connector的微调(3): processorCache与socket.processorCache

tomcat在处理每个连接时,Acceptor角色负责将socket上下文封装为一个任务SocketProcessor然后提交给线程池处理。在BIO和APR模式下,每次有新请求时,会创建一个新的SocketProcessor实例(在之前的tomcat对keep-alive的实现逻辑里也介绍过可以简单的通过SocketProcessorSocketWrapper实例数对比socket的复用情况);而在NIO里,为了追求性能,对SocketProcessor也做了cache,用完后将对象状态清空然后放入cache,下次有新的请求过来先从cache里获取对象,获取不到再创建一个新的。

这个cache是一个ConcurrentLinkedQueue,默认最多可缓存500个对象(见SocketProperties)。可以通过socket.processorCache来设置这个缓存的大小,注意这个参数是NIO特有的。

接下来在SocketProcessor执行过程中,真正的业务逻辑是通过一个org.apache.coyote.Processor的接口来封装的,默认这个Processor的实现是org.apache.coyote.http11.Http11Processor。我们看一下SocketProcessor.process(...)方法的大致逻辑:

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Tomcat-connector的微调(3): processorCache与socket.processorCache

Tomcat-connector的微调(2): maxConnections, maxThreads

1) 最大连接数

tomcat的最大连接数参数是maxConnections,这个值表示最多可以有多少个socket连接到tomcat上。BIO模式下默认最大连接数是它的最大线程数(缺省是200),NIO模式下默认是10000,APR模式则是8192(windows上则是低于或等于maxConnections的1024的倍数)。如果设置为-1则表示不限制。

在tomcat里通过一个计数器来控制最大连接,比如在Endpoint的Acceptor里大致逻辑如下:

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Tomcat-connector的微调(2): maxConnections, maxThreads

Tomcat-connector的微调(1): acceptCount参数

对于acceptCount这个参数,含义跟字面意思并不是特别一致(个人感觉),容易跟maxConnections,maxThreads等参数混淆;实际上这个参数在tomcat里会被映射成backlog:

static {
    replacements.put("acceptCount", "backlog");
    replacements.put("connectionLinger", "soLinger");
    replacements.put("connectionTimeout", "soTimeout");
    replacements.put("rootFile", "rootfile");
}

backlog表示积压待处理的事物,是socket的参数,在bind的时候传入的,比如在Endpoint里的bind方法里:

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Tomcat-connector的微调(1): acceptCount参数

return top