设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 服务器 > 安全 > 正文

成长型电商架构启示:世界排名153的etsy十年走过的弯路

发布时间:2021-01-04 21:28 所属栏目:53 来源:网络整理
导读:《成长型电商架构启示:世界排名153的etsy十年走过的弯路》要点: 本文介绍了成长型电商架构启示:世界排名153的etsy十年走过的弯路,希望对您有用。如果有疑问,可以联系我们。 编者按: 小编也参加过不少技术大会,台下听到比较多的一种评论:“大师的分享很

《成长型电商架构启示:世界排名153的etsy十年走过的弯路》要点:
本文介绍了成长型电商架构启示:世界排名153的etsy十年走过的弯路,希望对您有用。如果有疑问,可以联系我们。

编者按:小编也参加过不少技术大会,台下听到比较多的一种评论:“大师的分享很赞,不过我们这种体量的公司暂时还用不上……”,针对这种情况,小编挑选了一个发展十年的中型的电商网站 etsy,目前在 alexa 上排名 153,美国排名第 42,和国内很多电商公司流量相当.

etsy 的架构和很多成长型公司的架构非常相似,由于创始团队没有互联网开发经验,按照传统软件开发思维搭建的架构给后期扩展带来了沉重的负担;另外小编也了解到,大一点的互联网公司基本是按照职能进行分工的,RD,OP,DBA,QA 各司其职,这也是后文要谈的康威定律,也就是分工决定架构的思路的隐患.

原型:3 个工程师开发的系统

Etsy 的是手工品交易市场,网站从 2005 年 6 月开始做,由 3 人在一间公寓开发.这和很多初创型应用非常类似.

2007 年:中心化大型数据库的架构

技术栈:Ubuntu,PostgreSQL,lighttpd,PHP,Python

早期我们对互联网模式并不是特别熟悉,按照传统软件的思路,业务逻辑大多在 PostgreSQL 的存储过程中实现.前端交互使用 PHP 调用存储过程.使用大型中心化的数据库,按照业务功能分成不同的数据库.

当时的架构问题很多,可用性很差,需要定期维护窗口,意味着网站较长时间不可访问.上线部署往往会导致故障与中断.

2008 年:错误的架构决策:基于分工的架构选型

虽然过去了 2 年,依然是家创业公司,20 – 30 人.

康威定律:人力组织的架构往往决定了设计的层次.

康威定律描述了当时的现状,团队的结构:开发,运维. 开发写代码,DBA 写存储过程,运维部署代码. 团队之间由于分工形成了明显的隔阂.

为了解决架构的可扩展性问题,但也是由于受康威定律的思维局限,团队创建了一个名为 Sprouter 中间件层:存储过程路由器.这个成为后面架构沉重的包袱.

  • Sprouter 是一个 Python 守护进程,处于 Web 服务器和数据库之间.前端给它传参,它调用存储过程并返回结果.从理论上讲它可以实现缓存和分片的逻辑,但这些功能当时都没有实现;
  • 当时期望 Sprouter 比数据库更容易扩展,因为基于数据库存储过程的一个架构很难扩展;
  • 但折衷的架构很难工作,Sprouter 在 2008 年秋天上线,但在 2009 年就被放弃,因为它几乎不能工作.

Sprouter 开发完成后依旧存在一大堆问题:

  • 每次上线依赖 DBA 的工作,因为数据库所有的事情由 DBA 负责
  • 上线发布更换乱,因为在 Sprouter 中,缓存了存储过程的标识符,如果进行了更新,标识符会失效.因此每次上线发布都成了一次灾难.
  • 一些业务数据库仍然没有分片,这些数据库就成了系统的单点故障环节.

2008 年:Etsy 开发文化大转型

新来了 CTO(后来成为公司的 CEO) 带来了新的团队文化.

  • 逐渐放弃 PostgreSQL 和存储过程;
  • 使用标准 SQL 开发;
  • 让开发人员接触生产环境;
  • 放弃大版本大包发布的方法;

2009 年:转型中的架构:5 大改进

1. 引入?DevOps

  • 打破开发和运维之间的隔阂,开发也是运维,运维也能承担开发工作;
  • 打破团队隔阂:那就是信任、合作、透明以及共同承担责任;
  • 我们是一条船上的人,只有互相帮助才能把东西做得更好.

2. 网站稳定性改进

  • 增加及改善监控及图表.
  • 授权开发人员可以访问及运行生产环境代码,以便他们能够帮助解决问题. 尽管不是所有的开发人员对生产设备开放 root 权限.

3. 实现一键式持续交付,没有独立的 QA

  • 实现了持续交付. 任何工程师可以随时部署整个网站到生产环境,一键式部署,非常简单.
  • 用 Chef 来做配置管理.
  • 采用小迭代发布,放弃大包部署.上线如果出现问题,可以很快找出原因并立即修复.
  • 上线的代码添加测试用例,以验证部署前的代码工作.
  • 团队使用 IRC 随时交流.
  • 没有独立的 QA 团队或流程,质量由开发负责.开发人员负责保证自己代码是稳定的,小迭代的开发模式让开发保证质量更为容易.
  • 实现 A / B 测试方案,允许某个功能只开放给管理员或一定的比例用户,降低了开发人员上线风险.
  • 每个开发人员都要求每年有一周来响应线上事务(on call),打破岗位之间隔阂.

 

4. 开发自己的 ORM,弃用 Sprouter

使用 ORM(对象关系映射)来代替 Sprouter.ORM 也是自己开发的.ORM 也实现一些缓存.前端 PHP 代码直接通过 ORM 来访问数据库.使用 ORM 将一些业务逻辑操作更多转移到前端代码,Web 服务器更容易扩展.

5. 数据库的分片扩展性改造:从 PostgreSQL 到 MySQL

由于公司新加入不少来自 Flickr 的工程师,所以逐渐引入来自 Flickr 的数据库分片方案 .

使用 MySQL 作为简单的数据存储服务器,这种架构已经在 Flickr 久经考验.数据库可以根据需要无限扩展.另外通过 MySQL 双主复制(master – master)来消除单点隐患.

2011 年春:Sprouter 下线

终于在 2011 年春天,Sprouter 从代码库中删除.

2011 年之后新的架构

  • CentOS,MySQL,Apache,PHP.
  • 逐步淘汰 PostreSQL. 迁移是通过一个个功能基础上的实现.
  • 放弃 Python,使用 PHP 及 MySQL

2012 – 2016 年的 Etsy 架构

Etsy 一直以来都是一个看起来很有趣的平台,也有很多值得研究的地方,它从一个新型平台转型成一个稳定而值得认可的电子商务引擎.这种改变需要很多文化上的转变,但是其结果是引人注目的.

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读