Uber每个地区的网页内容都不一样。以前是每个地方的团队自己搭小网站,高峰时有1500多个小网站。这些小网站的域名十分繁杂,当地用户想要去网站上了解当地的最新消息,都不知道如何下手。

为了解决这个问题,Uber团队做了个统一的的内容管理系统(Content Management System, 简称CMS),把之前的小网站全部迁移集成到主域名下(Uber.com)。团队把这个CMS取名为变色龙(Chameleon)。

因为变色龙擅于适应环境,也希望这套系统无论是从设计上还是内容上,能够帮助运营团队轻松实现网页的“本地化”和“定制化”。

据说,这套CMS从最初的设计和原型开始,到全球城市普遍推出,只用了六个月的时间。一起来看看这是怎样的系统吧!

原文阅读时间:19分钟 本文阅读时间: 5分钟

一定要从头搭建吗?

你可能会问,为什么不用现成的开源库?Uber团队给出的答案就是:

  • 不想做重复劳动。 在Chameleon之前,Uber推出过监测系统Morpheus,还有一些集成后端的服务。如果直接用开源库,就得在该库基础上再搭建一套监控系统, 完全没这个必要。
  • 灵活性没有自己搭建的强。 自己搭建的话,UI想怎么简单就怎么简单,能够极大方便运营团队上手该系统。 另外,自己搭建CMS,能够和现有的网站进行整合。

架构

由四个部分组成:数据层Louvre、渲染层Chameleon-Render、UI层Chameleon-UI、还有负责托管的Uber.com网站。

1.存储层Louvre(卢浮宫)

Louvre是用Go写的, 在 Schemaless 数据库基础上搭建的, 并且使用 TChannel与其客户端进行通信。

数据库里的内容是以块为单位的,一个块包含内容(橘黄色)和地理定位(绿色)。Louvre会根据请求的地理定位参数进行查找。

2. 渲染层 Chameleon-Render

Chameleon-Render起着承“下”启“上”的作用。底层的Louvre解析完后,Chameleon-Render将得到的块内容渲染进React虚拟DOM结构中去。

Chameleon-Render有几个重要特点。

  1. 样式封装。通过 Styletron实现。
  2. 以块为单位进行内容渲染,从上到下逐一放置。对块的要求很高,必须支持响应式设计、高性能动画等等。
  3. 块类型是模板化的,且高度自定义的。每个块类型都可以在编辑器中使用表单进行编辑,并且表单为每个段落都提供了控件。

3.Chameleon UI—网页编辑器。

这个编辑器有三个特点:

  • 实时预览正在编辑的内容

  • 页面配置服务。可以配置与搜索引擎相关的属性(例如标题和描述)。

  • 集成后端翻译服务

4.Uber.com

就这样,Louvre,Chameleon-Render,与网站服务Uber.com一起,为全世界的司机和乘客提供本地化服务。

特别说明,本文是对Introducing Chameleon: A Global CMS from Uber Engineering 的概括。

原文链接:Introducing Chameleon: A Global CMS from Uber Engineering

原文作者: Ken Sheedlo

原文创作时间:2017年7月21日

文中图片均选自 Introducing Chameleon: A Global CMS from Uber Engineering

Uber网站国际化的工程实践(CMS篇)相关推荐

  1. flutter release 版本 调试_腾讯课堂Flutter工程实践系列——接入篇

    前言 课堂目前的技术栈是React Native + Hybird + Native,随着技术的演进多端融合的趋势越来越明显,而RN的弊端也突显出来,jsBridge性能不是最优,占用前端人力,定位问 ...

  2. LDA工程实践之算法篇之(一)算法实现正确性验证(转)

    研究生二年级实习(2010年5月)开始,一直跟着王益(yiwang)和靳志辉(rickjin)学习LDA,包括对算法的理解.并行化和应用等等.毕业后进入了腾讯公司,也一直在从事相关工作,后边还在yiw ...

  3. 有赞搜索引擎实践(算法篇)

    有赞搜索引擎实践(算法篇) 18 April 2016 1. 搜索算法总体架构 在上篇文章(工程篇)中, 我们介绍了有赞搜索引擎的基本框架. 搜索引擎主要3个部件构成. 第一, hadoop集群, 用 ...

  4. 一致性协议raft详解(四):raft在工程实践中的优化

    一致性协议raft详解(四):raft在工程实践中的优化 前言 性能优化 client对raft集群的读写 参考链接 前言 有关一致性协议的资料网上有很多,当然错误也有很多.笔者在学习的过程中走了不少 ...

  5. Linux运维与架构工程实践

    1 本章概览 介绍Linux系统Linux运维与架构工程实践的方方面面 2 Linux系统基础入门 认识计算机和服务器核心硬件 Linux发展历史.系统组成.应用领域以及发行版 搭建运维环境:VMWa ...

  6. SDM原理解读与工程实践

    SDM原理解读与工程实践 本文主要介绍的是阿里在召回阶段使用的深度召回模型SDM,paper名称为<SDM: Sequential Deep Matching Model for Online ...

  7. C++ 工程实践(7):iostream 的用途与局限

    陈硕 (giantchen_AT_gmail) http://blog.csdn.net/Solstice  http://weibo.com/giantchen 陈硕关于 C++ 工程实践的系列文章 ...

  8. 阿里1688实时数据工程实践

    导读:在天猫.淘宝网购过程中,商品的推荐与广告的前端展示是怎样的?两者的底层数据服务又是怎样构建的?今天跟大家讲述面向阿里1688业务的实时数据工程实践. 本次分享主要分为三部分:首先讲解实时数据工程 ...

  9. 刘昊天:以数据思维助力工程实践 | 提升之路系列(十一)

    导读 为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的"π"型人才,由清华大学研究生院.清华大学大数据研究中心及相关院系共 ...

最新文章

  1. 线性代数:第二章 矩阵及其运算(上)
  2. SAP项目各模块简明调研提纲(一本通)
  3. ubuntu为什么每次用apt安装软件前都要更新(apt-get update)一下?
  4. mysql sql字符串连接函数_Mysql字符串连接函数 CONCAT()与 CONCAT_WS()
  5. ffmpeg编解码详细过程
  6. LeetCode 1354. 多次求和构造目标数组(优先队列+逆向思考)
  7. 特征级融合_多知识图谱的融合算法探索
  8. domcontentloaded ajax,Ajax优化(1) — DOMContentLoaded
  9. ITIL4讲解: 组合管理
  10. 移动端element日期插件不弹软键盘
  11. 北京地区能收到的FM广播电台频率表(基于手机)
  12. Log4Qt 日志格式化(TTCCLayout)
  13. 【OpenGL ES】FBO离屏渲染
  14. 1、synchronized、Lock、volatile
  15. XDOJ 233/237-字符串复制
  16. pgpool添加用户
  17. Microsoft旗下的Bing(必应)被封锁。可以试试加4的方法继续使用
  18. 动态规划范例——驿站马车问题
  19. 安装opencv4.5.5
  20. jade基础文档总结

热门文章

  1. 容量是GPT-2的1.7倍!谷歌打造神经对话模型Meena
  2. 3 年血亏 10 亿美元,Google Deepmind 出了什么问题?
  3. 原理解释|直觉与实现:Batch Normalization
  4. SAP VLPOD 报错 - Update control of movement type is incorrect (entry 107 X X E B _ E) - 之对策
  5. 科大讯飞裁员!提前就餐4秒被优化,员工们都这样议论
  6. The following packages will be SUPERCEDED by a higher-priority channel
  7. 整个宇宙可能是个巨大的神经网络?看科学家们是这样解释的
  8. 【Brain】复旦类脑研究院:破解大脑奥秘,为实现人工智能自我思考奠定基础...
  9. 北斗核心器件100%国产化,已接入大部分智能手机
  10. 《麻省理工科技评论》发布“21世纪迄今十大最糟科技”