这个部分提供“技术部落”的软件架构概览。
容器
下图展示了组成“技术部落”系统的逻辑容器。图并不代表容器的实际数量和位置:这个信息请看基础设施和部署部分。
- 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