美国建站平台 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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FD的专栏

Effective Testing with RSpec 3 (第一部分:入门)

RSpec 3是一个高效的Ruby测试框架。 我们说生产效率很高,因为关于它的一切 - 它的样式,API,库和设置 - 都是为了在编写出色的软件时为你提供支持。

17930
来自专栏CSDN技术头条

GCC 7.1发布 支持当前所有的C ++ 17标准

GCC(GNU Compiler Collection,GNU编译器套件),是由GNU开发的编程语言编译器,目前发布了7.1版本。以下是GCC开发团队发布的版本...

20470
来自专栏Java帮帮-微信公众号-技术文章全总结

14款Java开发工具【面试+工作】

1、JDK (Java Development Kit)Java开发工具集 SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的J...

67150
来自专栏程序人生 阅读快乐

Linux就该这么学

本书源自日均阅读量近万次火爆的线上同名课程,口碑与影响力俱佳,旨在打造简单易学且实用性强的轻量级Linux入门教程。

11530
来自专栏杂烩

SSM项目搭建之redis 原

        Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从20...

11860
来自专栏精讲JAVA

Java面试Spring必备知识点,怼死面试官,从我做起

小海哥有话说 首先,面试骚红系列已经更新了到第三篇了,更新的两篇文章,可以说,小海遇到了很多问题,第一个问题,发布第二篇,Linux知识点,有人说...

55170
来自专栏小狼的世界

Ajax与REST

REST(Representational State Transfer)是一种开发思想,互联网不断发展,富媒体越来越多的应用,不断地冲击着我们的应用,使应用的...

11520
来自专栏程序猿

tools for penetration test

渗透测试的几种工具介绍; Fiddler 代理服务应用 Fiddler 是一个免费的 Web 代理工具,具有浏览器和平台不可知性的特点。它有许多...

40670
来自专栏EAWorld

从前世看今生,从JavaEE到微服务

我有一个习惯,接触到新概念、新技术出现后,就会探究他的前世今生、来龙去脉,正所谓“太阳底下没有新鲜事”,喜欢从对比中找到价值点,不如此就觉得理解不透彻,就觉得少...

37670
来自专栏FreeBuf

Umap2 | 开源USB host安全评估工具

Umap2是一款由NCC Group和Cisco SAS小组开发的、基于python的USB host安全评估工具。 它拥有第一版所支持的所有功能: umap2...

22250

扫码关注云+社区

领取腾讯云代金券