# GOV.UK-不是你父亲的书库

> 原文： [http://highscalability.com/blog/2013/6/3/govuk-not-your-fathers-stack.html](http://highscalability.com/blog/2013/6/3/govuk-not-your-fathers-stack.html)

![](img/0df17cabb1cc47fff35a9eaa7db8ac1b.png)

我不确定在启动时使用的堆栈 [GOV.UK 是什么样的。 也许有一些信使猫头鹰和许多蜘蛛网？ 但事实并非如此。 没那么多，所以我认为任何在自己的构架中寻找想法的组织都可以从他人的明智选择中学习一些东西。](http://digital.cabinetoffice.gov.uk/govuk-launch-colophon/)

使用的技术的多样性令人惊讶。 他们使用“至少五种不同的编程语言，三种独立的数据库类型，两种版本的操作系统”。 有些人可能认为这是一个弱点，但他们认为这是一个优点：

> 我们之所以经营如此多样化的生态系统，是因为我们专注于解决实际问题。 我们的首要任务是了解问题或我们正在解决的需求，然后为工作选择最佳工具。 如果我们将自己的需求限制在已有工具的基础上，那么我们就有可能无法以最佳方式解决用户最初的问题。 通过限制软件的多样性或在项目上执行严格的组织标准，就有可能沦为货物狂热者，在这种情况下，我们只需对所做的一切重复相同的模式和错误。

博客文章[中概述了这种“无论如何都使用最佳工具”的政策。 在现代初创公司中找不到的唯一选择是使用 Skyscape 作为其云提供商。 我假设这与有关数据主权的法律问题有关，因为这是政府站点，但除此之外，这完全不符合标准的现代网络实践：监视，仪表板，连续发布，多语言持久性，分布式源代码控制等。 看到政府得到它。](http://digital.cabinetoffice.gov.uk/2013/06/03/benefits-of-diversity/)

他们正在使用什么堆栈？ （这是直接副本，请随时阅读原始文档）

### 前端：

*   HTML / CSS / JS-在适当的地方使用 HTML5，重点放在可访问性上，并在哪里可以验证
*   我们使用 [jQuery](http://en.wikipedia.org/wiki/Jquery) 作为我们的主要 JavaScript 库
*   使用 [Nomensa 可访问媒体播放器](https://github.com/nomensa/Accessible-Media-Player)播放视频
*   后端管理系统使用 [Twitter Bootstrap](http://twitter.github.com/bootstrap/)
*   我们使用 [SCSS](http://en.wikipedia.org/wiki/Scss) ，如前端工具包的[中所示](https://github.com/alphagov/govuk_frontend_toolkit)
*   我们已经使用 [A2-Type 进行字体制作](http://www.a2-type.co.uk/)。

### 服务器的核心：

*   我们正在使用 [Skyscape](http://digital.cabinetoffice.gov.uk/2012/09/18/introducing-a-new-supplier-skyscape/) 中的[基础架构即服务](http://digital.cabinetoffice.gov.uk/2012/09/25/why-iaas/)
*   我们使用 [Akamai](http://en.wikipedia.org/wiki/Akamai_Technologies) 作为我们的内容分发网络
*   我们的服务器正在运行 [Ubuntu GNU / Linux 10.04](http://en.wikipedia.org/wiki/Ubuntu_(operating_system)) ，我们希望尽快升级到 12.04。
*   使用 PuppetDB 通过 [Puppet](http://en.wikipedia.org/wiki/Puppet_(software)) 管理服务器
*   Web 服务由 [nginx](http://en.wikipedia.org/wiki/Nginx) 处理，代理[独角兽](http://unicorn.bogomips.org/)用于我们的红宝石应用程序。 我们还使用 [gunicorn](http://gunicorn.org/) 来运行一些支持服务。 团队之一写了 [Unicorn Herder](https://github.com/alphagov/unicornherder) ，使 Unicorn 与[新贵](http://en.wikipedia.org/wiki/Upstart)保持良好的配合。
*   我们内部使用 [haproxy](http://haproxy.1wt.eu/) 进行内部负载平衡，并使用 [Varnish](http://en.wikipedia.org/wiki/Varnish_(software)) 缓存请求

### 重定向：

*   nginx 值得一提，因为[让我们进行所有重定向](http://digital.cabinetoffice.gov.uk/2012/10/11/no-link-left-behind/)
*   我们正在使用 [perl](http://www.perl.org/) 来管理和测试重定向
*   有一些 [php](http://en.wikipedia.org/wiki/Php) 可将有用的链接添加到已淘汰 DirectGov 和 Businesslink 内容的“已消失”页面
*   [node.js](http://en.wikipedia.org/wiki/Node.js) 被用来构建用于查看重定向的并排浏览器

### 应用范围：

*   我们的大多数应用程序都是基于 [ruby​​](http://en.wikipedia.org/wiki/Ruby_(programming_language)) 编写的，基于 [Ruby on Rails](http://en.wikipedia.org/wiki/Ruby_on_rails) 或 [Sinatra](http://en.wikipedia.org/wiki/Sinatra_(software)) 。
*   一些组件是用 [Scala](http://en.wikipedia.org/wiki/Scala_(programming_language)) 编写的，并基于 [Play 2.0](http://www.playframework.org/) 构建
*   我们正在运行 MySociety 中的 [Mapit，它基于](http://mapit.mysociety.org/) [Django](http://en.wikipedia.org/wiki/Django_(web_framework)) 构建

### 数据库和其他存储：

*   对于大多数系统，我们使用 [MongoDB](http://en.wikipedia.org/wiki/Mongodb) ，一些应用程序也使用 [MySQL](http://en.wikipedia.org/wiki/Mysql) 。 [Mapit 和 Puppet 使用 PostgreSQL](http://en.wikipedia.org/wiki/Postgresql) 。
*   尽管 [solr](http://en.wikipedia.org/wiki/Solr) 目前是 Need-o-tron 的后端，但该网站上的大多数搜索是由 Elasticsearch 支持的[。](http://digital.cabinetoffice.gov.uk/2012/08/03/from-solr-to-elasticsearch/)
*   一些事件驱动系统使用 [RabbitMQ](http://en.wikipedia.org/wiki/Rabbitmq)

### 监视，管理和警报：

*   我们使用 [statsd](https://github.com/etsy/statsd) 从我们的应用中收集指标
*   我们使用 [logstash](http://logstash.net/) 收集日志
*   我们使用[神经节](http://en.wikipedia.org/wiki/Ganglia_(software))监视系统
*   [石墨](http://graphite.wikidot.com/start)帮助我们制作许多图表来了解发生的情况
*   [Nagios](http://en.wikipedia.org/wiki/Nagios) 告诉我们是否需要对任何数据采取行动

### 配套工具：

*   我们所有的代码都经过 [Jenkins](http://en.wikipedia.org/wiki/Jenkins_(software)) 的测试，我们也将其部署到服务器上
*   我们通过 Google Analytics（分析）跟踪网站的使用情况，并大量使用其 API 来构建信息中心
*   我们有时会使用 [New Relic RPM](http://en.wikipedia.org/wiki/New_Relic) 进行性能评估
*   DNS 由 ja.net / Dyn 托管
*   通过 [Amazon SES](http://aws.amazon.com/ses/) 发送的电子邮件（内部警报）
*   使用 [FontForge](http://fontforge.org/) 和 [FontTools](http://sourceforge.net/projects/fonttools/) 进行字体处理和准备
*   我们使用 Google Apps，Pivotal Tracker 和 Campfire 保持联系并保持联系
*   Github 帮助我们管理和讨论我们的代码
*   Zendesk 使反馈保持畅通
*   我们使用 [jekyll](http://jekyllrb.com/) & [heroku](http://www.heroku.com/) 进行一些原型设计
*   我们建立了各种内部仪表板。 它们是我们的游乐场，您可以发现它们是用 Ruby， [Clojure，Node.JS 和 PHP](http://digital.cabinetoffice.gov.uk/2012/02/08/radiating-information/) 的混合物编写的