今年又参加了一次系统架构师考试,几乎可以肯定的说,过不了,尽管还看了那么几天书,回想起来,主要还是自己的功底不扎实,题目虽然有那么点点难。
选择题是没有什么问题,但论文与分析应用题没做好,以至于现在还是耿耿于怀。
题目: 1. nosql 数据库的应用经历及优点(我写的论文)
2. SOA 架构的层次说明及应用(有点微服务的味道)
3. 数据流程图填空(房东、租客、中介平台等)UML(其实很基础,但记不清楚,惨呀)
4. 系统嵌入式设计中的消息通信(基本上不懂)
5. redis 与 memcache 的区别及redis几种分布式存储,redis集群的几种方式(简述应用题)
好了,题目讲完了,我挑了(1),(5)题
论文题目,NoSQL的应用,我把工作中用大数据库计算销量预测的事情说一下,先放个图
出了考场我就后悔,怎么能写hive呢,改成hbase也会好点呀,不说了。
第(5)题,redis与memcache 的区别我还知道点,
redis有持久化,memcache不支持。。。。。但说到redis的几种分布式存储,我就不清楚了,只知道master-slave,说不出几种来。而集群方式,就写分片,哨兵。事后我越想越不对,就认真查了一下,正确的答案应该是这样的。
集群方式
1. 客户端分片
优点
不使用第三方中间件,实现方法和代码可以自己掌控并且可随时调整。这种分片性能比代理式更好(因为少了分发环节),分发压力在客户端,无服务端压力增加
缺点
不能平滑地水平扩容,扩容/缩容时,必须手动调整分片程序,出现故障不能自动转移,难以运维
2. Twemproxy,Codis
twitter开源的Twemproxy
Codis是一个豌豆荚团队开源的使用Go语言编写的Redis Proxy
优点
运维成本低。业务方不用关心后端 Redis 实例,跟操作 Redis 一样。Proxy 的逻辑和存储的逻辑是隔离的
缺点
a. 代理层多了一次转发,性能有所损耗
b. 进行扩容/缩容时候,部分数据可能会失效,需要手动进行迁移,对运维要求较高,而且难以做到平滑的扩缩容
c. 出现故障,不能自动转移,运维性很差
redis version >= 3.0 , redis-trib(ruby)
优点
a. 无中心节点
b. 数据按照 Slot 存储分布在多个 Redis 实例上
c. 平滑的进行扩容/缩容节点
d. 自动故障转移(节点之间通过 Gossip 协议交换状态信息,进行投票机制完成 Slave 到 Master 角
色的提升)
e. 降低运维成本,提高了系统的可扩展性和高可用性
缺点
a. 严重依赖外部 Redis-Trib
b. 缺乏监控管理
c. 需要依赖 Smart Client(连接维护, 缓存路由表, MultiOp 和 Pipeline 支持)
d. Failover 节点的检测过慢,不如“中心节点 ZooKeeper”及时
e. Gossip 消息的开销
f. 无法根据统计区分冷热数据
g. Slave“冷备”,不能缓解读压力
优点
Smart Client:
a. 相比于使用代理,减少了一层网络传输的消耗,效率较高。
b. 不依赖于第三方中间件,实现方法和代码自己掌控,可随时调整。
Proxy:
a. 提供一套 HTTP Restful 接口,隔离底层存储。对客户端完全透明,跨语言调用。
b. 升级维护较为容易,维护 Redis Cluster,只需要平滑升级 Proxy。
c. 层次化存储,底层存储做冷热异构存储。
d. 权限控制,Proxy 可以通过秘钥控制白名单,把一些不合法的请求都过滤掉。并
且也可以控制用户请求的超大 Value 进行控制,和过滤。
e. 安全性,可以屏蔽掉一些危险命令,比如 Keys、Save、Flush All 等。
f. 容量控制,根据不同用户容量申请进行容量限制。
g. 资源逻辑隔离,根据不同用户的 Key 加上前缀,来进行资源隔离。
h. 监控埋点,对于不同的接口进行埋点监控等信息。
缺点
Smart Client:
a. 客户端的不成熟,影响应用的稳定性,提高开发难度。
b. MultiOp 和 Pipeline 支持有限。
c. 连接维护,Smart 客户端对连接到集群中每个结点 Socket 的维护。
Proxy:
a. 代理层多了一次转发,性能有所损耗。
b.进行扩容/缩容时候对运维要求较高,而且难以做到平滑的扩缩容
redis分布式存储的几种方式 ? 至今不清楚,感觉和集群的概念有点混
哨兵的作用就是对Redis的系统的运行情况的监控,它是一个独立进程。它的功能有2个:
1、 监控主数据库和从数据库是否运行正常;
2、主数据出现故障后自动将从数据库转化为主数据库;
但是哨兵不能动态地扩容。