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