1) 如何判断?
1.使用群体和场景-->访问频率/要求-->性能
2.功能稳定性-->可扩展性
3.系统影响程度-->补救方案
4.数据完整性要求-->存储同步备份
5.数据安全性要求-->权限控制管理
2) 为何选择?使用场景?
关系型数据库 -- 支持SQL,可复杂查询。 海量数据读写性能比较差,高并发读写磁盘I/O是瓶颈。
Mysql -- 单表数据限制(根据实际情况考虑)。拆分表的规则和查询性能?拆分库?Mysql主备? 冷备、热备?Mysql跨机房同步 ?数据库访问权限?like查询速度慢。
Oracle -- 容量大、稳定、安全、性能高
Oracle RAC -- 实时应用集群,高可用,负载均衡,网络计算。
NetApp NAS -- 网络附属存储,数据存储系统。高可用(故障切换、恢复1分钟左右)
非关系型数据库 -- 存储结构灵活,高并发硬盘或随机存储器速度快,开源。复杂查询欠佳。
MongoDB -- 数据结构、表结构灵活。
Redis -- 内容缓存,高负载,查询速度快。 数据无结构化。
HBase -- 分布式的、面向列的随机访问的存储和检索数据。
全文搜索引擎 -- 主流搜索引擎,海量数据高效检索。
Elasticsearch -- 分布式的搜索引擎,实时搜索,稳定。
Lucene -- 完整的查询和索引引擎,没有中文分词引擎。不支持实时搜索。
Sphinx -- 检索速度快,实时搜索。精准度不如Lucene。
Solr -- 企业级搜索引擎,基于Lucene,成熟的解决方案。
无盘领域缓存
一级缓存 -- 服务器将物理内存中的一部分空间设置为系统包、游戏包快速读写用的存储空间。
二级缓存 -- 利用SSD(读缓存)的快速读能力,将系统、游戏常用数据置于SSD内,从而满足客户机的快速读取需求。
三级缓存 -- 客户机本地缓存技术, 主要实现客户机的快速回写。
分布式
Hadoop -- 分布式高速运算和存储系统。低成本,大容量,高扩展性,高可靠性。
HDFS -- 海量数据分布式存储,高容错性,高吞吐量。
MapReduce -- 海量数据并行计算,高效性。
Kafka -- 分布式发布-订阅消息/日志存储系统,活跃的流式数据,高吞吐量,负载均衡,高堆积能力,支持中间件主备,高可靠性(通过Zookeeper用ZAB协议做分布式一致性、选举),高容量。不支持事务。
Jafka -- 高性能跨语言分布式发布-订阅消息系统,Kafka的升级,快速持久化,高吞吐,自动实现复杂均衡,支持Hadoop数据并行加载。
RabbitMQ -- 消息队列系统,实时,对数据一致性、可靠性要求高,高并发。
RocketMQ -- 消息中间件,高吞吐量,高可用性,可靠性、事务性要求高,高堆积能力。
etcd -- 分布式共享配置和服务发现,读写速度(1万+)快,高可用,部署简单,支持http+json,一致性(Raft协议)
Nginx -- web服务器 ? Nginx的ACL控制?
负载均衡 -- ?
异地多活 -- ?
docker -- 虚拟化。解决资源重用,动态分配, 有效隔离,搭建部署方便,结合ceph秒迁。
微服务 -- ?
3) 最佳实践?
识别复杂点,针对性的解决(合理规划、化烦为简)
结合考虑:团队、成本、安全、进度、扩展、创新