一 资料
https://github.com/donnemartin/system-design-primer#study-guide
https://www.hiredintech.com/system-design
https://leetcode.com/discuss/career/229177/My-System-Design-Template
二 DataBases
MySQL,PostgreSQL
最常见的关系型数据库
适用于存储查询较为复杂的数据表单
需要更高稳定性的数据
Memcached
最常用的Key-value缓存系统
value不支持set/list的结构
内存级访问速度
不支持数据持久化
适合存储耗时的计算结果,或者缓存数据库中的不常改动的数据,或者经常被访问的数据
Redis
最常用的Key-value NoSQL数据库之一
value支持set/list这种结构,可以直接add/append数据到value里
内存及访问速度,但低于memcached
可以用作Cache/Message Queue /Database
Cassandra,HBase
Column Family Based NoSQL 数据库
也是key-value的结构,只不过key分为row-key和column-key
其中column key可以做范围查询(range query)
适合放查询简单不复杂数据
MongoDB
Document Based NoSQL 数据库
适合写多读少的数据
Rocksdb
最常用的Key-value NoSQL数据库之一
value不支持set/list这种结构
经常用于很多大公司的key-value storage的底层,这些大公司会给予Rocksdb在上层包装其他的借口用于其各自的使用场景
三 MessageQueue
1. kafka和rabbitmq的区别
kafka 的单机吞吐量高达到了10万级,rabbitmq 的单机吞吐量只有万级。kafka 用的是分布式架构,rabbitmq 用的是主从架构,从可用性上讲 kafka 比 rabbitmq 要高。
kafka 的优点:
1.消费者采用Pull方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次;
2.有优秀的第三方Kafka Web管理界面Kafka-Manager;
3.在日志领域比较成熟,被多家公司和多个开源项目使用;
功能支持:功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用
kafka 也有一些缺点,比如:
1.使用短轮询方式,实时性取决于轮询间隔时间;
2.消费失败不支持重试;
3.支持消息顺序,但是一台代理宕机后,就会产生消息乱序;
4.社区更新较慢;
rabbitmq 的优点有:
1.MQ功能比较完备
2.健壮、稳定、易用、跨平台、支持多种语言、文档齐全;
3.开源提供的管理界面非常棒,用起来很好用
4.社区活跃度高;
rabbitmq 的缺点:
1.erlang开发,很难去看懂源码,基本只能依赖于开源社区的快速维护和修复bug,不利于做二次开发和维护。
2.RabbitMQ确实吞吐量会低一些,这是因为他做的实现机制比较重。
3.需要学习比较复杂的接口和协议,学习和维护成本较高。
浙公网安备 33010602011771号