首页 » 程序员必读之软件架构 » 程序员必读之软件架构全文在线阅读

《程序员必读之软件架构》软件架构

关灯直达底部

这个部分提供“技术部落”的软件架构概览。

容器

下图展示了组成“技术部落”系统的逻辑容器。图并不代表容器的实际数量和位置:这个信息请看基础设施和部署部分。

  • Web服务器 :Apache Tomcat 7 Web服务器,从互联网访问“技术部落”网站的单一访问点。
  • 内容更新器 :从Twitter、GitHub和博客更新信息的独立的Java 7应用程序。
  • 关系型数据库 :存储了“技术部落”网站背后大部分数据的MySQL数据库。
  • NoSQL数据存储 :存储微博和博文的MongoDB数据库。
  • 文件系统 :文件系统存储了Lucene搜索索引。

组件:内容更新器

下图展示了组成独立的内容更新器的组件。

techtribes.js-Containers-content Updater:“技术部落”-组件-内容更新器
Standalone Java Process:独立Java进程

除了一些核心组件(稍后详述),独立的内容更新器进程由以下组件构成。

  • 计划内容更新器 :该组件安排从Twitter、GitHub和博客的计划(即,每15分钟)信息更新。它还重新计算“最近活跃”,每小时发放一次徽章奖励。它是一个使用Spring调度注释的Spring Bean。代码请看je.techtribes.component.scheduledcontentupdater6 。
  • Twitter连接器 :该组件负责连接到Twitter,以便刷新档案信息和取回微博。它是一个使用Twitter4J类库7 的Spring Bean。REST8 和Streaming API9 都采用了。代码请看je.techtribes.component.twitterconnector10 。
  • GitHub连接器 :该组件负责连接到GitHub,以便刷新仓库信息。它是一个使用Eclipse Mylyn GitHub连接器11 的Spring Bean。代码请看je.techtribes.component.githubconnector12 。
  • 新闻订阅连接器 :该组件负责连接到RSS/Atom订阅,以便刷新聚合到“技术部落”网站的新闻和博文。它是一个使用ROME类库13 的Spring Bean。代码请看je.techtribes.component.newsfeedconnector14 。

6 https://github.com/techtribesje/techtribesje/tree/master/techtribes-updater/src/je/techtribes/component/scheduledcontentupdater

7 http://twitter4j.org

8 https://dev.twitter.com/docs/api ——译者注

9 https://dev.twitter.com/docs/api/streaming ——译者注

10 https://github.com/techtribesje/techtribesje/tree/master/techtribes-updater/src/je/techtribes/component/twitterconnector

11 http://www.eclipse.org/mylyn/

12 https://github.com/techtribesje/techtribesje/tree/master/techtribes-updater/src/je/techtribes/component/githubconnector

13 http://rometools.github.io/rome/

14 https://github.com/techtribesje/techtribesje/tree/master/techtribes-updater/src/je/techtribes/component/newsfeedconnector

组件:核心

下图展示了Web服务器和独立的内容更新器共用的通用组件。

这是对每个核心组件的小结。

  • 内容源组件 :该组件提供对MySQL中存储的人和部落(合指“信息源”)信息的访问。代码请看je.techtribes.component.contentsource15 。
  • 新闻订阅项组件 :该组件提供对MongoDB中存储的新闻和博文的访问。代码请看je.techtribes.component.newsfeedentry16 。
  • 微博组件 :该组件提供对MongoDB中存储的微博的访问。代码请看je.techtribes.component.tweet17 。
  • 讲座组件 :该组件提供对MySQL中存储的本地演讲者的讲座信息的访问。代码请看je.techtribes.component.talk18 。
  • 活动组件 :该组件提供对MySQL中存储的本地活动(比如,聚会、研讨会、代码道场,等)信息的访问。代码请看je.techtribes.component.event19 。
  • 工作组件 :该组件提供对MySQL中存储的本地工作机会信息的访问。代码请看je.techtribes.component.job20 。
  • GitHub组件 :该组件提供对MySQL中存储的属于本地人/部落的代码仓库信息的访问。代码请看je.techtribes.component.github21 。
  • 搜索组件 :该组件为新闻、博文和微博提供搜索工具。使用Apache Lucene进行索引和搜索。代码请看je.techtribes.component.search22 。
  • 活跃度组件 :该组件提供对MySQL中存储的,内容更新器计算得到的“最近活跃”信息的访问。代码请看je.techtribes.component.activity23 。
  • 徽章组件 :该组件提供对人/部落因活跃度而被奖励的徽章的访问。代码请看je.techtribes.component.badge24 。
  • 日志组件 :该组件只是对Commons Logging25 和log4j的包装。所有其他组件都会使用它。代码请看je.techtribes.component.log26 。

15 https://github.com/techtribesje/techtribesje/tree/master/techtribes-core/src/je/techtribes/component/contentsource

16 https://github.com/techtribesje/techtribesje/tree/master/techtribes-core/src/je/techtribes/component/newsfeedentry

17 https://github.com/techtribesje/techtribesje/tree/master/techtribes-core/src/je/techtribes/component/tweet

18 https://github.com/techtribesje/techtribesje/tree/master/techtribes-core/src/je/techtribes/component/talk

19 https://github.com/techtribesje/techtribesje/tree/master/techtribes-core/src/je/techtribes/component/event

20 https://github.com/techtribesje/techtribesje/tree/master/techtribes-core/src/je/techtribes/component/job

21 https://github.com/techtribesje/techtribesje/tree/master/techtribes-core/src/je/techtribes/component/github

22 https://github.com/techtribesje/techtribesje/tree/master/techtribes-core/src/je/techtribes/component/search

23 https://github.com/techtribesje/techtribesje/tree/master/techtribes-core/src/je/techtribes/component/activity

24 https://github.com/techtribesje/techtribesje/tree/master/techtribes-core/src/je/techtribes/component/badge

25 Commons Logging提供一个统一的日志接口,从而不依赖于具体的日志实现,http://commons.apache.org/proper/commons-logging/ 。——译者注

26 https://github.com/techtribesje/techtribesje/tree/master/techtribes-core/src/je/techtribes/component/log