原文链接

I often get asked what Duck Duck Go "runs on."  This post basically answers that question by outlining the major moving parts that serve queries, i.e. its architecture.  I'll detail in another post what, in particular, makes itfast, i.e. tunables and other specifics.

Caveat: this architecture was designed for maximum query speed for our initialsoft launch.  While also somewhat designed for eventual scalability, we don't have that much traffic yet (though we are growing at a nice clip).  So don't take this as advice like you might get atHigh Scalability.  It's really just for your amusement.  However,my last startup did have some scale (relatively speaking of course) so I know a bit about what I'm doing...

  1. DNS served by DNS Made Easy.  I used to serve it myself viadjbdns, but DNS Made Easy is faster, makes it easier for me to deal with fail-over, and cheap.
  2. All requests come into nginx. I used to use two instances of Apache, one for dynamic requests and one for static files.  But nginx is faster, uses less memory, and is more stable.
  3. If a static file, nginx serves it directly, e.g. the home page.  It's really good at that.
  4. Otherwise, nginx checks my memcached store.  I hadn't used memcached before this, and find it a big win.
  5. If not in memcached store, nginx proxies to FastCGI processes that are running in the background.  I hadn't used FastCGI before this, as I always had used mod_perl with Apache.
  6. The FastCGI processes are managed by daemontools (as is memcached).  At first I was worried about stability in these processes, but it hasn't proved to be an issue yet.
  7. Internally, the FastCGI scripts are written in Perl and run by the FCGI::Engine Perl module.
  8. The Perl scripts access a PostgreSQL database (when needed) to retrieve our zero-click information, among other things.
  9. The whole thing runs on FreeBSD.
  10. For fail-over and scalability purposes, I have EC2 images that replicate the above except that they run on Ubuntu (since, at the time, FreeBSD wasn't available).
  11. All of our site icons and zero-click info images are hosted on S3.
  12. We also reference some external YUI JS files.
Any questions?  
Also, I'd love any feedback on this architecture.  I'm always looking for ways to speed it up!

Duck Duck Go Architecture相关推荐

  1. Python编程基础:第四十九节 鸭子类型Duck Typing

    第四十九节 鸭子类型Duck Typing 前言 实践 前言 本节我们一起学习一个非常有趣的知识点:鸭子类型.有这么一句话:If it walks like a duck, and it quacks ...

  2. duck typing java_進一步思考Duck typing

    由於變數本身不帶型態資訊,動態定型語言在設計方法時,想要不受限於物件型態而僅思考物件應當具有的行為,也就是進行所謂Duck typing時,極為容易. 然而Duck typing並非動態定型語言專屬, ...

  3. python鸭制作类代码_详解duck typing鸭子类型程序设计与Python的实现示例

    在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定. 这个概念的名字来源 ...

  4. 【Python】浅谈 鸭子类型 (Duck Typing)

    目录 一.来源 二.说明 三.举例 四.不足 一.来源 在程序设计中,鸭子类型 (duck typing) 是动态类型的一种风格.在此风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口, ...

  5. java三角形创建子类_如何创建子类,以便参数属于Java中的子类类型

    我有抽象的父类Animal: public abstract class Animal { public abstract T copyAnimal(T animal); } 然后我想创建一个子类Du ...

  6. colsure php_PHP Closure(闭包)类详解

    闭包就是能够读取其他函数内部变量的函数.例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成"定义在一个函数内部的函数".在本质上,闭包是将函数内 ...

  7. 趣谈 23 种设计模式(多图 + 代码)

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:javadoop.com/post/design-pattern 创建型模式 简单工厂模式 工厂模式 抽象工厂模式 单例模 ...

  8. Python中的继承和多态

    本文以生活中的基础现象为切入点,主要介绍了Python基础中继承和多态,包括单继承.多继承的语法.多态常见的 "鸭子类型". 以及如何重写父类的方法都做了详细的讲解. 一.继承的介 ...

  9. 图文详解 23 种设计模式

    一直想写一篇介绍设计模式的文章,让读者可以很快看完,而且一看就懂,看懂就会用,同时不会将各个模式搞混.自认为本文还是写得不错的,花了不少心思来写这文章和做图,力求让读者真的能看着简单同时有所收获. 设 ...

  10. python面相对象编程指南_Python面向对象编程指南

    抽象是隐藏多余细节的艺术.在面向对象的概念中,抽象的直接表现形式通常为类.虽然Python是解释性语言,但是它是面向对象的,从设计之初就已经是一门面向对象的语言.Python基本上提供了面向对象编程语 ...

最新文章

  1. java读取指定package下的所有class
  2. 转载:sql2005 管道的另一端上无任何进程解决方法
  3. SQL语言 之 数据查询
  4. HTML5/CSS3/JavaScript
  5. 【python基础】用字典做一个小型的查询数据库
  6. 消息发送样例介绍和步骤分析
  7. 多功能时钟电路的设计框图_一种病理组织漂片多功能一体机的设计
  8. 编写jmeter测试用例_Jmeter | 实现接口自动化设计说明
  9. 张朝阳:搜狐Q3广告业务稳健游戏业务超预期 有望全年实现盈利
  10. poj 1251 Jungle Roads prim最小生成树基础
  11. BOOST库介绍(四)——文件系统相关
  12. 2019仿笔趣阁小说网站源码(PC版+手机版+APP+采集器+教程)下载
  13. java list筛选数据_java 根据条件在List中筛选出符合条件的对象
  14. 【k哥爬虫普法】爬虫第一案,侵犯个人隐私,“入侵”短视频服务器!
  15. 多个渠道成功销售的秘诀速递
  16. 比较工具导出html比较结果,使用Beyond Compare如何生成文件比较报告
  17. JAVA I/O之神奇的RandomAccessFile(快速定位文件任意位置,修改或插入)
  18. java基础语法函数题(pta)
  19. SYN, FIN, ACK, PSH, RST, URG含义
  20. 【服务器管理】Ubuntu18.04下安装TensorRT(已经安装CUDA和cudnn的情况下)

热门文章

  1. 程序猿12个“人艰不拆”的真相
  2. 基于FPGA的超声波测距(verilog)
  3. 传奇3单机服务器怎么修改器,自己是GM并架设了传奇3单机版,如何改变装备属性?...
  4. Express中Router的使用
  5. java 铬钼钢_自行车基本知识讲座
  6. 2022年软件测试有哪些趋势?
  7. [红尘]被风吹过的夏天
  8. 我国跨境电子商务的发展概念以及发展概况
  9. 电脑重启f12怎么处理_电脑开机蓝屏按F10F11F12才能打开.怎么办?
  10. 建设工程项目全寿命周期管理是指_建设工程全寿命周期的概述