架构 ’ 目录归档

《软件架构》事件驱动架构

你好,我是看山。

本文源自并发编程网的翻译邀请,翻译的是 Jakob Jenkov 的 《软件架构》 中关于事件驱动的内容,虽然是 2014 年的文章,但是从软件架构层面上,并不过时。

以下是正文。

事件驱动架构是一种系统或组件之间通过发送事件和响应事件彼此交互的架构风格。当某个事件发生时,组件A不直接调用组件B,而只是发出一个事件。组件A不知道哪些组件监听并处理这些事件。事件驱动架构可以在进程内和进程间使用。比如,GUI框架中会大量使用事件驱动。【译者注:目前很多系统采用微服务架构,事件驱动使用的更加广泛了。】此外,正如我在并发模型教程 中所提到的,装配线并发模型(AKA reactive,非阻塞并发模型)也使用了事件驱动架构。

本文主要介绍进程之间的事件驱动架构,后文提到这个词的时候也是指进程交互方式。

阅读全文

《软件架构》缓存技术

本文源自并发编程网的翻译邀请,翻译的是 Jakob Jenkov 的 《软件架构》 中关于缓存技术的内容,虽然是 2014 年的文章,但是从软件架构层面上,并不过时。

缓存

缓存是一种加速数据查找(数据读取)的技术,直接读取本地缓存的数据,而不是从数据源读取数据,数据源包括数据库、其他远程系统。caching 阅读全文

《软件架构》RIA 架构

原文地址

RIA(富Internet应用程序)是web应用程序的特殊种类,其用户界面的功能比第一代和第二代web应用程序丰富得多。这种web应用程序看起来更像是桌面应用程序。RIA的用户界面通常使用HTML5 + JavaScript + CSS3, Flex (Flash), JavaFX, GWT, Dart等等RIA工具开发。从长远来看,HTML5 + JavaScript + CSS3的各种变体似乎会成为主流(可以将GWT和Dart编译为JavaScript)。

RIA用户界面更加丰富的GUI客户端功能也让web应用程序的内部架构和设计有所变化。与第一代和第二代的web应用程序相比,RIA用户界面和其后端通常分离地更加干净。这使RIA GUI更加独立于服务端,同样因此GUI开发人员和服务端开发人员可以并行协作。我将在本文中说明RIA如何做到上述事情,在此之前我先介绍下第一代和第二代web应用程序的内部设计通常是怎样的。

阅读全文

《软件架构》N 层架构

原文链接 译文链接 译者:杨逸林 校对:方腾飞

N 层架构意味着将系统拆分为 N 层,N ∈ [1,+∞)。单层架构与单进程架构一样。双层架构和客户端/服务端架构一样等等。 三层架构是一种非常常见的架构。三层架构通常分为表现层/GUI 层、业务逻辑层以及数据持久化层。下图说明了三层架构: N 层架构.png

阅读全文

我们为什么要用Redis

最近阅读了《 Redis 开发与运维》,非常不错。这里对书中的知识整理一下,方便自己回顾 Redis 的整个体系,来对相关知识点查漏补缺。

阅读全文

如何成为一位「不那么差」的程序员

前言

已经记不清有多少读者问过:

博主,你是怎么学习的?像我这样的情况有啥好的建议嘛?

也不知道啥时候我居然成人生导师了。当然我不排斥这些问题,和大家交流都是学习的过程。

因此也许诺会准备一篇关于学习方面的文章;所以本文其实准备了很久,篇幅较长,大家耐心看完希望能有收获。

以下内容仅代表我从业以来所积累的相关经验,我会从硬技能、软实力这些方面尽量阐述我所认为的 “不那么差的程序员” 应当做到哪些技能。

阅读全文

《软件架构模式》-第四章 微服务框架模式(下)

原文链接 译者:克里斯托刘

《软件架构模式》-第四章 微服务框架模式(下)

避免依赖和编排

设计微服务架构的一个主要难度是为服务组件选择正确的粗细粒度。如果服务组件设计的太粗糙,就彰显不了这种架构模式带来的好处(如部署、可扩展性、可测试性和松耦合)。但是,服务组件设计的过于细化,对服务组件编排要求更高,将你的微服务系统演变成面向服务的重量级体系结构,通常会带来缺点如复杂性、误导性、高开销,这些都是能在基于SOA的应用程序中找到的。

阅读全文

如何在MQ中实现支持任意延迟的消息?

什么是定时消息和延迟消息?

  • 定时消息:Producer 将消息发送到 MQ 服务端,但并不期望这条消息立马投递,而是推迟到在当前时间点之后的某一个时间投递到 Consumer 进行消费,该消息即定时消息。
  • 延迟消息:Producer 将消息发送到 MQ 服务端,但并不期望这条消息立马投递,而是延迟一定时间后才投递到 Consumer 进行消费,该消息即延时消息。

定时消息与延迟消息在代码配置上存在一些差异,但是最终达到的效果相同:消息在发送到 MQ 服务端后并不会立马投递,而是根据消息中的属性延迟固定时间后才投递给消费者。

阅读全文

基于一致性哈希的分布式内存键值存储——CHKV

Consistent Hashing based Key-Value Memory Storage

基于一致性哈希的分布式内存键值存储——CHKV。

系统设计

  • NameNode : 维护key与节点的映射关系(Hash环),用心跳检测DataNode(一般被动,被动失效时主动询问三次),节点增减等系统信息变化时调整数据并通知Client;
  • DataNode : 存储具体的数据,向NameNode主动发起心跳并采用请求响应的方式来实现上下线,便于NameNode挪动数据
  • Client : 负责向NameNode请求DataNode数据和Hash算法等系统信息并监听其变化,操纵数据时直接向对应DataNode发起请求就行,暂时只包含set,get,delete三个操作

阅读全文

秒杀架构实践

前言

之前在 Java-Interview 中提到过秒杀架构的设计,这次基于其中的理论简单实现了一下。

本次采用循序渐进的方式逐步提高性能达到并发秒杀的效果,文章较长请准备好瓜子板凳(liushuizhang?)。

本文所有涉及的代码:

阅读全文

《软件架构模式》-第四章 微服务框架模式(上)

原文地址  译者:克里斯托刘

微服务架构模式正在迅速成为行业中单一应用程序及面向服务架构的可行的解决方案。因为这个架构模式仍在不断发展,关于这种模式的定义和其实现方式还有很多困惑之处。本章将为您解释其关键概念和基础知识,以理解这种模式的优点以及是否适合您的应用程序。

模式描述

无论选择的拓扑或实施方式如何,有许多普遍的核心概念是适用于所有的该架构模式。第一个概念是独立部署单元。如图4-1所示,每个微服务架构的组件都部署为一个独立的单元,这达到了以下优点:部署简单(通过高效和流水交付管道)、可扩展性增加、以及高度的应用和组件在应用程序内的解耦。

阅读全文

《深入分布式缓存》之 “缓存为王”

在商业的世界中,常说的一句话是“现金为王”。在互联网或者移动互联网乃至整个软件技术世界中,与之相近的一个说法就是“缓存为王”。什么是缓存呢?
阅读全文

《软件架构模式》-第三章 微内核系统结构

原文地址  译者:克里斯托刘

微内核架构模式(有时被称为插件架构模式)是实现基于产品应用程序的一种自然模式。基于产品的应用程序是已经打包好并且拥有不同版本,可作为第三方插件下载的。然后,很多公司也在开发、发布自己内部商业应用像有版本号、说明及可加载插件式的应用软件(这也是这种模式的特征)。微内核系统可让用户添加额外的应用如插件,到核心应用,继而提供了可扩展性和功能分离的用法。

阅读全文

《软件架构模式》-第二章事件驱动架构(下)

原文地址  译者:克里斯托刘

经纪人拓扑结构(Broker Topology)

经纪人拓扑结构和调度员拓扑结构不同点在于,没有中央事件调度员,而是:消息执行流程沿着类似链条连接的各个事件处理模块,通过轻量级的消息经纪人(比如AcitveMQ, HornetQ)实现。这样的拓扑结构,在你只需要处理一个相对简单的事件处理流程,同时不想要中央事件调度员时候,特别适用。

在经纪人拓扑结构中,有两种主要的模块:经纪人模块和事件处理模块。经纪人模块可以是集中的,包含所有的用于事件处理流程的事件通道(event channel),该事件通道可以做成消息队列或者消息主题(message topics),或者两种的结合。

阅读全文

软件架构模式-第二章事件驱动架构(上)

原文地址  译者:克里斯托刘

事件驱动架构模式是一个非常流行的异步分布模式,可生成高可扩展性应用。而且它也具有强适应能力,可被用于小程序或者大型复杂程序。事件驱动架构是由高耦合度、单一目的的事件处理模块构成,这些模块异步接收、处理事件。

事件驱动架构模式有两种主要拓扑结构,“调度员”(mediator)和“经纪人”(broker)拓扑结构。“调度员”拓扑结构通常用在一个事件中由多个步骤组成,而你需要通过中央“调度员”模块去调度这些步骤。然而“经纪人”结构是当需要执行一系列事件链,而不需要中央“调度员”模块。由于这两种结构的特征和执行策略不同,深入理解两者的用法能帮助你在自己的案例中做出正确的判断。

阅读全文

return top