GeekBand 系统设计与实践 Thrid Week

2016-08-16  本文已影响0人  孙小俊

GeekBand 系统设计与实践 Thrid Week

搭建大规模可扩展的系统

分布式系统

数据库系统

经典结构

设计原则:CAP 理论

一致性介绍

ACID vs BASE

Sharding 分片

NoSQL 数据库

Cassandra

实时系统:Kafka, Storm

分布式系统设计模式 
1.系统失败是很平常的事情:每年有1-5%的硬盘会报废,服务器每年会平均宕机两次,报废率在2-4%。
2.将 多个 复杂系统切分为多个服务: 且服务之间依赖尽可能的少,这样有助于测试,部署和 团 队独 开发。例 : 个google的搜索会依赖100多个服务。ike:需要 套机制来确保服务的fault- tolerant,不能让 个服务的成败影响全局。
3.需要有Protocol Description Language: 如protocol buffers。ike:这样能降低通信  的代码量。
4.有能 在开发之前,根据系统的设计来预测性能:在最下 有 些重要的数字。
5.在设计系统  ,不要想做的很全 , 是需要抓住重点。
6.为了增量做设计,但不为 限做设计: 如:要为5-50倍的增量做设计,但超过1000倍了,就需要重 写和重新设计了。
7.使 备份请求来降低延迟: 如 个处理需要涉及1000台机器,通过备份请求这个机制来避免这个处 理被 台慢机器延误。ike:这个机制 常适合MapReduce。
8.使 范围来分布数据, 不是Hash:因为这样在语义上 较简单,并且容易控制。ike:在 多数情
况下语义 性能更重要,不要为了20%的情况hardcode。 9.灵活的系统,根据需求来伸缩:并且当需求上来的时候,关闭部分特性, 如:关闭拼写检查。 10. 个接 ,多个实现。
11.加足够的观察和调式钩 (hook)。
12.1000台服务器只需单 Master:通过Master节点来统 指挥全部的 动,但客户端和Master节点的 交互很少,以免Master节点Crash,优点是,在语义上  常清晰,但伸缩性不是 常强, 般最多只 能 持上千个节点。
13.在 台机器上运 多个单位的服务:当 台机器宕机时,能缩短相应的恢复时间,并且 持细粒度 的负载均衡, 如在BigTable中, 个Tablet服务器会运 多个Tablet。

大数据系统

大数据基础 hadoop

hadoop Idea from Google 三辆马车: MapReduce, Google File System , Big Table

MapReduce, BigTable, GFS

Spark 入门

海量数据处理技巧

Hash , Bit-Map, Bloom Filter, Heap, 双层桶划分, 数据库索引, 倒排索引, B+ tree, Trie tree, MapReduce

Webtrack

我们需要在网站上跟着用户的活动信息。例如当跟踪搜索时,我们可能需要知道哪些用户进行了搜索,搜索时发生的时间,他们搜索了什么,显示的结果和各种排名信息.

记录用户的搜索记录,存储“动作+时间戳”

查询的需求是一个异步的需求,存储的动作可以通过异步来完成,如消息队列。

考虑到搜索页面的实时变化,因此需要建立本地有效的short URL解析方法

缓存最新的一页的搜索记录

建立有效检索结构

提供多种查询接口。

Design Automated Air Traffic Control System

Please design an automated Air Traffic Control system where all the planes talk to a master ATC server which gives them commands that tell them where to fly and when to take off or land.

  1. 航空交通控制系统 是一个 CS 模型的系统
  2. 飞机与控制系统建立连接,发送请求,管控系统根据请求返回相应的响应,给飞机相应的命令。
  3. 为保证航空控制系统的高可用性,简单的设计可以设计一层代理做负载均衡,代理到后端的多台服务的机器。
上一篇下一篇

猜你喜欢

热点阅读