写点什么

软件架构分解、LinkedIn 日志系统、GWT HTML5 支持——架构周报

  • 2014-03-16
  • 本文字数:2277 字

    阅读完需:约 7 分钟

本期的架构周报主要关注软件架构分解技巧、LinkedIn 日志系统和 GWT 对 HTML5 storage 的支持和实现。

软件架构分解

对复杂的大规模软件系统,软件架构分解是架构设计中必不可少的关键步骤。通过分解识别架构元素,同时也是解决非功能需求的重要手段之一。好易科技 CTO 王国波在“软件架构分解”一文中从架构的定义出发,对架构形而上的本质给出了自己独特的理解。在架构设计上提出了架构分解过程模型和多维度多层次分解模型。他总结的架构分解原则包括:

  • 低耦合、高内聚:莱布尼兹指出:“分解的主要难点在于怎么分。分解策略之一是按容易求解的方式来分,之二是在弱耦合处下手,切断联系”。在弱耦合处下手,切断联系。太精辟了!高内聚、低耦合也是软件设计的基本原则,软件设计中的很多设计原则其实都可以认为它的派生或具体化,如单一职责原则、依赖倒置原则、模块化封装原则,这些原则在架构分解中也是适用的。
  • 层次性:分解通常是先业务后技术,循序渐进,先逻辑后物理,从上到下逐级进行分解展开:系统-> 子系统-> 模块-> 组件 -> 类。
  • 正交原则:和物理学中的正交分解类似,架构分解出的架构元素应是相互独立的,在职责上没有重叠。
  • 抽象原则:架构元素识别,在较大程度上是架构师抽象思维的结果,架构师应该具备在抽象概念层面进行架构构思和架构分解的能力。
  • 稳定性原则:将稳定部分和易变部分分解为不同的架构元素,稳定部分不应依赖易变部分。根据稳定性原则,将通用部分和专用部分分解为不同的元素;将动态部分和静态部分分解为不同的元素;将机制和策略分离为不同的元素;将应用和服务分离。
  • 复用性原则:就是对知识的重用. 重用类似系统已有的架构设计、设计经验、成熟的架构模式或参考模型、设计模式、领域模型、架构思想等,因为它们已经在不同的层次上分解识别出了许多架构元素,或者指出了一些分解方向,对我们的架构分解具有借鉴和指导作用。例如 IBM SOA 解决方案参考模型对 SOA 服务化具有重要的指导意义,我们可以参照它对系统进行初步的架构分解。

LinkedIn 日志系统

Jay Kreps 是 LinkedIn 公司的高级工程师,他撰文详细分析了 LinkedIn 公司中日志系统的发展历史、实现细节和经验。这里所说的“日志”不仅仅是程序员普通意义上的应用程序日志,还包括数据库日志、分布式系统日志,Jay 认为:

日志是一种简单的不能再简单的存储抽象。它是一个只能增加的,完全按照时间排序的一系列记录。日志记录的排序是由“时间”来确定的,这是因为位于左边的日志记录比位于右边的要早些。日志记录编号可以看作是这条日志记录的“时间戳”。在一开始就把这种排序说成是按时间排序显得有点多余 ,不过 ,与任何一个具体的物理时钟相比,时间属性是非常便于使用的属性。在我们运行多个分布式系统的时候,这个属性就显得非常重要。

日志并不是完全不同于文件或者数据表的。文件是由一系列字节组成,表是由一系列记录组成,而日志实际上只是按照时间顺序存储记录的 一种数据表或者文件。每个编程人员都熟悉另一种日志记录 - 应用使用 syslog 或者 log4j 可能写入到本地文件里的没有结构的错误信息或者追踪信息。为了区分开来,我们把这种情形的日志记录称为“应用日志记录”。应用日志记录是我在这儿所说的日志的一种低级的变种。最大的区别是:文本日志意味着主要用来方便人们阅读,而我所说明的“日志”或者“数据日志”的建立是方便程序访问。

有关 LinkedIn 日志系统的详情,读者可以查看 Jay 的原文

GWT 对 HTML5 storage 的支持

GWT 是 Google Web Toolkit 的简写。它是 Google 公司发布的基于 Java 语言开发 Web2.0 应用的工具包。在使用 GWT 开发 Web 应用时,开发人员是通过编写 Java 代码来创建 Web 界面中的组件。这样对于 Web 开发人员可以提高开发效率,更方便的调试。软件工程师郑峰详细介绍了 GWT 对 HTML 5 storage 的支持。

最早的 Cookies 自然是大家都知道,问题主要就是太小,大概也就 4KB 。而且 IE6 只支持每个域名 20 个 Cookies,太少了。优势就是大家都支持,而且支持得还蛮好。很早以前那些禁用 cookies 的用户也都慢慢的不存在了,就好像以前禁用 Javascript 的用户不存在了一样。Web Storage 是 HTML5 API 提供一个新的重要的特性 ; 最新的 Web Storage 草案中提到,在 web 客户端可用 HTML API,以 Key-Value 形式来进行数据持久存储 ; 目前主要的浏览器已经支持该功能 ; 常见的 web 客户端数据存储比较: HTML5 Web Storage 非常易于 Web 开发者使用,它提供了非常简单的获取或设置 Key-Value 对的 API; 支持的数据大小。

HTML5 Storage 分为 Session Storage 和 Local Storage,Session Storage 是用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此 Session Storage 不是一种持久化的本地存储,仅仅是会话级别的存储。Local Storage:简单来说,它就是一种让网页可以把键值对存储在用户浏览器客户端的方法。像 Cookie 一样,这些数据不会因为您打开新网站,刷新页面,乃至关闭您的浏览器而消失。

GWT 在 2.3 版本后开始支持 HTML5 Storage,我们可以使用 GWT 提供的标准类库,并且在支持 HTML5 的浏览器上来使用 HTML5 Storage 的功能。

对架构领域感兴趣的读者可以关注即将于 2014 年 4 月 25~27 日在北京国际会议中心召开的QCon 北京 2014 大会,专题包括知名网站案例分析扩展性、可用性与高性能云计算服务探秘大数据处理与大数据应用等,许多讲座都与架构相关。读者可点击大会主页查看详情。

欢迎读者朋友推荐或者投稿架构相关的文章,联系邮箱为 editors@cn.infoq.com ,标题请注明“架构专栏”。

2014-03-16 10:053649
用户头像

发布了 501 篇内容, 共 257.5 次阅读, 收获喜欢 61 次。

关注

评论

发布
暂无评论
发现更多内容

JavaScript 基础拾遗(一)

hq

Java 学习 文章收集

Enhanced Github:一个 GitHub 专用的好插件

非著名程序员

GitHub 程序员 效率工具

竟然有人想看我的「日记」,满足一下大家

非著名程序员

学习 程序人生 提升认知

我的编程之路-4(进阶)

顿晓

进阶 看书 编程之路

Redis 命令执行过程(下)

程序员历小冰

redis 源码分析

JVM源码分析之Java对象头实现

猿灯塔

企业数字化转型:用 SpreadJS 打造互通互链的电力系统物联网

葡萄城技术团队

数字化转型 SpreadJS 电力

敏捷为什么会失败之「PA-SA-WAKA-DA」理论

易成研发中心

Scrum 敏捷开发 Agile

SpringBoot瘦身

JFound

Spring Boot sprnig

为提升网点业务员效率,我们做的事情。

黄大路

商业

Android | Tangram动态页面之路(五)Tangram原理

哈利迪

android

Django的ListView超详细用法(含分页paginate功能)

BigYoung

Python django ListView 分页

SQLite是什么

山楂大卷

sqlite 数据库 RDBMS 存储

kotlin 200行代码开发一个简化版Guice

陈吉米

Java kotlin guice ioc mynlp

ARTS_20200520

凌轩

Java ARTS 打卡计划

Elastic Stack 系列专辑

Yezhiwei

elasticsearch Logstash Kibana ELK Elastic Stack

推动敏捷,就是推动软件业变革

盛安德软件

敏捷 推动软件业变革

2020年全球经济萎缩,火花国际PLUS逆袭而来闪耀数字经济

极客编

如何做好 To B 的 SAAS 服务

路边水果摊

SASS 企业 服务

天天都是520

Neco.W

爱情 表白日

关于架构的几件小事:System context

北风

系统架构 系统性思考 架构师 系统上下文 极客大学架构师训练营

职场“潜”规则

L3C老司机

个人成长 职场 新人 人才培养 能力模型

识别代码中的坏味道(四)

Page

敏捷开发 面向对象 重构 CleanCode 代码坏味道

nginx 概念及上手

HelloZyjS

Redis6.0 多线程源码分析

代码诗人

redis 源码 技术 线程模型

万字长文带你看懂Mybatis缓存机制

程序员小岑

Java 源码 技术 mybatis

深入剖析ThreadLocal原理

JFound

Java

回“疫”录(22):我以为结束了,其实才开始

小天同学

疫情 回忆录 现实纪录 纪实

当我们持续感觉很糟糕要怎么办

董一凡

写作 生活质量 情感

JVM源码分析之synchronized实现

猿灯塔

程序员需要了解的硬核知识大全

苹果看辽宁体育

Java c 计算机基础

软件架构分解、LinkedIn日志系统、GWT HTML5支持——架构周报_架构_崔康_InfoQ精选文章