专栏首页性能与架构美国建站平台 Wix 的架构变迁

美国建站平台 Wix 的架构变迁

背景

Wix 是全世界最大的自助建站云平台,可以让每一个人通过拖拽等简单的方式轻松的创建一个漂亮的网站

这个平台上已经创建了6000万个网站,覆盖190个国家

2PB 的用户文件,每天增长1.5TB

3个数据中心,使用2个云平台(Google, AW)

每天150亿次的http请求

400人的工程师团队

架构

Wix创建于2006年,初始阶段使用的是传统的单体架构,技术构成包括Java, Hibernate, Ehcache, Tomcat, MySQL

2008年时,这个架构逐渐显现出一些问题

Wix 主要有两大块基础功能,一是服务已经发布的网站,二是支持正在建站的用户

程序的改动主要是对建站工具的完善,也就是第二个功能改动较多,第一个功能比较稳定

而如果第一个功能出现问题,则成本是最高的,因为会影响几千万个已经正在运行的网站

单体架构中,这两个功能是运行在一起的,任何对建站工具的修改都可能影响到网站服务的功能,Wix 就经历过这类痛苦,有几次对建站工具修改代码时,意外的冲击到了网站服务功能,使所有的用户都受到了影响

后来Wix决定对架构进行服务化改造,把这两个功能拆分为不同的服务

改造过程漫长而复杂,在保持系统正常对外服务的同时,把架构从一个单体改为100多个微服务,在技术构成上也改动很大,以 Scala,Jetty,Spring 为主

每个微服务都部署为一个单独应用,负责一个明确的职责,使用一个特定数据库,并且是无状态的,支持频繁部署

在初期,Wix有一个大型的Flash产品,包括了建站编辑器和Flash型站点,在2011年时改用了HTML5/Javascript结构,后来采用了React框架

Wix 的100多个微服务可以分为4个组

(1)Wix Public

负责对已经发布站点提供服务,技术构成为 Scala,Jetty,Spring,Mysql,用户创建的网站使用 React+JSON

(2)Wix Editor

负责帮助用户创建网站,建站编辑器使用JS开发,编辑结果使用JSON表达,然后把JSON保存到Mysql,用户上传的资源文件保存到 WixMP 多媒体文件系统

技术上也是 Scala,Jetty,Spring,Mysql

为什么使用JSON来描述网站,而不是HTML?

Wix 认为这可以帮助他们在不同浏览器和移动设备间快速定位问题,有问题后,直接修改JS层就好

(3)WixMP

媒体文件系统,负责保存并分发 图片、视频、音乐、文件等,并集成CDN

运行在两个云计算平台,Google和Amazon

也使用Google和Amazon的云存储,进行图片的操作,和视频转码

重度计算的需求使用 Python/Go/C 开发,根据具体情况选择合适的语言

(4)Verticals

网站附加功能服务,例如电商模块、酒店模块等,前端使用 Angular,后端依旧为 Scala,Jetty,Spring,Mysql

在这个服务中使用Angular而不是React是因为Angular是一个更全面的应用框架,例如有依赖注入、抽象服务等方便的功能

Wix常把Mysql做为NoSql引擎来使用,没有使用常规的多列设计,而是一个主键+一个JSON内容列,只根据主键查找,没有join等操作,这种方式带来不少便利,例如不同数据中心间的复制很方便,根据主键查找非常快,即使在巨型表中,通常也只需要1毫秒的响应时间

在2012年,Wix 开放了应用SDK,允许第三方为网站创建组件,例如博客、CRM等,使用iframe整合第三方内容,并使用JS SDK 和 REST API 来突破iframe的限制

开发工具

Maven,Grunt,TeamCity 用于系统构建

使用 GitHub 的 Git 仓库

项目管理使用 Jira

Chef 作为部署工具

配置服务使用 ZooKeeper

使用 Petri 运行 A/B测试

监控使用 New Relic, Nagios, Graphite

商业智能BI使用的技术有 Hadoop,Pig,HBase,Storm

微服务是基于JVM上的独立应用,使用 Jetty,Spring MVC,自己开发的框架等

服务间的沟通使用 JSON/RPC 和 ActiveMQ

存储使用 Mysql,MongoDB

前端开发工具箱中有 Angular,React,和编译测试工具

本文分享自微信公众号 - 性能与架构(yogoup),作者:杜亦舒

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分析一个MySQL并发事务示例

    如果你猜对了,也知道是为什么,可以休息了 : ),如果没猜对,那么咱们就一起分析一下。

    dys
  • 微服务设计原则

    把它们放在一起看起来问题不大,因为使用的技术相同、功能和数据上会有比较紧密的联系,在组织结构上,通常是由同一个开发小组负责。

    dys
  • 内容平台 Medium 的技术体系

    Medium 是全球知名的内容平台,访问量惊人 据半年前的数据统计,用户在 Medium 上阅读时间的总和已经达到 2600年,每月有2500万阅读者,每周有数...

    dys
  • JQuery ztree 异步加载实践

    本来要做一个文件目录浏览界面,需要遍历所有的文件和目录,很显然一次性读取时很费时费力的一件事情。 因此就需要做异步加载.... 不过网上的几篇帖子还挺坑的...

    用户1154259
  • 内网全局代理工具及特征分析

    端口转发是点对点的方式,代理是点对面的方式,如果我们只需要访问主机的特定的端口,使用端口转发就够了,但通常在渗透进内网之后,我们还需要对整个内网进行横向渗透,这...

    FB客服
  • 微服务之间的最佳调用方式

    在微服务架构中,需要调用很多服务才能完成一项功能。服务之间如何互相调用就变成微服务架构中的一个关键问题。

    黄泽杰
  • 微服务之间的最佳调用方式

    在微服务架构中,需要调用很多服务才能完成一项功能。服务之间如何互相调用就变成微服务架构中的一个关键问题。

    用户1516716
  • 谈谈 API 网关

    理论上,客户端可以直接向微服务发送请求,每个微服务都有一个公开的URL,该URL将映射到微服务的负载均衡器,由它负责在可用实例之间分发请求。但这种方式存在如下缺...

    方志朋
  • 未来可期,PWA 可以直接添加到桌面

    最近在刷 Youtube 的时候,扫了一眼最新的 Chrome 更新。一条消息突然引起 俺 的兴趣,Title 是:

    villainhr
  • SpringBoot系列教程JPA之新增记录使用姿势

    上一篇文章介绍了如何快速的搭建一个JPA的项目环境,并给出了一个简单的演示demo,接下来我们开始业务教程,也就是我们常说的CURD,接下来进入第一篇,如何添加...

    一灰灰blog

扫码关注云+社区

领取腾讯云代金券