zoukankan      html  css  js  c++  java
  • Evernote相关技术介绍——mysql+lucene+tomcat

    Evernote服务

    我们的服务由以下几个组件组成。

    分片(NoteStore)

     

    分片是Evernote服务的核心单元,用于存储用户的笔记。每个分片最多可以支撑30万个Evernote用户,并包含了如下几个组件。

    • 基于Tomcat的前端Web服务层:Evernote客户端会连接到这个层。
    • 数据存储层:用于存储用户笔记的MySQL数据库。
    • 搜索索引:基于Lucene的服务端搜索索引,用于搜索用户的笔记内容。

    我们总共有762个分片,存储着2亿个用户账号和大约50亿个用户笔记。

    UserStore

    UserStore使用MySQL数据库来存储用户信息,包括他们的认证信息。因为数据库管理着所有用户的状态和认证信息,所以它是最为关键也是最为复杂的一个组件,在迁移过程中我们需要格外小心。

    用户附件存储(资源)

    我们有一个单独的文件存储层,用于存储50亿个用户附件(我们把这些附件称为资源)。这个层由206个自包含的WebDav服务器组成。每个用户附件有三个副本,其中两个分别被保存到本地的两个不同的WebDev服务器上,另外一个被发送到远程灾备数据中心的WebDav服务器上。

    前端负载均衡

    我们的高可用负载均衡器集群负责将用户请求路由到特定的分片上。

    配套服务

    我们还有200多台Linux服务器用于缓存和执行批处理任务,比如笔迹识别和文本识别。

    我们的迁移可选方案

    Evernote服务规模庞大,向云端迁移是一项复杂的工程,我们需要作出很多与依赖项有关的决策。我们希望能够尽快完成迁移,所以我们为关键性决策制定了一个草案。

    我们要先理清楚需要做出哪些变更。我们知道,有些组件无法直接被简单地迁移到云端,所以我们把组件分为两类。

    • 转移:有些组件在CGP上能够找到几乎一样的替代品,分片、UserStore以及大部分配套服务都属于这一类。在我们的物理数据中心,这些组件都是基于Linux的,所以我们将会直接把它们迁移到云端的Linux虚拟机上。
    • 转换:在迁移过程中需要对用户附件存储、负载均衡层和识别服务(Reco)做一些重大的转换。对于这些组件来说,要么在云端找不到相应的替代方案,要么云端已经存在更好的替代方案。

    迁移方法

  • 相关阅读:
    坑爹的PostgreSQL的美元符号(有时需要替换成单引号)
    DataFrame的apply用法
    Pytorch写CNN
    Pytorch分类和准确性评估--基于FashionMNIST数据集
    设置Mac终端、pip、Anaconda、PyCharm共用一套环境
    Python编程基本规范
    【转】动态规划:最长递增子序列Longest Increasing Subsequence
    动态规划--找零钱
    在线编写复杂的数学公式--EdrawMath
    pandas如何逐行需改DataFrame
  • 原文地址:https://www.cnblogs.com/bonelee/p/6649905.html
Copyright © 2011-2022 走看看