架构师训练营第六周 - 总结

发布于: 刚刚
架构师训练营第六周 - 总结

这周的主题继续是技术选型

分布式数据库

  • 复制

* 一主多从

* 主主

  • 数据分片

* 硬编码

* 映射表

* 挑战

* 大量额外代码,处理逻辑复杂

* 无法多分片联合查询

* 服务使用数据库事务

* 添加服务器困难

  • 分布式数据库中间件

* Cobar

* 原理 —— 介于应用服务器和数据库服务器之间的代理服务器集群,根据分库规则对SQL进行分解,分发到不同的数据库实例上执行,对结果进行合并返回

* 可伸缩性

* Cobar 服务器本身是无状态的应用服务器,可简单使用复杂均衡实现伸缩

* 添加数据库实例扩容时需要进行数据迁移。数据迁移以Schema 为单位,使用 MySQL 的同步机制。

* 限制

* 无法跨库JOIN

* 无法跨库执行事务

* 其它能支持跨库JOIN的关系数据库,由于实现JOIN需要在服务器间传输大量数据,访问延迟也比较大。

NoSQL数据库

* 思路

* 放弃关系代数为基础的数据建模与查询

* 牺牲事务的一致性(ACID),换取高可用性和可伸缩性

* CAP 原理

分布式系统中,一致性、可用性、分区耐受性三者无法同时满足。由于对于分布式系统而言,网络失效一定会发生,所以分区耐受性必须保证,那么在可用性和一致性上必须二选一。

选择了可用性的话,系统返回的数据不一定是最新的。

选择了一致性的话,系统可能处于不可用状态。

处理不一致数据的策略:

* 最终一致性 —— 根据时间戳,最后写入覆盖

* 客户端解决冲突

* 投票解决冲突

*

分布式锁

* 分布式一致性算法 Paxos

分布式处理的参与者通过投票选举,逐步达成一致意见(共识)。参与者不执着于让自己的提议通过,而是执着于尽快对提议达成一致。

* ZAB协议

ZooKeeper 构建高可用分布式数据主备系统的算法

搜索引擎

* 爬虫系统

* 文档矩阵、倒排索引(变体:带词频的倒排索引、带词频与位置的倒排索引)

* Lucene

将索引文件拆分为多个段,需要定期进行段合并

* Elasticsearch

分布式索引分片

* Page Rank 算法

让链接对网页进行投票来决定网页的排名

自然语言处理

* HanLP

* 智能助理机器人

案例分析 —— Doris 海量 KV Engine

* 定位 —— 海量分布式透明化 KV 存储引擎

* 解决问题 —— 解决扩容迁移复杂,维护困难的问题

* 关键技术点

* 临时失效的 failover

* 永久失效的 failover

* 扩容实施数据迁移

* 产品规划

总结

对于任何给定的问题,都有多种解决方案,而这些解决方案都有各自的优缺点和折中之处。

例如数据库的复制有主从复制、多主节点复制、无主节点复制。主从复制容易立即,也不需要担心冲突问题。但如果主节点失效,那么多主节点复制、无主节点复制方案会提供更高的可用性,但代价是弱一致性。

对于“将数据保存起来,支持后续的查询”这种问题,其实不存在唯一正确的解决方案,或者说不同具体情况下有不同的方案。而软件的实现通常必须选择一种特定的方案。但一个特定的实现很难同时兼顾鲁棒性和性能,如果试图兼顾所有方面,最终的实现一定很糟糕。

面对众多的备选方案,架构师需要弄清

  • 软件产品与它们适合运行的环境之间的对应关系

  • 将软件产品以恰当的方式组合起来解决复杂的问题

用户头像

Lost Horizon

关注

给写代码的人写代码 2017.10.17 加入

Clojure

评论

发布
暂无评论
架构师训练营第六周 - 总结